Mysql主键约束和唯一约束

2023-10-27

Mysql约束

1、作用

约束定义为确保数据完整性必须遵循的规则。
约束可以在创建表的过程中创建,也可以稍后再添加。
在创建表后添加约束时,它将检查现有数据以确定其是否违背该约束。
如果现有数据违背了将添加的约束,那么将不会向指定列施加该约束。

2、约束的类型

MySQL 支持可对表中的列定义的以下约束:

1) 主键约束
2) 唯一约束
3) 外键约束

3、主键约束

对一列或一组列定义,这些列的值唯一地标识表中的所有行。
这些列称为主键列。
主键列不能包含 NULL 值,因为它用于唯一地标识表中的行。

语法:

CREATE TABLE table_name
(
<column definition 1>,
<column definition 2>,
............
<constraint_definition>);

<constraint_definition>=
[CONSTRAINT constraint_name] PRIMARY KEY (<column_name> [{,
<column_name>}...]))

实例:
新建一个表格名为emp1,列名分别为id,name,age,address这四个,将id设置为主键

create table emp1 
(
id int,
name varchar(20),
age int,
address varchar(30),
Constraint Key_ID primary key(id)
);

或者

create table emp1 
(
id int primary key,
name varchar(20),
age int,
address varchar(30)
);

注:代码1版本中【 Constraint Key_ID primary key(id) 】就是设置id列成主键的标准代码,Constraint是约束的固定格式,Key_ID是设置的约束的名字,可随便取,Primary key 就是唯一约束的关键词,(id)就代表将id列设置为唯一

可以通过这个按钮看到emp1的id已经是主键了,有一个钥匙标记,或者通过desc命令查看结构
在这里插入图片描述
在这里插入图片描述

4、唯一约束

用于强制非主键列的唯一性=。
与主键约束类似,但是它在唯一约束所定义的列中允许 NULL 值
可以在表上创建多个唯一约束

语法:

CREATE TABLE table_name
(
<column_definition_1>,
<column_definition_2>,
.........
<constraint_definition>


<constraint_definition>=
[CONSTRAINT constraint_name] UNIQUE (<column_name> 
[{,
<column_name>}...]))

实例:

设计表emp2,列和之前的一样加一列电话号码,因为我们知道电话phone是唯一的,设计id为主键,设计电话phone唯一

create table emp2 
(
id int,
name varchar(20),
age int,
address varchar(30),
phone int,
Constraint Key_ID primary key(id),
Constraint Unique_Phone UNIQUE(phone)
);

或者

create table emp2 
(
id int Primary Key,
name varchar(20),
age int,
address varchar(30),
phone int UNIQUE
);

注:代码1版本中【 Constraint Unique_Phone UNIQUE(phone) 】就是设置phone列成唯一性的代码,Constraint是约束的固定格式,Unique_Phone是设置的约束的名字,可随便取,UNIQUE就是唯一约束的关键词,(phone)就代表将phone列设置为唯一。
在这里插入图片描述

5、外键约束(后续详细介绍)

消除当一个表中的数据依赖于另一个表中的数据时两个表中的不一致。
表中的外键总是引用其他表中的主键列。
包含引用为其他表中外键的主键的表称为主表或被引用表。
包含引用其他表中主键的外键的表称为事务表或引用表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql主键约束和唯一约束 的相关文章

