--删除之前创建乱七八糟的表
DROP TABLE DEPT1;
DROP TABLE DEPT2;
DROP TABLE emp2;
DROP TABLE emp5;
DROP TABLE MYEMP;
DROP TABLE MYEMP2;
DROP TABLE MYEMP3;
--新建立一个表,用于接下来操作
CREATE TABLE emp1
AS
SELECT EMPLOYEE_ID,LAST_NAME,HIRE_DATE,SALARY
FROM EMPLOYEES
WHERE 1=2;
/*
into 可以省略
table 表名后面不加()指定哪些列的话默认就是要全部的列 在values()里面必须和列顺序(plsql中 desc 表名查看表顺序,navicate中,直接设计表查看)一一对应值
*/
--向表表中插入一条数据
INSERT INTO emp1
VALUES('1','XXX',SYSDATE-3,9999)
SELECT * FROM emp1;
INSERT INTO emp1
VALUES('2','YYY',TO_DATE('1999-09-09','yyyy-MM-dd'),9998)
INSERT INTO emp1(LAST_NAME,HIRE_DATE,EMPLOYEE_ID,SALARY)
VALUES('ZZZ',TO_DATE('1999-09-09','yyyy-MM-dd'),'3',9997)
INSERT INTO emp1(LAST_NAME,HIRE_DATE,EMPLOYEE_ID)
VALUES('AAA',sysdate-9,'4')
-- 复制其他表数据
-- 34条
INSERT INTO emp1(EMPLOYEE_ID,HIRE_DATE,LAST_NAME,SALARY)
SELECT EMPLOYEE_ID,HIRE_DATE,LAST_NAME,SALARY
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 80
-- 38条
SELECT * FROM emp1
-- 脚本方式插入数据
INSERT INTO emp1(EMPLOYEE_ID,LAST_NAME,HIRE_DATE,SALARY)
VALUES(&id,'&name',&salary,'&hire_date')
--修改数据
UPDATE emp1
SET SALARY = 12000
WHERE EMPLOYEE_ID = 4
-- 提交事务
commit;
-- 把所有人工资修改到22000
UPDATE emp1
SET SALARY = 22000
-- 回滚事务 --头疼Navicat自动提交事务
rollback;
SELECT * FROM emp1;
--重新弄下数据,先清除数据,后新增数据。
truncate table emp1;
-- 根据employees复制一张新表
CREATE TABLE EMPLOYEES1
AS
SELECT * FROM EMPLOYEES;
-- 更新114号员工的工作和工资使其与205号员工相同
SELECT * FROM EMPLOYEES1;
UPDATE EMPLOYEES1
SET JOB_ID = (
SELECT JOB_ID
FROM EMPLOYEES1
WHERE EMPLOYEE_ID = 205
),
SALARY = (
SELECT SALARY
FROM EMPLOYEES1
WHERE EMPLOYEE_ID = 205
)
WHERE EMPLOYEE_ID = 114
SELECT * FROM EMPLOYEES1 WHERE EMPLOYEE_ID = 114;
UPDATE EMPLOYEES1
SET DEPARTMENT_ID = (
SELECT EMPLOYEE_ID
FROM EMPLOYEES1
WHERE EMPLOYEE_ID = 100
)
WHERE JOB_ID = (
SELECT JOB_ID
FROM EMPLOYEES1
WHERE EMPLOYEE_ID = 200
)
-- 数据删除
-- 从employees1表中删除部门名称中含Public字符的部门id
DELETE FROM EMPLOYEES1
WHERE DEPARTMENT_ID = (
SELECT DEPARTMENT_ID
FROM DEPARTMENTS
WHERE DEPARTMENT_NAME LIKE '%Public%'
)
/*
语法归纳
增:
insert into table
values(...)
批量增
insert into table
select ... from table where ...
改(不设置where全表记录更新)
update table
set ...
where ...
删(不设置where全表记录删除)
delete from table
where ...
*/
/*
数据库事务:
事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态
数据库事务由以下部分组成:
1.一个或多个DML语句
2.一个DDL(数据库定义语言)语句
3.一个DCL(数据控制语言)语句
*/
update employees1 set last_name = 'xxx' where employee_id = '206';
-- 回滚
rollback;
select last_name from employees1 where employee_id = '206';
commit;
-- saveponit x;指定保存点
select count(1) from employees1;
delete from employees1 where employee_id = '205';
savepoint A;
delete from employees1 where employee_id = '206';
savepoint B;
-- 回退到指定保存点操作之后
rollback to savepoint B;
rollback;
commit;
select * from employees1;
delete from employees1 where employee_id = '200';
savepoint A;
delete from employees1 where employee_id = '201';
savepoint B;
delete from employees1 where employee_id = '202';
savepoint C;
rollback to savepoint A;
select * from employees1; -- 删除200之后的删除的数据回滚回来了
rollback; -- 删除的200回来了
/*
-- 独立性
1.其他用户不能看到当前用户所做的改变,直到当前用户结束事务
2.DML语句所涉及到的行被锁定,其他用户不能操作。 只有当前用户commit,或者锁被释放,其他用户才可以操作这个表
事务特性:
1、A (Atomicity) 原子性
原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。
比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。
2、C (Consistency) 一致性
一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。
例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b=10,否则事务失败。
3、I (Isolation) 独立性
所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
比如现在有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的。
4、D (Durability) 持久性
持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。
*/
oracle增删改及其事务控制
最新推荐文章于 2021-12-26 20:55:40 发布