(二)Oracle 补充
创建表
命名规则
1.必须以字母开头
2.必须在1-30个字符之间
3.必须只能包含 A-Z , a-z , 0-9 , _ , $ ,和 #
4.必须不能和用户定义的其他对象重名
5.必须不能是Oracle的保留字
6.Orange默认存储表名都是大写
格式:
create table 表名
(
列明1 类型1,
列明2,类型2,
…
)
创建一个员工表 t1,员工号id(整数),姓名name(字符串)
create table t1(id number , name varchar2 (20) ) ;
说明:在 sql 标准中 varchar 是可变长的字符串。而在 Oracle 中,他自身拓展了一下 varchar2 定长字符串
修改表
格式:alter table 表名 xxxxx
1. 往t1表里边添加一列 email varchar(40)
alter table t1 add email varchar(40);
2.修改t1表email列明为qq
alter table t1 rename column email to qq;
3.修改t1表qq列表类型为varchar(50)
alter table t1 modify qq varchar(50);
4.删除 t1表qq列:drop column
5.修改t1表名为t2
rename t1 to t2;
拷贝表
拷贝表其实是另一种创建表的方式
1.创建一张表emp2,数据跟emp表一样
create table emp2 as select *from emp;
2.创建一张表emp3,只有emp表结构,没有数据
方式一 :
1.create table emp3 as select *from emp;
2.delete from emp3;
方式二 :
create table emp3 as select *from emp where 1=2;
清空表
格式:(1).delete from 表名 (2).truncate table 表名
delete 跟 truncate优缺点
1.delete逐条删除表”内容“,truncate先摧毁表再重建(Oracle后来优化了这一缺点)
2.delete是DML语句,truncate是DDL语句。DML语句可以闪回和回滚。
3.由于delete是逐条操作数据,所以delete会产生数据碎片,truncate不会产生(Oracle后来优化了这一缺点)
4.delete不会释放空间,truncate会释放空间
删除表
格式:drop table 表名 (Oracle提供了回收站机制,删表的时候先移动到回收站)
purge table 表名 (从回收站中彻底删除)
drop table 表名 purge (彻底删除表,不移动到回收站)
oracle提供了一个闪回技术,能将表还原到以前的某个时间点
闪回资料网址
表的约束
1.非空:not null
2.唯一:unique
3.检查:check
4.主键:primary key (隐含了 not null + unique)
5.外键:foreign key
创建表时,约束格式:
create table 表名
(
列表1 类型1【constraint 约束名1】约束类型2 constraint 约束名2,
列明2 类型2【constraint 约束名3】约束类型3
…
)
create table student
(
sid number constraint pk_student primary key, --学生Id主键约束
sname varchar2(20) constraint nn_student_name not null,–学生姓名非空约束
email varchar2(20) constraint un_student_email unique --学生邮件唯一约束
constraint nn_student_email not null, --同时邮件可再设非空,没有“,”
age number constraint chk_student_age_min check(age > 10), --学生年龄设置check约束
ge|nder varchar2(6) constraint chk_student_gender check(gender in (‘男’, ‘女’)),
deptno number constraint fk_student references dept (deptno) ON DELETE SET NULL
)
外界约束可以定义多个字段
** constraint fk_student foreign key (字段1,字段2) references dept(字段1,字段2)**
测试 :
SQL> insert into student values(1, ‘Tom’, ‘tom@126.com’, 20, ‘男’, 10) //正确插入表数据。
SQL> insert into student values(2, ‘Tom’, ‘tom@126.com’, 15, ‘男’, 10)
//违反un_student_email约束。SQL> insert into student values(3, ‘Tom3’, ‘tom3@126.com’, 14, ‘男’,100 ) //违反完整约束条件 (SCOTT.FK_STUDENT) - 未找到父项关键字
可以查看指定表(如student)的约束,注意表名必须大写。
SQL> select constraint_name, constraint_Type, search_condition
from user_constraints where table_name=‘STUDENT’