常用五类约束:
primary key:主键约束,指定某列的数据不能有重复、并且是唯一的
not null:非空约束,指定某列不能为空
unique: 唯一约束,确保唯一,不可重复(如电话号码)
foreign key:外键,指定该列记录属于主表中的一条记录,参照的是另一条数据
check:检查,指定一个表达式,用于检验指定数据
注意:
一、主键约束→ primary key
主键约束相当于唯一约束+非空约束的结合、主键约束不允许数据重复,不能为空,且一张表中只能有一个主键约束。
-- 创建方式一:建表时直接设置主键列
CREATE TABLE tbl_student(
stuid INT PRIMARY KEY,
...
);
-- 创建方式二:在创建表之后,给表添加主键约束
ALTER TABLE tbl_student ADD constraint pk_stuId PRIMARY KEY(stuid);
联合主键约束:列A有数字1,列B有数字1,则联合之后的主键约束为 A+B的组合即('11')
--创建方式一:建表时直接设置联合主键列
CREATE TABLE stInfo(
stuName varchar(20),
stClass varchar(10),
stGedner int,
constraint pk_stname_stclass primary key(stuname,stclass)
);
--创建方式二:在创建表之后,给表添加联合主键约束
ALTER TABLE stInfo ADD CONSTRAINT pk_stName_stClass primary key(stuname,stclass);
二、非空约束→ not null
非空约束是确保某列的数据不能为null值的约束,一张表中可以有多个非空约束
--建表时直接设置非空约束
CREATE TABLE tbl_student(
stuid INT AUTO_INCREMENT PRIMARY KEY ,
stuno CHAR(10) NOT NULL,
stuname VARCHAR(10) NOT NULL,
stugender INT,
stubirth DATE,
stutel CHAR(11)
);
三、唯一约束→ unique
--创建表的同时增加唯一约束
CREATE TABLE tbl_student(
...
stutel CHAR(11) unique
);
--创建表的同时增加唯一约束
CREATE TABLE tbl_student(
...
stutel CHAR(11),
CONSTRAINT uq_stutel UNIQUE(stutel)
);
--通过修改表的方式增加唯一约束
ALTER TABLE tbl_student ADD CONSTRAINT uq_stutel UNIQUE(stutel);
四、默认约束→ default
--创建表的同时设置默认约束
CREATE TABLE tbl_student(
stuid INT AUTO_INCREMENT PRIMARY KEY ,
stuno CHAR(10) NOT NULL,
stuname VARCHAR(10) NOT NULL,
stugender INT default 1,
stubirth DATE,
stutel CHAR(11)
);
--插入数据时可以直接使用默认值
INSERT INTO tbl_student(stuno,stuname,stugender,stubirth,stutel) VALUES ('001','施瓦辛格',DEFAULT,'1995-1-1','13813813838');
五、外键约束
在子表中的某一列引用了主表中的某一列数据,则子表中列称之为外键;是一种参照关系。 主表中的列要求:必须唯一。
--主表
CREATE TABLE tbl_class(
classid INT PRIMARY KEY AUTO_INCREMENT,
classname VARCHAR(10) NOT NULL
);
--子表
CREATE TABLE tbl_student(
stuid INT,
stuno CHAR(10),
stuname VARCHAR(10),
s_classid INT,
CONSTRAINT fk_s_classid FOREIGN KEY(s_classid) references tbl_class(classid) -- 约束 外键名称 外键关键字(子表外键列)参照 主表(主表列)
);
--方式二:在创建子表之后,给子表添加外键约束
ALTER TABLE tbl_student ADD CONSTRAINT fk_s_classid FOREIGN KEY(s_classid) references tbl_class(classid);
六、检查约束→check
--创建表的同时设置检查约束
CREATE TABLE SCORE(
STUNO INT AUTO_INCREMENT PRIMARY KEY,
STUSCORE INT,
CONSTRAINT CK_STUSCORE CHECK(STUSCORE BETWEEN 0 AND 100)
);
--在创建表之后,给表添加检查约束
ALTER TABLE SCORE ADD CONSTRAINT CK_STUSCORE CHECK(STUSCORE BETWEEN 0 AND 100);
另:
面试题:MySQL数据库中的主键约束和唯一约束有什么异同?
个人见解:
主键约束和唯一约束都不能含有重复的数据。
主键约束不能为null,唯一约束可以有一个null。
一张表中只能有一个主键约束,但却可以有多个唯一约束。