mysql中的默认约束_数据库中默认约束的作用

匿名用户

1级

2016-04-29 回答

数据库约束是为了保证数据的完整性而实现的一套机制,它具体的根据各个不同的数据库的实现而有不同的工具。

一般来说有以下几种实现方式:

1、检查约束:

通过在定义数据库表里,在字段级或者是在表级加入的检查约束,使其满足特定的要求。

比如以下的表定义:

CRATE TABLE student(

id serial,

name varchar(10),

scrore integer CHECK (scrore > 0));

定义分数不能小于0。

也可以在表级定义:

CHECK (字段1 秘字段2之间的关系)

2、非空约束:

这个大家应该很熟悉了。直接在字段后面加上:NOT NULL。

3、唯一约束:

定义一个唯一约束但是它并不包括NULL值。直接在字段定义后加入UNIQUE即可定义一个唯一约束。

4、主键约束:

SQL 92建议在建立一个表时定义一个主键:它其实就是:唯一约束+非空约束。

5、外键:

所有约束里数这个约束最有意思了:比如说有这样一件事,你需要做一个学生查询的网页。那么为了方便,你将建立三个数据表:

一个是学生情况表:

CREATE TABLE student(

id serial primary ke,

name varchar(10),

.......

);

一个表是记录所开的课程

CREATE TABLE class(

class_id varchar(5) primary key,

describe varchar(20)

.....

);

一个表是记录学生成绩的表:

CREATE TABLE score(

id integer references student,

class_id varchar(5) references class,

score integer CHECK (score > 0)

);

这个时候你会发现以下几件事:

如果你在成绩表里输入不存在的学生和课程,数据系统将拒绝。如果你要删除一个学生,但是他已经在成绩表里有记录,数据库将拒绝删除这个学生的记录。

那么我们现在来看,前面一个对我们是有利的,因为谁都不想一个学生无缘无故的有了一个成绩的记录,但是在删除的时候就会比较麻烦了,有时候我的确是想删除这个学生。那么我总不能在应用程序里照顾得那么周到吧。不要紧我们在定义数据表的时候只在外键那一样加入以下控制就OK了,我们来重新定义数据表 score

CREATE TABLE score(

id integer references student ON UPDATE CASCADE ON DELETE CASCADE, //我们希望在学生记录改变时自动改变分数记录,在删除学生级联删除分数记录

class_id varchar(5) references class ON UPDATE CASCADE ON DELETE

RESTRICT, //我们希望在改变课程时自动改变分数记录表里关于课程的引用,但是不希望删除课程时级联删除分数。

.....

);

这样我们就可以很好做到数据完整了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值