1. 创建表:
一个oracle数据库中包含下列几种数据类型:
——table(表) 存储数据
——view (视图)从一个表或多个表的数据中得到的子集(虚的)
——sequence(序列) 生成主键值(自增)
——index (索引)提高查询性能
建表语法:
Create table 表名( 字段名1,类型(数据长度)(default……)约束条件,字段2,类型(数据长度) 约束条件。。。);
其中的default为缺省值:例:create table test(id number ,name varchar2(30) default ‘waa’);即当插入数据没有给此列插值时,此列name默认为‘waa’;
Oracle的数据类型:
Char(size):定长字符型,字符长度不够自动在右边加空格。
Varchar2(size):可变长字符型,大小必须指定。
Number(m,n):数据字符型,大小必须指定。
其中m指有效位,n指的是小数位(四舍五入)
有效位:从左边不为0的数字算起,四舍五入。如果有效位大于m报异常。
如:123.456(4,2)——>123.46 ;// 报错。
若是number 表示整形 。如 id number ;
Date:日期类型。
Lob:(large object)大对象,不能直接用insert插入。
Blob:二进制大对象,也是以相当于指针的形式存放的。采用单字节存储,适合保存二进制数据,如图片,文件等。
Clob:字符大对象,存文本。采用多字节存储,适合保存文本数据等。
举例:
例1:创建一个表mytest:
Create table mytest(id number ,name varchar2(30));
例2:创建一个表mytest,将id字段默认设置位11:
Create table mytest ( id number default 11 ,name varchar2(30));
例3:创建一个表mytest,表中id字段必须大于10且name字段不允许位空:
Create table mytest(id name check(id>10),name varchar2(30) not null);
例4:创建一个表mytest,表中要求id字段必须唯一:
Create table mytest(id number unique ,name varchar2(30));
2. 约束(针对表中的字段进行定义的)类型:
l PK: primary key(主键)
唯一且非空。保证实体的完整性,保证记录的唯一。主键唯一且非空,并且每一个表中只能有一个主键,有两个字段联合作为主键时,将两个字段组合在一起唯一表识记录,叫做联合主键。
主键约束的定义:
第一种定义方式:列级约束
Create table test(c number primary key); ——列级约束
Create table test(c number constraint pk_c primary key);—— 给约束命名,其名字:pk_c。
第二种定义方式(有三种方法):表级约束
Create table test(c number , primary key( c ));—— 表级约束
Create table test(c number,c1 number,primary key(c ,c1));——用表级约束可以实现联合主键,且只能使用表级约束。
l FK: foreign key(外键)
外键约束,要求引用另一张表中已经存在的数据. 保证引用的完整性,外键约束,外键的取值是受另一张表中的主键或唯一值的约束,不能够取其他值,只能够引用主键或唯一键的值,被引用的表,叫做parent table(父表),引用方的表叫做child table(子表),想要创建子表,就要先创建父表;记录的插入也是如此,先父表后子表;删除记录,要先删除子表记录,后删除父表记录;要修改记录,如果要修改父表的记录要保证没有被子表引用。要删表时,要先删子表,后删除父表(可以通过使用cascade constraint选项来删除父表)。
创建父表和子表(即级联表):
第一种:Fk 使用“列级约束”来进行建表:
Create table parent(c1 number primary key);
Create table child(c number primary key,c2 number references parent(c1));
第二种:Fk 使用“表级约束”来进行建表:
Create table parent (c1 number primary key);
Create table child(c number primary key,c2 number,foreign key(c2)references parent(c1));
级联删除:
情况一:(如果删除父表中的某条记录,子表相应记录也被删除)
Create table parent(id number primary key);
(插入操作:insert into parent(id)values(1);
删除操作:delete from parent where id=1;)
Create table child(id number primary key,p_id number references parent(id) on delete cascade);
情况二:(如果删除父表某条记录,子表相应记录被置空)
Create table parent(id number primary key);
Create table chile(id number primary key,p_id number references parent(id)on delete set null);
l UK:unique key (唯一键)
唯一且为空。唯一约束,允许为空,要求插入的记录中的值是唯一的。
例:create table student(id number ,name varchar2(30) ,address varchar2(30) , primary key(id) , unique(address));
检查(check)约束,可以按照指定条件,检查记录的插入。Check中不能使用伪列,不能使用函数,不能引用其他字段。
例1:create table sal( a1 number check(a1> 1000));
例2:创建表mytest表中id必须大于10且name字段不能为空。
Create table mytest(id number check(id>10),name varchar2(30) not null);
例3:create table student(id number primary key,name varchar2(30) not null,age number(2) check(age between 10 and 90));
例4:create table student( id number primary key,name varchar2(30),sex varchar2(2)check(sex in(’男’,’女’));
l NN: not null(非空)
这是一个列级约束,在建表时,在数据类型的后面加上not null,也就是在插入时不允许插入空值。
例:create table student (id number primary key ,name varchar2(30) not null unique , address varchar(30) ); // 一个字段上可以加多个约束
等价于:create table student (id number primary key ,name varchar2(30) not null, address varchar(30) ,unique( name ) ); // 一个字段上可以加多个约束
查看表约束:
Select * from user_constraints where table_name=’parent’;
Constraint_type: c: check p: primary key r: foreign key u: unique