约束
1.实体完整性约束
表中每一行数据代表一个实体 实体完整性约束是指每一行数据不重复,实体唯一。
主键约束
primary key 唯一,标识表中的一行数据,此列的值不可重复,且不能为null
CREATE TABLE testtable (
id INT PRIMARY KEY,
姓名 VARCHAR(20),
年龄 INT
)CHARSET=utf8;
插入2遍会报错:Duplicate entry ‘1’ for key ‘PRIMARY’ 主键1重复
INSERT INTO testtable(id,姓名,年龄) VALUE (1,'张三',25);
DROP TABLE testtable;
唯一约束
UNIQUE 标识表中的一行数据,此列的值不可重复,可以为null
CREATE TABLE testtable (
id INT UNIQUE,
姓名 VARCHAR(20),
年龄 INT
)CHARSET=utf8;
id为null时可以无限重复添加
INSERT INTO testtable(id,姓名,年龄) VALUE (NULL,'张三',25);
DROP TABLE testtable;
自动增长列
AUTO_INCREMENT 给主键数值添加自动增长。从1开始,每次加1。不能单独使用,和主键配合。
CREATE TABLE testtable (
id INT PRIMARY KEY AUTO_INCREMENT,
姓名 VARCHAR(20),
年龄 INT
)CHARSET=utf8;
INSERT INTO testtable(姓名,年龄) VALUE ('张三',25);
DROP TABLE testtable;
域完整性约束
限制单元格数据正确性
非空约束not null
姓名唯一,不为空
CREATE TABLE testtable (
id INT PRIMARY KEY AUTO_INCREMENT,
姓名 VARCHAR(20) UNIQUE NOT NULL,
年龄 INT
)CHARSET=utf8;
插入姓名为空 错误: Column ‘姓名’ cannot be null
INSERT INTO testtable(姓名,年龄) VALUE (NULL,25);
DROP TABLE testtable;
默认值约束default
年龄默认值为0
CREATE TABLE testtable (
id INT PRIMARY KEY AUTO_INCREMENT,
姓名 VARCHAR(20) UNIQUE NOT NULL,
年龄 INT DEFAULT 0
)CHARSET=utf8;
年龄使用默认值
INSERT INTO testtable(姓名,年龄) VALUE ('张三',DEFAULT);
DROP TABLE testtable;
引用完整性约束
涉及到两张表 一个主表 一个从表
constraint 引用名 foreign key(列名) references 被引用的表名(列名)
创建一个专业表 主表
CREATE TABLE Speciality (
id INT PRIMARY KEY AUTO_INCREMENT,
SpecialName VARCHAR(20) UNIQUE NOT NULL
)CHARSET=utf8;
INSERT INTO Speciality(SpecialName) VALUES ('java');
INSERT INTO Speciality(SpecialName) VALUES ('h5');
创建一个课程表 从表
CREATE TABLE `subject`(
subjectid INT PRIMARY KEY AUTO_INCREMENT,
subjectname VARCHAR(20) UNIQUE NOT NULL,
subjecthours INT DEFAULT 10,
specialid INT NOT NULL,
CONSTRAINT fk_subject_specialid FOREIGN KEY (specialid) REFERENCES Speciality(id)
)CHARSET=utf8;
#插入的数据中的specialid必须在Speciality专业表里存在 否则报错
INSERT INTO `subject`(subjectname,subjecthours,specialid) VALUES('javase',30,2);
INSERT INTO `subject`(subjectname,subjecthours,specialid) VALUES('css',20,1);
当2个表存在引用关系时,要删除表,需要先删除从表,在删除主表
DROP TABLE `subject`;
DROP TABLE `Speciality`;
约束创建整合
CREATE TABLE Grade(
Gradeid INT PRIMARY KEY AUTO_INCREMENT,
Gradename VARCHAR(20) UNIQUE NOT NULL
)CHARSET=utf8;
CREATE TABLE student(
student_id VARCHAR(50) PRIMARY KEY,
student_name VARCHAR(50) NOT NULL,
sex CHAR(2) DEFAULT '男',
borndate DATE NOT NULL,
phone VARCHAR(11),
gradeid INT NOT NULL,
CONSTRAINT fk_student_grade FOREIGN KEY(gradeid) REFERENCES Grade(Gradeid)
)CHARSET=utf8;
INSERT INTO Grade(Gradename) VALUE ('软工');
INSERT INTO Grade(Gradename) VALUE ('计科');
INSERT INTO Grade(Gradename) VALUE ('物联网');
INSERT INTO student(student_id,student_name,sex,borndate,phone,Gradeid)
VALUE ('20200905001','李四',DEFAULT,'2020-09-05','130--------',1);
DROP TABLE Grade;
DROP TABLE student;