@[TOC](MySQL)MySQL经典练习题(详解)

MySQL

1.基础-增删改

执行以下 SQL ,下面哪些名字会被查询出来( )

SELECT FirstName FROM StaffList WHERE FirstName LIKE '_A%'

A.Allen

B.CLARK

C.JACKSON

D.David

正确答案是:C,D

答案解析

题面其实是在问第二个字符是A的是哪个,严格意义上只有C对,但是题面没有说明校验规则。在通常情况下,默认校验规则是utf8_general_ci。在这个状况下,D也对。

SQL语言允许使用通配符进行字符串匹配的操作,其中'%'可以表示( )

A.零个字符

B.1个字符

C.多个字符

D.以上都可以

正确答案是:D

答案解析

%表示任意个字符,0个到∞个都行,所以小孩子才做选择,我全都要!

2.数据库约束

SQL中,下列涉及空值的操作,不正确的是?

A.name IS NULL

B.name= NULL

C.namee IS NoT NULL

D.NoT(name IS NULL)

B

答案解析

在SQL中,NULL是一种特有的数据类型,其等价于没有任何值、是未知数。NULL与0、空字符串、空格都不同。SQL默认情况下对WHERE XX!=NULL和WHERE XX=NULL的判断会永远返回0行,却不会提示语法错误。
设计一个考勤系统

考勤系统,包含员工表,考勤记录表

参考答案

-- 主要考虑记录表中的记录信息,是如何关联到员工表,员工与记录关系为1:m。

java 复制代码
create table emp(
id int primary key,
  name varchar(20)
);
create table info(
id int primary key,
  emp_id int,
  info_date timestamp,
  foreign key (emp_id) references emp(id)
);

3.表的设计

设计一个学校宿舍管理系统

学校宿舍管理系统,要求包含宿舍信息,学生信息,每日的宿舍查房记录。

参考答案

-- 主要考虑学生与宿舍的关系:m:1,宿舍的查房记录是根据宿舍来查的,与宿舍有关系,一个宿舍可以多次查房,宿舍与查房记录是1:m的关系

java 复制代码
create table dormitory(
	id int primary key,
  number varchar(20)
);
create table student(
	id int primary key,
  name varchar(20),
  dormitory_id int,
  foreign key (dormitory_id) references dormitory(id)
);

设计一个车辆违章系统

车辆违章系统,包含用户表,车辆表,违章信息表。违章信息表中包含用户和车辆的违章信息

参考答案

-- 用户可以拥有多辆车,关系为1:m,题目已经说明违章信息包括用户和车辆,说明违章信息表中要记录用户和车辆,一个用户可以有多次违章记录,用户与违章记录关系为1:m,一辆车也可以有多次违章记录,车辆与违章记录关系也为1:m

java 复制代码
create table user(
	id int primary key,
	name varchar(20)
);
create table cars(
	id int primary key,
  	name varchar(20),
  	user_id int,
  	foreign key (user_id) references user(id)
);
create table info(
	id int primary key,
  	user_id int,
  	cars_id int,
  	foreign key (user_id) references user(id),
  	foreign key (cars_id) references cars(id)
);

设计一个学校食堂管理系统

学校食堂管理系统,包含食堂表,食堂仓口表,仓口收费记录表

参考答案

-- 一个食堂有多个仓口卖饭,关系为1:m,每个仓口卖饭可以有很多次,仓口与收费记录也是1:m

java 复制代码
create table hall(
	id int primary key,
  name varchar(20)
);
create table hall_opening(
	id int primary key,
  name varchar(20),
  hall_id int,
  foreign key (hall_id) references hall(id)
);
create table info(
	id int primary key,
  price int,
  info_date timestamp,
  hall_opening_id int,
  foreign key (hall_opening_id) references hall_opening(id)
);

有一张员工表emp,字段:姓名name,性别sex,部门depart,工资salary。查询以下数据:

1、查询男女员工的平均工资

2、查询各部门的总薪水

3、查询总薪水排名第二的部门

4、查询姓名重复的员工信息

5、查询各部门薪水大于10000的男性员工的平均薪水

参考答案

1:select sex,avg(salary) from emp group by sex;

说明:平均值使用聚合函数avg,并且按照性别男女分组,group by 性别字段

2:select depart,sum(salary) from emp group by depart;

说明:总薪水使用聚合函数sum取薪水字段求和,并且按照部门字段分组,group by 部门字段

