💖✨MySQL一万字深度总结,基础+进阶(六)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。数据库是一个按数据结构来存储和管理数据的计算机软件系统。

1.约束


1.1 什么是约束? 常见的约束有哪些?


注意:比如注册一个新的用户,底层就相当于执行一次insert语句

在创建表的时候,可以给表的字段添加相应的约束,添加约束的目的是为了保证表中数据的合法性、有效性、完整性。

常见的约束有哪些 ?

  • 非空约束 (not null) : 约束的字段不能为 NULL
  • 唯一性 (unique)  : 约束的字段不能重复
  • 主键约束 (primary key) : 约束的字段既不能为NULL,也不能重复(简称pk)
  • 外键约束 (foreign key) : ...(简称FK)
  • 检查约束 (check) : 注意oracle数据库有check约束,但是mysql没有,目前mysql不支持该约束。


1.2非空约束 (not null)


第一步 :创建一个新的表

drop table if exists t_user;
create table t_user(
  id int,
  username varchar(255) not null,
  password varchar(255)
);
复制代码

第二步 : 向表中插入数据

insert into t_user(id,username,password) values(1,'zhangsan','123');

第三步 :查看表的数据

select * from t_user;

微信截图_20220608200032.png

错误案例 :

insert into t_user(id,password) values(1,'444');

微信截图_20220608200042.png

注意 :

错误原因,在创建表的时候已经声明username不能为null

查看表的结构可以发现,在username字段的NULL为NO,说明username必须有值,不能为null

desc t_user;

微信截图_20220608200052.png

1.3唯一性约束 (unique)


1.3.1 唯一性约束修饰的字段具有唯一性,不能重复,但可以为NULL


1.3.2 案列 :给一个字段(列)加约束条件


第一步 :判断是否存在t_user表,如果存在将整个表删除并创建一个新的表,使用的是 drop table if exists t_user; create table t_user( id int, username varchar(255) unique );

第二步 : 插入数据

insert into t_user values(1,'zhangsan'); insert into t_user values(2,'zhangsan');

微信截图_20220608200209.png

注意:

  • 第一条语句可以插入成功,但是执行第二条语句插入失败,错误原因:
  • 第二条语句中的username字段的值与第一条语句中username的值一样,报错
  • 因为在建表的时候username字段加入了约束条件,该字段的值不能重复。

第三步 : 查看表的结构

desc t_user;

微信截图_20220608200226.png

注意 : 查看表结构的时候发现,表结构中的username中的Key字段有UNI关键字,说明这个字段的值不能重复。


1.3.3 username可以为NULL


第一步 :插入数据,不给定username的值,默认值为NULL(空)

insert into t_user(id) values(2); insert into t_user(id) values(3); insert into t_user(id) values(4);

第二步 : 查看表的数据

select * from t_user;

微信截图_20220608200320.png

1.3.4给多个字段(列)加约束条件


1.3.4.1表级约束 多个字段联合起来添加一个约束unique


第一步 :判断是否存在t_user表,如果存在将整个表删除并创建一个新的表

重点 :

  • 这样的语法格式,代表将usercode与username合并为一个字段,使用的是一个约束条件,
  • 即只有当usercode与username的字段值都与上一次的字段值相同值相同时,才会报错,当作同一个数据。
    drop table if exists t_user; create table t_user( id int, usercode varchar(255), username varchar(255), unique(usercode,username) );

第二步 : 插入数据

insert into t_user values(1,'111','zhangsan'); insert into t_user values(2,'111','wangwu'); insert into t_user values(3,'222','zhangsan');

第三步 :查看表的结构

desc t_user;

微信截图_20220608200407.png

注意 : 此时即表级约束中,发现usercode与username中只有usercode中的Key字段都为UNI;而username不为UNI,此时他两是绑在一起的。

第四步 : 查看表中的数据

select * from t_user;

微信截图_20220608200418.png

第五步 : 插入重复的数据

insert into t_user values(4,'111','zhangsan');

