插入数据

储备工作

  1. CREATE TABLE IF NOT EXISTS emp1(
  2. id INT,
  3. `name` VARCHAR(15),
  4. hire_date DATE,
  5. salary DOUBLE(10,2)
  6. );
  7. DESC emp1;
  8. SELECT *
  9. FROM emp1;

方式1

VALUES的方式添加
使用这种语法一次只能向表中插入一条数据

INSERT INTO table_name VALUES (value1 
                               [,value2, …, valuen]), 
                               (value1 [,value2, …, valuen]),
                               ……(value1 [,value2, …, valuen]
                                );

① 没有指明添加的字段
正确的

INSERT INTO emp1
VALUES (1,'Tom','2000-12-21',3400); #注意:一定要按照声明的字段的先后顺序添加

错误的

INSERT INTO emp1
VALUES (2,3400,'2000-12-21','Jerry');

② 指明要添加的字段 (推荐)

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 emp1(id,NAME,salary)
VALUES
(4,'Jim',5000),
(5,'张俊杰',5500);

方式2

将查询结果插入到表中
查询语句

SELECT * FROM emp1;

INSERT INTO emp1(id,NAME,salary,hire_date)
SELECT employee_id,last_name,salary,hire_date  # 查询的字段一定要与添加到的表的字段一一对应
FROM employees
WHERE department_id IN (70,60);

DESC emp1;
DESC employees;

说明:emp1表中要添加数据的字段的长度不能低于employees表中查询的字段的长度。
如果emp1表中要添加数据的字段的长度低于employees表中查询的字段的长度的话,就有添加不成功的风险。

更新数据 (或修改数据)

UPDATE …. SET …. WHERE …

update [table] set [column] =  where..

子查询操作 :相关更新

UPDATE table1 alias1 SET column = 
                                            (SELECT expression FROM table2 alias2 
                                             WHERE alias1.column = alias2.column);

可以实现批量修改数据的。

UPDATE emp1
SET hire_date = CURDATE()
WHERE id = 5;

SELECT * FROM emp1;

同时修改一条数据的多个字段

UPDATE emp1
SET hire_date = CURDATE(),salary = 6000
WHERE id = 4;

题目:将表中姓名中包含字符a的提薪20%

UPDATE emp1
SET salary = salary * 1.2
WHERE NAME LIKE '%a%';

修改数据时,是可能存在不成功的情况的。(可能是由于约束的影响造成的)

UPDATE employees
SET department_id = 10000
WHERE employee_id = 102;

删除数据

DELETE FROM …. WHERE….

DELETE FROM [TABLE] WHERE....
DELETE FROM emp1
WHERE id = 1;

在删除数据时,也有可能因为约束的影响,导致删除失败

DELETE FROM departments
WHERE department_id = 50;

小结:DML操作默认情况下,执行完以后都会自动提交数据。
如果希望执行完以后不自动提交数据,则需要使用 SET autocommit = FALSE.

MySQL8的新特性:计算列

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;

SELECT * FROM test1;