一.约束的种类
主键约束,
外键约束,
非空约束,
唯一键约束,
默认约束
二.功能及使用
1.主键约束
又称主码,是表中一列或多列的组合.要求键的数据唯一,并且不允许为空.主键与记录一一对应.可加快查询速度.分为单字段主键和多字段主键.
1.1单字段主键
(1)定义时候指定,由一个字段组成的主键,语法规则如下:
字段名 数据类型 PRIMARY KEY [默认值]
如
CREATE TABLE `test_man` (
`id` int(11) PRIMARY KEY ,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`sex` char(255) DEFAULT NULL
);
(2)定义完后指定主键
[CONSTRAINT <约束名>] PRIMARY KEY [字段名]
如
CREATE TABLE `test_man` (
`id` int(11) ,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`sex` char(255) DEFAULT NULL,
PRIMARY KEY (`id`)
);
两种方式的执行结果是一样的.
1.2 多字段联合索引
主键由多个字段联合组成,语法如下
PRIMARY KEY [字段1,字段2,....字段n]
意义:某表没有建立主键,由多个字段联合确定某一条记录
sql如下:
CREATE TABLE `test_dept` (
`name` varchar(20) NOT NULL,
`age` int(4) NOT NULL DEFAULT '0',
`sex` char(1) NOT NULL DEFAULT '0',
`adress` varchar(100) DEFAULT NULL,
PRIMARY KEY (`name`,`age`,`sex`)
)
1.3主键自增
用AUTO_INCREMENT实现.
一个表只能有一个字段使用AUTO_INCREMENT约束,且该字段必须为主键的一部分.AUTO_INCREMENT可以是任何整型(TINYINT,INT,BIGINT,SMALLIN).
语法如下
字段名 数据类型 AUTO_INCREMENT
如
CREATE TABLE `test_man` (
`id` int(11) PRIMARY KEY AUTO_INCREMENT ,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`sex` char(255) DEFAULT NULL
);
2.外键约束
外键用来在两个表数据之间建立链接,可以是一列或多列.一个表可以有一个或多个外键.可以为空值,若不为空则必须对应主表的数据.
首先外键是一个字段,不可以是主键.但对应主表的主键.定义外键后不允许删除对应的主表数据.外键作用是保证数据引用的完整性,一致性.
语法:
[CONSTRAINT <外键名>] FOREIGN KEY 字段名1 [,字段名2,.....] REFERENCES <主键名> 主键列1 [,主键列2,.......]
"外键名"为定义的外键约束名称,一个表中不能有相同名称的外键;
"字段名"表示子表需要添加外键约束的字段列;
"主表名"即被子表外键依赖的主表名称;
"主键列" 表示主表中定义的主键列, 或者列组合.
(1) 创建表时候添加外键
CREATE TABLE `test_man` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`sex` char(255) DEFAULT NULL,
`emp_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `fk_emp_man` (`emp_id`),
CONSTRAINT `fk_emp_man` FOREIGN KEY (`emp_id`) REFERENCES `test_emp` (`id`)
)
(2) 表已经创建添加外键
ALTER TABLE test_man ADD CONSTRAINT fk_emp_man FOREIGN KEY (emp_id) REFERENCES test_emp (id);
(3) 删除外键
ALTER TABLE test_man DROP FOREIGN KEY fk_emp_man
3.非空约束
非空约束指字段不能为空,如果为空插入数据,数据库会报错.
语法:
字段名 数据类型 not null;
如
CREATE TABLE `test_man` (
`id` int(11) PRIMARY KEY AUTO_INCREMENT ,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`sex` char(255) DEFAULT NULL
);
4. 唯一约束
要求该列唯一,允许为空,但只能出现一个空值,保证数据不重复
语法1:
字段名 数据类型 UNIQUE
CREATE TABLE `test_dept` (
`name` varchar(20) UNIQUE,
`age` int(4) NOT NULL DEFAULT '0',
`sex` char(1) NOT NULL DEFAULT '0',
`adress` varchar(100) DEFAULT NULL,
PRIMARY KEY (`name`,`age`,`sex`)
)
语法2:
[CONSTRAINT <约束名>] UNIQUE(<字段名>)
CREATE TABLE `test_dept` (
`name` varchar(20) NOT NULL,
`age` int(4) NOT NULL DEFAULT '0',
`sex` char(1) NOT NULL DEFAULT '0',
`adress` varchar(100) DEFAULT NULL,
PRIMARY KEY (`name`,`age`,`sex`),
CONSTRAINT aa UNIQUE(`name`) -- 此处用 UNIQUE KEY `aa` (`name`) 也是一样
)
唯一性约束与 主键约束的区别: 一个表中,可以有多个唯一性约束,且被约束的字段允许有空值.而主键只能有一个,且声明主键的列不能有空值.
5 默认约束
即DEFAULT.指定某列的默认值
语法
字段名 数据类型 DEFAULT 默认值 如:
CREATE TABLE `test_dept1` (
`age` int(4) NOT NULL DEFAULT '0'
)