任务四 插入数据
知识点
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 (值列表);