当前位置: 首页 > news >正文

【MySQL03】:MySQL约束

MySQL中的约束

表中一定要有各种约束, 通过约束,我们能够未来保证数据库中的数据是合法的。
约束的目标就是保证数据的完整性和可预期性。

空属性

  • 两个值 : null(默认的) 和 not null(不为空)

  • 数据库的默认字段都为空, 但是实际开发, 尽量保证字段不为空。

默认值约束(DEFAULT)

我们通过在类型后面设置default参数

default值如果设置, 如果有确定的数据, 就设置数据, 没有就default。

谈谈空和default之间的关系。

  • 如果我们没有指定一列要插入, 用的是default, 如果在建表中, 没有默认值, 就会报错。

  • 在默认情况下, 我们的default是null, 当我们设置了not null, 我们就必须设置default, 不然就会报出没有对应的default值进行插入。

  • default和not null不冲突而是互相补充。

  • 如果我们默认设置了not null, 没有默认的default(因为默认的default就是null)

comment(列描述)

针对表中的内容进行描述(类似于Java/C++中的注释)

zerofill(根据位数补零)

zerofill的作用就是将我们忽略的0进行填充, 比如我们int(10), 如果只是数据1并且设置了zerofill, 就会将高位设置成为0, 0000000001。

主键(primary key)

主键要么只有一个, 要么没有, 逐渐就是这张表中最重要的一项, 类似于迭代器的作用, 逐渐必须是唯一的。

create table if not exists test_key(id int unsigned primary key comment "学号"
);

(删除主键), 不会删除这一列, 但是会删除主键约束

alter table table_name drop primary key

复合主键, 多个元素共同唯一(同时相同才会冲突)

create table Info (id int unsigned comment "编号",course_id int unsigned comment "课程编号",score tinyint unsigned comment "课程成绩",primary key(id,course_id)
);

自增长(auto_increment)

自动增长的约束, 他能够实现自动增长,当我我们也可以手动的插入, 相当于自动的设置DEFAULT值。每次自动增长

+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Info  | CREATE TABLE `Info` (`id` int unsigned NOT NULL AUTO_INCREMENT,`course_id` int unsigned NOT NULL COMMENT '课程编号',`score` tinyint unsigned DEFAULT NULL COMMENT '课程成绩',PRIMARY KEY (`id`,`course_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3         |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

我们可以手动设置AUTO_INCREMET=?来设置自增的开始

唯一键(unique)

create table stu(id char(20) unique comment "学生的的唯一键",name varchar(20) not null
);

比如每个学生都有自己的电话号码的邮箱, 但是显然学号才是主键, 所以对于电话号码和邮箱都应该设置成为unique, 对于上层我们可以避免插入的时候登录学生信息错误(电话号码和邮箱重复)

外键 (foreign key)

外键强调表和表之间的关联和约束。
主要定义主表和从表之间的关联关系
外键的本质是如果表和表之间存在关系的时候, 外键可以帮助我们添加约束

id  |  name  |  class_id  |
100 |  张三   |     10     |
101 |  李四   |     20     |class_id |  class_name |10   |      一班    |20   |      二班    |

class_id某种意义上就算外键。

foreign key(class_id) references other_table(id)
http://www.dtcms.com/a/314324.html

相关文章:

  • mac 技巧
  • 零售消费行业研究系列报告
  • Java-基础-统计投票信息
  • Linux下载安装mysql,客户端(Navicat)连接Linux中的mysql
  • allegro建库--1
  • 【Redis】移动设备离线通知推送全流程实现:系统推送服务与Redis的协同应用
  • 模型学习系列之考试
  • 机器学习(8):线性回归
  • 基于落霞归雁思维框架的自动化测试实践与探索
  • OpenLayers 入门指南【五】:Map 容器
  • Unity发布Android平台实现网页打开应用并传参
  • 如何查看 iOS 电池与电耗:入门指南与实战工具推荐
  • 期权投资盈利之道书籍推荐
  • Codeforces Round 1008 (Div. 2)
  • Chrontel【CH7214C-BF】CH7214C USB Type C Logic Controller
  • 【Java线程池深入解析:从入门到精通】
  • Memcached 缓存详解及常见问题解决方案
  • 【深度学习新浪潮】近三年城市级数字孪生的研究进展一览
  • 【音视频】WebRTC 一对一通话-实现概述
  • 使用vue缓存机制 缓存整个项目的时候 静态的一些操作也变的很卡,解决办法~超快超简单~
  • 深入剖析RT-Thread串口驱动:基于STM32H750的FinSH Shell全链路Trace分析与实战解密(上)
  • Back to the Features:附录C Unconditional world model evaluations
  • 第四十一节 MATLAB GNU Octave教程
  • 第四十五章:AI模型的“灵魂契约”:GGUF权重到PyTorch结构极致适配
  • Nginx vs Spring Cloud Gateway:限流功能深度对比与实践指南
  • 政策合规性网页设计:工业数据可视化的信息安全技术规范解析
  • 基于机器学习的二手房信息可视化及价格预测系统设计与实现
  • 车载通信架构 ---车内通信的汽车网络安全
  • [spring-cloud: @LoadBalanced @LoadBalancerClient]-源码分析
  • bypass