When not matched then
Insert(eid,name,birth,salary) values(test1.eid,test1.name,test1.birth,test1,salary);
Select * from test2;
事务控制
事务
组成单个逻辑工作单元的一系列操作被称为事务。
事务必须满足的ACID属性:
原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持久性(Durability)
执行插入,更新,删除操作时,一定要执行commit;操作。不然不会提交到数据库。
Sql Plus的自动提交
Sql Plus中执行SQL语句时可以设置是否自动提交,缺省设置为非自动提交。
查看设置show autocommit;
结果:
Autocommit OFF;
Autocommit IMMEDIATE
改变设置:
Set autocommit on;
Set autocommit off;
提交/回滚数据状态
当前事务中数据状态的改变是可以恢复的
当前事务中的DML操作结果只对当前用户(会话)可见,其它用户(会话)看不到当前事务中数据状态的改变,直到当前事务结束(即执行commit)。
当前事务中DML语句所涉及到的行被锁定,其他用户(会话)不能对其进行修改操作。
只可以查看select.
事务提交后数据状态
数据的修改永久生效,不可再撤消
数据以前的状态永久性丢失,无法恢复
所有用户(会话)都将看到操作后的结果
记录锁被释放,其它用户可对这些进行修改操作
事务的保存点(savepoints)被清除
保存点
通过保存点在当前的事务中创建标记,将来可回退到指定的标记(保存点)处,实现事务的部分回滚。
用法举例:
Insert into dept values(55,'Adv','Beijing');
Insert into dept values(56,'Seev','Beijing');
Savepoint p1;
Insert into dept values(57,'Acc','Tianjin');
……
Select * from dept;
Rollback to p1;
Select * from dept;
一旦执行了commit操作,那么savepoint自动消失。
数据库对象
常见数据库对象
表:存放数据的基本数据库对象,由行(记录)和列(字段)组成
约束条件:执行数据校验,保证数据完整性的系列规则
视图:表中数据的逻辑显示
索引:根据表中指定的字段建立起来的顺序,用于提高查询性能。
序列:一组有规律的整数值
同义词:对象的别名
命名规则
必须以字母开头
可以包含字母,数据,_,$,和#
同一用户下的对象不能重名
不能使用oracle保留字
创建表
创建表时必须指定表名,字段名,字段类型
Create table为DDL语句,一经执行不可撤消。
Create table scott.test(
Eid number(10),
Name varchar2(20),
Hiredate date default sysdate,
Salary number(8,2) default 0
);
数据字典:Select table_name from user_tables;
使用子查询创建表
在创建表的同时,可以将子查询的结果直接插入到其中:
新建表与子查询结果的字段列表必须匹配
新建表的字段列表可以缺省
Create table myemp(编号,姓名,年薪)
As select empno,ename,sal*12 from emp;
Create table myemp2
As select empno,ename,sal*12 annsal from emp;
修改表结构
使用alter table语句可以修改表的结构,包括:
添加字段,修改字段,删除字段
Alter 语句为DDL语句,一经执行不可撤消。
Alter table test1
Add(
Grade number(3);
Phone varchar2(20); default '无'
);
Desc test1;//查看test1表的结构
修改字段
Alter table test1
Modify(
Grade number(2),
Phone varchar2(15),default '12345667'
);
修改操作会受到当前表中已有数据的影响,当已有记录的相应字段只包含空值时,类型,大小都可以修改,否则修改可能失败。
修改的缺省值设置,只对此后新插入的记录有效。
清空表中数据
Truncate table语句用于清空表中数据
清除表中所有记录
释放表的存储空间
为DDL语句,一经执行不可撤消
Truncate table test1;
删除表
drop table test1;
重命名表
Rename old_name to new_name;
Rename test1 to test2;
用户定义的表
用户自己定义的表
用户自己创建并维护的一组表
包含了用户所需的信息
数据字典表
由oracle数据库自动创建并维护的一组表
包含数据库信息
什么是数据字典
数据字典是oracle数据库的核心,用于描述数据库及其所有对象。数据字典由一系列只读的表的视图组成,这些表和视图属sys用户拥有,由oracle server负责维护,用户可以通过select语句进行访问。
数据字典的内容
数据库的物理和逻辑结构,对象的定义和空间分配,完整性条件,用户,角色,权限,审计记录。
数据字典视图主要可分为三类
Dba 所有方案包含的对象信息
All 用户可以访问的对象信息
User 用户方案的对象信息
举例://查看当前用户拥有的所有表的名字
Select table_name from user_tables;
--查看当前用户可以访问的所有表的名字
Select table_name from all_tables;
--查看当前用户拥有的所有对象的类型
Select distinct object_type from user_objects;
--查看所有用户拥有的所有对象类型
Select table_name from dba_tables;
约束constraint
Not null 非空unique key 唯一键primary key主键foreign key外键check 检查
相关说明
Oracle使用SYS_Cn格式命名约束,也可以由用户命名创建约束的时机。
在建表的同时创建,建表后单独添加
可以在表级或列级定义约束,可以