插入数据
方式1: 一条一条的添加数据
为表的所有字段按默认顺序插入数据
INSERT INTO 表名
VALUES (value1,value2,....);
# 没有指明添加的字段
INSERT INTO emp1
VALUES (1,'TOM','2023-11-06',3400);
没有指明添加的字段,要按照声明顺序,进行字段添加。
为表的所有字段按指明顺序插入数据
在INSERT
语句中只向部分字段中插入值,而其他字段的值为表定义时的默认值。
在 INSERT
子句中随意列出列名,但是一旦列出,VALUES
中要插入的value1,....valuen
需要与column1,...columnn
列一一对应。
INSERT INTO 表名(column1 [, column2, …, columnn])
VALUES (value1 [,value2, …, valuen]);
# 指明要添加的字段
INSERT INTO emp1(id,hire_date,salary,`name`)
VALUES(2,'1999-09-09',4000,'Jerry');
# 说明:没有进行赋值的hire_date 的值为 null
INSERT INTO emp1(id,salary,`name`)
VALUES(3,4500,'shk');
可以同时插入多条记录
INSERT INTO table_name
VALUES
(value1 [,value2, …, valuen]),
(value1 [,value2, …, valuen]),
……
(value1 [,value2, …, valuen]);
INSERT INTO emp1(id,NAME,salary)
VALUES
(4,'Jim',5000),
(5,'张俊杰',5500);
一个同时插入多行记录的INSERT
语句等同于多个单行插入的INSERT
语句,但是多行的INSERT
语句在处理过程中 效率更高 。因为MySQL执行单条INSERT
语句插入多行数据比使用多条INSERT
语句快,所以在插入多条记录时最好选择使用单条INSERT
语句的方式插入。
VALUES
也可以写成 VALUE
,但是VALUES
是标准写法
方式2: 将查询结果插入到表中
INSERT
还可以将SELECT
语句查询的结果插入到表中,此时不需要把每一条记录的值一个一个输入,只需要使用一条INSERT
语句和一条SELECT
语句组成的组合语句即可快速地从一个或多个表中向一个表中插入多行。
INSERT INTO 目标表名
(tar_column1 [, tar_column2, …, tar_columnn])
SELECT
(src_column1 [, src_column2, …, src_columnn])
FROM 源表名
[WHERE condition]
在 INSERT
语句中加入子查询。
不必书写 VALUES
子句。
子查询中的值列表应与 INSERT
子句中的列名对应。
INSERT INTO emp1(id,NAME,salary,hire_date)
#查询语句
SELECT employee_id,last_name,salary,hire_date # 查询的字段一定要与添加到的表的字段一一对应
FROM employees
WHERE department_id IN (70,60);
说明:emp1表中要添加数据的字段的长度不能低于employees表中查询的字段的长度。
如果emp1表中要添加数据的字段的长度低于employees表中查询的字段的长度的话,就有添加不成功的风险。
更新数据
UPDATE table_name
SET column1=value1, column2=value2,..., columnn=valuen
[WHERE condition]
可以一次更新多条数据。
如果需要回滚数据,需要保证在DML
前,进行设置:SET AUTOCOMMIT = FALSE;
#同时修改一条数据的多个字段
UPDATE emp1
SET hire_date = CURDATE(),salary = 6000
WHERE id = 4;
使用 WHERE
子句指定需要更新的数据。
修改数据时,是可能存在不成功的情况的。(可能是由于约束的影响造成的)
删除数据
DELETE FROM table_name
[WHERE condition];
table_name
指定要执行删除操作的表;“[WHERE ]”
为可选参数,指定删除条件,如果没有WHERE
子句,DELETE
语句将删除表中的所有记录。
DELETE FROM emp1
WHERE id = 1;
#在删除数据时,也有可能因为约束的影响,导致删除失败
DELETE FROM departments
WHERE department_id = 50;
小结:DML操作默认情况下,执行完以后都会自动提交数据。
如果希望执行完以后不自动提交数据,则需要使用 SET autocommit = FALSE.
计算列
计算列:简单来说就是某一列的值是通过别的列计算得来的。
在MySQL 8.0中,CREATE TABLE
和 ALTER TABLE
中都支持增加计算列。
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;
UPDATE test1
SET a = 100;
数据库学习视频:
【MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板】