MySQL表的约束

news/2024/11/18 1:45:49/

为防止数据表中插入错误的数据,MySQL定义了一些维护数据库完整性的规则,即表的约束。常用的约束分为五种:默认约束、非空约束、主键约束、唯一约束和外键约束

目录

默认约束

非空约束

唯一约束

主键约束

自动增长


默认约束

默认约束用来为数据表中的字段指定默认值,即没有给字段赋值时系统会自动给它一个默认值

默认值用DEFAULT关键字定义的,其语法格式:

字段名 数据类型 DEFAULT 默认值;

注意:BLOB、TEXT数据类型不支持默认约束

//创建表时添加默认约束

mysql>CREATE TABLE mytable(

->        age INT UNSIGNED DEFAULT 18 //添加默认约束

->        );

//为现有表添加或删除默认约束

//删除默认约束

mysql>ALTER TABLE mytable MODIFY age INT UNSIGNED;

//添加默认约束

musql>ALTER TABLE mytable MODIFY age INT UNSIGNED DEFAULT 18;

非空约束

非空约束是指字段的值不能为NULL

在MySQL中,非空约束是通过NOT NULL来定义的,其语法格式:

字段名 数据类型 NOT NULL

注意:非空约束与值为NULL的默认约束不能同时存在,否则数据表会创建失败

//创建表时添加非空约束

mysql>CREATE TABLE mytable(

->        name VHAR(10) NOT NULL,

->        age INT NOT NULL DEFAULT 18 //添加非空约束

->        );

//为现有表添加或删除非空约束

//删除非空约束

mysql>ALTER TABLE mytable MODIFY age INT NOT NULL;

//添加非空约束

musql>ALTER TABLE mytable MODIFY age INT NOT NULL DEFAULT 18;

唯一约束

 唯一约束用于保证数据表中字段的唯一性,即表中字段的值不能重复出现,MySQL的唯一约束允许存在多个NULL值

唯一约束用过UNIQUE定义,其语法格式:

#列级约束

字段名 数据类型 UNIQUE;

#表级约束

UNIQUE(字段名1,字段名2,...);

列级约束和表级约束为MySQL中两种定义约束的方式:列级约束定义在一个列上,只对该列起约束作用,表级约束独立于列的定义,可应用于表的多个列上

#列级约束

mysql>CREATE TABLE mytable ( 

->        id INT UNSIGNED UNIQUE,

->        name VARCHAR(10) UNIQUE

->        );

#表级约束

mysql>CREATE TABLE mytable ( 

->        id INT UNSIGNED ,

->        name VARCHAR(10) ,

->        UNIQUE (id),

->        UNIQUE(name)

->        );

注意:当表级列表仅建立在一个字段上时,其作用效果与列级约束相同

#删除唯一约束

mysql>ALTER TABLE mytable DROP INDEX id;

#添加唯一约束

mysql>ALTER TABLE mytable ADD UNIQUE (id);

创建复合唯一约束:只有多个字段的值相同时才视为重复记录

mysql>CREATE TABLE mytable (

->        id INT UNSIGNED,username VARCHAR(10),

->        UNIQUE(id,username)

->        );

主键约束

主键主要用来唯一标识表中的记录,类似于指纹、身份证用于标识人的身份一样

主键约束通过PRIMARY KEY定义,相当于唯一约束和非空约束的组合

主键约束也分为列级和表级,其语法格式如下:

#列级约束

字段名 数据类型 PRIMARY KEY

#表级约束

PRIMARY KEY(字段名1,字段名2......)

mysql>CREATE TABLE mytable (

->        id INT PRIMARY KEY,

->        name VARCHAR(10)

->        );

删除主键约束

mysql>ALTER TABLE mytable DROP PRIMARY KEY;

注意:为某字段添加主键约束后,该字段相当于有了非空约束和唯一约束,但是删除它的主键约束后,该字段的非空约束并没有删除

自动增长

在为表设置主键约束后,每次插入数据都要检查主键的值,为了防止插入值重复导致插入失败,我们可以使用自动增长功能来自动生成主键的值

自动增长功能用AUTO_INCREMENT来实现,其基本语法如下:

字段名 数据类型 AUTO_INCREMENT

mysql>CREATE TABLE mytable (

->        id INT PRIMARY KEY AUTO_INCREMENT,

->        name VARCHAR(20)

->        );

