MySQL-----约束


目录​​​​​

约束

一   主键约束

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.mzph.cn/news/667079.shtml

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

相关文章

android 设置未知来源等 AppOpsManager 权限的设置接口

开始客户让我们执行下面的CMD 代码 adb shell appops set com.android.chrome REQUEST_INSTALL_PACKAGES allow 后来 GTP 告诉我有 Setmode的方法&#xff0c;后面在设置里面找到了 OP_REQUEST_INSTALL_PACKAGES 这个&#xff0c;里面有个方法mAppOpsManager.setMode(AppOp…

寒假作业2月4号

第三章 类与构造函数 一&#xff0e;选择题 1、下列不能作为类的成员的是&#xff08;B&#xff09; A. 自身类对象的指针 B. 自身类对象 C. 自身类对象的引用 D. 另一个类的对象 2、假定AA为一个类&#xff0c;a()为该类公有的函数成员&#xff0c;x为该类的一个对象&am…

SpringCloud + Nacos环境下抽取Feign独立模块并支持MultipartFile

文章目录 一、前提条件和背景1. 前提2. 背景 二、Feign模块1. 依赖引入2. application.yaml配置3. 扩展支持MultipartFile4. 将media-api注册到feign 三、Media模块四、Content模块1. 引入依赖2. 启用FeignClient3. 测试 五、需要澄清的几点 一、前提条件和背景 1. 前提 已经…

反洗钱_1_反洗钱的相关概念

文章目录 一、反洗钱的相关概念1.1 洗钱1.1.1洗钱(Money Laundering)的由来1.1.2 洗钱的概念1.1.3 洗钱的基本过程 1.2 反洗钱 一、反洗钱的相关概念 1.1 洗钱 1.1.1洗钱(Money Laundering)的由来 20世纪20年代&#xff0c;美国芝加哥一个叫做卡蓬特的犯罪集团&#xff0c;以…

谷粒商城-P19

项目结构创建&提交到码云 数据库初始化 保持docker数据库一直打开 docker update redis --restartalways 连不上了&#xff0c;发现配置文件错了 换了一个配置文件。 快速开发 使用开源的脚手架 人人开源 (gitee.com) 使用renren-fast作为后台开发&#xff0c;使用…

Axure RP9原型设计工具使用记录:实际应用及问题记录

Axure RP9使用记录二 &#x1f4da;第三章 实际应用&#x1f4d7;快速归位00坐标&#x1f4d7;动态菜单&#x1f4d7;填充图片&#x1f4d7;下拉框联动&#x1f4d7;单选框&#x1f4d7;全局变量 ⁉️问题记录❓问题一&#xff1a;菜单不显示❗解决方式&#xff1a;调整菜单元件…

elasticsearch 索引模版

当需要为同一类索引应用相同的配置、映射、别名时&#xff0c;如果每次创建索引都逐一配置会有些麻烦。索引模板的出现正是为了简化这种操作&#xff0c;使用索引模板你可以方便地为某一类索引自动配置某些共同的参数 使用索引模版定制索引结构 假如你想在Elasticsearch中创建…

深入Spring MVC的工作流程

深入Spring MVC的工作流程 在Spring MVC的面试问题中&#xff0c;常常被询问到的一个问题。Spring MVC的程序中&#xff0c;HTTP请求是如何从开始到结束被处理的。为了研究这个问题&#xff0c;我们将需要深入学习一下Spring MVC框架的核心过程和工作流程。 1. 启动请求生命周…

【UE5 C++】超详细虚幻C++零基础学习教程

B站免费教程&#xff0c;虚幻C零基础教学入门级视频&#xff0c;帮助大家学习虚幻C。 视频地址&#xff1a;【虚幻5】UE5C零基础全网全流程开发从入门到进阶教程合集&#xff08;持续跟新中&#xff09;_哔哩哔哩_bilibili 课程介绍视频如下 【虚幻5】UE5C零基础全网全流程开…

[python]基于LSTR车道线实时检测onnx部署

