先建一个测试表:
Create table my_employee ( id number(3),
first_name varchar2(100),
Last_name varchar2(100),
User_id varchar2(100),
Salary number(5));
一:插入操作
方式一:普通插入数据
语法:
INSERT INTO table [(column [, column...])]
VALUES (value [, value...]);
使用这种语法一次只能向表中插入一条数据
若按照列的顺序赋值,可以不用写列名
INSERT INTO MY_EMPLOYEE VALUES(1,'AAA','aaa','aaac',10000)
如果不是按列的顺序复制,就一定要写列名
INSERT INTO MY_EMPLOYEE(id,FIRST_NAME,LAST_NAME,SALARY) VALUES (2,'bbbb','BBBB',9000)
方式二:从其他表拷贝数据插入
INSERT INTO MY_EMPLOYEE(FIRST_NAME,LAST_NAME,user_id,SALARY) SELECT FIRST_NAME,LAST_NAME,EMPLOYEE_ID,SALARY FROM EMPLOYEES WHERE DEPARTMENT_ID=80;
二:更新操作
语法:
UPDATE table
SET column = value [, column = value, ...]
[WHERE condition];
使用:
UPDATE MY_EMPLOYEE SET FIRST_NAME='lrcc' WHERE id=1;
三:删除操作
语法:
DELETE FROM table
[WHERE condition];
使用示例:
DELETE FROM MY_EMPLOYEE WHERE id=1;
四:数据库事务
事务的概念:一组逻辑操作单元,使数据从一种状态变换成另一种状态
事务的的特性:
1、原子性(Atomicity):事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。
2、一致性(Consistency):事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
3、隔离性(Isolation):一个事务的执行不能被其他事务干扰。
4、持续性(Durability):一个事务一旦提交,它对数据库中数据的改变就应该是永久性的
数据库事务由以下部分组成:
- 一个或多个DML 语句
- 一个 DDL(Data Definition Language – 数据定义语言) 语句
- 一个 DCL(Data Control Language – 数据控制语言) 语句
以第一个 DML 语句的执行作为开始
以下面的其中之一作为结束:
- COMMIT 或 ROLLBACK 语句
- DDL 语句(自动提交)
- 用户会话正常结束
- 系统异常终止
1、COMMIT和ROLLBACK
优点
- 确保数据完整性。
- 数据改变被提交之前预览。
- 将逻辑上相关的操作分组
2、保留点(SAVEPOINT)
使用 SAVEPOINT 语句在当前事务中创建保存点。
使用 ROLLBACK TO SAVEPOINT 语句回滚到创建的保存点。
语法:
UPDATE...
SAVEPOINT update_done;
Savepoint created.
INSERT...
ROLLBACK TO update_done;
Rollback complete.
3、事务进程
自动提交在以下情况中执行:
- DDL 语句。
- DCL 语句。
- 不使用 COMMIT 或 ROLLBACK 语句提交或回滚,正常结束会话。
会话异常结束或系统异常会导致自动回滚。
4、提交或回滚前的数据状态
- 改变前的数据状态是可以恢复的
- 执行 DML 操作的用户可以通过 SELECT 语句查询之前的修正
- 其他用户不能看到当前用户所做的改变,直到当前用户结束事务。
- DML语句所涉及到的行被锁定, 其他用户不能操作。
5、提交后的数据状态
- 数据的改变已经被保存到数据库中。
- 改变前的数据已经丢失。
- 所有用户可以看到结果。
- 锁被释放,其他用户可以操作涉及到的数据。
- 所有保存点被释放。
6、回滚后的数据状态
- 数据改变被取消。
- 修改前的数据状态被恢复。
- 锁被释放。
练习题:
- 向my_employee表中插入下列数据
ID |
FIRST_NAME |
LAST_NAME |
USERID |
SALARY |
1 |
patel |
Ralph |
Rpatel |
895 |
2 |
Dancs |
Betty |
Bdancs |
860 |
3 |
Biri |
Ben |
Bbiri |
1100 |
4 |
Newman |
Chad |
Cnewman |
750 |
5 |
Ropeburn |
Audrey |
Aropebur |
1550 |
INSERT INTO my_employee VALUES(1,'patel','Palph','Rpatel',895);
INSERT INTO my_employee VALUES(2,'Dancs','Betty','Bdancs',860);
INSERT INTO my_employee VALUES(3,'Biri','Ben','Bbiri',1100);
INSERT INTO my_employee VALUES(4,'Newman','Chad','Cnewman',750);
INSERT INTO my_employee VALUES(5,'Ropeburn','Audrey','Aropebur',1550);
2、提交事务,锁定了插入操作的数据:
commit;
3、 将3号员工的last_name修改为“drelxer”
UPDATE my_employee SET last_name = 'drelxer' WHERE id = 3;
4、将所有工资少于900的员工的工资修改为1000
UPDATE my_employee SET salary = 1000 WHERE salary< 900;
5、查询修改后的数据:
SELECT * FROM my_employee WHERE salary <= 1000
7、删除所有数据
DELETE FROM my_employee;
8、 清空表my_employees
TRUNCATE TABLE my_employee