广告位联系
返回顶部
分享到

MySql约束的介绍

Mysql 来源:互联网 作者:佚名 发布时间:2022-09-18 19:36:05 人浏览
摘要

1. 什么是约束 约束对应的英语单词:constraint 在创建表的时候,我们可以给表中的字段加上一些约束,来保证表中的数据的完整性、有效性!!! 约束的作用就是为了保证:表中的数据

1. 什么是约束

约束对应的英语单词:constraint

在创建表的时候,我们可以给表中的字段加上一些约束,来保证表中的数据的完整性、有效性!!!

约束的作用就是为了保证:表中的数据有效!!

2. 约束包括哪些

非空约束 not null

唯一性约束 unique

主键约束 primary key

外键约束 foreign key

检查约束 check

3. 非空约束

非空约束 not null 约束的字段不能为 NULL

1

mysql> create table t_vip(id int, name varchar(255) not null);

1

2

mysql> insert into t_vip(id, name) values(1, 'zhangsan');

mysql> insert into t_vip(id, name) values(2, 'lisi');

1

2

mysql> insert into t_vip(id) values(3);

ERROR 1364 (HY000): Field 'name' doesn't have a default value

4. 唯一性约束

唯一性约束 unique 约束的字段不能重复,但是可以为 NULL

1. 单字段唯一性约束

1

mysql> create table t_vip(id int, name varchar(255) unique, email varchar(255));

1

2

mysql> insert into t_vip(id, name, email) values(3, 'lisi', 'lisi@123.com');

ERROR 1062 (23000): Duplicate entry 'lisi' for key 't_vip.name'

1

mysql> select * from t_vip;

2. 多字段唯一性约束

需求:name 和 email 两个字段联合起来具有唯一性!!!

1

mysql> create table t_vip(id int, name varchar(255) unique, email varchar(255) unique);

这样创建的表是不符合上述需求的,因为 name 具有唯一性,email 具有唯一性。两个字段各自具有唯一性。

1

mysql> create table t_vip(id int, name varchar(255), email varchar(255), unique(name, email));

1

2

mysql> insert into t_vip(id, name, email) values(1, 'zhangsan', 'zhangsan@123.com');

mysql> insert into t_vip(id, name, email) values(1, 'zhangsan', 'zhangsan@sina.com');

5. 主键约束

主键约束 primary key 简称 pk

1. 主键约束的相关术语

  1. 主键约束:就是一种约束。
  2. 主键字段:该字段上添加了主键约束,这样的字段叫做:主键字段。
  3. 主键值:主键字段中的每一个值都叫做:主键值。

2. 什么是主键以及有啥用

主键值是每一行记录的唯一标识

主键值是每一行记录的身份证号!!!

记住:任何一张表都应该有主键,没有主键,表无效!!!

主键的特征:not null + unique(主键值不能是 NULL,同时也不能重复)

3. 单一主键

1

mysql> create table t_vip(id int primary key, name varchar(255));

主键不能重复

1

2

mysql> insert into t_vip(id, name) values(2, 'lisi');

ERROR 1062 (23000): Duplicate entry '2' for key 't_vip.PRIMARY'

主键不能为NULL

1

2

mysql> insert into t_vip(name) values('lisi');

ERROR 1364 (HY000): Field 'id' doesn't have a default value

4. 复合主键

1

mysql> create table t_vip(id int, name varchar(255), email varchar(255), primary key(id, name));

1

2

mysql> insert into t_vip(id, name, email) values(1, 'zhangsan', 'zhansgan@123.com');

mysql> insert into t_vip(id, name, email) values(1, 'lisi', 'lisi@123.com');

5. 其他主键

除了单一主键和复合主键外,还拥有:

  • 自然主键:主键值是一个自然数,和业务没有关系。
  • 业务主键:主键值和业务紧密关联,例如拿银行卡账号做主键值。这就是业务主键!

实际开发中,使用自然主键多,很少使用业务主键!!!

主键一旦和业务值挂钩,可能会出现各种问题!!!

6. 外键约束

外键页数 foregin key 简称 fk

1. 外键约束的相关术语

  1. 外键约束:一种约束:foregin key。
  2. 外键字段:该字段上添加了外键约束。
  3. 外键值:外键字段当中的每一个值。

2. 外键出现的原因

业务背景:

请设计数据库表,来描述 “班级和学生” 的信息?

第一种方案:班级和学生存储在一张表中

