MySQL数据库如何给表设置约束详解


Posted in MySQL onMarch 13, 2022

一、PK(主键约束)

1、什么是主键?

  • 在了解主键之前,先了解一下什么是关键字
  • 关键字:在表中具有唯一性的字段,比如一个人的身份证号,学号。一个表中可以有多个关键字。
  • 主键也叫主关键字,就是由一个或多个关键字组成的,并且可以通过主键获得整个表的信息。比如订单表,通过订单编号可以获取到订单中的姓名,商品,价格等信息。

注意:关键字不一定是主键,主键一定是关键字

特点:主键不能为空,具有唯一性不能重复。一个表要么只有一个主键,要么没有主键,不可以有多个主键。

2、怎么设置主键?

方法一:在创建表时设置主键

-- 建立User表
CREATE TABLE User(
User_id int NOT NULL,
User_name VARCHAR(20),
User_pwd VARCHAR(18),
-- 在这里设置id为主键
PRIMARY KEY(User_id)
)
CREATE TABLE Users(
-- 也可以在字段中直接设置主键
User_id int NOT NULL PRIMARY KEY,
User_name VARCHAR(20),
User_pwd VARCHAR(18)
)

以上两种方式都可以创建主键,效果一样。

方法二:创建表时没有设置主键,后续在表中设置主键

  • 首先建一个没有设置主键的表
CREATE TABLE User(
User_id int NOT NULL,
User_name VARCHAR(20),
User_pwd VARCHAR(18)
)
  • 然后再设置主键

原理是向创建表时的代码中添加 PRIMARY KEY(User_id)
跟方法一中的第一个原理一样

ALTER TABLE user ADD PRIMARY KEY(User_id)

原理是向User_id 字段中添加 PRIMARY KEY
跟方法一中的第二个原理一样

ALTER TABLE users MODIFY User_id INT PRIMARY KEY;

二、FK(外键约束)

1、什么是外键

  • 外键又叫外关键字,代表两个表直接的联系。一张表的外键一定是另一张表的主键,以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。
  • 比如订单表中包含了商品ID,用户ID两个外键。其中商品ID是商品信息表的主键,用户ID是用户表的主键。

注意:一个表中的外键可以有多个,也可以没有。

2、怎么设置外键

方法一:创建表时设置外键约束

在前面设置主键的基础上来举例,前面创建了一个用户表,那么现在创建一个订单表。

CREATE TABLE dingdan(
DDid INT PRIMARY KEY NOT NULL,
User_id INT NOT null,
DDname VARCHAR(20) NOT NULL,
-- 设置约束关系,dingdan表中的User_id 与 user表中的User_id表示的是同一个数据
constraint fk FOREIGN KEY(User_id) REFERENCES user(User_id)
)

方法二:创建表时没有设置主键,后续在表中设置主键

alter table student add constraint stfk foreign key(stid) references teacher(tid)

注意:建立了主外键关系后,主表中的数据不能随意删除。比如订单中有一条数据包含了某个用户,那么用户表中就不能把该用户的信息删除,否则会报错。

三、unique(唯一约束)

1、什么是唯一约束?

某个字段如果设置了唯一约束,那么该字段要么不写,要写就不能重复。

2、如何设置唯一约束

还是创建一个用户表,这次表中多了邮箱字段。设置邮箱不能重复

CREATE TABLE User(
User_id int NOT NULL,
User_name VARCHAR(20),
User_pwd VARCHAR(18),
User_Email VARCHAR(40) UNIQUE
)

四、not null(非空)

意思就是这个字段不能为空

接着上面唯一约束来写,这里规定邮箱不仅不能重复而且不能为空

CREATE TABLE User(
User_id int NOT NULL,
User_name VARCHAR(20),
User_pwd VARCHAR(18),
User_Email VARCHAR(40) UNIQUE not null
)

五、default(默认值)

意思就是这个字段如果你不写,那么会默认给你一个值

继续上面的User表来写,在这里添加一个性别字段,如果你不写性别那么默认为男

CREATE TABLE User(
User_id int NOT NULL,
User_name VARCHAR(20),
User_pwd VARCHAR(18),
User_gender enum('男','女') default '男'
)

六、auto_increment(自增)

