
语句格式:ALTER TABLE 表名ADD CONSTRAINT 约束名 约束类型(字段名)
上面语句格式中,“表名”指定要添加约束的是哪个表,“ADD CONSTRAINT”表示要在表中增加约束,其后的“约束名”是拟增加约束的名字,“约束类型”是拟增加约束的类型,其后括号里的“字段名”是指约束是在哪一个字段上建立起来的。
下面截图中的“ALTER TABLE”语句在t_dept表中新增加了一个约束名为unidept的约束,它是在对字段deptno进行的唯一性约束。
数据库约束是为了保证数据的完整性而实现的一套机制,它具体的根据各个不同的数据库的实现而有不同的工具。\x0d\x0a一般来说有以下几种实现方式:\x0d\x0a1、检查约束:\x0d\x0a通过在定义数据库表里,在字段级或者是在表级加入的检查约束,使其满足特定的要求。\x0d\x0a比如以下的表定义:\x0d\x0aCRATE TABLE student(\x0d\x0aid serial,\x0d\x0aname varchar(10),\x0d\x0ascrore integer CHECK (scrore >0))\x0d\x0a定义分数不能小于0。\x0d\x0a也可以在表级定义:\x0d\x0aCHECK (字段1 秘字段2之间的关系)\x0d\x0a2、非空约束:\x0d\x0a这个大家应该很熟悉了。直接在字段后面加上:NOT NULL。\x0d\x0a3、唯一约束:\x0d\x0a定义一个唯一约束但是它并不包括NULL值。直接在字段定义后加入UNIQUE即可定义一个唯一约束。\x0d\x0a4、主键约束:\x0d\x0aSQL 92建议在建立一个表时定义一个主键:它其实就是:唯一约束+非空约束。\x0d\x0a5、外键:\x0d\x0a所有约束里数这个约束最有意思了:比如说有这样一件事,你需要做一个学生查询的网页。那么为了方便,你将建立三个数据表:\x0d\x0a一个是学生情况表:\x0d\x0aCREATE TABLE student(\x0d\x0aid serial primary ke,\x0d\x0aname varchar(10),\x0d\x0a.......\x0d\x0a)\x0d\x0a一个表是记录所开的课程\x0d\x0aCREATE TABLE class(\x0d\x0aclass_id varchar(5) primary key,\x0d\x0adescribe varchar(20)\x0d\x0a.....\x0d\x0a)\x0d\x0a一个表是记录学生成绩的表:\x0d\x0aCREATE TABLE score(\x0d\x0aid integer references student,\x0d\x0aclass_id varchar(5) references class,\x0d\x0ascore integer CHECK (score >0)\x0d\x0a)\x0d\x0a\x0d\x0a这个时候你会发现以下几件事:\x0d\x0a如果你在成绩表里输入不存在的学生和课程,数据系统将拒绝。如果你要删除一个学生,但是他已经在成绩表里有记录,数据库将拒绝删除这个学生的记录。\x0d\x0a那么我们现在来看,前面一个对我们是有利的,因为谁都不想一个学生无缘无故的有了一个成绩的记录,但是在删除的时候就会比较麻烦了,有时候我的确是想删除这个学生。那么我总不能在应用程序里照顾得那么周到吧。不要紧我们在定义数据表的时候只在外键那一样加入以下控制就OK了,我们来重新定义数据表 score\x0d\x0aCREATE TABLE score(\x0d\x0aid integer references student ON UPDATE CASCADE ON DELETE CASCADE, //我们希望在学生记录改变时自动改变分数记录,在删除学生级联删除分数记录\x0d\x0aclass_id varchar(5) references class ON UPDATE CASCADE ON DELETE\x0d\x0aRESTRICT, //我们希望在改变课程时自动改变分数记录表里关于课程的引用,但是不希望删除课程时级联删除分数。\x0d\x0a.....\x0d\x0a)\x0d\x0a\x0d\x0a这样我们就可以很好做到数据完整了。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)