3:select depart,sum(salary) from emp group by depart order by sum(salary) desc limit 1,1;

说明:order by语句先按照总薪水排序,之后取第二条数据,可以使用分页,每一页1条数据,第二页就是该结果

4:select name from emp group by name having count(name)>1;

说明:名字重复,说明同一个名字有多条数据,可以先按照名字分组,分组之后再过滤行数大于1的,就表示同一个名字至少有2条记录,重复了

5:select depart,avg(salary) from emp where salary>10000 and sex='男' group by depart;

说明:这里需要注意题目要求是查询薪水大于10000的男性员工,这个是在按部门分组前就过滤,在过滤后的结果集中再查询各个部门的平均薪水

4.联表查询

有员工表、部门表和薪资表,根据查询条件写出对应的sql【同程艺龙2020届校招笔试题】

现在有员工表、部门表和薪资表。部门表depart的字段有depart_id, name;员工表 staff 的字段有 staff_id, name, age, depart_id;薪资表salary 的字段有 salary_id,staff_id,salary,month。

(问题a):求每个部门'2016-09'月份的部门薪水总额

(问题b):求每个部门的部门人数,要求输出部门名称和人数

(问题c):求公司每个部门的月支出薪资数,要求输出月份和本月薪资总数

参考答案

(问题a):求每个部门'2016-09'月份的部门薪水总额

答案:

java 复制代码
SELECT
	dep.NAME,
	sum( sal.salary ) 
FROM
	salary sal
	JOIN staff sta ON sal.staff_id = sta.staff_id
	JOIN depart dep ON sta.depart_id = dep.depart_id 
WHERE
	YEAR ( sal.MONTH ) = 2016 
	AND MONTH ( sal.MONTH ) = 9 
GROUP BY
	dep.depart_id

说明:

mysql中年和月的函数分别是year(字段),month(字段)

查询要求的是每个部门的信息,所以要按照部门进行分组,部门和员工为1:m,员工与薪水为1:m,查询要求有部门,有薪水,所以必须关联3张表查询

(问题b):求每个部门的部门人数,要求输出部门名称和人数

答案:

java 复制代码
SELECT
	dep.NAME,
	count( sta.staff_id ) 
FROM
	staff sta
	JOIN depart dep ON dep.depart_id = sta.depart_id 
GROUP BY
	sta.depart_id

说明:查询要求的信息有部门,有人数,人数只能从员工表中获取,所以关联表为部门表/员工表。按照部门id分组查询员工id的行数

(问题c):求公司每个部门的月支出薪资数,要求输出月份和本月薪资总数

答案:

java 复制代码
SELECT
	dep.NAME,
	sal.MONTH,
	sum( sal.salary ) 
FROM
	depart dep
	JOIN staff sta ON dep.depart_id = sta.depart_id
	JOIN salary sal ON sta.staff_id = sal.staff_id 
GROUP BY
	dep.depart_id,
	sal.MONTH

说明:按照题目要求,查询信息有部门/月/每个部门每月薪资总额,其中薪水信息再薪水表中,每个员工可以有多条薪资记录(不同时间)。所以需要按照部门分组,再按照月份分组,查询分组的部门在不同月份下的总薪水
写出以下数据库的查询条件【交大思诺2020届校招笔试题】
有两个表分别如下:

表A(varchar(32) name, int grade)

数据:zhangshan 80, lisi 60, wangwu 84

表B(varchar(32) name, int age)

数据:zhangshan 26, lisi 24, wangwu 26, wutian 26

写SQL语句得到如下查询结果:

| NAME | GRADE | AGE |

| --------- | ----- | ---- |

| zhangshan | 80 | 26 |

| lisi | 60 | 24 |

| wangwu | 84 | 26 |

| wutian | null | 26 |

参考答案

java 复制代码
SELECT
B.NAME,
A.grade,
B.age 
FROM
B left join A
ON
A.NAME = B.NAME

说明:主要考察使用关联查询时需要使用内联还是外联,这里wutian在A表中没有记录,但还是需要返回结果,所以应该将B表作为外表进行外连接查询
Mysql查询时,只有满足联接条件的记录才包含在查询结果,这种联接是

A.左联接

B.右联接

C.内联接

D.全联接

答案解析:C

只有内联接始终会按照联接条件进行过滤,外联接当外表中的数据不满足联接条件时,也会返回结果
已知表T1中有2行数据,T2中有3行数据,执行SQL语句,"select a. from T1 a,T2 b"后,返回的行数为 *

