【MySQL】表的约束

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【MySQL】表的约束

空属性

数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。

select 1+NULL;

果为NULL

所以设置为非空。

创建表

插入数据,查表

默认值

某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。

设置 一个default值。

默认值的生效:数据在插入的时候不给该字段赋值,就使用默认值

not null 和default一起使用,相互补充:

限制我们使用default null值,保证插入的数据一定不为空。

列描述

列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解

通过 show create table tt12 查看

zerofill

在定义数据类型时,

int 后边的括号内里的数字表示的是系统设置的宽度,当设置zerofill后,显示数据时,如果数宽度小于设定的宽度(这里设置的是5),自动填充0。

这只是显示的结果,实际储存的还是正常的数字。

主键

主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键;

主键所在的列通常是整数类型。

主键约束:主键对应的字段中不能重复,一旦重复,操作失败。

删除主键:

alter table 表名 drop primary key;

当表创建好以后但是没有主键的时候,可以再次追加主键:

alter table 表名 add primary key(字段列表)

复合主键

创建表

id和course 组成的了一个主键,因此此表中也只有一个主键,

所以,只有当id 和 course 都相同时,才会发生主键冲突。

只有部分相同不会冲突。

自增长

auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。

自增长的特点:

  1. 任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
  2. 自增长字段必须是整数
  3. 一张表最多只能有一个自增长

创建表:

插入数据

在不显示输入id下,会自动增长。

每次插入后,系统会记录已有字段的最大值+1,作为下次插入时对id进行赋值

还可以在创建表时对auto_increment初始赋值:

唯一键

unique_key:

一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。

唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。

比如在一家公司中,我们使用员工id作为主键 ,但我们也需要保证员工的身份证 都是不同的。主键更多的是标识唯一性的。而唯一键更多的是保证在业务上,不要和别的信息出现重复。

外键

外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。

当定义外键后,要求外键列数据必须在主表的主键列存在或为null。

在MySQL中,如果在学生的每一行后添加上班级数据,会出现数据冗余,所以让stu->class_id 和 myclass->id 有关联,设计成外键约束。

从现实生活想, 两表的相互约束体系在:

  1. 学生进入的班级必须是一个存在于班级表上的班级。
  2. 在解散某一个班级时,需要先将学生清空。

class 是主表,stu是从表。

// 先创建主表
create table class( id int primary key, name varchar(20) not null);  
// 在创建从表
create table stu(  id int primary key, name varchar(20), class_id int, foreign key(class_id) references class(id) );

正常插入:

插入一个班级号为3的学生,因为没有这个班级,所以插入不成功

插入班级id为null,比如来了一个学生,目前还没有分配班级

练习

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
关系型数据库 MySQL 数据库
数据迁移脚本优化过程:从 MySQL 到 Django 模型表
在大规模的数据迁移过程中,性能问题往往是开发者面临的主要挑战之一。本文将分析一个数据迁移脚本的优化过程,展示如何从 MySQL 数据库迁移数据到 Django 模型表,并探讨优化前后的性能差异。
|
9天前
|
数据采集 关系型数据库 MySQL
在 MySQL 中使用约束
【8月更文挑战第11天】
16 0
在 MySQL 中使用约束
|
30天前
|
存储 SQL 关系型数据库
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
|
30天前
|
SQL 存储 数据库
MySQL设计规约问题之如何处理日志类型的表
MySQL设计规约问题之如何处理日志类型的表
|
2月前
|
SQL 关系型数据库 MySQL
MySQL----约束
MySQL----约束
22 1
|
1月前
|
运维 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在处理MySQL表新增数据记录时,没有正确触发变更事件,该如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2月前
|
数据采集 关系型数据库 MySQL
MySQL数据库基础第三篇(约束)
MySQL数据库基础第三篇(约束)
|
2月前
|
关系型数据库 MySQL
蓝易云 - 如何修复MySQL中损坏的表
最后,为了防止数据丢失,定期备份数据是非常重要的。
132 3
|
2月前
|
SQL 关系型数据库 MySQL
ClickHouse(23)ClickHouse集成Mysql表引擎详细解析
ClickHouse的MySQL引擎允许执行`SELECT`查询从远程MySQL服务器。使用`MySQL('host:port', 'database', 'table', 'user', 'password'[,...])`格式连接,支持简单`WHERE`子句在MySQL端处理,复杂条件和`LIMIT`在ClickHouse端执行。不支持`NULL`值,用默认值替换。系列文章涵盖ClickHouse安装、集群搭建、表引擎解析等主题。[链接](https://zhangfeidezhu.com/?p=468)有更多
107 0
|
2月前
|
SQL 关系型数据库 MySQL
MySQL外键约束行为解析:CASCADE, NO ACTION, RESTRICT, SET NULL
MySQL外键约束行为解析:CASCADE, NO ACTION, RESTRICT, SET NULL
31 0