Linux 环境下Oracle安装与调试(六)之约束(主键,外键,CHECK,非空) 和 索引

1、约束

===============================================


为什么需要主键 - 主键的唯一性(数据不能出现重复) , 基本上每一张表都会有这个主键


创建一个学生表:

CREATE TABLE xue_sheng( id integer, xing_ming varchar(25),xing_bie number, fen_shu number, b_id integer);


INSERT INTO xue_sheng VALUES(1,'ZhanSan',1,80,1);


INSERT INTO xue_sheng VALUES(2,'LiSi',1,90,2);


INSERT INTO xue_sheng VALUES(3,'ZhanHong',0,75,2);


INSERT INTO xue_sheng VALUES(4,'ChenXiaoMing',1,85,1);


如果不设置学号id 这个唯一性, 那么就会出现学号重复的现象, 2个同学拥有相同的学号。

wKiom1NfpTTDSojsAAAZ32pbLi4688.png

如果不设置学号id 这个唯一性, 那么就会出现学号重复的现象, 2个同学拥有相同的学号。

INSERT INTO xue_sheng VALUES(1,'test',0,75,1);

wKioL1NfpZvycEkiAAAn2t0NRO0952.png

把 id 这个字段设置为主键:

ALTER TABLE xue_sheng ADD CONSTRAINT pk_xue_sheng PRIMARY KEY( id );

这样你再插入重复的id ,就会出错

#设置主键

wKioL1Nfp1-RcBlOAAAwEx2wLQc725.png

#删除主键

SQL> alter table xue_sheng drop constraint pk_xue_sheng;

Table altered.


#非空

==================================================

修改表中的 xing_ming 字段不能为空


INSERT INTO xue_sheng VALUES(5,'',0,75,1);

wKiom1NfrbWT2R0tAAAm88Nx5XE999.png

增加姓名不为空约束条件

wKioL1NfrY6B8BvsAABKsqSEHUM648.png


#check约束

性别只能是1或者0

   ##创建约束

SQL> ALTER TABLE xue_sheng ADD CONSTRAINT ck_xue_sheng CHECK(xing_bie=1 or xing_bie=0);


Table altered.

   ##删除约束

SQL>  alter table xue_sheng drop constraint ck_xue_sheng;


Table altered.

wKiom1Nfs2qi7ex4AAA0tpwzdOk758.png


#外键约束:一张表的外键就是另一张表的主键

================================================================

外键的例子演示 :

创建一个班级表:

CREATE TABLE ban_ji( id integer , ban_ji varchar(25));

INSERT INTO ban_ji VALUES(1,'1-(1)');

INSERT INTO ban_ji VALUES(2,'1-(2)');

----------------------------------------------

wKiom1NftSDQ5WijAAAmxjtNkXY392.png

#在没有外键约束前,可以对xuesheng表进行插入操作;

wKiom1NfthuBN6skAAAnNgh8USo628.png

现在在学生表插入数据,如果不对应 班级表的id也是可以插入的,不过这是没有意义的记录

#得先给banji创建主键ID,然后再给xue_sheng表创建外键,一旦创建了这个外键, 就不能在学生表随意插入数据,要参照班级表的id 。

wKioL1Nft0XRagfGAAA53FcnJGg386.png

还有班级表的id 也不能随便修改或者删除, 因为如果修改了,学生表就没有数据参照了。

wKioL1NfuEmzYYDiAAAaqhhM9Gs971.png



2、索引

当数据量非常大的时候, 查询速度明显提高,对数据的一个有序排列

其实创建主键的时候已经对主键做了一个唯一索引

还有一个要注意的, 如果你有大量数据要插入表中, 先把数据插入数据表, 再建立索引,

否则会导致插入数据慢。

wKioL1NfugDT-8CvAAA10wPeo0A243.png


#位图索引

对于唯一值很少的字段, 可以建立 位图索引, 例如 性别 只有 男,女

SQL> create bitmap index bit_xb on xue_sheng(xing_bie);

Index created.


你可能感兴趣的:(linux,索引,和,check,外键,非空))