数据操作
- 1、插入数据 INSERT INTO
- 1.1 INSERT INTO VALUES
- 1.2 INSERT INTO SELECT ...
- 2、更新数据 UPDATE SET
- 3、删除数据 DELETE FROM
- 4、 MySQL8新特性:计算列
- 5、练习
1、插入数据 INSERT INTO
- 使用 INSERT 语句向表中插入数据。
1.1 INSERT INTO VALUES
情况1:为表的所有字段按默认顺序插入数据
INSERT INTO table_name
VALUES (value1,value2,…);
- VALUES是标准写法, 也可以写成VALUE。
- 字符和日期型数据应包含在单引号中。
- 需要为每一个字段指定值,并且值的顺序必须和数据表中字段定义时的顺序相同。
INSERT INTO departments
VALUES (70, 'Pub', 100, 1700);INSERT INTO departments
VALUES (100, 'Finance', NULL, NULL);INSERT INTO dept02
VALUES (1001, 'Coding', 1, NULL, NUll);
情况2:为表的指定字段插入数据
INSERT INTO table_name( [column1, column2, …, columnn])
VALUES (value1 [,value2, …, valuen]);
- 为指定字段插入数据,其他字段的值为表定义时的默认值。
- 如果没有默认值必须进行指定。
- 值的顺序必须和列出的字段一一对应。
- 指定列名的插入方式只要列名顺序和值的顺序一致即可,与表字段顺序无关。
INSERT INTO departments(department_id, department_name)
VALUES (80, 'IT');INSERT INTO dept02 (department_id, manager_id)
VALUE (1002, 2);
-- VARCHAR类型如果没有默认值,必须指定ALTER TABLE dept02
ALTER department_name SET DEFAULT 'Others';
-- 设置默认值
情况3:同时插入多条记录
INSERT INTO table_name(column1 [, column2, …, columnn])
VALUES
(value1 [,value2, …, valuen]),
(value1 [,value2, …, valuen]),
……
(value1 [,value2, …, valuen]);
- MySQL执行单条INSERT语句插入多行数据比使用多条INSERT语句效率更高。
INSERT INTO emp(emp_id,emp_name)
VALUES (1001,'shkstart'),
(1002,'atguigu'),
(1003,'Tom');
-> Query OK, 3 rows affected (0.00 sec)
-> Records: 3 Duplicates: 0 Warnings: 0
/**● Records:表明插入的记录条数。 ● Duplicates:表明插入时被忽略的记录,原因可能是这些记录包含了重复的主键值。 ● Warnings:表明有问题的数据值,例如发生数据类型转换。
*/INSERT INTO dept02
VALUES (1003, 'Docter', 1, 2000, Null),
(1003, 'Docter', 1, 2000, Null),
(1003, 'Docter', 1, 2000, Null);
-- 没有设置主键INSERT INTO dept02 (department_id, manager_id)
VALUE (1004, 4),
(1005, 4),
(1006, 4);
1.2 INSERT INTO SELECT …
将查询结果插入到表中。
INSERT INTO table_name (tar_column1 [, tar_column2, …, tar_columnn])
SELECT (src_column1 [, src_column2, …, src_columnn])
FROM 源表名
[WHERE condition]
- 在 INSERT 语句中加入子查询。
- 不必书写 VALUES 子句。
- 子查询中的值列表应与 INSERT 子句中的列名对应。
INSERT INTO emp2
SELECT *
FROM employees
WHERE department_id = 90;INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM employees
WHERE job_id LIKE '%REP%';INSERT INTO dept02 (department_id, department_name, manager_id, location_id)
SELECT *
FROM atguigudb.departments ad
WHERE ad.department_id = 250;
2、更新数据 UPDATE SET
UPDATE table_name
SET column1=value1, column2=value2, … , column=valuen
[WHERE condition]
- 可以一次更新多条数据。
- 如果需要回滚数据,需要保证在DML前,进行设置:SET AUTOCOMMIT = FALSE;
- 使用 WHERE 子句指定需要更新的数据。
- 如果省略 WHERE 子句,则表中的所有数据都将被更新。
UPDATE employees
SET department_id = 70
WHERE employee_id = 113;UPDATE copy_emp
SET department_id = 110;
# 表中的所有数据都将被更新UPDATE dept02
SET department_name = 'Van'
WHERE department_id = 1002;
3、删除数据 DELETE FROM
DELETE FROM table_name [WHERE ];
- 如果没有WHERE子句,DELETE语句将删除表中的所有记录。
DELETE FROM departments
WHERE department_name = 'Finance';DELETE FROM copy_emp;DELETE FROM dept02
WHERE department_id = 1003;
4、 MySQL8新特性:计算列
举例:定义数据表tb1,然后定义字段id、字段a、字段b和字段c,其中字段c为计算列,用于计算a+b的值。
CREATE TABLE tb1 (id INT,a INT,b INT, c INT GENERATED ALWAYS AS (a + b) VIRTUAL
);INSERT INTO tb1 (a, b)
VALUES (100, 20);UPDATE tb1
SET a = 200;SELECT * FROM tb1;
# c列会自动刷新结果为 a + b;
5、练习