446 字
2 分钟
MySQL学习笔记 (8)
NOTE基于 MySQL 26.7。数据操作
INSERT INTO
INSERT INTO 语句用于向表中插入新记录。
INSERT INTO employee (emp_id, last_name, dept_no)VALUES (201, '周七', 'D01');一次插入多行:
INSERT INTO employee (emp_id, last_name, dept_no)VALUES (202, '吴八', 'D01'), (203, '郑九', 'D02');没有出现在列表里的列会使用默认值,或者是 NULL。
也可以把查询结果插入另一张表:
CREATE TABLE employee_archive ( emp_id INTEGER NOT NULL, last_name VARCHAR(40) NOT NULL);
INSERT INTO employee_archive (emp_id, last_name)SELECT emp_id, last_nameFROM employeeWHERE hire_date < DATE '2020-01-01';UPDATE
UPDATE 语句用于更新表中的记录。
UPDATE employeeSET salary = salary * 1.05, dept_no = 'D02'WHERE emp_id = 101;注意:省略 WHERE 会更新表中的所有行。
DELETE
DELETE 语句用于删除表中的记录。
DELETE FROM employeeWHERE emp_id = 103;注意:省略 WHERE 会删除表中的所有行。
TRUNCATE TABLE 也会清空表,和逐行 DELETE 不完全一样。
视图
视图是基于 SQL 语句的结果集的可视化表。
CREATE VIEW employee_public ASSELECT emp_id, last_name, dept_noFROM employee;
SELECT * FROM employee_publicWHERE dept_no = 'D01';删除视图:
DROP VIEW employee_public;WITH CHECK OPTION 要求通过视图插入或更新的行,仍然能被该视图查到。带聚合、DISTINCT 或多表的视图往往不能更新。
事务
事务把多条语句绑在一起:要么全部成功,要么全部取消。
CREATE TABLE account ( id INTEGER NOT NULL, balance NUMERIC(12, 2) NOT NULL, CONSTRAINT account_pk PRIMARY KEY (id));
INSERT INTO account (id, balance)VALUES (1, 500), (2, 200);
START TRANSACTION;
UPDATE account SET balance = balance - 100 WHERE id = 1;UPDATE account SET balance = balance + 100 WHERE id = 2;
COMMIT;START TRANSACTION:开始事务COMMIT:提交ROLLBACK:回滚,撤销还没提交的修改
许多客户端默认每条语句自动提交。需要多条语句一起提交时,先执行 START TRANSACTION。
参考
MySQL学习笔记 (8)
https://blog.chuwu.top/posts/sql/mysql8/