跳到主要内容

任务四 插入数据

知识点​

1. MySQL中插入数据有哪几种方式?​

答:MySQL中插入数据有三种方式:

  • INSERT...VALUES:使用VALUES子句插入数据,可插入单行或多行
  • INSERT...SET:使用SET子句为指定字段赋值,每次只能插入一行
  • INSERT...SELECT:将查询结果插入到表中,可批量插入多行

2. INSERT...VALUES语句的语法格式是什么?​

答:INSERT...VALUES语句的语法格式:

INSERT INTO 表名 [(字段名1, 字段名2, ...)]
VALUES (值1, 值2, ...), (值1, 值2, ...), ...;

如果不指定字段名列表,则VALUES中值的数量和顺序必须与表结构完全一致。如果指定字段名列表,则只给指定字段赋值,未指定的字段使用默认值或NULL。

例如:INSERT INTO student (sno, sname, sage) VALUES ('2023001', '张三', 20);

3. INSERT...VALUES如何批量插入多行数据?​

答:在VALUES后面使用多个用逗号分隔的值列表,每个值列表用括号括起。例如:

INSERT INTO student (sno, sname, sage) VALUES
('2023001', '张三', 20),
('2023002', '李四', 21),
('2023003', '王五', 19);

一条INSERT语句可以插入多行数据,比多条单行INSERT语句效率更高。

4. INSERT...SET语句的语法格式是什么?​

答:INSERT...SET语句直接为每个字段赋值,语法格式:

INSERT INTO 表名
SET 字段名1 = 值1, 字段名2 = 值2, ...;

例如:INSERT INTO student SET sno = '2023001', sname = '张三', sage = 20;

INSERT...SET每次只能插入一行数据,但可以只给部分字段赋值,更直观灵活。

5. INSERT...SELECT语句的语法格式是什么?​

答:INSERT...SELECT语句将一个查询结果插入到指定表中,语法格式:

INSERT INTO 表名 [(字段名1, 字段名2, ...)]
SELECT 字段列表
FROM 表名
[WHERE 条件];

例如:INSERT INTO student_backup (sno, sname, sage) SELECT sno, sname, sage FROM student WHERE sdept = '计算机系'; 将计算机系的学生信息备份到student_backup表。

6. INSERT...VALUES和INSERT...SET有什么区别?​

答:

  • INSERT...VALUES:支持一次插入多行数据,值的顺序与字段顺序对应
  • INSERT...SET:每次只能插入一行数据,通过 字段名 = 值 的方式赋值,更直观
  • INSERT...VALUES是SQL标准语法,INSERT...SET是MySQL扩展语法

7. 插入数据时省略字段名列表有什么要求?​

答:当INSERT语句省略字段名列表时(即 INSERT INTO 表名 VALUES (...)),VALUES子句中值的数量和顺序必须与表定义中的字段完全一致。每个字段都必须提供值,包括主键、外键等。如果某些字段有默认值或允许NULL,也必须显式提供值或NULL。

建议始终指定字段名列表,以提高代码可读性和可维护性。

8. 插入数据时字符串值和日期值的写法是什么?​

答:

  • 字符串值:用单引号括起,例如 '张三'、'2023001'
  • 日期值:用单引号括起,格式为 'YYYY-MM-DD',例如 '2023-09-01'
  • 日期时间值:格式为 'YYYY-MM-DD HH:MM:SS',例如 '2023-09-01 10:30:00'
  • 数值:不需要引号,例如 20、3.14

9. 插入数据时如果违反主键约束或唯一约束会怎样?​

答:如果插入的数据违反了主键约束(主键值重复)或唯一约束(唯一字段值重复),MySQL会报错并拒绝插入该行数据。错误信息类似于 Duplicate entry 'xxx' for key 'PRIMARY'。

如果使用 INSERT IGNORE INTO 语法,MySQL会将错误降级为警告,忽略违反约束的行,继续插入其他行。

10. 插入数据时如何处理自动递增(AUTO_INCREMENT)字段?​

答:对于定义为AUTO_INCREMENT的字段(通常是主键),插入数据时可以:

  • 省略该字段:在字段列表中不包含该字段,MySQL自动生成递增值
  • 指定NULL值:在VALUES中对应位置写NULL,MySQL自动生成递增值
  • 指定具体值:可以手动指定值,但必须确保不与已有值重复

例如:INSERT INTO student (sname, sage) VALUES ('张三', 20); 省略了AUTO_INCREMENT的sno字段,MySQL自动生成。

11. REPLACE语句与INSERT语句有什么区别?​

答:REPLACE语句的语法与INSERT类似,但功能不同:

  • INSERT:插入新记录,如果主键或唯一键冲突则报错
  • REPLACE:插入新记录,如果主键或唯一键冲突,则先删除旧记录再插入新记录

REPLACE相当于"先DELETE再INSERT"的操作。语法:REPLACE INTO 表名 [(字段列表)] VALUES (值列表);