A.2

B.3

C.5

D.6

正确答案是:D

答案解析

关联查询没有任何条件时,是返回笛卡尔积的结果,行数为乘积,列数为两张表的列相加
(多选)某查询语句运行后返回的结果集为:

1班 72

2班 75

3班 NULL

则有可能的查询语句是以下:

A.SELECT class, AVG(score) FROM test WHERE class<4

B.SELECT class, AVG(score) FROM test WHERE class<4 GROUP BY class

C.SELECT class, AVG(score) FROM test WHERE class<4 GROUP BY ALL class

D.SELECT class, AVG(score) FROM test GROUP BY class HAVING class<4

正确答案是:B,D

答案解析

按照题目和答案中相同的部分可以知道,class字段是一个字符串,score字段是一个数值型,查询字段有class,和一个聚合函数score字段的平均值,表达的意思是,查询班级信息,以及该班级的所有分数的平均值。所以需要group by语句。

再来看答案:

A没用group by,错误。

B先过滤,按照字符串比较(自然序列比较)之后的数据集,再进行分组。

C中的ALL使用错误。

D是先分组后再按照字符串比较并过滤。

以上AC语法错误,B和D都可以查询出class字段比4小的,不同只是B是先过滤再分组,D是先分组再过滤

5.索引

下列说法错误的是:

A.索引一定会提高查询效率

B.索引需要保存成物理文件

C.不是所有查询操作都会使用索引

D.修改、删除操作也可以使用索引

正确答案是:A

答案解析(提交后可在已完成作业列表查看答案)

索引需要在条件中命中该索引列才行,没有命中就不会提高查询效率。某些条件下不会使用索引。比如name列创建了索引,但是使用where name is null,就不会使用该列的索引(因为索引没有保存null的信息)
下列哪个不属于事务的特性

A.原子性

B.并发性

C.隔离性

D.持久性

答案解析:B

事务的ACID四大特性:

Atomic原子性:原子性要求所有语句要么全部成功,要么全部不成功,不能部分成功

Consistency一致性:规定了事物提交前后,永远只可能存在事物提交前的状态和事物提交后的状态,从一个一致性的状态到另一个一致性状态,而不可能出现中间的过程态。

Isolation隔离性:事物的隔离性,基于原子性和一致性,因为事物是原子化,量子化的,所以,事物可以有多个原子包的形式并发执行,但是,每个事物互不干扰。

Durability持久性:当一个事物提交之后,数据库状态永远的发生了改变。数据已经更新到硬盘。
事务的持续性是指?

A.事务中包括的所有操作要么都做,要么不做

B.事务一旦提交,对数据库的改变时永久的

C.一个事务内部的操作及使用的数据对并发的其他事务是隔离的

D.事务必须是使数据库从一个一致性状态变到另一个一致性状态

正确答案是:B

答案解析

持续性即是指持久性,表示永久性的改变。
进行数据库提交操作时使用事务(Transaction)是为了?

A.提高效率

B.保证数据一致性

C.网络安全

D.归档数据文件

答案解析:B

四大特性再选项中只有B
事务日志用于保存

A.程序运行过程

B.程序的执行结果

C.对数据的更新操作

D.对数据的查询操作

答案解析:C

数据库提交的数据更新都有日志记录,可以保证出现问题时有信息可以追踪

6.JDBC使用

关于PreparedStatement与Statement描述错误的是

A.一般而言,PreparedStatement比Statement执行效率更高

B.PreparedStatement会预编译SQL语句

C.Statement每次都会解析/编译SQL,确立并优化数据获取路径

D.Statement执行扫描的结果集比PreparedStatement大

答案解析:D

扫描的结果集和sql有关,与使用的jdbc操作对象无关
有一个图书管理系统,请根据要求写出对应的sql

有一个图书管理系统,包含学生和图书信息,且图书可以进行分类,学生可以在一个时间范围内借阅图书,并在这个时间范围内归还图书。表和表关系如下:

