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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
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约束只有列级约束,没有表级约束


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 SQL 关系型数据库
MySQL语句详解:从基础到进阶的全面指南
MySQL语句详解:从基础到进阶的全面指南
|
存储 关系型数据库 MySQL
MySQL数据库进阶第三篇(MySQL性能优化)
MySQL数据库进阶第三篇(MySQL性能优化)
|
存储 关系型数据库 MySQL
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
|
SQL 关系型数据库 MySQL
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(2)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(1)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
存储 关系型数据库 MySQL
MySQL数据库开发进阶:精通数据库表的创建与管理22
【7月更文挑战第22天】数据库的创建与删除,数据表的创建与管理
140 1
|
JSON 关系型数据库 MySQL
MySQL常用函数解读:从基础到进阶的全方位指南
MySQL常用函数解读:从基础到进阶的全方位指南
|
SQL 关系型数据库 MySQL
Python进阶第二篇(Python与MySQL数据库)
Python进阶第二篇(Python与MySQL数据库)
|
存储 SQL 关系型数据库
MySQL数据库进阶第四篇(视图/存储过程/触发器)
MySQL数据库进阶第四篇(视图/存储过程/触发器)

推荐镜像

更多