分析上述方案的缺点:数据冗余,空间浪费!!!

第二种方案:班级一张表,学生一张表

当 cno 字段没有任何约束的时候,可能会导致数据无效。可能出现一个 102,但是 102 班级不存在,所以为了保证 cno 字段中的值都是 100 和 101,需要给 cno 字段添加外键约束。 那么:cno 字段就是外键字段。cno 字段中的每一个值都是外键值。

注意:

t_class 是父表 t_student 是字表

删除表的顺序?

先删子,再删父。

创建表的顺序?

先创建父,再创建子。

删除数据的顺序?

先删子,再删父。

插入数据的顺序?

先插入父,再插入子。

3. 创建外键表

创建表

1

2

mysql> create table t_class(classno int primary key, classname varchar(255));

mysql> create table t_student(no int primary key auto_increment, name varchar(255), cno int, foreign key(cno) references t_class(classno));

插入数据

1

2

mysql> insert into t_class(classno, classname) values(100, '北京市大兴区亦庄镇第二中学高三1班');

mysql> insert into t_class(classno, classname) values(101, '北京市大兴区亦庄镇第二中学高三2班');

1

2

3

4

5

6

7

8

mysql> insert into t_student(name, cno) values('jack', 100);

mysql> insert into t_student(name, cno) values('lucy', 100);

mysql> insert into t_student(name, cno) values('lilei', 100);

mysql> insert into t_student(name, cno) values('hanmeimei', 100);

mysql> insert into t_student(name, cno) values('zhangsan', 100);

mysql> insert into t_student(name, cno) values('lisi', 100);

mysql> insert into t_student(name, cno) values('wangwu', 100);

mysql> insert into t_student(name, cno) values('zhaoliu', 100);

注意:子表中的外键引用的父表中的某个字段,被引用的这个字段必须是主键吗?

不一定是主键,但至少具有 unique 约束。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/qq_52354698/article/details/126671092
相关文章
  • 深入了解MySQL中的慢查询
    一、什么是慢查询 什么是MySQL慢查询呢?其实就是查询的SQL语句耗费较长的时间。 具体耗费多久算慢查询呢?这其实因人而异,有些公司慢
  • MySQL中with rollup的用法及说明

    MySQL中with rollup的用法及说明
    MySQL with rollup的用法 当需要对数据库数据进行分类统计的时候,往往会用上groupby进行分组。 而在groupby后面还可以加入withcube和withrollup等关
  • mysql分组统计并求出百分比的方法

    mysql分组统计并求出百分比的方法
    mysql分组统计并求出百分比 1、mysql 分组统计并列出百分比 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 SELECT point_id, pname_cn, play_
  • 30种SQL语句优化的方法总结
    1)对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2)应尽量避免在 where 子句中使用!=或操作符
  • 达梦数据库获取SQL实际执行计划的方法

    达梦数据库获取SQL实际执行计划的方法
    环境说明: 操作系统:银河麒麟V10 数据库:DM8 相关关键字:DM数据库、SQL实际执行计划 一、set autotrace trace disql下执行set autotrace trace开启
  • MySQL数据库约束的介绍

    MySQL数据库约束的介绍
    基本介绍 约束用于确保数据库的数据满足特定的商业规则 在mysql中,约束包括:not null,unique,primary key,foreign key 和check5种 1.primary key(主键
  • MySQL索引的介绍

    MySQL索引的介绍
    1. MySQL 索引的最左前缀原则 左前缀原则是联合索引在使用时要遵循的原则,查询索引可以使用联合索引的一部分,但是必须从最左侧开始。
  • windows下Mysql多实例部署的操作方法
    当存在多个项目的时候,需要同时部署时,且只有一台服务器时,哪么就需要部署Mysql多个实例,原理很简单,多个mysql服务运行使用不同的
  • MySQL客户端/服务器运行架构介绍

    MySQL客户端/服务器运行架构介绍
    之前对MySQL的认知只限于会写些SQL,本篇开始进行对MySQL进行深入的学习,记录和整理下自己对MySQL不熟悉的地方。如果有需要可以关注我的
  • mysql8.0主从复制搭建与配置方案

    mysql8.0主从复制搭建与配置方案
    mysql主从搭建 环境:ubuntu20.04.1,mysql:8.0.22。 主:192.168.87.3 备:192.168.87.6 安装数据库 1 2 3 sudo apt-get install mysql-server sudo apt-get install mysql
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计