4.1 表记录的插入
向数据库表插入记录时,可以使用insert语句向表中插入一条或者多条记录,也可以使用insert….select
语句向表中插入另一个表的结果集。
4.1.1 使用inser t语句插入新记录
• 语法格式如下:
insert into 表名 [(字段1, 字段2)]
values (值1,值2) ;
-
向表的所有字段插入数据。
-
不指定字段插入数据(值的顺序能不能改变)。
-
向表中部分字段段(非空)插入数据。
(1)主键字段必修插入值。
(2)设置为自增列。
(3)设置主键自增后,用插入新记录可以省略主键值。
4.1.2 批量插入多条记录
1.使用insert
语句可以一次性地向表批量插入多条记录,语法格式如下:
insert into 表名 [(字段列表 )] values
(值列表1 ),
(值列表2 ),
…
(值列表n );
2.在 MySQL 中,可以使用 INSERT INTO
语句只给部分字段批量插入多条记录。这通常通过指定要插入的列名,并在 VALUES
子句中提供多组对应的值来实现。
以 users
表为例,该表包含以下字段:id
, name
, email
, age
。但你想要只插入 name
和 email
字段,并且批量插入多条记录:
INSERT INTO users (name, email)
VALUES
('Alice', 'alice@example.com'),
('Bob', 'bob@example.com'),
('Charlie', 'charlie@example.com');
在这个示例中,只插入了 name
和 email
字段,而 id
和 age
字段将根据其默认值(如果定义了默认值)或者设置为 NULL
(如果允许 NULL
值)。
注意几点:
- 列名必须明确指定:在
INSERT INTO
后必须明确指定要插入的列名。 - 值列表匹配:每组值(用逗号分隔)必须与列名列表中的顺序和数量匹配。
- 自动递增字段:如果
id
是自动递增的(例如使用AUTO_INCREMENT
),则不需要手动插入该字段的值。 - 默认值或允许 NULL:对于未指定的字段,确保它们在表中可以设置为默认值或允许
NULL
值。
4.1.3 使用insert…set插入结果
insert...set
语句通过直接给表中的某些字段赋值来完成指定数据的插入,其他未赋值的字段的值为默认值。
语法格式如下:
insert into 目标表名
set 字段名={值|default},...
[on duplicate key update 字段名=表达式,...] ;
4.1.4 使用insert…select插入结果
1.在insert
语句中使用select
子句可以将源表的查询结果添加到目标表中。
语法格式如下:
insert into 目标表名 [(字段列表1 )]
select 字段列表2 from 源表 where 条件表达式 ;
注意:字段列表1与字段列表2的字段个数必须相同,且对应字段的数据类型尽量保持一致。
• 如果源表与目标表的表结构完全相同, “(字段列表1)”可以省略 。
4.1.5 使用replace插入新记录
语法格式1:
replace into 表名 [(字段列表)] values (值列表);
语法格式2:
replace [into] 目标表名[(字段列表1)]
select (字段列表2) from 源表 where 条件表达式;
语法格式3:
replace [into] 表名
set 字段1=值1, 字段2=值2
replace
语句的功能与insert
语句的功能基本相同,不同之处在于:使用replace
语句向表插入新记录时,如果新纪录的主键值或者唯一性约束的字段值与已有记录相同,则已有记录先被删除(注意:已有记录删除时也不能违背外键约束条件),然后再插入新记录。
4.1.6 小结
INSERT
语句成功执行后,可以通过查询语句查看数据是否添加成功。如果不指定字段名,必须为每个字段添加数据,如果指定了字段名,就只需要为指定的字段添加数据。
4.2 表记录的修改
语法格式如下:
update 表名
set 字段名1=值1,字段名2=值2,….. ,字段名n=值n
[where 条件表达式 ] ;
where
子句指定了表中的哪些记录需要修改。若省略了where子句,则表示修改表中的所有记录。set
子句指定了要修改的字段以及该字段修改后的值。
4.3 表记录的删除
表记录的删除通常使用delete
语句实现,如果要清空某一个表可以使用truncate
语句。
4.3.1 使用delete删除表记录
delete
语句的语法格式如下:
delete from 表名
[where 条件表达式 ]
[order by...]
[limit 行数];
- 说明:如果没有指定
where
子句,那么该表的所有记录都将被删除,但表结构依然存在。
4.3.2 使用truncate清空表记录
1.truncate table
用于完全清空一个表,语法格式如下:
truncate [table] 表名 ;
- 从逻辑上说,
truncate
语句与“deletefrom
‘’表名”语句作用相同,但是在某些情况下,两者在使用上有所区别。 truncate table
语句不支持事务的回滚,并且不会触发触发器程序的运行。
2.delete
与truncate
的区别
truncate | delete | |
---|---|---|
条件删除 | 不支持 | 支持 |
事务回滚 | 不支持 | 支持 |
清理速度 | 快 | 慢 |
高水位重置 | 是 | 否 |
4.4 MySQL特殊字符序列
MySQL
中,当字符串中存在以下8个特殊字符序列时,字符序列被转义成对应的字符(每个字符序列以反斜线符号“\”
开头,且字符序列大小写敏感)
MySQL中的特殊字符序列 | 转义后的字符 |
---|---|
\‘’ | 双引号(‘’) |
’ | 单引号(') |
\ | 反斜线() |
\n | 换行符 |
\r | 回车符 |
\t | 制表符 |
\0 | ASCII 0 (NUL) |
\b | 退格符 |
- 向表中插入两条学生信息