【MySQL】表的约束

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 【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,比如来了一个学生,目前还没有分配班级

练习

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
Oracle 关系型数据库 MySQL
【mysql】—— 表的内连和外连
【mysql】—— 表的内连和外连
|
1月前
|
存储 关系型数据库 MySQL
【mysql】—— 表的增删改查
【mysql】—— 表的增删改查
|
25天前
|
存储 SQL 关系型数据库
【MySQL】4. 表的操作
【MySQL】4. 表的操作
21 0
|
24天前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
|
24天前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
|
24天前
|
缓存 关系型数据库 MySQL
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
|
25天前
|
关系型数据库 MySQL
【MySQL】12. 表的内连和外连(重点)
【MySQL】12. 表的内连和外连(重点)
13 0
|
1月前
|
存储 关系型数据库 MySQL
【mysql】—— 表的约束
【mysql】—— 表的约束
|
1月前
|
存储 SQL 关系型数据库
【mysql】—— 表的操作
【mysql】—— 表的操作
|
1月前
|
Oracle 关系型数据库 MySQL
Flink CDC产品常见问题之从EARLIEST_OFFSET启动就报错如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。