java 复制代码
DROP DATABASE IF EXISTS ebook;
CREATE DATABASE ebook CHARACTER SET 'utf8mb4';
USE ebook;
-- ----------------------------
-- Table structure for category
-- ----------------------------
DROP TABLE IF EXISTS category;
CREATE TABLE category (
 id int(11) PRIMARY KEY AUTO_INCREMENT,
 name varchar(20)
);
-- ----------------------------
-- Records of category
-- ----------------------------
INSERT INTO category VALUES (1, '历史');
INSERT INTO category VALUES (2, '艺术');
INSERT INTO category VALUES (3, '计算机');
INSERT INTO category VALUES (4, '数学');
INSERT INTO category VALUES (5, '小说');
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS student;
CREATE TABLE student (
 id int(11) PRIMARY KEY AUTO_INCREMENT,
 name varchar(20)
);
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO student VALUES (1, '王昭君');
INSERT INTO student VALUES (2, '李白');
INSERT INTO student VALUES (3, '貂蝉');
INSERT INTO student VALUES (4, '小乔');
INSERT INTO student VALUES (5, '韩信');
-- ----------------------------
-- Table structure for book
-- ----------------------------
DROP TABLE IF EXISTS book;
CREATE TABLE book (
 id int(11) PRIMARY KEY AUTO_INCREMENT,
 name varchar(20),
 author varchar(20),
 price decimal(10, 2),
 category_id int(11),
 CONSTRAINT fk_book_category_id FOREIGN KEY (category_id) REFERENCES category (id)
);
-- ----------------------------
-- Records of book
-- ----------------------------
INSERT INTO book VALUES (1, '深入理解Java虚拟机', '周志明', 57.90, 3);
INSERT INTO book VALUES (2, '西游记', '吴承恩', 30.68, 5);
INSERT INTO book VALUES (3, '儒林外史', '吴敬梓', 18.80, 5);
INSERT INTO book VALUES (4, '聊斋志异', '蒲松龄', 21.00, 5);
INSERT INTO book VALUES (5, '史记', '司马迁', 278.20, 1);
INSERT INTO book VALUES (6, '资治通鉴', '司马光', 524.00, 1);
INSERT INTO book VALUES (7, 'Java核心技术 卷I:基础知识', 'Cay S. Horstmann', 92.50, 3);
INSERT INTO book VALUES (8, 'Java核心技术卷II:高级特性', 'Cay S. Horstmann', 111.20, 3);
INSERT INTO book VALUES (9, 'Java多线程编程核心技术', '高洪岩', 47.50, 3);
INSERT INTO book VALUES (10, '诗经', '孔子', 22.00, 2);
INSERT INTO book VALUES (11, '唐诗三百首', '蘅塘居士', 49.30, 2);
INSERT INTO book VALUES (12, '唐诗三百首', '蘅塘居士', 55.00, 2);
INSERT INTO book VALUES (13, '西游记', '吴承恩', 47.50, 5);
INSERT INTO book VALUES (14, '唐诗三百首', '蘅塘居士', 56.50, 2);
-- ----------------------------
-- Table structure for borrow_info
-- ----------------------------
DROP TABLE IF EXISTS borrow_info;
CREATE TABLE borrow_info (
 id int(11) PRIMARY KEY AUTO_INCREMENT,
 book_id int(11),
 student_id int(11),
 start_time timestamp null,
 end_time timestamp null,
 CONSTRAINT fk_borrow_info_book_id FOREIGN KEY (book_id) REFERENCES book (id),
 CONSTRAINT fk_borrow_info_student_id FOREIGN KEY (student_id) REFERENCES student (id)
);
-- ----------------------------
-- Records of borrow_info
-- ----------------------------
INSERT INTO borrow_info VALUES (1, 1, 1, '2018-11-07 18:50:43', '2018-12-07 18:51:01');
INSERT INTO borrow_info VALUES (2, 7, 1, '2019-07-10 10:21:00', '2019-09-10 10:21:00');
INSERT INTO borrow_info VALUES (3, 8, 1, '2019-09-10 10:21:00', '2019-10-10 10:21:00');
INSERT INTO borrow_info VALUES (4, 2, 2, '2019-03-02 16:37:00', '2019-04-02 16:37:00');
INSERT INTO borrow_info VALUES (5, 4, 2, '2019-03-12 14:25:00', '2019-04-12 14:25:00');
INSERT INTO borrow_info VALUES (6, 10, 2, '2019-07-13 16:21:00', '2019-10-13 16:21:00');
INSERT INTO borrow_info VALUES (7, 11, 2, '2019-06-09 09:40:00', '2019-07-09 09:40:00');
INSERT INTO borrow_info VALUES (8, 13, 2, '2019-01-03 15:11:00', '2019-04-03 15:11:00');
INSERT INTO borrow_info VALUES (9, 7, 3, '2019-05-15 13:13:00', '2019-06-15 13:13:00');
INSERT INTO borrow_info VALUES (10, 8, 3, '2019-04-27 13:53:00', '2019-05-27 13:53:00');
INSERT INTO borrow_info VALUES (11, 9, 3, '2019-06-01 11:32:00', '2019-07-01 11:32:00');
INSERT INTO borrow_info VALUES (12, 3, 4, '2019-07-01 09:40:00', '2019-08-01 09:40:00');
INSERT INTO borrow_info VALUES (13, 4, 4, '2019-06-19 11:40:00', '2019-07-19 11:40:00');
INSERT INTO borrow_info VALUES (14, 5, 4, '2019-06-25 09:23:00', '2019-09-25 09:23:00');
INSERT INTO borrow_info VALUES (15, 10, 4, '2019-08-27 15:30:00', '2019-09-27 15:30:00');
INSERT INTO borrow_info VALUES (16, 5, 5, '2019-01-23 14:20:00', '2019-04-23 14:20:00');
INSERT INTO borrow_info VALUES (17, 6, 5, '2019-03-09 10:45:00', '2019-04-09 10:45:00');
INSERT INTO borrow_info VALUES (18, 10, 5, '2019-06-17 11:32:00', '2019-09-17 11:32:00');

