1. 插入数据
1.1 方式一
-
为表的所有字段按默认顺序插入数据
INSERT INTO 表名 VALUES (value1,value2,....);
-
为表的指定字段插入数据(推荐)
INSERT INTO 表名(column1 [, column2, …, columnn]) VALUES (value1 [,value2, …, valuen]);
-
同时插入多条记录(推荐)
INSERT INTO table_name(column1 [, column2, …, columnn]) VALUES (value1 [,value2, …, valuen]), (value1 [,value2, …, valuen]), …… (value1 [,value2, …, valuen]);
-
总结
- 一个同时插入多行记录的INSERT语句等同于多个单行插入的INSERT语句,但是多行的INSERT语句在处理过程中 效率更高 。因为MySQL执行单条INSERT语句插入多行数据比使用多条INSERT语句快,所以在插入多条记录时最好选择使用单条INSERT语句的方式插入。
- 字符和日期型数据应包含在单引号中。
1.2 方式二
-
将查询结果插入到表中
INSERT INTO 目标表名 (tar_column1 [, tar_column2, …, tar_columnn]) SELECT (src_column1 [, src_column2, …, src_columnn]) FROM 源表名 [WHERE condition]
- 在 INSERT 语句中加入子查询。
- 不必书写 VALUES 子句。
- 子查询中的值列表应与 INSERT 子句中的列名对应。
-
说明:目标表中要添加数据的字段的长度不能低于源表中查询的字段的长度。如果目标表中要添加数据的字段的长度低于源表中查询的字段的长度的话,就有添加不成功的风险。
2. 更新数据
-
语法
UPDATE table_name SET column1=value1, column2=value2, … , column=valuen [WHERE condition]
-
可以一次更新多条数据。
-
如果需要回滚数据,需要保证在DML前,进行设置:SET AUTOCOMMIT = FALSE;
-
更新数据时有可能更新不成功(可能是由于约束的影响造成的)
3. 删除数据
-
语法
DELETE FROM table_name [WHERE <condition>];
-
删除数据时,也有可能因为约束的影响,导致删除失败
4. MySQL8新特性:计算列
-
计算列
- 简单来说就是某一列的值是通过别的列计算得来的。例如,a列值为1、b列值为2,c列不需要手动插入,定义a+b的结果为c的值,那么c就是计算列,是通过别的列计算得来的。
-
在MySQL 8.0中,CREATE TABLE 和 ALTER TABLE 中都支持增加计算列。下面以CREATE TABLE为例进行讲解。
-
举例
USE atguigudb; CREATE TABLE test1( a INT, b INT, c INT GENERATED ALWAYS AS (a + b) VIRTUAL #字段c即为计算列 ); INSERT INTO test1(a,b) VALUES(10,20); SELECT * FROM test1; # 结果 +------+------+------+------+ | id | a | b | c | +------+------+------+------+ | NULL | 100 | 200 | 300 | +------+------+------+------+
参考
https://www.bilibili.com/video/BV1iq4y1u7vj/?spm_id_from=333.337.search-card.all.click&vd_source=25b05e9bd8b4bdac16ca2f47bbeb7990