随机推荐

  • mybatis拦截器

    最近在用mybatis做项目 需要用到mybatis的拦截器功能 就顺便把mybatis的拦截器源码大致的看了一遍 为了温故而知新 在此就按照自己的理解由浅入深的理解一下它的设计 和大家分享一下 不足和谬误之处欢迎交流 直接入正题 首先 先
  • 踩坑将一个AndroidStudio项目变成一个module引入到自己的项目中

    最近工作中遇到了需要将一个完整的androidstudio项目移植到自己项目中去 因为考虑到自己已经有的项目和需要引入的项目资源都很庞大 为了方便代码管理 决定将需要引入的项目作为一个module导入到自己现有项目中来 操作步骤 1 在主项
  • Cookie 与 Session 的作用及区别

    Cookie Cookie 其实就是客户端储存的 什么是客户端 就是浏览器存储 能看的见的 在浏览器设置 历史纪录中能看见 能手动清除Cookie 所以它一般都会被用在不重要的地方 因为它很容易被发现 cookie以明文储存信息 而且储存量
  • unity中lightProbe的使用

    之前曾经介绍过Unity3D的LightMapping烘焙的用法 单独使用的LightMapping效果很好 但由于只是把光影烘焙到贴图上面 所以并不会对周围的动态物体产生真正的光照效果 这次来介绍一下LightProbe 这是对Light
  • 服务器小程序空间,服务器空间-小程序-建站-企业邮箱

    Your twitter username username wange1228 Prefix some text you want displayed before your latest tweet HTML is OK but be
  • 华为OD机试 - 单词倒序(Java)

    题目描述 输入单行英文句子 里面包含英文字母 空格以及 三种标点符号 请将句子内每个单词进行倒序 并输出倒序后的语句 输入描述 输入字符串S S的长度 1 N 100 输出描述 输出倒序后的字符串 备注 标点符号左右的空格 0 单词间空格
  • C语言 -- 动态数组&链表

    目录 动态数组 动态数组的实现 用户test 链表 目的 链表的结构体 链表的实现 初始化链表 插入节点 遍历链表 删除节点 清空链表 销毁链表 用户回调函数 给用户提供接口获取链表长度 用户test 动态数组 将数组开辟到堆区 实现动态扩
  • ubuntu 16.04安装 jdk 1.9

    1 命令行输入javac 提示java尚未安装 选择提示中的包进行安装 2 执行 sudo apt install 安装jdk的版本号 根据提示确认安装 3 配置jdk路径 执行 sudo gedit etc profile 输入密码打开文
  • c++ STL vector知识点

    c 知识点 vector基本概念及定义 vector函数的构造 vector函数实现 vector基本概念及定义 头文件 include
  • VTK入门001——HelloVTK

    include VTKPlatform h vtkConeSource 是 VTK 库中的一个类 用于生成一个圆锥体的几何形状 include
  • 网站数据分析报告怎么写?

    网站数据分析报告怎么写 1 目标 Objective 是前提 网站分析报告的起点不是从现象开始的 而是从网站的目标 objective 开始的 我相信大多数网站的目标不应该超过1个 那些各种目标都应该归结为一个最终的最根本的目标 如果你的老
  • CTF show 萌新web-1

    首先看题目 代码整体逻辑是先通过GET请求传递参数id 如果id大于999 报错 如果小于999 则输出当前的执行的sql语句 如果根据id参数能在数据库中查到值 row 则将其打印出来 而flag则是id为1000的 row中的内容 这道
  • excel表格(.csv)保存到数据库--QT数据库

    刚学QT的菜鸟 无聊的时候总会找一点事情做 言归正传 将excel表格保存到数据库 是比较简单的 我的想法简单粗暴 从路径中获取文件 通过按键控制加载 将大象放进冰箱需要是三步 这个同样 1 获取路径 2 读取Excel文件 3 将其保存到
  • Domain-Specific Languages 23

    Domain Specific Languages Whenever you listen to a discussion by experts in any domain be it chess players kindergarten
  • 红日靶场(五)

    红日5 一 环境搭建 此次靶场虚拟机共用两个 一个外网一个内网 用来练习红队相关内容和方向 主要包括常规信息收集 Web攻防 代码审计 漏洞利用 内网渗透以及域渗透等相关内容学习 1 环境拓扑图 2 靶机下载地址 漏洞详情 3 我们设置VM
  • elasticsearch 集群配置

    主节点配置 集群名称 cluster name demo 节点名称 每个节点的名称不能重复 node name es node 1 ip 地址 每个节点的地址不能重复 network host 172 16 10 1 是不是有资格主节点 n
  • Python-schema的使用

    不管我们做什么应用 只要和用户输入打交道 就有一个原则 永远不要相信用户的输入数据 意味着我们要对用户输入进行严格的验证 web开发时一般输入数据都以JSON形式发送到后端API API要对输入数据做验证 一般我都是加很多判断 各种if 导
  • Python生成随机数,并将生成的随机数组成10道加减乘除的基本算术题目

    编写一个小学生算术能力测试题 提供10道加减乘除四种基本算术运算的题目 联系者根据显示的题目输入自己的答案 程序自动判断输入的答案是否正确并显示出相应的信息 生成一到一百的随机数 import random x random randint
  • SRM系统是什么?

    SRM全称Supplier Relationship Management 即供应商关系管理 SRM管理系统即供应商关系管理系统 供应商管理系统是采购管理系统的一个子系统 也是采购管理系统的一个重要模块 是用于改进企业与供应商关系的联系 完
  • Mysql主键约束和唯一约束

    Mysql约束 1 作用 约束定义为确保数据完整性必须遵循的规则 约束可以在创建表的过程中创建 也可以稍后再添加 在创建表后添加约束时 它将检查现有数据以确定其是否违背该约束 如果现有数据违背了将添加的约束 那么将不会向指定列施加该约束 2