--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)
--这个时候在查看学生表的班级列,
--外键约束小三角就出现了
--不过这样可能不符合约束条件的数据就被添加了进来,
--导致不安全与数据表奔溃。所以要慎用
--至此表的约束全部完成。