mysql学习-各种约束整合

约束

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;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静安书以沫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值