一、插入数据
1.插入完整的数据记录
在MYSQL中,使用SQL语句INSERT插入一条完整的记录,语法如下:
INSERT INTO 表名 [(字段名1[,...字段名n])]
VALUES (值1[...,值n]);
表名——用于指定要插入的数据的表名
字段名——用于指定需要插入数据的字段名。若插入的是一条完整的记录,且VALUES子句后各数值的顺序与表中列的定义顺序一致,则字段名表可以省略,直接采用INSERT表名VALUES(...)
VALUES子句——用于指定所要插入的数值。数值表中各数据的顺序要和字段名列表中各列的顺序相对应。
2.插入非完整的数据记录
在MYSQL中,使用SQL语句INSERT插入一条非完整的记录,语法如下:
INSERT INTO 表名 (字段名1[,...字段名n])
VALUES (值1[...,值n]);
字段名——用于指定需要插入数据的列名,若插入的是一条非完整的记录,字段名列表不能省略。
VALUES子句——用于指定所要插入的数值。数值表中各数据的顺序要和字段名列表中各列的顺序相对应。
插入的记录在未指定的字段上取空值。
3.插入多条数据记录
在MYSQL中,使用SQL语句INSERT插入多条数据记录,语法如下:
INSERT INTO 表名 [(字段名1[,...字段名n])] VALUES (值表1),
...
(值表n);
字段名——用于指定需要插入数据的字段名。若插入的是一条完整的记录,且VALUES子句后各数值的顺序与表中列的定义顺序一致,则字段名可以省略,直接采用INSERT表名VALUES即可,若插入的是非完整记录,字段不可以省略。
数值表中各数据的顺序要和字段名列表中各列的顺序相对应。
4.插入查询结果
在MYSQL中,使用SQL语句通过INSERT语句将一个表中查询的结果插入表中,从而实现表记录的复制功能。语法如下:
INSERT INTO 目标表名 [(字段名1[,...字段名n])]
SELECT (字段名1[,...字段名n])
FROM 源表名
[WHERE 条件表达式]
SELECT子句——返回的是一个从源表查询到满足指定条件(条件省略时,表示查询源表中所有记录)的结果集。
INSERT语句——表示将这个结果集插入目标表中。
目标表的字段名列表与SELECT子句字段名列表的字段个数必须相同,且对应的字段的数据类型应保持一致。
如果插入的是完整的记录,目标表的字段名列表可以省略。
结果集中的每行数据的字段数、字段的数据类型都必须与被操作的表完全一致。
5.采用REPACE语句插入数据记录
使用REPACE语句插入数据记录,有3种语法格式
语法格式1:
REPACE INTO 表名[(字段名1[,...字段名n])]
VALUES(值1[...,值n]);
语法格式2:
REPACE INTO 目标表名[(字段名1[,...字段名n])]
SELECT (字段名1[,...字段名n])
FROM 源表名
[WHERE 条件表达式]
语法格式3:
REPACE INTO 表名
SET 字段名1 = 数值1,...,字段名n = 值n;
使用REPACE语句向表插入新记录时,如果新记录的主键值或者唯一性约束的字段值与已有记录相同,则需先删除已有记录(注意:已有记录删除时也不能违背外码约束条件),再插入新记录。
使用REPACE的优势在于可以将DELETE和INSERT合二为一,形成一个原子操作,因此无须将DELET操作与INSERT操作置于事务中。
二、修改数据
1.修改特定数据记录
修改特定数据记录使用SQL语句UPDATE来实现,语法如下:
UPDATE 表名
SET 字段名1 = 值1 [,...字段名n = 值n]
WHERE 条件表达式;
表名——用于指定待修改数据的表名
SET子句——用于指定表中要修改的列名及其列值。列值可以是表达式
WHERE子句——用于修改满足条件
修改一行数据的多个列值时,set子句中每个字段值的修改使用逗号分开。
修改表记录时,需要注意表中的主码约束、外码约束以及唯一性等约束,修改的数据只有满足表定义中所以约束,才能修改成功。
2.修改所有数据记录
修改所有数据记录同样使用SQL语句UPDATE来实现,语法如下:
UPDATE 表名
SET 字段名1 = 值1 [,...字段名n = 值n]
[WHERE 条件表达式];
WHERE 条件表达式为可选项,用于限定表中要修改的记录。若要修改的是所有记录则不用指定。
三、删除数据
1.删除特定数据记录
删除特定数据记录使用SQL语句DELETE FROM来实现,语法如下:
DELETE FROM 表名
WHERE 条件表达式;
表名——用于指定要删除的表名
WHERE子句——用于指定满足条件的特定记录,为可选项
2.删除所有数据记录
删除所有数据记录同样使用SQL语句DELETE FROM来实现,语法如下:
DELETE FROM 表名
[WHERE 条件表达式];
WHERE 条件表达式为可选项,用于删除表中要特定的记录。若要删除的是所有记录则不用指定。
DELETE
操作是可以在一个事务中回滚的,即如果执行过程中发生错误或用户选择回滚,已删除的记录可以恢复。DELETE
操作会激活表上的触发器。DELETE
不会影响自增列的计数器,除非删除的记录中包含了自增列的最大值,并且该值在后续操作中不再被使用。- 逐行删除数据,因此操作较慢,特别是当表中记录很多时。
3.采用TRUNCATE语句清除数据记录
在MYSQL中,删除数据除使用DELETE外,还可以使用TRUNCATE语句清空表中的数据记录,语法如下:
TRUNCATE [TABLE] 表名
TABLE关键字——可以省略。
TRUNCATE语句——用于快速删除一个表中的所有记录,但不会删除表本身及其结构。
无WHERE语句,原因在于TRUNCATE语句是清空表中所有记录,不能指定特定数据记录,所以不需要WHERE语句指定特定记录,
- 在大多数数据库系统中,
TRUNCATE
操作不能在一个事务中进行回滚(即一旦执行,此操作立即生效且不可撤销,除非在特定的事务管理配置下)。 TRUNCATE
通常不激活表上的触发器。- 执行TRUNCATE后,自增列(如果有的话)的计数器会被重置。
- 不会逐行删除数据,而是直接删除数据页,并重新初始化该表的存储空间。这使得
TRUNCATE
操作比DELETE
更快。