数据处理语言
当你执行DML语句时:
INSERT语句语法
INSERT INTO table [(column [, column...])]
VALUES (value [, value...]);
1. 插入一个新行,其中包含每一列的值。以表中列的默认顺序列出值并对应插入。
或者:列出INSERT子句中的列。
2. 将字符和日期值括在单引号内。
--这两句话是等价的,添加一行数据并填充所有字段的值。 INSERT INTO departments(department_id, department_name, manager_id, location_id) --列出所有字段 VALUES (999, ‘DUMMY‘, 100, 1700); INSERT INTO departments VALUES (888, ‘DUMMY‘, 100, 1700); --可以不填写字段,value包含了所有字段的值。
--可以填充部分字段,这样就必须在表名后指定要填充的字段名
INSERT INTO departments(department_id, department)
VALUES (777, ‘DUMMY‘);
--插入的时候可以显式的使用空值
INSERT INTO departments VALUES(666, ‘FIN‘, NULL, NULL);
--插入日期值
INSERT INTO employees
VALUES (222, ‘Leo‘, ‘Zhang‘, ‘leo.zhang@163.com‘, ‘515.127.4561‘, TO_DATE(‘3月 3, 2021‘, ‘MONTH DD, YYYY‘), ‘SA_REP‘, 11000, 0.2, 100, 100);
COMMIT 和 ROLLBACK
对于数据表的插入、修改和删除,ORACLE中必须使用COMMIT提交才能生效。MYSQL不用COMMIT,因为他是自动COMMIT。
COMMIT之前如果发现数据有问题,可以使用ROLLBACK来撤销更改。例外:如果插入的时候使用了sequence序列,ROLLBACK以后序列的值不回滚。
INSERT INTO departments(department_id, department_name) VALUES (777 , ‘DUMMY‘); SELECT * FROM departments; --能够看到新加入的777 ROLLBACK; --ROLLBACK进行回退,这时候新增加的777就消失了
用子查询复制行插入表
INSERT INTO sales(employee_id, last_name, first_name) SELECT employee_id, last_name, first_name FROM employees WHERE job_id LIKE ‘%REP%‘;
COMMIT; --提交数据
UPDATE语句语法
UPDATE table SET column = value [, column = value, ...] [WHERE condition];
注意: 如果不加WHERE子句,则一次更新了所有的行。
将员工号=150的员工更名为Zhang San,去掉phone_number字段内容。
UPDATE employees SET last_name = ‘Zhang‘ , first_name = ‘San‘, phone_number = NULL WHERE employee_id = 150;
使用150号员工的工作和工资,来更新130号员工的工作和工资
UPDATE employees SET (job_id, salary) = ( SELECT job_id, salary FROM employees WHERE employee_id = 150 ) WHERE employee_id = 130;
使用UPDATE的子查询来更新另外一张表的数据。
UPDATE employees_copy SET phone_number = ( SELECT phone_number FROM employees WHERE employee_id = 150 ) WHERE job_id = ( SELECT job_id FROM employees WHERE employee_id = 150 );
DELETE语句语法
DELETE [FROM] table
[WHERE condition];
加不加FROM效果相同。
DELETE FROM employees_copy;
DELETE employees_copy;
通过子查询设定删除的condition。
DELETE employees_copy WHERE department_id IN ( SELECT DEPARTMENT_ID FROM departments WHERE UPPER(department_name) LIKE ‘%AN%‘ );
TRUNCATE语句
TRUNCATE TABLE table_name;
数据库的事务
数据库事务由以下之一组成:
数据库事务:开始和结束
COMMIT和ROLLBACK的优点
Savepoint语句
控制ROLLBACK撤销的位置。
SELECT * FROM EMPLOYEES_COPY; SAVEPOINT before_change; --Savepoint 已创建。 UPDATE employees_copy SET phone_number = NULL; --108 行已更新。 SAVEPOINT after_change_phone; --Savepoint 已创建 DELETE FROM employees_copy; --108 行已删除。 ROLLBACK TO after_change_phone; --回退的顺序不能反了 ROLLBACK TO before_change;
COMMIT或者ROLLBACK之前的数据状态
COMMIT之后的数据状态
读取一致性
SELECT ... FOR UPDATE语句
对于SELECT查询出来的结果进行锁定,其他会话无法更改被锁定的数据。
执行COMMIT或者ROLLBACK之后,对于数据的锁定会被释放。
SELECT * FROM employees WHERE employee_id = 200 FOR UPDATE; --employee_id=200的记录被锁定。 COMMIT; --释放对于employee_id=200的锁定.
如果SELECT语句尝试锁定被另一个用户锁定的行,则数据库将等待直到该行可用为止(进行了ROLLBACK或者COMMIT),然后返回SELECT语句的结果.
例如: 下图演示了其他会话对于查询条件的记录进行了FOR UPDATE操作以后,在执行这个语句就会一直等待。
Oracle 19C学习 - 10. DML数据处理语言管理表
原文:https://www.cnblogs.com/slqleozhang/p/14753367.html