要求:

  1. 新增貂蝉同学的借阅记录:诗经,从2019年9月25日17:50到2019年10月25日17:50
  2. 查询计算机分类下的图书借阅信息
  3. 修改图书《深入理解Java虚拟机》的价格为61.20
  4. 删除id最大的一条借阅记录

参考答案

  1. 新增貂蝉同学的借阅记录:诗经,从2019年9月25日17:50到2019年10月25日17:50
    答案:
    首先创建数据库JDBC工具类
java 复制代码
package com.bit.util;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class Util {
	//使用连接池
  private static final DataSource DATA_SOURCE    = new MysqlDataSource();
  static {
    ((MysqlDataSource) DATA_SOURCE).setUrl("jdbc:mysql://localhost:3306/book");
    ((MysqlDataSource) DATA_SOURCE).setUser("root");
    ((MysqlDataSource) DATA_SOURCE).setPassword("root");
  }
  public static void main(String[] args) {
    System.out.println(getConnection());
  }
	// 获取数据库连接
  public static Connection getConnection(){
    try {
      return DATA_SOURCE.getConnection();
    } catch (SQLException e) {
      throw new RuntimeException("获取数据库连接失败", e);
    }
  }
	// 释放资源
  public static void close(ResultSet resultSet, Statement statement,
               Connection connection){
      try {
        if(resultSet != null) {
          resultSet.close();
        }
        if(statement != null){
          statement.close();
        }
        if(connection != null){
          connection.close();
        }
      } catch (SQLException e) {
        throw new RuntimeException("数据库操作异常", e);
      }
  }
	//日期字符串转Java日期类Date和sql时间戳Timestamp
  public static Timestamp getTimestamp(String dateString){
    try {
    	// 年-月-日 小时:分钟:秒
      java.util.Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(dateString);
      return new java.sql.Timestamp(date.getTime());
    } catch (ParseException e) {
      throw new RuntimeException("日期格式化错误:"+dateString, e);
    }
  }
}
package com.bit.book;

import com.bit.util.Util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class AddBorrow {
  /**
   * 新增貂蝉同学的借阅记录:诗经,从2019年9月25日17:50到2019年10月25日17:50
   */
  public static void main(String[] args) {
  	//1.创建数据库连接对象
    Connection connection = null;
    //2.创建操作命令对象
    PreparedStatement preparedStatement = null;
    try {
      connection = Util.getConnection();
      String sql = "insert into borrow_info(book_id, student_id," +
          " start_time, end_time) select b.id,s.id,?,?" +
          " from book b,student s where b.name=? and s.name=?";
      preparedStatement = connection.prepareStatement(sql);
      preparedStatement.setTimestamp(1, Util.getTimestamp("2019-09-25 17:50:00"));
      preparedStatement.setTimestamp(2, Util.getTimestamp("2019-10-25 17:50:00"));
      preparedStatement.setString(3, "诗经");
      preparedStatement.setString(4, "貂蝉");
      System.out.println(preparedStatement);
      //3.执行sql
      int result = preparedStatement.executeUpdate();
      System.out.println(result);
    } catch (SQLException e) {
      e.printStackTrace();
    } finally {
    	//4.释放资源
      Util.close(null, preparedStatement, connection);
    }
  }
}
  1. 查询计算机分类下的图书借阅信息
