MySQL-----约束

news2024/10/7 16:17:47


目录​​​​​

约束

一   主键约束

1-1  操作-添加单列主键

 1-2  操作-添加多列主键

 1-3  修改表结构添加主键

1-4  删除主键约束

二   自增长约束

2-1  指定自增长字段的初始值 

2-2  删除自增列

三   非空约束

 3-1  创建非空约束

3-2  删除非空约束

四   唯一约束

 4-1  创建唯一约束

4-2  删除唯一约束

五   默认约束

5-1  创建默认约束

5-2  删除默认约束

六   零填充约束

6-1  创建零填充约束

6-2  删除零填充约束 


约束

▶ 概念

约束英文:constraint

约束实际上就是表中数据的限制条件

▶ 作用

表在设计的时候加入约束的目的就是为了保证表中的记录完整性和有效性,比如用户表有些列的值(手机号)不能为空,有些列的值(身份证号)不能重复。

▶ 分类

主键约束(primary key) PK

自增长约束(auto_increment)

非空约束(not null)
唯一性约束(unique)

默认约束(default)

零填充约束(zerofill)

外键约束(foreign key) FK

一   主键约束

▶ 概念

▻ MySQL主键约束是一个列或者多个列的组合,其值能唯一地标识表中的每一行,方便在RDBMS中尽快的找到某一行。
▻ 主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值。
▻ 每个表最多只允许一个主键
▻ 主键约束的关键字是:primary key
▻ 当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。

▶ 操作 

1.添加单列主键

2.添加多列联合主键

3.删除主键  



1-1  操作-添加单列主键

创建单列主键约束的语法

▶ 方式一

        在create table 语句中通过 PRIMARY KEY 关键字来指定主键

        在定义字段的同时指定主键,语法格式如下:
        create table 表名(
                ....
                <字段名><数据类型> primary key
                ....
        )


▶ 方式二
        在定义字段之后再指定主键,语法格式如下:
        create table 表名(
                ...
                [constraint <约束名> ] primary key [字段名]
        )

操作演示

 演示效果



 1-2  操作-添加多列主键

所谓的联合主键,就是这个主键是由一张表中多个字段组成的。

注意:
        1.当主键是由多个字段组成时,不能直接在字段名后面声明主键约束。

        2.一张表只能有一个主键,联合主键也是一个主键

创建多列主键的语法         

 create table 表名(
        ...
        primary key (字段1,字段2,字段3,...,字段n    )

);

多列主键中的字段值,至少要有一个不同,且联合主键的各列都不能为空(NULL)

效果展示 

 



 1-3  修改表结构添加主键

主键约束不仅可以在创建表的同时创建,也可以在修改表时添加。

通过修改表结构,既可以设置为单列主键也可以设置为多列主键。

修改表结构添加主键语法 

create table 表名(
        ...
);
alter table <表名> add primary key (字段列表);

运行效果

 


1-4  删除主键约束

         一个表中不需要主键约束时,就需要从表中将其删除。删除主键约束的方法要比创建主键约束的方法容易的多。

 删除主键约束的语法

alter table <数据表名> drop primary key;

效果演示 

【总结】 



二   自增长约束

▶ 概念

▻ 在MysQL中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录主键会自动以相同的步长进行增长。

▻ 通过给字段添加auto_increment属性来实现主键自增长

▶ 语法

字段名 数据类型 auto_increment

 ▶ 操作

create table 表名(
        id int primary key auto_increment,
        naem varchar(20)

);

  ▶ 特点

