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 table XSB (
id char(6) not null,
name varchar(8) not null,
birthday date,
sex bit not null default 1,
comment text,
PRIMARY key (id)
);
课程表KCB
create table KCB (
kid char(6) not null,
kname varchar(35) not null,
startdate date,
credit smallint not null,
period smallint default 60,
PRIMARY key (kid)
);
选课表XKB
create table XCB (
xid char(6) not null primary key,
sid char(6) not null,
kid char(6) not null,
grade tinyint default 0,
foreign key (sid) references XSB(id),--sid是外键,参照XSB的id字段
foreign key (kid) references KCB(kid) --kid是外键,参照KCB的kid字段
); mysql> show create table XCB\G
*************************** 1. row ***************************
Table: XCB
Create Table: CREATE TABLE `XCB` (
`xid` char(6) NOT NULL,
`sid` char(6) NOT NULL,
`kid` char(6) NOT NULL,
`grade` tinyint(4) DEFAULT '',
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;
MYSQL复习笔记8-数据完整性的更多相关文章
- mysql复习笔记
阅读目录 1.什么是SQL语句2.使用sql语句创建数据库和表3.创建数据表4.数据完整性约束5.四中基本字符类型说明6.SQL基本语句7.类型转换函数8.日期函数9.数学函数10.字符串函数11.联 ...
- MySQL 复习笔记
本文内容 SQL 语句 创建数据库 创建数据表 数据完整性约束 四种基本字符类型说明 SQL 基本语句 类型转换函数 日期函数 数学函数 字符串函数 合并结果集 union CASE 函数用法 IF ...
- MYSQL复习笔记13-触发器trigger
Date: 20140305Auth: Jin 一.概念1.基本概念触发器是一个被指定关联到一个表的数据对象,触发器是不需要调用的,当对一个表的特别事件出现时,它就被激活.触发器的代码也是由SQL语句 ...
- MYSQL复习笔记12-视图
Date: 20140223Auth: Jin参考:http://blog.sina.com.cn/s/blog_436732df0100e768.html 一.介绍1.概念视图是从一个或几个基本表( ...
- MYSQL复习笔记10-连接
Date: 20140219Auth: Jin 一.介绍连接是二元运算,可以对两个表或多个表进行查询.T-SQL中分两大类,一是符合SQL标准的连接谓词表示形式,二是T-SQL扩展的使用关键字JOIN ...
- MYSQL复习笔记9-存储过程
date: 20140208auth: Jin参考引用:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html mysql存储过程详解一.基本介绍1. ...
- MYSQL复习笔记7-索引
Date: 20140207Auth: Jin 索引是根据表中一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表. 索引的主要作用 快速存取数据 保证数据记录的唯一性 实现表与表之间的参照完整 ...
- MYSQL复习笔记6-字符集
Date: 20100101 Auth: Jin 参考http://blog.sina.com.cn/s/blog_9707fac301016wxm.html 一.字符集介绍 计算机只处理二进制代码 ...
- MYSQL复习笔记5-select-from-where子句
Date: 20140125Auth: Jin参考:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#select一.select子句主要定 ...
随机推荐
- ubuntu下定时弹窗记录工作日志
背景 记录工作日志,是一个很好的习惯,但不容易坚持,本来打算每天记录,但经常拖延,拖着拖着,有一些事情就忘记了. 等到写周报或月报的时候,才会开始翻邮件,聊天记录,各个仓库的提交log等,回忆都干了些 ...
- ZOJ 3537 Cake 求凸包 区间DP
题意:给出一些点表示多边形顶点的位置(如果多边形是凹多边形就不能切),切多边形时每次只能在顶点和顶点间切,每切一次都有相应的代价.现在已经给出计算代价的公式,问把多边形切成最多个不相交三角形的最小代价 ...
- centos_7.1.1503_src_5
http://vault.centos.org/7.1.1503/os/Source/SPackages/ minicom-2.6.2-5.el7.src.rpm 05-Jul-2014 13:50 ...
- 解决TextView多行滑动与NestedScrollView等,滑动冲突,我的解决方案
1.首先要明白,什么时候回TextView处理滑动,什么时候不处理滑动 1.1往上滑动,到达文本底部就不要再处理了,如果往上滑动不在底部则继续TextView滑动 1.2往下滑动,到达文本顶部就不要再 ...
- 【学习笔记】动态树Link-Cut-Tree
这是两个月前写的,看能不能搬运过来…… 动态树是一类维护森林连通性的问题(已纠正,感谢ZQC巨佬),目前最(wo)常(zhi)见(hui)的动态树就是LCT(Link-Cut-Tree),然而LCT似 ...
- python初学-列表
列表操作: 列表一般需要先调用方法后才能打印,不能直接打印调用的方法 因为列表可以修改 一般不会返回一个新列表 # 列表 # new_names = ['lzc','lzc2','lzc3'] # 下 ...
- P1466 集合 Subset Sums(01背包求填充方案数)
题目链接:https://www.luogu.org/problem/show?pid=1466 题目大意:对于从1到N (1 <= N <= 39) 的连续整数集合,能划分成两个子集合, ...
- [译]怎样用HTML5 Canvas制作一个简单的游戏
这是我翻译自LostDecadeGames主页的一篇文章,原文地址:How To Make A Simple HTML5 Canvas Game. 下面是正文: 自从我制作了一些HTML5游戏(例如C ...
- react todolist
import React, {Component} from 'react'; class AddItem extends React.Component { constructor(props) { ...
- Java学习笔记(十一)——通过JDBC操作mysql数据库
[前面的话] 时间总是好快,每次都感觉还没有怎么好好去过,对于好多事情,希望自己可以做的更多一点.心情能够好一点,平淡一点就行了. 学习过程中的知识点总结,基础知识,选择阅读. [JDBC定义] 定义 ...