MySQL数据完整性试题陕西省_MYSQL复习笔记8-数据完整性

Date: 20140207

Auth: Jin

一、数据完整性的分类

数据完整性是指数据库中数据在逻辑上的一致性和准确性。包括三种

1.实体完整性

又称行的完成性,要求表中有一个主键,其值不能为空且唯一地标示对应的记录。

可通过索引,UNIQUE约束,PRIMARY KEY约束或AUTO_INCREMENT(SQL SERVER为IDENTIFY)属性实现。

(1)一个表只能创建一个PRIMARY KEY约束,但一个表中可以根据需要对表中不同的列创建若干个UNIQUE约束。

(2)PRIMARY KEY字段的值不允许为NULL,而UNIQUE字段的值可以取NULL。

2.域完整性

称为列完整性,指给定列输入的有效性。

实现方法有

限制类型:通过数据类型

格式:通过check约束和规则

可能的取值范围:通过check约束,DEFAULT,NOT NULL定义和规则。

create table kdb(

classid int(6) NOT NULL,

classname char(8) NOT NULL,

credit tinyint CHECK(credit>=0 AND credit<=60)

);

注:SQL SERVER的例子 MYSQL中试试看

mysql> show create table kdb\G

*************************** 1. row ***************************

Table: kdb

Create Table: CREATE TABLE `kdb` (

`classid` int(6) NOT NULL,

`classname` char(8) NOT NULL,

`credit` tinyint(4) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8

mysql> insert into kdb values (1,'classone',55);

Query OK, 1 row affected (0.01 sec)

mysql> insert into kdb values (1,'classone',90);

Query OK, 1 row affected (0.04 sec)

mysql> select * from kdb;

+---------+-----------+--------+

| classid | classname | credit |

+---------+-----------+--------+

| 1 | classone | 55 |

| 1 | classone | 90 |

+---------+-----------+--------+

2 rows in set (0.00 sec)

MYSQL中check约束没用的,对于所有的存储引擎,CHECK子句会被分析,但是会被忽略。

mysql5.1手册“CREATE TABLE语法”。1.8.5节,“MySQL与标准SQL的差别”

接受这些子句但又忽略子句的原因是为了提高兼容性,以便更容易地从其它SQL服务器中导入代码,并运行应用程序。

3.参照完整性

又称为参照完整性,保证主表中的数据与从表(被参考表)中数据一致性。

SQL SERVER中通过定义外键与主键之间或者外键与唯一键之间的对应关系来实现。

MYSQL 目前只有InnoDB引擎类型支持外键约束

如果定义了两个表之间的参照完整性,则要求:

1)从表不能引用不存的健值

2)如果主表的健值更改了,那么在整个数据库中,对从表中该键值的所有引用要进行一直更改。

3)如果主表中没有关联的记录,则不能将记录添加到从表

如果要删除主表中某一记录,则应该删除从表与该记录匹配的相关记录。

学生基本信息表XSB

create tableXSB (

idchar(6) not null,

namevarchar(8) not null,

birthday date,

sexbit not null default 1,

commenttext,PRIMARY key(id)

);

课程表KCB

create tableKCB (

kidchar(6) not null,

knamevarchar(35) not null,

startdate date,

creditsmallint not null,

periodsmallint default 60,PRIMARY key(kid)

);

选课表XKB

create tableXCB (

xidchar(6) not null primary key,

sidchar(6) not null,

kidchar(6) not null,

gradetinyint default 0,foreign key (sid) references XSB(id),--sid是外键,参照XSB的id字段

foreign key (kid) references KCB(kid) --kid是外键,参照KCB的kid字段

);

mysql> show create tableXCB\G*************************** 1. row ***************************

Table: XCBCreate Table: CREATE TABLE`XCB` (

`xid`char(6) NOT NULL,

`sid`char(6) NOT NULL,

`kid`char(6) NOT NULL,

`grade`tinyint(4) DEFAULT '0',PRIMARY KEY(`xid`),KEY`sid` (`sid`),KEY`kid` (`kid`),CONSTRAINT `XCB_ibfk_1` FOREIGN KEY (`sid`) REFERENCES`XSB` (`id`),CONSTRAINT `XCB_ibfk_2` FOREIGN KEY (`kid`) REFERENCES`KCB` (`kid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值