▻ 默认情况下,auto_increment的初始值是1,每新增一条记录,字段值自动加1。
▻ 一个表中只能有一个字段使用auto_increment约束,且该字段必须有唯一索引,以避免序号重复(即为主键或主键的一部分)。
▻ auto increment约束的字段必须具备NOT NULL属性。
auto_increment约束的字段只能是整数类型(TINYINT、SMALLINT、INT、BIGINT等。
auto_increment约束字段的最大值受该字段的数据类型约束,如果达到限,auto_increment就会失效

2-1  指定自增长字段的初始值 

        如果第一条记录设置了该字段的初始值,那么新增加的记录就从这个初始值开始自增。例如
如果表中插入的第一条记录的id值设置为5,那么再插入记录时,id值就会从5开始往上增加。

语法

 ▶ 方式一:创建表后指定

     create table t_user1(
            id int primary key auto_increment,
            ...
    );
    alter table t_user1 auto_increment=100;

 ▶ 方式二:创建表时指定

        create table t_user3(
                 id int primary key auto_increment,
                ...
        ) auto_increment=200;

效果演示  

 


2-2  删除自增列

使用delete 和 truncate可以删除自增列

  注意:delete和truncate在删除后自增列的变化
       ▶ delete数据之后自动增长从断点开始。(比如你表以前的数据是从100开始你插入到     了105,然后你全部删除,再重新插入新数据,它的自增长值是106).
       ▶ truncate数据之后自动增长从默认起始值开始.(比如你表以前的数据是从100开始你插入到了105,然后你全部删除,再重新插入新数据,它的自增长值是1,默认从1开始).

delete的效果

truncate的效果

 

【总结】 

 



三   非空约束

 ▶ 概念

     MySQL非空约束(not null)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。

 3-1  创建非空约束

▶ 语法

 ▶ 方式一:创建表时指定
        <字段名><数据类型> not null;

 ▶ 方式二:创建表后修改

        alter table 表名 modify 字段 类型 not null;

演示效果

 

 

3-2  删除非空约束

▶ 语法

alter table 表名 modify 字段 类型

(就是将创建时的语句去掉not null)

演示效果

 

【总结】



四   唯一约束

  ▶ 概念

唯一约束(Unique Key)是指所有记录中字段的值不能重复出现例如,为id字段加上唯一性约束后,每条记录的id值都是唯一的,不能出现重复的情况。

 4-1  创建唯一约束

▶ 语法

 ▶ 方式一:创建表时指定
       <字段名><数据类型> unique;

 ▶ 方式二:创建表后修改

       alter table 表名 add constraint 约束名 unique(列名);

演示效果 

 

4-2  删除唯一约束

▶ 语法

        alter table <表名> drop index <唯一约束名>;

创建表后修改表时,有约束名,可以直接使用设置的约束名。

创建表时设置约束,没有约束名,直接使用被约束的列名即可。

效果演示

 

【总结】



五   默认约束

 ▶ 概念

MySQL默认值约束用来指定某列的默认值。

5-1  创建默认约束

 ▶ 语法

 ▶ 方式一:创建表时指定
       <字段名><数据类型> default <默认值>;

 ▶ 方式二:创建表后修改

     alter table 表名 modify 列名 类型 default 默认值;

演示效果

 

5-2  删除默认约束

  ▶ 语法

 alter table <表名> modify change column <字段名> <类型> default nll;

效果演示

 

【总结】 

 



六   零填充约束

 ▶ 概念

1、插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的O

2、zerofill默认为int(10)
3、当使用zerofill时:默认会自动加unsigned(无符号)属性,使用unsigned属性后,数值范围是原值的2倍,例如,有符号为-128~+127,无符号为0~256。

6-1  创建零填充约束

  ▶ 语法

        <字段名><数据类型> zerofill;

create table t_user12(
        id int zerofill,    -- 零填充约束
        name varchar(20)
);

效果演示

 

6-2  删除零填充约束 

  ▶ 语法

alter table 表名 modify <字段名> <类型> ;

演示效果 

【总结】

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1433363.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法学习——华为机考题库10(HJ64 - HJ69)

算法学习——华为机考题库10&#xff08;HJ64 - HJ69&#xff09; HJ64 MP3光标位置 描述 MP3 Player因为屏幕较小&#xff0c;显示歌曲列表的时候每屏只能显示几首歌曲&#xff0c;用户要通过上下键才能浏览所有的歌曲。为了简化处理&#xff0c;假设每屏只能显示4首歌曲&a…

ffmpeg的使用,安装,抽帧,加水印,截图,生成gif,格式转换,抓屏等

实际使用中总结的关于ffmpeg对视频的处理的记录文档 具体信息&#xff1a; http://ffmpeg.org/download.html 官网下载ffmpeg 关于ffmpeg的安装详细步骤和说明 装ffmpeg 方式,Linux和windows下的 http://bbs.csdn.net/topics/390519382 php 调用ffmpeg , http://bbs.csdn.net/t…

『 C++ - Hash 』闭散列与开散列哈希表详解及其实现 ( 万字 )

文章目录 &#x1f47e; 哈希表概念&#x1f47e; 常见哈希函数&#x1f38f; 直接定址法&#x1f38f; 除留余数法 &#x1f47e; 哈希冲突的解决方案&#x1f38f; 闭散列与闭散列哈希表的实现&#x1f390; 闭散列哈希表的节点设置与基本架构&#x1f390; 闭散列哈希表的插…

【Linux系统 01】Vim工具

目录 一、Vim概述 1. 文件打开方式 2. 模式切换 二、命令模式 1. 移动与跳转 2. 复制与粘贴 3. 剪切与撤销 三、编辑模式 1. 插入 2. 替换 四、末行模式 1. 保存与退出 2. 查找与替换 3. 分屏显示 4. 命令执行 一、Vim概述 1. 文件打开方式 vim 文件路径&#…

jmeter设置关联

一、为什么要设置关联&#xff1f; http协议本身是无状态的&#xff0c;客户端只需要简单向服务器请求下载某些文件&#xff0c;无论是客户端还是服务端都不去记录彼此过去的行为&#xff0c;每一次请求之间都是独立的。如果jmeter需要设置跨线程组脚本&#xff0c;就必须设置…

【代码随想录-哈希表】有效的字母异位词

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

flutter开发实战-ijkplayer视频播放器功能

flutter开发实战-ijkplayer视频播放器功能 使用better_player播放器进行播放视频时候&#xff0c;在Android上会出现解码失败的问题&#xff0c;better_player使用的是video_player&#xff0c;video_player很多视频无法解码。最终采用ijkplayer播放器插件&#xff0c;在flutt…

C# OMRON PLC FINS TCP协议简单测试

FINS(factory interface network service)通信协议是欧姆龙公司开发的用于工业自动化控制网络的指令&#xff0f;响应系统。运用 FINS指令可实现各种网络间的无缝通信&#xff0c;包括用于信息网络的 Etherne(以太网)&#xff0c;用于控制网络的Controller Link和SYSMAC LINK。…

前端框架学习 Vue(3)vue生命周期,钩子函数,工程化开发脚手架CLI,组件化开发,组件分类

Vue 生命周期 和生命周期的四个阶段 Vue生命周期:一个Vue实例从创建 到 销毁 的整个过程 生命周期四个阶段 :(1)创建 (2)挂载 (3)更新 (4)销毁 Vue生命周期函数(钩子函数) Vue生命周期过程中,会自动运行一些函数,被称为[生命周期钩子] ->让开发者可以在[特定阶段] 运行自…

[MFC] MFC消息机制的补充

之前写了[MFC] 消息映射机制的使用和原理浅析&#xff0c;还有些需要补充的&#xff0c;都记在这里。 MFC 消息的分类 MFC消息分为系统消息和自定义消息。 图片来源&#xff1a;C语言/C教程 大型源码案例分析&#xff1a;MFC消息系统的代码解析 易道云编程 系统消息分为窗口…

【SpringBoot】SpringBoot的web开发

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;SpringBoot ⛺️稳重求进&#xff0c;晒太阳 Wbe开发 使用Springboot 1&#xff09;、创建SpringBoot应用&#xff0c;选中我们需要的模块&#xff1b; 2&#xff09;、SpringBoot已经默…

用友GRP-U8 listSelectDialogServlet SQL注入漏洞复现

0x01 产品简介 用友GRP-U8R10行政事业内控管理软件是用友公司专注于国家电子政务事业,基于云计算技术所推出的新一代产品,是我国行政事业财务领域最专业的政府财务管理软件。 0x02 漏洞概述 用友GRP-U8R10行政事业内控管理软件 listSelectDialogServlet 接口处存在SQL注入…

chisel RegInit/UInt/U

val reg RegInit(0.U(8.W)) //ok val reg RegInit(0.UInt(8.W)) //errU 使用在数字 . 后边50.U UInt 使用在IO(new Bundle val a Input(UInt(8.W)) 或者 def counter(max:UInt, a1:UInt) package emptyimport chisel3._ import chisel3.util._class MyCounter extends …

操作系统-【预备学习-1】(Linux 文件目录)

文章目录 相关知识目录结构进入目录补充查看目录创建文件删除文件创建文件夹删除文件夹文件和文件夹拷贝文件和文件夹移动/重命名 任务要求 相关知识 目录结构 Linux 文件系统是树形层次结构&#xff0c;具体如下图所示&#xff0c;最重要的是根目录&#xff08;/&#xff09…

06 - python操作xml

认识XML 与HTML很像&#xff0c;是一种将数据存储在标记之间的标记语言&#xff0c;用户可以自定义自己的标记。 XML文件可以表示称为&#xff1a;XML树。这个XML树从根元素开始&#xff0c;根元素进一步分支到子元素。XML文件的每个元素都是XML树的一个节点&#xff0c;没有…

服务器和云服务器哪个更安全?

随着云计算技术的不断发展&#xff0c;越来越多的企业开始选择使用云服务器来存储和处理数据。然而&#xff0c;对于一些企业来说&#xff0c;他们可能更倾向于使用传统的服务器。在这种情况下&#xff0c;安全性成为了一个重要的考虑因素。那么&#xff0c;服务器和云服务器哪…

arm 汇编积累

C语言函数与汇编对应关系 一、MOV 系列指令 1、指令格式 MOV{条件}{S} 目的寄存器&#xff0c;源操作数 2、含义解析&#xff1a; &#xff08;1&#xff09;&#xff1a;mov 指令传送数据 案例&#xff1a; MOV R0,R1 ; R0 R1; MOV PC,R14 ;PC R14; MOV R0,R…

[Angular 基础] - 数据绑定(databinding)

[Angular 基础] - 数据绑定(databinding) 上篇笔记&#xff0c;关于 Angular 的渲染过程及组件的创建&简单学习&#xff1a;[Angular 基础] - Angular 渲染过程 & 组件的创建 Angular 之中的 databinding 是一个相对而言更加复杂&#xff0c;以及我个人觉得相对而言比…

Java on Azure Tooling 2024年1月更新|Azure Key Vault 支持、示例项目创建支持及更多

作者&#xff1a;Jialuo Gan - Program Manager, Developer Division At Microsoft 排版&#xff1a;Alan Wang 大家好&#xff0c;欢迎来到 2024 年 Java on Azure 工具的首次更新。在本次更新中&#xff0c;我们将介绍对于 Azure Key Vault 支持、基于 Azure 示例项目的创建支…

C++ 调用lua 脚本

需求&#xff1a; 使用Qt/C 调用 lua 脚本 扩展原有功能。 步骤&#xff1a; 1&#xff0c;工程中引入 头文件&#xff0c;库文件。lua二进制下载地址&#xff08;Lua Binaries&#xff09; 2&#xff0c; 调用脚本内函数。 这里调用lua 脚本中的process函数&#xff0c;并…