--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 studentMODIFY stuno NOT NULL--如果列值唯一,可以添加唯一约束。--比如身份证号,学号,银行卡号等。--添加唯一约束的语法:--ALTER TABLE 表名 -- ADD CONSTRAINT 约束名 -- UNIQUE (列名)--添加唯一约束的实例:ALTER TABLE student ADD CONSTRAINT uq_stuidUNIQUE(stuid)--如果一个字段即要求唯一又不能为null,--可使用主键约束,一般都是第一列--添加主键约束语法:--ALTER TABLE 表名 --ADD CONSTRAINT 约束名 PRIMARY KEY(列名)--添加主键约束实例:ALTER TABLE studentADD CONSTRAINT pk_stunoPRIMARY KEY(stuno)--添加检查约束,相当于条件约束,--一般要符合常理与设定条件--添加检查约束语法:--ALTER TABLE 表名 -- ADD CONSTRAINT 约束名 --CHECK(具体的约束说明)--添加检查约束实例1:--性别只能是男或女或者女妖--这个时候突然出现了问题,--因为建表的时候sex的数据类型为char(2)--两个字节,只能储存一个字符,女妖存不进去--所以改为varchar2(10)ALTER TABLE studentADD CONSTRAINT ck_sexCHECK(STUSEX IN('男','女','女妖'))--添加检查约束实例2:--年龄在15-40之间ALTER TABLE student ADD CONSTRAINT ck_ageCHECK(STUAGE>=15 AND STUAGE<=40)--或者ALTER TABLE studentADD CONSTRAINT ck_age2CHECK(stuage BETWEEN 20 AND 50)--这个时候发现同列的两个检查约束都添加进去了--最好删除一个约束条件--删除约束语法:--ALTER TABLE 表名 -- DROP CONSTRAINT 约束名 --删除约束实例:ALTER TABLE student DROP CONSTRAINT ck_age2--添加检查约束实例3:--省份证号码必须在18位ALTER TABLE student ADD CONSTRAINT ck_stuidCHECK(LENGTH(stuid)=18)--出现提示,违反检查约束条件。--stuid建过一个唯一约束条件,--但不是检查约束啊?--问题在哪里?--于是只好在stucid建立约束了ALTER TABLE student ADD CONSTRAINT ck_stucidCHECK(LENGTH(stucid)=18)--stucid的数据类型是number(3)--所以必须修改ALTER TABLE studentMODIFY stucid NUMBER(20)--这个时候18位数字才能提交--留待上面那个问题,请教大家ALTER TABLE student DROP CONSTRAINT ck_stucid----外键约束--为了验证外键约束,创建第二份有关的表CREATE TABLE myclass(mid NUMBER(4),mname VARCHAR2(20))--并添加一个相关的列ALTER TABLE studentADD classNo NUMBER(4)--student学生表和班级表--一个班级有多个学生--所以班级对学生是一对多的关系。--学生表示子表,他的外键是班级的某列。--学生(子表) 班级表(父表,被引用的表)--被引用的表的列必须是主键--子表和父表中的列的数据类型必须一致--在父表中添加一些数据SELECT * FROM myclassINSERT 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 studentADD CONSTRAINT fk_classNoFOREIGN KEY(classno)REFERENCES myCLASS(mid);--唯一关键字或主键不匹配--查找原因,原来是主表必须设置主键ALTER TABLE myclassADD CONSTRAINT pk_midPRIMARY KEY(mid)--这个时候在查看学生表的班级列,--外键约束小三角就出现了
--不过这样可能不符合约束条件的数据就被添加了进来,
--导致不安全与数据表奔溃。所以要慎用
--至此表的约束全部完成。
本文为头条号作者发布,不代表今日头条立场。