java 复制代码
package com.bit.book;

import com.bit.util.Util;
import java.sql.*;

public class QueryBorrow {
  /**
   * 查询计算机分类下的图书借阅信息
   * @param args
   */
  public static void main(String[] args) {
    Connection    connection    = null;
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;
    try {
      connection = Util.getConnection();
      String sql = "SELECT bk.NAME book_name,bk.author book_author," +
          "s.NAME student_name,bi.start_time,bi.end_time" +
          " FROM borrow_info bi JOIN book bk ON bi.book_id = bk.id" +
          " JOIN category c ON bk.category_id = c.id" +
          " JOIN student s ON bi.student_id = s.id" +
          " WHERE c.NAME = ?";
      preparedStatement = connection.prepareStatement(sql);
      preparedStatement.setString(1, "计算机");
      resultSet = preparedStatement.executeQuery();
      while(resultSet.next()){
        String  bookName  = resultSet.getString("book_name");
        String  bookAuthor = resultSet.getString("book_author");
        String  studentName = resultSet.getString("student_name");
        Timestamp startTime  = resultSet.getTimestamp("start_time");
        Timestamp  endTime   = resultSet.getTimestamp("end_time");
        System.out.println(String.format("书名:%s,作者:%s,借阅者:%s," +
            "借阅起始日期:%s,结束日期:%s",
            bookName, bookAuthor, studentName, startTime, endTime));
      }
    } catch (SQLException e) {
      e.printStackTrace();
    } finally {
      Util.close(resultSet, preparedStatement, connection);
    }
  }
}
  1. 修改图书《深入理解Java虚拟机》的价格为61.20
java 复制代码
package com.bit.book;

import com.bit.util.Util;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class UpdateBook {
  /**
   * 修改图书《深入理解Java虚拟机》的价格为61.20
   */
  public static void main(String[] args) {
    Connection    connection    = null;
    PreparedStatement preparedStatement = null;
    try {
      connection = Util.getConnection();
      String sql = "update book set price=? where name =?";
      preparedStatement = connection.prepareStatement(sql);
      preparedStatement.setBigDecimal(1, new BigDecimal("61.20"));
      preparedStatement.setString(2, "深入理解Java虚拟机");
      System.out.println(preparedStatement);
      int result = preparedStatement.executeUpdate();
      System.out.println(result);
    } catch (SQLException e) {
      e.printStackTrace();
    } finally {
      Util.close(null, preparedStatement, connection);
    }
  }
}
  1. 删除id最大的一条借阅记录
java 复制代码
package com.bit.book;

import com.bit.util.Util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class DeleteBorrow {
  /**
   * 删除id最大的一条借阅记录
   */
  public static void main(String[] args) {
    Connection    connection    = null;
    PreparedStatement preparedStatement = null;
    try {
      connection = Util.getConnection();
      String sql = "delete from borrow_info where id =" +
          "(select r.id from (select max(id) id from borrow_info) r)";
      preparedStatement = connection.prepareStatement(sql);
      int result = preparedStatement.executeUpdate();
      System.out.println(result);
    } catch (SQLException e) {
      e.printStackTrace();
    } finally {
      Util.close(null, preparedStatement, connection);
    }
  }
}
相关推荐
没有bug.的程序员31 分钟前
MyBatis 初识:框架定位与核心原理——SQL 自由掌控的艺术
java·数据库·sql·mybatis
Databend1 小时前
Databend 亮相 DTCC 2025:存算分离架构引领湖仓一体化
数据库
回家路上绕了弯1 小时前
ClickHouse 深度解析:从核心特性到实战应用,解锁 OLAP 领域新势能
数据库·后端
张铁铁是个小胖子1 小时前
mysql是怎样运行的(梳理)
数据库·mysql
许泽宇的技术分享3 小时前
当自然语言遇上数据库:Text2Sql.Net的MCP革命如何重新定义开发者与数据的交互方式
数据库·.net·text2sql·mcp
2301_803554523 小时前
redis学习
数据库·redis·学习
weixin_456588154 小时前
【java面试day19】mysql-优化
java·mysql·面试
Yichen_liuuil4 小时前
Oracle数据库迁移
数据库·oracle·备份·迁移
小李飞刀李寻欢4 小时前
MongoDB /redis/mysql 界面化的数据查看页面App
redis·mysql·mongodb