一、约束

分类一:

约束主要是针对字段,即列或者叫columns进行,主要有以下几种类型
1.非空约束NOT NULL ,限制该列内容不能为空值,必须输入
2.主键约束PRIMARY KEY,一个TABLE中只能存在一个主键约束,保证记录的唯一性,可以配合AUTO_INCREMENT使用,自动增1
3.唯一约束UNIQUE KEY,一个TABLE中可以针对列设置多个唯一约束,目的是使得该列的内容不重复,该列值可以为NULL
4.默认约束 DEFAULT,对一列(字段)设置默认值,如果不给其设置自定义值,则其显示默认值
5.外键约束FOREIGN KEy
对一个字段进行约束成为列级约束,对两个及以上字段进行约束称为表级约束

外键约束的要求:
1.父表和子表必须使用相同的存储引擎,不能使用临时表
2.数据存储引擎必须为INNODB类型
3.外键列和参照列必须具有相似的数据类型。其中数字的长度或者是否有符号位必须相同,字符的长度则可以不同。
4.外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL则自动创建索引
外键列创建在子表中,参照列创建在父表中
示例:

CREATE TABLE table_name1( 
 id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
 name VARCHAR(20) NOT NULL 
 ) 
 CREATE TABLE table_name2( 
 id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
 username VARCHAR(20) NOT NULL, 
 sex ENUM(‘1’,’2’,’3’) DEFAULT ‘3’,)//表示当sex没有赋值时,默认值为3 
 pid SMALLINT UNSIGNED, 
 FOREIGN KEY (pid) REFERENCES table_name1(id) /* 外键 pid 参照 table_name1中的 id 字段 */

分类二:

表级约束和列级约束
对于一个列所创建的约束,称之为列级约束,而对于两个或两个以上的列所创建的约束,我们称之为表级约束。

列级约束在使用的时候,既可以在列定义的时候声明,也可以在列定义以后声明
表级的约束只能在列定义以后来声明

二、数据完整性约束

1.定义完整性约束

关系模型中有三类完整性约束:
(1)实体完整性
在关系数据库系统中,一个关系通常对应一个表,实体完整性是指在实际存储数据库的表中,主键不能取空值null。在mysql中,实体完整性是通过主键约束和候选键约束来实现的。
(2)参照完整性
定义外键和主键之间的引用规则 ,它是对关系间引用数据的一种限制。
(3)用户定义的完整性
mysql支持几种用户自定义的完整性约束,分别是非空约束、check约束和触发器。

2.命名完整性约束

在各种完整性约束的定义说明之前加上关键字constraint([kənˈstrent]约束的意思)和该约束的名字。如:

… 
 constraint primary_key_id primary key(id), 
 …

3.更新完整性约束

三、表维护语句

1.analyze table语句

2.check table语句

3.chechsum table语句

4.optimize table语句

5.repair table语句