这是有声音的视频, 请检查耳机或者音箱 声音输出设备

教程使用 Oracle 11g Release 2 版本

内容:数据完整性 - 创建约束(主键,外键,CHECK,非空) 和 索引的使用

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

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

创建一个学生表:
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个同学拥有相同的学号。

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

select * from xue_sheng;

delete from xue_sheng where xing_ming='test';

------------------
把 id 这个字段设置为主键:
ALTER TABLE xue_sheng ADD CONSTRAINT pk_xue_sheng PRIMARY KEY( id );

这样你再插入重复的id ,就会出错
INSERT INTO xue_sheng VALUES(1,'test',0,75,1);
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.PK_ID) violated

删除主键:
ALTER TABLE xue_sheng DROP CONSTRAINT pk_xue_sheng;

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

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

delete from xue_sheng where id=5;

alter table xue_sheng modify xing_ming not null;

SQL> desc xue_sheng;
Name Null? Type
----------------------- -------- ------------
XING_MING NOT NULL VARCHAR2(25)

=====================================================
CHECK 约束, 指定字段的值的内容, 例如 学生性别只能 是1或者0

insert into xue_sheng values(6,'dd',3,50,1);

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

ERROR at line 1:
ORA-02293: cannot validate (SCOTT.CK_XUE_SHENG) - check constraint violated

SQL> delete from xue_sheng where id=6;

创建一个 CHECK 约束, xing_bie 只能是 1 或者 0
SQL> ALTER TABLE xue_sheng ADD CONSTRAINT ck_xue_sheng CHECK(xing_bie IN(1,0));

删除约束
SQL> alter table xue_sheng drop CONSTRAINT ck_xue_sheng;

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

外键的例子演示 :

创建一个班级表:
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)');

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

insert into xue_sheng values(5,'dd',0,50,3);

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

ALTER TABLE xue_sheng ADD CONSTRAINT fk_xue_sheng FOREIGN KEY(b_id) REFERENCES ban_ji(id);
ERROR at line 1:
ORA-02270: no matching unique or primary key for this column-list

错误提示要 班级表的id必须是主键或者具有唯一值

SQL> ALTER TABLE ban_ji ADD CONSTRAINT pk_ban_ji PRIMARY KEY( id );
Table altered.

SQL> ALTER TABLE xue_sheng ADD CONSTRAINT fk_xue_sheng FOREIGN KEY(b_id) REFERENCES ban_ji(id);

Table altered.

一旦创建了这个外键, 就不能在学生表随意插入数据,要参照班级表的id 。
insert into xue_sheng values(5,'dd',0,50,3);

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

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

索引:

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

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

还有一个要注意的, 如果你有大量数据要插入表中, 先把数据插入数据表, 再建立索引,
否则会导致插入数据慢。

SQL> create index xs_xm_index on xue_sheng(xing_ming);

Index created.

SQL> select * from xue_sheng where xing_ming='ZhanSan';

SQL> select * from xue_sheng where xing_ming like '%a%';

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

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

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

Index created.

视频就到这里结束了, 总结一些: 主要是学习了 数据表的完整性,这个完整性需要靠约束来实现。

谢谢观看。88


“oracle_11gR2_13 数据完整性 - 创建约束(主键,外键,CHECK,非空) 和 索引的使用”没有评论

有任何疑问或建议,可以给作者留言:



公告:

  • 2010年5月之前的视频是文字解说演示,没有声音。
  • 2010年5月以后的视频全部带声音。