约束就是对表中的数据进行限定,保证数据的正确性、有效性和完整性。在MySQL数据库中,有比较重要的4种约束,共同维护着MySQL数据库的数据。本文我们就来一探究竟,学习MySQL数据库中4大约束。
MySQL中4大约束具体如下:
1. 主键约束:primary key
2. 非空约束:not null
3. 唯一约束:unique
4. 外键约束:foreign key
下面我们来一一讲解MySQL数据库中4大约束:
1.主键约束(PRIMARY KEY)
主键约束列不允许重复,即任意两行的主键值都不相同;每行都具有一个主键值,也不允许出现空值;
单列主键创建有两种方式:
一种是直接对字段加primary key关键字:
CREATE TABLE student(
id INT PRIMARY KEY,
name VARCHAR(20),
)
另外一种是通过额外加约束的方式:
CREATE TABLE student(
id INT NOT NULL,
name VARCHAR(20),
CONSTRAINT PK_STUD_ID PRIMARY KEY(id)
//PK_STUD_ID为约束的名字
)
有时候一个列的字段可能有重复,可以联合多个列设为主键。
联合主键的语句:
CREATE TABLE student(
name VARCHAR(20),
class VARCHAR(20),
CONSTRAINT PK_STUD_ID PRIMARY KEY(name,class)
)
其它操作
//删除主键约束
ALTER TABLE 表名 DROP PRIMARY KEY;
//添加主键
ALTER TABLE 表名 ADD PRIMARY KEY(列名);
//修改列为主键
ALTER TABLE 表名 MODIFY 列名 数据类型 PRIMARY KEY;
2.外键约束(FOREIGN KEY)
外键约束是保证一个或两个表之间的参照完整性,保持数据一致性。表的外键可以是另一表的主键(也可以是唯一索引,详情看这里), 外键可以有重复的, 可以是空值。实现一对一或一对多关系。
创建外键约束
CREATE TABLE classes(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20)
);
//第一种:添加关键字
CREATE TABLE student(
id INT AUTO_INCREMENT,
name VARCHAR(20),
CONSTRAINT PK_ID PRIMARY KEY(id),
class_id INT REFERENCES classes(id)
)
//第二种:额外声明
CREATE TABLE student(
id INT AUTO_INCREMENT,
name VARCHAR(20),
CONSTRAINT PK_ID PRIMARY KEY(id),
class_id INT,
CONSTRAINT fk_class_id FOREIGN KEY(classe_id) REFERENCES classes(id)
)
外键约束的要求:
父表和子表必须使用相同的存储引擎,而且禁止使用临时表,数据表的存储引擎只能为InnoDB,default-storage-engine-INNODB外键列和参照列必须具有相似的数据类型,数字的长度或是有符号位必须相同,而字符 的长度可以不同外键列和参照列必须创建索引,如果外键列不存在索引的话,MySQL将自动创建索引。设定参照列:FOREIGN KEY(id) PEFERENCES provinces(id)
外键约束的参照操作:
CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行
SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL,如果使用该选项,必须保证子表列没有指定NOT NULL
RESTRICT:拒绝对父表的删除或更新操作
NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同
其它操作
//删除外键约束
ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名;
(创建外键的方法没有指定约束名称,系统会默认给外键约束分配外键约束名称,命名为student_ibfk_n)
//增加外键约束
ALTER TABLE 表名 ADD FOREIGN KEY 列名 REFERENCES 父表(对应列名);
3.唯一约束(UNIQUE)
指定表中某一列或多个列不能有相同的两行或者两行以上的数据存在,
唯一约束可以保证记录的唯一性
唯一约束的字段可以为空值(允许的空值有多个,但是最终存储的只有一个)
每张数据表可以存在多个唯一约束
UNIQUE KEY的用途:主要是用来防止数据插入的时候重复。
CREATE TABLE student
(
name CHAR(20) UNIQUE KEY
);
为表中列添加UNIQUE KEY
ALTER TABLE student MODIFY CHAR(20) UNIQUE KEY;
4.非空约束(NOT NULL)
输入值必须是非空的,需要注意的是允许控制尽量不要太多,太多会更消耗数据库性能。
CREATE TABLE student
(
name CHAR(20) NOT NULL
);
以上就是MySQL数据库中4大约束,除此之外,其实MySQL中还存在着默认约束等其他约束,但总体而言,掌握主键约束、非空约束、唯一约束、外键约束这4种约束的使用,在MySQL数据库中对数据的约束是绰绰有余的。当然,想要精益求精的小伙伴也可以观看本站的MySQL教程,学习更多的MySQL的相关知识,让自己的知识更上一层楼!
锁是计算机协调多个进程或纯线程并发访问某一资源的机制。而表锁由MySQL Server 实现,一般在执行DDL语句时会对整个表进行加锁,比如说ALTER TABLE等操作。在执行SQL语句时,也可以明确指定对某个表进行加锁。本文我们就来重点讲述一下MySQL表锁。
MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。那么,MySQL数据库都有哪些存储引擎呢?下面
MySQL作为一个关系型数据库管理系统,在数据处理方面有其独特的优势。MySQL软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,使得MySQL占据了关系型数据库管理系统软件的半壁江山。MySQL版本也经过数次更迭,MySQL领域存在着众多的衍生版数据库,主流的有官方Mysql,MariaDb,Perco
众所周知,MySQL是目前世界上最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。我们不得不承认,MySQL能够取得如今的成绩离不开MySQL开源的特点,在MySQL的崛起进程中,众多的使用者和开发者贡献了自己的一
jQuery是一个快速、简洁的JavaScript框架
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目
IDEA 全称 IntelliJ IDEA,是java编程语言开发的集成环境,它所提倡的是智能编码,是减少程序员的工作
Java SE(Java Platform, Standard Edition,Java标准版),零基础入门
Java SE(Java Platform, Standard Edition,Java标准版),基础进阶
Docker 是一个基于 Go 语言 并遵从 Apache2.0 协议开源的应用容器引擎,让开发者可以打包应用到一个可移植的镜像中
动力节点在线报名表(此信息已加密,请放心填写)