【框架地址】 https://github.com/liuruijin17/LSTR 【LSTR算法介绍】 LSTR车道线检测算法是一种用于识别和定位车道线的计算机视觉算法。它基于图像处理和机器学习的技术&#xff0c;通过对道路图像进行分析和处理&#xff0c;提取出车道线的位置和方向等信息。 LSTR车道线…

Qt之使用Qt内置图标

一效果 二.原理 Qt内置图标封装在QStyle中,共七十多个图标,可以直接拿来用,能应付不少简单程序需求,不用自己去找图标并添加到资源文件了。 下面是内置图标的枚举定义: enum StandardPixmap {SP_TitleBarMenuButton,SP_TitleBarMinButton,SP_TitleBarMaxButton,SP_T…

error: failed to push some refs to....

使用 git push 时报错&#xff1a; AdministratorUSER-20231229RG MINGW64 ~/Desktop/工作/gitCode/answer-questions (master) $ git push -u origin master Enumerating objects: 4, done. Counting objects: 100% (4/4), done. Delta compression using up to 8 threads Co…

PHP框架详解 - symfony框架

首先说一下为什么要写symfony框架&#xff0c;这个框架也属于PHP的一个框架&#xff0c;小编接触也是3年前&#xff0c;原因是小编接触Golang&#xff0c;发现symfony框架有PHP框架的东西也有Golang的东西&#xff0c;所以决定总结一下&#xff0c;有需要的同学可以参看小编的G…

【数据结构】链表OJ面试题(题库+解析)

前言 还不清楚链表的码喵们可以看看前篇关于链表的详解 http://t.csdnimg.cn/X6t6P 1.链表面试题 既然已经懂得了链表该如何实现&#xff0c;那么现在就趁热打铁开始练习&#xff01;这里给码喵们整理了相对不错的一些OJ题来练习 1. 删除链表中等于给定值 val 的所有结点。 力…

【Lambda表达式和函数式接口】

目录 Lambda表达式和函数式接口的使用具有以下几个影响&#xff1a;下面是一个简单的示例代码&#xff0c;使用Lambda表达式实现一个对列表进行遍历的操作&#xff1a; 在Java 8及以上版本中&#xff0c;Lambda表达式是一种函数式编程的特性&#xff0c;它可以使代码更加简洁、…

【Tomcat与网络2】一文理解Servlet是怎么工作的

在前面&#xff0c;我们研究了如何用idea来启动一个Servlet程序&#xff0c;今天我们就再来看一下Servlet是如何工作的。 目录 1.Servlet 介绍 2.Servlet 容器工作过程 3.Servlet的扩展 不管是电脑还是手机浏览器&#xff0c;发给服务端的就是一个 HTTP 格式的请求&#xf…

微信网页授权之使用完整服务解决方案

目录 微信网页授权能力调整造成的问题 能力调整的内容和理由 原有运行方案 is_snapshotuser字段 改造原有方案 如何复现测试场景 小结 微信网页授权能力调整造成的问题 依附于第三方的开发&#xff0c;做为开发者经常会遇到第三方进行规范和开发的调整&#xff0c;如开…

【EI会议征稿通知】2024年材料物理与复合材料国际学术会议

2024年材料物理与复合材料国际学术会议 2024 International Conference on Materials Physics and Composites(ICMPC 2024) 2024年材料物理与复合材料国际学术会&#xff08;ICMPC 2024&#xff09;将于2024年5月24-26日在中国成都举行。ICMPC 2024将吸引顶尖的研究人员和从业…

Python flask 模板详解

文章目录 1 概述1.1 模板简介1.2 templates 文件1.3 简单应用 2 模板语法2.1 for 循环2.2 if 判断 3 模板的继承3.1 格式要求3.2 实现示例3.3 复用父模板的内容&#xff1a;super 1 概述 1.1 模板简介 定义&#xff1a;定义好的 html 文件&#xff0c;用于快速开发 web 页面J…

android tv开发-1,leanback 2

目录 presenter太多,如何理清关系 动画与点击 tv的登录与设置 搜索功能 带二级菜单的页面 presenter太多,如何理清关系 leanback里面已经定义好了adapter与presenter,直接继承它就可以了 private DefaultObjectAdapter mVideoAdapter; private VideoCardPresenter mCardP…