oracle设置约束条件_oracle表约束的操作语法和实例

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

--oracl 数据库表约束操作的语法与实例

--操作素材学生表如下:

create table student

(

stuno CHAR(11) ,

stuname VARCHAR2(50),

stuage NUMBER(3),

stusex CHAR(2),

stubir DATE,

stuid VARCHAR2(18),

stucid NUMBER(3)

)

SELECT * FROM student

--1.建表是直接添加非空约束

--CREATE TABLE 表名(

-- 字段名称 字段类型 NOT NULL)

--修改添加非空约束

--这个是最特殊的,不用关键字constrint

--实例:

--2.添加非空约束语法

--ALTER TABLE 表名

--MODIFY 列名 NOT NULL

--添加非空约束实例:

ALTER TABLE student

MODIFY stuno NOT NULL

--如果列值唯一,可以添加唯一约束。

--比如身份证号,学号,银行卡号等。

--添加唯一约束的语法:

--ALTER TABLE 表名

-- ADD CONSTRAINT 约束名

-- UNIQUE (列名)

--添加唯一约束的实例:

ALTER TABLE student

ADD CONSTRAINT uq_stuid

UNIQUE(stuid)

--如果一个字段即要求唯一又不能为null,

--可使用主键约束,一般都是第一列

--添加主键约束语法:

--ALTER TABLE 表名

--ADD CONSTRAINT 约束名 PRIMARY KEY(列名)

--添加主键约束实例:

ALTER TABLE student

ADD CONSTRAINT pk_stuno

PRIMARY KEY(stuno)

--添加检查约束,相当于条件约束,

--一般要符合常理与设定条件

--添加检查约束语法:

--ALTER TABLE 表名

-- ADD CONSTRAINT 约束名

--CHECK(具体的约束说明)

--添加检查约束实例1:

--性别只能是男或女或者女妖

--这个时候突然出现了问题,

--因为建表的时候sex的数据类型为char(2)

--两个字节,只能储存一个字符,女妖存不进去

--所以改为varchar2(10)

ALTER TABLE student

ADD CONSTRAINT ck_sex

CHECK(STUSEX IN('男','女','女妖'))

--添加检查约束实例2:

--年龄在15-40之间

ALTER TABLE student

ADD CONSTRAINT ck_age

CHECK(STUAGE>=15 AND STUAGE<=40)

--或者

ALTER TABLE student

ADD CONSTRAINT ck_age2

CHECK(stuage BETWEEN 20 AND 50)

--这个时候发现同列的两个检查约束都添加进去了

--最好删除一个约束条件

--删除约束语法:

--ALTER TABLE 表名

-- DROP CONSTRAINT 约束名

--删除约束实例:

ALTER TABLE student

DROP CONSTRAINT ck_age2

--添加检查约束实例3:

--省份证号码必须在18位

ALTER TABLE student

ADD CONSTRAINT ck_stuid

CHECK(LENGTH(stuid)=18)

--出现提示,违反检查约束条件。

--stuid建过一个唯一约束条件,

--但不是检查约束啊?

--问题在哪里?

--于是只好在stucid建立约束了

ALTER TABLE student

ADD CONSTRAINT ck_stucid

CHECK(LENGTH(stucid)=18)

--stucid的数据类型是number(3)

--所以必须修改

ALTER TABLE student

MODIFY stucid NUMBER(20)

--这个时候18位数字才能提交

--留待上面那个问题,请教大家

ALTER TABLE student

DROP CONSTRAINT ck_stucid

----外键约束

--为了验证外键约束,创建第二份有关的表

CREATE TABLE myclass

(mid NUMBER(4),

mname VARCHAR2(20))

--并添加一个相关的列

ALTER TABLE student

ADD classNo NUMBER(4)

--student学生表和班级表

--一个班级有多个学生

--所以班级对学生是一对多的关系。

--学生表示子表,他的外键是班级的某列。

--学生(子表) 班级表(父表,被引用的表)

--被引用的表的列必须是主键

--子表和父表中的列的数据类型必须一致

--在父表中添加一些数据

SELECT * FROM myclass

INSERT INTO myclass(mid,mname)

VALUES(1001,'JAVA班')

INSERT INTO myclass(mid,mname)

VALUES(1002,'php班')

INSERT INTO myclass(mid,mname)

VALUES(1003,'pytion班')

--添加外键约束语法:

--ALTER TABLE 子表名

--ADD CONSTRAINT 约束名 FOREIGN KEY(子表的列名)

--REFERENCES 父表名(父表的列名)

--添加外键约束实例:

ALTER TABLE student

ADD CONSTRAINT fk_classNo

FOREIGN KEY(classno)

REFERENCES myCLASS(mid);

--唯一关键字或主键不匹配

--查找原因,原来是主表必须设置主键

ALTER TABLE myclass

ADD CONSTRAINT pk_mid

PRIMARY KEY(mid)

--这个时候在查看学生表的班级列,

--外键约束小三角就出现了

AAffA0nNPuCLAAAAAElFTkSuQmCC

--不过这样可能不符合约束条件的数据就被添加了进来,

--导致不安全与数据表奔溃。所以要慎用

--至此表的约束全部完成。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值