1、空值与非空约束
NULL:字段值可以为空

NOT NULL:字段值禁止为空,NOT NUL 
 eg: 
 CREATE TABLE tb2( 
 username VARCHAR(20) NOT NULL, 
 age TINYINT UNSIGNED NULL 
 );


2、自动编号(保证某一条记录的唯一性,此记录不能够重复)
为某个字段添加AUTO_INCREMENT属性,必须与主键组合使用(反之不一定),默认起始值为1,每次增量为1
3、主键PRIMARY KEY:
主键约束:每张数据表只能存在一个主键,主键保证记录的唯一性、主键自动为NOT NULL

eg: 
 CREATE TABLE tb3( 
 id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
 username VARCHAR(20) NOT NULL 
 );


然后去查看数据表结构
4、唯一约束UNIQUE KEY
唯一约束可以保证记录的唯一性、唯一约束的字段可以为空值(NULL),每张数据表可以存在多个唯一约束
eg:既有主键约束又有唯一约束的例子

CREATE TABLE tb5( 
 id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
 username VARCHAR(20) NOT NULL UNIQUE KEY, 
 age TINYINT UNSIGNED 
 ); 
 SHOW COLUMNS FROM tb5;给其中写上几条记录: 
 INSERT tb5(username,age) VALUES(‘TOM’,22); 
 INSERT tb5(username,age) VALUES(‘TOM’,22);//系统提示错误


5、默认约束 DEFAULT

当插入记录时,如没有明确字段赋值,则自动赋予默认值 
 //123表示性别 3表示保密 
 CREATE TABLE tb6( 
 id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
 username VARCHAR(20) NOT NULL UNIQUE KEY, 
 sex ENUM(‘1’,’2’,’3’) DEFAULT ‘3’ 
 );


6、外键约束 FOREIGN KEY
1)外键约束的要求

*父表和子表使用相同的存储引擎,而且禁止使用临时表//有外键的表称之为子表,而子表所参照的表称之为父表 
 *数据表的存储引擎只能是INNODB 
 *外键列和参照列必须具有相似的数据类型,其中数字的长度或是否有符号必须相同 字符的长度则可以不同 
 *外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL不会自动创建索引,主键在创建的同时会自动创建索引,如果参照列不存在索引的话,MySQL会自动创建索引. 
 eg: 
 *打开数据库:USE test; 
 *创建第一张表:省份表: 
 CREATE TABLE province( 
 id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, 
 pname VARCHAR(20) NOT NULL 
 ); 
 *是否采用默认引擎,可以查看原来的创建命令 
 SHOW CREATE TABLE province; 
 *创建第二张数据表:用户表CREATE TABLE users( 
 id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, 
 username VARCHAR(20) NOT NULL, 
 //pid是我们的外键,参照父表中的id字段 
 pid BIGINT,//数据类型不一致,和id中的数据类型不一样,出现错误 
 FOREIGN KEY(pid) PREFERENCES province(id) 
 );CREATE TABLE users( 
 id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, 
 username VARCHAR(20) NOT NULL, 
 //pid是我们的外键,参照父表中的id字段 
 pid SMALLINT,//但是默认为有符号位,出现错误 
 FOREIGN KEY(pid) PREFERENCES province(id) 
 );CREATE TABLE users1( 
 id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, 
 username VARCHAR(20) NOT NULL, 
 //pid是我们的外键列,参照父表中的id(参照列)字段,显示正确 
 pid SMALLINT UNSIGNED, 
 FOREIGN KEY(pid) PREFERENCES province(id) 
 ); 
 *显示索引,看参照列是否创建了索引,此处的参照咧是主键,所以创建了索引 
 SHOW INDEXES FROM province[\G];


2)外键约束的参照操作
*CASCADE:从父表删除或更新且自动删除或更新子表中相应的匹配的行
*SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL),每张数据表可以存在多个唯一约束
*RESTRICT:拒绝对父表的删除或更新操作
*NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同==拒绝对父表的删除或更新操作