约束条件是在表和字段上强制执行的数据检验规则,它是为了防止不规范的数据进入数据库,在我们对数据执行插入、修改、删除等一系列操作的时候,数据库管理系统会自动按照指定的约束条件对数据进行监测,它主要是对空值和重复值的检测,来保证数据存储的完整性和准确性。
按照约束的不同功能,MySQL中常用的约束条件有以下六种。
主键是表中非空不重复的字段,它可以唯一的标识表中的一条记录。作为主键的字段取值不能为空,也不可以重复,并且一张表中只能有一个主键,但是构成主键的字段可以是一个也可以有多个。也就是说主键只能有一个,但是一个主键可以由多个字段构成,当多个字段的取值完全一样的情况下才会违反主键约束。
添加主键约束的方法1:
creat table <表名> (
<字段名1> <字段类型1> primary key,
<字段名2> <字段类型2>,
……
<字段名n> <字段类型n>
);
示例:
create table student(
s_id int primary key,
s_name varchar(10),
s_birth date,
s_sex varchar(10)
);
添加主键约束的方法2:
create table <表名>(
<字段名1> <字段类型1>,
<字段名2> <字段类型2>,
......
<字段名n> <字段类型n>,
[constraint 主键约束名] primary key(字段名1[,字段名2,...字段名n])
);
示例:
-- 删除前面创建的student表
drop table if exists student;
-- 使用第二种方法创建主键
create table student(
s_id int,
s_name varchar(10),
s_birth date,
s_sex varchar(10),
primary key(s_id)
);
删除主键约束的方法:
alter table <表名> drop primary key;
示例:
alter table student drop primary key;
唯一约束要求指定字段的数据取值不能重复,可以是空值,但是空值也只能出现一次。
添加唯一约束的方法1:
creat table <表名> (
<字段名1> <字段类型1> unique,
<字段名2> <字段类型2>,
……
<字段名n> <字段类型n>
);
示例:
-- 删除前面创建的student表
drop table if exists student;
-- 为student表创建唯一约束
create table student(
s_id int,
s_name varchar(10) unique,
s_birth date,
s_sex varchar(10)
);
添加唯一约束的方法2:
creat table <表名> (
<字段名1> <字段类型1>,
<字段名2> <字段类型2>,
……
<字段名n> <字段类型n>,
[constraint 唯一约束名] unique (字段名1[,字段名2...字段名n])
);
示例:
-- 删除前面创建的student表
drop table if exists student;
-- 使用第二种方法添加唯一约束
create table student(
s_id int,
s_name varchar(10),
s_birth date,
s_sex varchar(10),
unique (s_name)
);
删除唯一约束的方法:
alter table <表名> drop index <唯一约束名>;
如果是单个字段并且没有指定唯一约束名,则默认的唯一约束名为字段名。如果是多个字段组合为唯一约束时候,默认的唯一约束名为第一个字段的名称。如果指定了约束名,则删除的时候写约束名。
示例:
alter table student drop index s_name;
3.自动增长约束
自动增长约束是要求指定字段的数据取值自动增长,默认是从1开始,每增加一条记录,这个字段的取值就会加1,所以它只适用数值型和日期时间型字段,并且要配合主键一起使用。
添加字段增长约束的方法:
creat table <表名> (
<字段名1> <字段类型1> primary key auto_increment,
<字段名2> <字段类型2>,
……
<字段名n> <字段类型n>
);
示例:
-- 删除前面创建的student表
drop table if exists student;
create table student(
s_id int primary key auto_increment,
s_name varchar(10),
s_birth date,
s_sex varchar(10)
);
删除自动增长约束的方法:
alter table <表名> modify <字段名> <字段类型>;
示例:
alter table student modify s_id int;
非空约束是要求指定字段的取值不能为空值。
非空约束的方法:
creat table <表名> (
<字段名1> <字段类型1> not null,
<字段名2> <字段类型2>,
……
<字段名n> <字段类型n>
);
示例:
-- 删除前面创建的student表
drop table if exists student;
create table student(
s_id int,
s_name varchar(10),
s_birth date not null,
s_sex varchar(10)
);
删除非空约束的方法:
alter table <表名> modify <字段名> <字段类型> [null];
示例:
alter table student modify s_birth date;
默认约束是指在插入新记录的时候,如果没有为指定字段赋值,数据库管理系统会自动为这个字段赋值为默认约束设定的值。
添加默认约束的方法:
creat table <表名> (
<字段名1> <字段类型1> default value,
<字段名2> <字段类型2>,
……
<字段名n> <字段类型n>
);
示例:
-- 删除前面创建的student表
drop table if exists student;
create table student(
s_id int,
s_name varchar(10),
s_birth date,
s_sex varchar(10) default '未知'
);
删除默认约束的方法:
alter table <表名> modify <字段名> <字段类型>;
示例:
alter table student modify s_sex varchar(10);
外键约束是指一个表中的字段取值依赖于另一个表中字段的值。主键所在的表叫主表,外键所在的表叫从表。每一个外键值必须与主表中的主键值相对应。
添加外键约束的方法:
creat table <表名> (
<字段名1> <字段类型1>,
<字段名2> <字段类型2>,
……
<字段名n> <字段类型n>,
[constraint 外键约束名] foreign key(字段名) references <主表>(主键字段)
);
示例:
-- 删除前面创建的student表
drop table if exists student;
-- 创建一个主表
create table student(
s_id int primary key auto_increment,
s_name varchar(10) unique,
s_birth date not null,
s_sex varchar(10) default '未知'
);
-- 创建从表的同时添加外键
create table if not exists sc(
s_id int,
c_id int,
score int,
foreign key (s_id) references student(s_id)
);
删除外键约束的方法:
alter table <表名> drop foreign key <外键约束名>;
查看外键约束名使用查看建表语句来实现,示例:
show create table sc;
--结果:
CREATE TABLE `sc` ( `s_id` int(11) DEFAULT NULL,
`c_id` int(11) DEFAULT NULL,
`score` int(11) DEFAULT NULL,
KEY `s_id` (`s_id`),
CONSTRAINT `sc_ibfk_1` FOREIGN KEY (`s_id`) REFERENCES `student` (`s_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
constraint关键字后面的字符串 sc_ibfk_1
即为外键约束名,然后即可删除。
示例:
alter table sc drop foreign key `sc_ibfk_1`;