使用AUTO_INCREMENT时需注意以下四点:

  1. 一个表只能有一个自动增长字段,并且该字段的数据类型是整数类型且必须定义为键,如UNIQUE KEY、PRIMARY KEY
  2. 若为自动增长字段插入NULL、0、DEFAULT或在插入时省略该字段,该字段都会自动使用自动增长值;若插入为具体值,则不会使用自动增长值
  3. 自动增长值从1开始自增并且每次加1,若插入的值大于自动增长的值,则下次插入的自动增长值会自动使用最大值加1;若插入的值小于自动增长值,则不会对自动增长值产生影响
  4. 使用DELETE删除记录时,自动增长值不会减小或填补空缺

#修改自动增长值

mysql>ALTER TABLE mytable AUTO_INCREMENT = 10;

#删除自动增长

mysql>ALTER TABLE mytable MODIFY id INT;

#添加自动增长

mysql>ALTER TABLE mytable MODIFY id INT AUTO_INCREMENT;

在为字段删除自动增长并重新添加自动增长后,自动增长的初始值主动设为该列现有的最大值+1

修改自动增长值时,若自动增长值小于该列现有的最大值则修改不会生效


http://www.ppmy.cn/news/4196.html

相关文章

Linux文件权限概念

目录 前言 1、Linux 文件属性 1.1、档案类型权限 1.2、连结数 1.3、档案拥有者 1.4、档案所属群组 1.5、档案容量 1.6、档案最后被修改的时间 1.7、档名(文件名) 2、如何改变文件属性和权限 2.1、改变所属群组, chgrp 2.2、改变档案拥有者, c…

DockerCompose部署系列:搭建Graylog日志环境

# 拉取镜像 docker pull elasticsearch:7.12.0 docker pull graylog/graylog:4.3.6 docker pull mongo:4.2# 创建网络 docker network create mynetwork# 配置三个文件,es,mogo,graylog vi dockercompose-es.yml version: 3 services:elasticsearch:image: elastics…

【数据结构Note6】-图-知识总结(图存储+BFS+DFS+最小生成树+最短路径+拓扑+逆拓扑)

文章目录6.1 图的定义及性质6.1.1 无向图和有向图6.1.2 简单图和多重图6.1.3 图的相关概念6.1.3.1 顶点的度6.1.3.2 顶点和顶点的关系6.1.3.3 子图6.1.3.4 连通分量6.1.3.5 强连通分量6.1.3.6 生成树6.1.3.7 生成森林6.1.3.8 边的权、带权图/网6.1.3.9 几种特殊的图6.2 图的存储…

leetcode1785:构成特定和需要添加的最少元素(12.16每日一题)

题目表述&#xff1a; 给你一个整数数组 nums &#xff0c;和两个整数 limit 与 goal 。数组 nums 有一条重要属性&#xff1a;abs(nums[i]) < limit 。 返回使数组元素总和等于 goal 所需要向数组中添加的 最少元素数量 &#xff0c;添加元素 不应改变 数组中 abs(nums[i…

【Linux】进程间通信

目录 一、进程间通信背景 1、进程间通信的理解 2、进程间通信的目的 3、进程间的必要性 二、管道 1、什么是管道 2、匿名管道 3、命名管道 4、管道通信的特点 三、System V IPC 1、共享内存 2、进程互斥 总结 一、进程间通信背景 1、进程间通信的理解 进程运行具…

时间哈希+日期处理 睡大觉

E-睡大觉_2022河南萌新联赛第&#xff08;四&#xff09;场&#xff1a;郑州轻工业大学 (nowcoder.com) 题意&#xff1a; 思路&#xff1a; 这是一道模拟题&#xff0c;这里主要总结如何处理时间信息和日期信息 对于时间信息&#xff1a;把时分秒转化成秒&#xff0c;相当…

无法打开jupyter notebook

无法打开jupyter notebook遇到的问题问题分析tornado什么是tornado?如何更新tornado问题解决解决方法一解决方法二参考资料遇到的问题 今天打开anaconda prompt的时候想要打开jupyter notebook,但是遇到的了如下报错: Traceback (most recent call last): File “C:\ProgramD…

通用插件框架体系-日志系统

通用插件框架体系-日志系统: 1.目的 日志是软件系统的基本功能,通过日志可以跟踪代码执行、分析问题。但日志系统作为一个辅助系统也有一些自己的要求。 1.执行效率足够快,不应对主业务产生影响。 2.可以根据需要控制输出的信息类容。 3.能适应复杂的项…