![866346f184e8fa035339c79e960b96c1.png](https://img-blog.csdnimg.cn/img_convert/866346f184e8fa035339c79e960b96c1.png)
1. 什么是事务
(1) 什么是事务?
指作为单个逻辑工作单元执行的一系列操作,要么完全的执行,要么完全的不执行。
(2) 事务的特性有哪些?
1-原子性ATOMICITY:事务中操作要么都不做,要么就全做。
2-一致性CONSISTENCY:一个事务应该保护所有定义在数据上的不变的属性(例如完整性约束)。在完成一个成功的事务时,数据应处于一致的状态。
3-隔离性ISOLATION:Hige事务的执行不能被其他事务干扰。
4-持久性DURABILITY:一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。
2. 事务控制语言(TCL)
(1) 在数据库中控制事务的提交与回滚的语句是什么?
commit事务提交:当我们执行了一个DML语言后,此时的数据并不会持久化到数据文件中。需要使用commit来确认提交。
rollback事务回滚:当我们执行了一个DML语言后,也可以使用rollback来撤销当前对表的操作。
Savepoint 设置回滚点
(2) 事务类型有几种?
显示事务:需要我们手动的提交或回滚。DML语言中的所有操作都是显式事务操作。
隐式事务:数据库自动提交不需要我们做任何处理,同时也不具备回滚性。DDL、DCL语言都是隐式事务操作。
(3) 每种事务类型特点是什么?
同上
(4) 如何为事务设置回滚点?
通过savepoint设置回滚点,rollback to回到回滚点。
3. 数据库定义语言(DDL)创建表
(1) 数据库定义语言的作用是什么?
create创建数据库对象;
Drop 删除数据库对象
alter修改数据库对象
Rename 修改数据库对象名称
(2) 在数据库中创建表的语句是什么?
Create...创建数据库对象(表,用户,视图,索引,序列)
语法:create table dept(deptno number(2),dname varchar2(14),loc varchar2(13));
(3) 在Oracle数据库中表分为几种?每种表示什么含义?
用户表:有用户创建和维护的表的集合,包含用户信息;
数据字典:由Oracle服务器创建和维护的表的集合,包含数据库信息。
(4) Oracle中常见的数据字典表有哪些?分别表示什么含义?
Select table_name from user_tables;查看用户拥有的表的名称。
Select distinct object_type from user_objects;查看本用户所拥有的不同的对象类型;
Select * from user_catalog;查看本用户所拥有的表、视图、同义词和序列。
4. 使用查询创建表
(1) 创建dept80表,表结构以及数据来源于对employees表的查询,查询条件为department_id=80,投影列为:employee_id、last_name、salary、hire_date。
SQL> create table dept80 as select e.employee_id id,e.last_name name,e.salary ,e.hire_date hiredate from employees e where e.department_id=80;
5. 修改表信息ALTER TABLE
(1) 修改表信息ALTER TABLE
ALTER TABLE可以修改表信息
(2) 通过修改表的语句能够修改表的什么?
添加一个新列add
SQL> alter table dept add(salary number(8,2));
modify修改一个已存在的列(修改数据类型,默认值,列名)
alter table dept modify(dname varchar2(40));
SQL> alter table dept modify(salary number(8,2) default 1000);
SQL> alter table dept modify(salary number(8,2) default null);
SQL> alter table dept rename column dname to name; 修改列名!
删除一个列
SQL> alter table dept drop column salary;
(3) 向表中添加新列的语法结构是什么?
Alter table tablename add (column datatype [default expr][,column datatype]... );
(4) 删除表中的列的语法结构是什么?
Alter table tablename drop (column);
6. 修改表名与删除表
(1) 删除表中的列语句的语法结构是什么?
Alter table tablename drop column columnname;
(2) 修改表名的语句
Rename dept80 to dept90;
(3) 截断表的语句是什么?
Truncate table
truncate table dept90;
(4) 删除表的语句是什么?
Drop table dept90; 隐式事务
(5) 截断表与删除的区别是什么?
截断表中的所有数据,但是保留表结构;不支持附加条件;截断表是隐式事务,系统自动提交,delete是显示事务,需要手动提交。删除数据方面,truncate要优于delete。
7. 定义非空约束
(1) 数据库中的约束有哪些类型?
非空约束 NOT NULL;
唯一性约束 UNIQUE;
主键约束 PRIMARY KEY;
外键约束 FOREIGN KEY;
用户自定义约束 CHECK;
(2) 每个约束的含义是什么?
非空约束 NOT NULL:指定列不能包含空值;
唯一性约束 UNIQUE:指定列的值或者列的组合的值对于表中所有的行必须是唯一的;
主键约束 PRIMARY KEY:表的每行的唯一性标识;
外键约束 FOREIGN KEY:在列和引用表的一个列之间建立并且强制一个外键关系;
用户自定义约束 CHECK:指定一个必须为真的条件;
(3) 定义约束的原则是什么?
创建一个约束:在创建表的同时,或者在创建表之后都可以定义约束。可以给约束起名字,但是约束名不能相同,必须是唯一的。如果没有为约束起名字,Oracle服务器将用默认格式SYS_Cn产生一个名字,这里n是一个唯一的整数,所以约束名是唯一的。
定义NOT NULL约束
Create table employees(last_name varchar2(25) not null,hire_date date constraint emp_hire_date_nn NOT NULL)分别系统自动创建约束名和自定义指定约束名
8. 定义唯一性约束
(1) 创建dept90表,包含如下列:id number具备唯一性约束、name varchar2(20)。
create table dept90 (id number constraint dept90_id_uk unique,name varchar2(24) constraint dept90_name_nn not null );
修改已有列的约束类型alter table dept90 modify (name unique);
9. 定义主键约束
(1) 创建dept70表,包含如下列:id number具备主键约束。
create table dept70(id number primary key);
定义联合主键:
create table dept50 (id number,name varchar2(20),constraint dept50_pk primary key(id,name));
10. 定义外键约束
(1) 创建dept40表,包含如下列:id number、d_id number并为d_id列分配键列约束参照DEPT70表的id列。
create table dept40(id number,d_id number,constraint dept40_fk foreign key(d_id) references dept70(id));
将已有的键修改为外键:
alter table dept50 add(d_id number(8,2));
alter table dept50 add constraint dept50_fk foreign key(d_id) references dept70(id);
11. 定义检查约束
(1) 创建dept30表,包含如下列:id number、salary number(8,2)。为salary分配检查约束检查条件为salary>1000。
create table dept30 (id number,salary number(8,2) constraint dept30_ck check(salary>1000));
在添加列的同时添加自定义检查约束
alter table dept50 add(salary number(8,2) constraint dept50_ck check(salary>1000));
对已有列添加自定义检查约束:
alter table dept50 add(constraint dept50_ck_A check (name like '%A%'));
12. 禁用与启用约束
(1) 在Oracle中查看约束的数据字典表叫什么名字?
select constraint_name,constraint_type,search_condition from user_constraints where table_name = 'DEPT50';
(2) 禁用约束语句的语法结构是什么?
alter table dept50 disable constraint dept50_ck_a;
(3) 级联禁用约束语句的语法结构是什么?
禁用具有相关性的约束,级联操作。一般指有其他外键约束参照的主键约束。
alter table dept70 disable constraint SYS_C0011225 cascade;
其他无参照的可以不写cascade
(4) 启用约束语句的语法结构是什么?
alter table dept70 enable constraint SYS_C0011225;
13. 什么是视图
(1) 什么是视图?
可以通过创建表的视图来表现数据的逻辑子集或数据的组合。视图是基于表或另一个视图的逻辑,一个视图并不包含它自己的数据,它像一个窗口,通过该窗口可以查看或改变表中的数据。视图基于其上的表称为基表。
(2) 视图的优越性是什么?
视图限制数据的访问,因为视图能够选择性的显示表中的列;
视图可以用来构成简单的查询以取回复杂查询的结果。例如,视图能用于从多表中查询信息,而用户不必知道怎样写连接语句;
视图对特别的用户和应用程序提供数据独立性,一个视图可以从几个表中取回数据。
(3) 视图分为几种类型?
简单视图和复杂视图。
(4) 不同类型的视图的区别是什么?
视图有两种分类:简单和复杂,基本区别设计DML(INSERT,UPDATE,DELETE)操作。
简单视图:数据仅来自一个表,不包含函数或数据分组,能通过视图执行DML操作。
复杂视图:数据来自多个表,包含函数或数据分组,不允许通过视图进行DML操作。