oracle sql语句笔记(二)

2014-11-24 09:49:26 · 作者: · 浏览: 1
me=test1.name,birth=test1.birth,salary=test1.salary

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格式命名约束,也可以由用户命名创建约束的时机。

在建表的同时创建,建表后单独添加

可以在表级或列级定义约束,可以