自增就是自动递增,也就是说如果你在这个字段没有填写数据,系统会自动根据上一条数据加1

一般用在ID,编号

将用户表中的ID设为自增

CREATE TABLE User(
User_id int auto_increment,
User_name VARCHAR(20),
User_pwd VARCHAR(18),
User_gender enum('男','女') default '男'
)

注意:第一个数据如果不填,默认会给一个值。所以即便ID是主键,也可以不填数据

到此这篇关于MySQL数据库如何给表设置约束详解的文章就介绍到这了,更多相关MySQL 设置约束内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL Threads_running飙升与慢查询的相关问题解决
May 08 MySQL
MySQL EXPLAIN输出列的详细解释
May 12 MySQL
MySQL时间盲注的五种延时方法实现
May 18 MySQL
MySQL数据库压缩版本安装与配置详细教程
May 21 MySQL
MySQL之PXC集群搭建的方法步骤
May 25 MySQL
MySQL 5.7常见数据类型
Jul 15 MySQL
SQL实现LeetCode(177.第N高薪水)
Aug 04 MySQL
MySQL为数据表建立索引的原则详解
Mar 03 MySQL
mysql 获取时间方式
Mar 20 MySQL
MySQL分区表管理命令汇总
Mar 21 MySQL
MySQL范围查询优化的场景实例详解
Jun 10 MySQL
MySQL中正则表达式(REGEXP)使用详解
Jul 07 MySQL
Mysql外键约束的创建与删除的使用
Mar 03 #MySQL
解决MySQL添加新用户-ERROR 1045 (28000)的问题
Mar 03 #MySQL
MySQL之MyISAM存储引擎的非聚簇索引详解
MySQL中B树索引和B+树索引的区别详解
MySQL的InnoDB存储引擎的数据页结构详解
一文搞清楚MySQL count(*)、count(1)、count(col)区别
Mar 03 #MySQL
SQL注入篇学习之盲注/宽字节注入
You might like
PHP的cURL库功能简介 抓取网页、POST数据及其他
2011/04/07 PHP
PHP二维数组排序的3种方法和自定义函数分享
2014/04/09 PHP
php使用自定义函数实现汉字分割替换功能示例
2017/01/30 PHP
TP3.2.3框架文件上传操作实例详解
2020/01/23 PHP
各种常用浏览器getBoundingClientRect的解析
2009/05/21 Javascript
jQuery使用ajaxSubmit()提交表单示例
2014/04/04 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
jQuery实现弹出窗口中切换登录与注册表单
2015/06/05 Javascript
实例讲解避免javascript冲突的方法
2016/01/03 Javascript
JavaScript reduce和reduceRight详解
2016/10/24 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
2017/11/21 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
ES6 迭代器(Iterator)和 for.of循环使用方法学习(总结)
2018/02/08 Javascript
Bootstrap实现可折叠分组侧边导航菜单
2018/03/07 Javascript
JavaScript实现的简单Tab点击切换功能示例
2018/07/06 Javascript
微信小程序实现tab页面切换功能
2018/07/13 Javascript
用node开发并发布一个cli工具的方法步骤
2019/01/03 Javascript
微信自定义分享链接信息(标题,图片和内容)实现过程详解
2019/09/04 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
小程序接入腾讯位置服务的详细流程
2020/03/03 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
[00:44]华丽开场!DOTA2勇士令状带来全新对阵画面
2019/05/15 DOTA
跟老齐学Python之眼花缭乱的运算符
2014/09/14 Python
python实现字典(dict)和字符串(string)的相互转换方法
2017/03/01 Python
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
Python实现清理微信僵尸粉功能示例【基于itchat模块】
2020/05/29 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
html5配合css3实现带提示文字的输入框(摆脱js)
2013/03/08 HTML / CSS
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
2015/04/24 HTML / CSS
HTML5自定义元素播放焦点图动画的实现
2019/09/25 HTML / CSS
行政助理岗位职责范文
2013/12/03 职场文书
文化宣传方案
2014/03/13 职场文书
护士医德医风自我评价
2014/09/15 职场文书
吃空饷专项整治方案
2014/10/27 职场文书
2015年数学教师工作总结
2015/05/20 职场文书
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL