MySQL学习之数据库表五大约束详解小白篇

目录
  • 1.约束概念和分类
  • 2.五大约束的添加和删除
    • 2.1添加约束的六种方法
    • 2.2三种删除约束的方式
    • 2.3五大约束分别对应的添加删除方式(序号对应2.1和2.2)
    • 2.4对于创建约束的总结
    • 2.5对于主键和唯一的区别
  • 3.自增长列
    • 3.1概念
    • 3.2在创建表的时候添加主键约束,并且完成主键自增长的例子
    • 3.3自增长的添加和删除
    • 3.4设置自增长步长

1.约束概念和分类

1.1约束的概念:

对表中的数据进行限定,保证数据的正确性,有效性,完整性

1.2约束分类

  • 1.主键约束(primary key):保证该字段具有非空且唯一性,一张表中只能有一个主键,主键是表中字段的唯一标识
  • 2.非空约束(not null):保证字段不能为空
  • 3.唯一约束(unique):保证该字段具有唯一性但是可以为null
  • 4.外键约束(foreign key):在一个表中存在的另一个表的主键或唯一键称此表的外键。
  • 5.默认约束(default+默认值):用于保证该字段有默认值(用引号引起来)

2.五大约束的添加和删除

2.1添加约束的六种方法

1.在创建表的时候添加非空约束(以列级约束添加)

create table + 表名(
列名 数据类型 + 约束名
)

2.在创建表的时候添加非空约束(以表级约束添加)

create table 表名(
列名 数据类型,
...
列名 数据类型,
(constraint +别名(就是随便为自己添加的约束起一个名字)) 约束名(对应字段名)
)

3.修改列名的时候

alter table + 表名 + change (column) + 旧列名 新列名 新列名的类型 + 约束

4.修改列的数据类型的时候

alter table + 表名 + modify + (column) + 列名 列类型 约束

5.在添加新列的时候可以添加约束

alter table + 表名 + add + (column) + 新列名 + 新列名的类型 + 约束

6.外键特有

alter table + 表名 + add constraint 外键名称(自己随便为外键取得名字) + foreign key(外键字段名) references 主表名称(主表要关联的字段)

2.2三种删除约束的方式

1.修改列名的时候不加约束

alter table + 表名 + change (column) + 旧列名 新列名 新列名的类型

2.修改列的数据类型的时候不加约束

alter table + 表名 + modify + (column) + 列名 列类型

3.运用drop特定删除约束

alter table + 表名 + drop index/foreign key/primary key + 约束的名字

注:查看表中约束的名字:

show index from + 表名

2.3五大约束分别对应的添加删除方式(序号对应2.1和2.2)

1.非空约束(not null)

  • 对应的添加方式:1 3 4 5
  • 对应的删除方式:1 2

2.唯一约束(unique)

  • 对应的添加方式:1 2 3 4 5
  • 对应的删除方式:1 2 3(对应第3种的index选项)

3.默认约束(default)

  • 对应的添加方式:1 3 4 5
  • 对应的删除方式:1 2

4.主键(primary key)

  • 对应的添加方式:1 2 3 4 5
  • 对应的删除方式:3(对应第3种的primary key选项注意后边不加约束的名字了,因为一个表里只能有一个主键)

5.外键(foreign key)

  • 对应的添加方式:2 6
  • 对应的删除方式:3(对应第3种的foreign key选项)

外键单独拿出来讲
我们先看一个员工表(字段分别是员工编号,姓名,年龄,所属部门,部门所在地):

我们可以发现有冗余的部分,就是研发部对应广州,销售部对应深圳不用写那么多遍,其实可以把他们分成两张表来防止冗余的部分,第一张表存储员工的信息,另一张存储部门信息
表1(员工表employee):

表2(部门表department):

这里两个表的id都是主键

但是这里有一个问题,就是,我们可以随便删除部门表的某一行,就比如id=1的那一行,一旦删除,那么表1里的dep_id=1的员工就查不到他们的部门信息了,所以就可以用外键来解决这个问题

我们可以在创建表的时候就指定dep_id是外键,关联department的主键id

语句格式(这里虽然是第2种方法也就是以表级约束添加外键但是语法上有不同):

create table 表名(
列名 数据类型,
...
列名 数据类型,
(constraint + 别名(就是随便为自己添加的约束起一个名字)) + foreign key(字段名) + references + 主表(主表对应字段)
)

对于本例子就可以这么写:

create table employee(
id int primary key,
sname varchar(5),
age int,
dep_id int,
constraint aaa foreign key(dep_id) references department(id)
)

加上外键后我们就不能删除department表里边的任意一行,而且,我们也不能在employee里边添加新的员工信息的时候把dep_id填写成除1,2之外的任何数字

2.4对于创建约束的总结

在创建表的时候添加列级约束只支持:默认,非空,主键,唯一
在添加表级约束只支持:主键,唯一,外键

2.5对于主键和唯一的区别

主键至多一个唯一可以有多个
允许两个列组成一个主键和一个唯一

3.自增长列

3.1概念

如果某一列是数值类型,使用 auto_increment可以来完成值的自动增长(一般都是和主键一起用)

3.2在创建表的时候添加主键约束,并且完成主键自增长的例子

格式:

create table 表名(
列名 数据类型 primary key + auto_increment
)

举个例子:
我们创建一个含学号姓名的student表,并且按照学号自增长
创建语句:

create table student(
id int primary key auto_increment,
sname char(4)
)

如果此时我们表里有一个数据;

当我们再次插入数据的时候不给学号即

insert into student value(null,“李四”)

再次查看表的时候自动给我们按自增长补了学号:

3.3自增长的添加和删除

1.添加(上述在创建的时候添加是一种)

alter table + 表名 + modify column + 列名 类型 约束 + AUTO_INCREMENT

2.删除

alter table + 表名 + modify column 列名 类型

3.4设置自增长步长

自增长起始值为1,步长起始值为1
起始值不能更改,步长可以更改
用show VARIABLES LIKE “%auto_increment%”
查看对应的步常代表的名字然后用set 步长代表名字=要设置的步长

以上就是MySQL学习之数据库表五大约束详解小白篇的详细内容,更多关于MySQl五大约束的资料请关注我们其它相关文章!

(0)

相关推荐

  • MySQL 数据库中数据表超详细的基本操作

    目录 1. 查看当前数据库中的表 2. 创建表 3. 查看指定表结构 4. 删除表 5. 往表中新增数据 6. 查找表中的数据 6.1 全列查询 6.2 指定列查询 6.3 查询字段为表达式 6.4 给某个列指定常量 6.5 给查询的表达式指定别名(as) 6.6 去重查询(distinct) 6.7 对查询结果进行排序(order by) 6.8 条件查询(where) 6.9 分页查询(limit) 7. 修改表中的数据 8. 删除表中的数据 前言: 库名.表名.列名等等不能和关键字相同,如

  • Mysql关于数据库是否应该使用外键约束详解说明

    一.前言 对于[是否使用外键约束]这个话题已经是老生常谈的了.在学校中,老师交给我们的大多是需要我们建立外键约束,但进入了实际工作很多时候并不会使用外键,而是通过代码逻辑来控制.包括在阿里的JAVA规范中也明确规定:[强制]不得使用外键与级联,一切外键概念必须在应用层解决. 为什么要做这样的规定呢?到底该不该使用外键约束呢?我们可以举一个例子来说明 二.举例说明 现在我们在数据库中建立了两张表:[product和project],[project]的porduct字段,关联Product,他们之

  • 基于MySQL数据库的数据约束实例及五种完整性约束介绍

    为了防止不符合规范的数据进入数据库,在用户对数据进行插入.修改.删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确.有效.相容. #数据约束 #五种完整性约束: #NOT NULL :非空约束,指定某列不能为空: #UNIQUE : 唯一约束,指定某列或者几列组合不能重复 #PRIMARY KEY :主键,指定该列的值可以唯一地标识该列记录 #FOREIGN KEY :外键,指定该行记录从属于主表中的一条记录,主要用于参照完

  • MySQL对数据表已有表进行分区表的实现

    目录 操作方式 操作过程 对现有的一个表进行创建分区表,并把数据迁移到新表,可以按时间来分区,然后这表不是实时更新,每天有一次插入操作. 时间比较充裕,但是服务器上有其他应用,使用较小资源为主要方式. 操作方式 @1 可以使用ALTER TABLE来进行更改表为分区表,这个操作会创建一个分区表,然后自动进行数据copy然后删除原表, 猜测服务器资源消耗比较大. 类似操作 ALTER TABLE tbl_rtdata PARTITION BY RANGE (Month(fld_date)) ( P

  • MySQL 数据库的约束及数据表的设计原理

    目录 1. 数据库的约束 1.1 介绍 1.2 约束类型 1.3 not null 1.4 unique 1.5 default 1.6 primary key 1.7 foreign key 1.8 check 2. 数据库表的设计 2.1 一对一关系 2.2 一对多关系 2.3 多对多关系 1. 数据库的约束 1.1 介绍 数据库中的约束 ,顾名思义即是对插入数据库中的数据进行限定,这么做的目的是为了保证数据的有效性和完整性. 这样就大幅度地提高了数据库中数据的质量,节省了数据库的空间和调用

  • MySQL学习之数据库表五大约束详解小白篇

    目录 1.约束概念和分类 2.五大约束的添加和删除 2.1添加约束的六种方法 2.2三种删除约束的方式 2.3五大约束分别对应的添加删除方式(序号对应2.1和2.2) 2.4对于创建约束的总结 2.5对于主键和唯一的区别 3.自增长列 3.1概念 3.2在创建表的时候添加主键约束,并且完成主键自增长的例子 3.3自增长的添加和删除 3.4设置自增长步长 1.约束概念和分类 1.1约束的概念: 对表中的数据进行限定,保证数据的正确性,有效性,完整性 1.2约束分类 1.主键约束(primary k

  • MySQL数据库如何给表设置约束详解

    目录 一.PK(主键约束) 1.什么是主键? 2.怎么设置主键? 二.FK(外键约束) 1.什么是外键 2.怎么设置外键 三.unique(唯一约束) 1.什么是唯一约束? 2.如何设置唯一约束 四.notnull(非空) 五.default(默认值) 六.auto_increment(自增) 一.PK(主键约束) 1.什么是主键? 在了解主键之前,先了解一下什么是关键字 关键字:在表中具有唯一性的字段,比如一个人的身份证号,学号.一个表中可以有多个关键字. 主键也叫主关键字,就是由一个或多个关

  • MySQL学习之数据库操作DML详解小白篇

    目录 1.插入语句 1.1插入一行 1.2插入多行 1.3插入查询语句 2.修改语句 2.1修改单表记录 2.2修改多表记录 3.删除语句 3.1方式1使用delete删除 3.2方式2使用truncate删除 3.3使用truncate和delete删除的区别 1.插入语句 1.1插入一行 有两种: 1.以小括号的形式 这里注意:如果表名后边不加小括号对应内容,那么默认就是添加所有列 2.以set形式 insert into + 表名 set 表中的某一个字段=要插入的值,表中的某一个字段=要

  • MySQL学习之三大范式详解小白篇

    目录 1.范式基础 1.1范式的概念 2.三大范式 2.1三大范式概念 2.2三大范式举例 1.进行第一范式的改造 2.进行第二范式的改造 3.进行第三范式的改造 1.范式基础 1.1范式的概念 设计数据库的时候需要遵从的一些规范,目前关系数据库有六种范式:第一范式(1NF).第二范式(2NF).第三范式(3NF).巴斯-科德范式(BCNF).第四范式(4NF)和第五范式(5NF,又称完美范式). 当然正常情况下我们满足前三个范式就可以设计一个比较规范的数据库 要遵循后边的范式,就必须先遵循前面

  • MySQL学习之分组查询的用法详解

    目录 为什么要分组 逐级分组 逐级分组对 SELECT 子句的要求 对分组结果集再次做汇总计算 GROUP_CONCAT 函数 GROUP BY 子句的执行顺序 该章节来开始学习分组查询,上一章节我们学习了聚合函数,默认统计的是全表范围内的数据,配合上 WHERE 就能够缩小统计的范围了.但是这并不能满足我们的要求,比如说我们按照之前的数据表查询每个部门的平均底薪是多少?这样的记录就需要针对部门编号进行分组了.根据分组的情况统计分组内的最大值.最小值.平均值等等.如此就能够满足刚刚提到的 “查询

  • MySQL学习之日期函数的用法详解

    目录 获取 系统时间 函数 日期格式化 函数 日期函数练习① 日期函数练习② 日期计算的注意事项 日期偏移计算 计算日期之间相隔的天数 获取 系统时间 函数 “NOW()” 函数 能够获得当前系统日期和时间,格式如下:“YYYY-MM-DD hh:mm:ss” (这里的小时单位是 24 小时制) “CURDATE()” 函数 能够获取到当前系统的日期,格式如下:“YYYY-MM-DD” “CURTIME()” 函数 能够获得当前系统时间,格式如下:“hh:mm:ss” (24小时制) SELEC

  • IDEA社区版下载安装流程详解(小白篇)

    本人一直使用的是Eclipse作为开发工具的,不过现在IDEA非常的受推崇,所以决定上手试一试.网上有很多旗舰版的文章,我没有仔细看,我这次是决定使用社区版的IDEA,虽然功能会少一些,作为练手用完全够用了. IDEA官网地址:https://www.jetbrains.com/idea/download/ 下载社区版后,点击安装,就进行傻瓜式的安装了. 以上两个步骤中有一个点击next的时候时间会稍稍有点久,耐心等待一下就好了. 点击安装,IDEA社区版就安装完成了,安装好之后打开IDEA工具

  • C语言编程数据结构基础详解小白篇

    目录 数据结构的基本信息 数据结构 逻辑结构 1,集合结构 2,线性结构 3,树结构 4,图结构或网结构 存储结构 顺序储存结构 链式储存结构 抽象数据类型 介绍 数据结构的基本信息 数据:是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称.如:字符串,实数整数.... 数据元素:是数据的基本单位,在计算机中通常被作为一个整体进行考虑与处理.如组成通讯录的每一个人的信息,数据元素可以完整的描述一个对象. 数据项:是组成数据元素的,具有独立意义的,不可分割的最小单位(也就是

  • laravel框架学习记录之表单操作详解

    本文实例讲述了laravel框架学习记录之表单操作.分享给大家供大家参考,具体如下: 1.MVC数据流动 拿到一个laravel项目最基本的是弄清楚它的页面请求.数据流动是怎样进行的,比如当通过get请求index页面时,如何显示如下的学生信息列表: 首先当一个页面请求到达时,需要在routes/web.php中定义路由请求以及对应的处理方法: Route::get('index','StudentController@getIndex'); 然后在.env文件下设置好数据库连接,新建数据库模型

  • MySql学习笔记之事务隔离级别详解

    背景 说的事务,大家应该都不陌生,开发用到 MySql 数据库的时候,通常会用到事务.其中比较经典的例子就是转账,比如你要给小明转 50 块钱,而此时你的银行卡也就只有 50 块钱. 对于转账过程在代码程序里会有一系列的操作,比如查询账户余额.余额加减.更新余额等,这些操作必须保证是一起处理的,不然等程序查完之后,如果账号 50 块钱还在,然后再给另外一个朋友转账,如果银行也处理的话,没有保证整个流程数据一致性的话,这不就乱套了吗?这时就要用到"事务"了. 事务介绍 简单来说,事务就是

随机推荐