MySQL数据库如何给表设置约束详解
作者:桃花键神 发布时间:2024-01-20 18:28:30
一、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是主键,也可以不填数据
来源:https://blog.csdn.net/weixin_50843918/article/details/122990087


猜你喜欢
- 本文实例为大家分享了python openCV自制绘画板的具体代码,供大家参考,具体内容如下import numpy as npimport
- 本文实例讲述了Python操作Oracle数据库的简单方法和封装类。分享给大家供大家参考,具体如下:最近工作有接触到Oracle,发现很多地
- 都知道django每次请求都会连接数据库和释放数据库连接。Django为每个请求使用新的数据库连接。一开始这个方法行得通。然而随着服务器上的
- 经常看到说正则的文章,但说的只是方法,却很少有说以下几个基本概念:1.贪婪:+,*,?,{m,n}等默认是贪婪匹配,即尽可能多匹配,也叫最大
- 本文实例为大家分享了python数据写入excel表格的具体代码,供大家参考,具体内容如下安装: xlsxwriter第三方库code:#!
- 1引言实现磁带备份数据的功能有两方面的困难:首先,SQL Server(以下简称SQL)所提供的数据库的整体备份及恢复功能不能直接满足本系统
- 在二维矩阵间的运算:class torch.nn.Conv2d(in_channels, out_channels, kernel_size
- 输入字母验证码,俺觉得特烦,特别还要输入大写字母。于是找到文件并修改成数字验证码。 修改文件 验证码文件位置 include\va
- 一、Mysql SQL Mode简介通常来说MySQL服务器能够工作在不同的SQL模式下,并能针对不同的客户端以不同的方式应用这些模式。这样
- 引言之前在看 CAP 定理时抱有很大的疑惑,CAP 定理的定义是指在分布式系统中三者只能满足其二,也就是存在分布式 CA 系统的。在网络上查
- #{}会将传入的数据当成一个字符串,会对自动传入的数据加一个双引号order by #{userId} 这里假如us
- 昨天在用用Pycharm读取一个200+M的CSV的过程中,竟然出现了Memory Error!简直让我怀疑自己买了个假电脑,毕竟是8G内存
- 任何事情都是由量变到质变的过程,学习Python也不例外。只有把一个语言中的常用函数了如指掌了,才能在处理问题的过程中得心应手,快速地找到最
- 这篇是Nicholas讨论如果防止脚本失控的第二篇,主要讨论了如何重构嵌套循环、递归,以及那些在函数内部同时执行很多子操作的函数。基本的思想
- 打开editor/filemanager/connectors/php目录下commands.php,找到FileUpload函数,在$sE
- 如何用javascript来判定选择单选的radio哪个被选择,多选的checkbox有那几个被选中? <!DOCTYPE
- 写在前面在QQ群,微信群,论坛中经常帮助使用SQL Server数据库的朋友解决问题,但是有一些最常见最基本的问题,每天都有人问,回答多了也
- 在SQL Server中进行开发会让你身处险地,并且寻找快速解决方案。我们编辑了前十名关于SQL Server开发的常见问题。对常见的针对表
- 中文简繁体网页的转换FrontPage 2002提供了中文简繁体转换的功能。只要轻轻一点就可做出简体或繁体中文网站了。如要将当前
- 本文介绍了深入理解ES6的迭代器与生成器,分享给大家,具体如下:循环语句的问题var colors = ["red",