微信截图_20220608200429.png

注意:此时会报错(usercode”键的重复条目“111 zhangsan),因为插入的数据与第一次插入的数据usercode字段值和username字段值都一样.


1.3.4.2 列级约束 各自管自己的,只有当约束的字段值全不重复的时,才会成功,不会报错。


第一步 :判断是否存在t_user表,如果存在将整个表删除并创建一个新的表

重点 :

  • 这样的语法格式,代表将usercode与username各为一个字段,使用的是两个个约束条件,
  • 即当usercode与username的字段值只要有一个不一样的时候就会报错。
    drop table if exists t_user; create table t_user( id int, usercode varchar(255) unique, username varchar(255) unique );

第二步 : 插入数据

insert into t_user values(1,'111','zhangsan'); insert into t_user values(2,'222','wangwu'); insert into t_user values(2,'111','wangwu'); insert into t_user values(3,'222','zhangsan');

微信截图_20220608200535.png

注意 :

  • 此时只有1行与2行的数据插入成功,因为前两行usercode与username的字段值都不行同
  • 而后来两行数据中,usercode与username的字段值其中有一个字段是重复的,报错

第三步 :查看表的结构

desc t_user;

微信截图_20220608200547.png

注意 : 此时即列级约束中,发现usercode与username中的Key字段都为UNI;

第四步 : 查看表中的数据

select * from t_user;

微信截图_20220608200557.png

注意 :只有前两行数据,后边的两行插入失败,因为有重复。

1.4注意 : not null约束只有列级约束,没有表级约束


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
SQL 关系型数据库 MySQL
【MySQL进阶之路丨第十四篇】一文带你精通MySQL重复数据及SQL注入
【MySQL进阶之路丨第十四篇】一文带你精通MySQL重复数据及SQL注入
53 0
|
3月前
|
存储 关系型数据库 MySQL
【MySQL进阶之路丨第十三篇】一文带你精通MySQL之ALTER命令及序列使用
【MySQL进阶之路丨第十三篇】一文带你精通MySQL之ALTER命令及序列使用
42 0
|
3月前
|
机器学习/深度学习 SQL 关系型数据库
【MySQL进阶之路丨第十一篇】一文带你精通MySQL NULL值处理、正则表达式
【MySQL进阶之路丨第十一篇】一文带你精通MySQL NULL值处理、正则表达式
39 0
|
4月前
|
关系型数据库 MySQL 数据库
深入MySQL数据库进阶实战:性能优化、高可用性与安全性
深入MySQL数据库进阶实战:性能优化、高可用性与安全性
163 0
|
3月前
|
SQL 关系型数据库 MySQL
【MySQL进阶之路丨第十五篇】一文带你精通MySQL数据的导入与导出
【MySQL进阶之路丨第十五篇】一文带你精通MySQL数据的导入与导出
55 0
【MySQL进阶之路丨第十五篇】一文带你精通MySQL数据的导入与导出
|
4月前
|
SQL 关系型数据库 MySQL
MySQL进阶之性能优化与调优技巧
MySQL进阶之性能优化与调优技巧
|
3天前
|
SQL 关系型数据库 MySQL
MySQL数据库的约束+进阶版新增与查询-2
MySQL数据库的约束+进阶版新增与查询
12 1
|
3月前
|
SQL 关系型数据库 MySQL
【JavaEE进阶】 数据库连接池与MySQL企业开发规范
【JavaEE进阶】 数据库连接池与MySQL企业开发规范
|
3月前
|
SQL 监控 关系型数据库
MySQL Binlog深度解析:进阶应用与实战技巧【进阶应用】
MySQL Binlog深度解析:进阶应用与实战技巧【进阶应用】
49 0
|
3月前
|
关系型数据库 MySQL 数据库
【MySQL进阶之路丨第十七篇(完结)】一文带你精通MySQL运算符
【MySQL进阶之路丨第十七篇(完结)】一文带你精通MySQL运算符
23 0

推荐镜像

更多