MySQL | 表的约束

目录

1. 空属性 NULL

2. 默认值 DEFAULT

3. 列描述comment

4. zerofill

5. 主键 PRIMARY KEY

6. 自增长AUTO_INCREMENT

7. 唯一键UNIQUE

8. 外键


真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。
表的约束很多,这里主要介绍如下几个: null/not null,default, comment, zerofill,primary key,
auto_increment,unique key 。

1. 空属性 NULL

两个值:null 和 not null -> 为空或不为空

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

create table student (name varchar(20) not null,class varchar(10) not null
);

如果设置为null,那么在插入数据的时候,必须有数据插入。

2. 默认值 DEFAULT

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

比如:在女子学院里面,可以将性别这一个属性默认设置为女。

create table test_default (name varchar(20) default '张三'
); // 创建一个表insert into test_default values(); // 插入数据,但是不指定任何值select * from test_default; // 查询表中的数据

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

insert into test_default values('lisi');select * from test_default

只有设置了default的列,才可以在插入值的时候,对列进行省略
--注意:not null和defalut一般不需要同时出现,因为default本身有默认值,不会为空

3. 列描述comment

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

create table test_comment (name varchar(20) not null comment '姓名',sex char(2) default '女' comment '性别'
);

通过desc查看不到注释信息。

desc test_comment;

通过show可以看到

show create table test_comment

4. zerofill

刚开始学习数据库时,很多人对数字类型后面的长度很迷茫。

create table test_zerofill (age int(10)
)show create table test_zerofill;

这里面的int(10)代表什么意思?整形int不应该是4字节吗?这个10代表什么?其实没有zerofill这个属性,括号内的数据时毫无意义的。

现在插入一条数据,

insert into test_zerofill values(5);select * from test_zerofill;

现在将age列添加上zerofill字段。

alter table test_zerofill change age age int(5) zerofill;
select * from test_zerofill;

这次可以看到5变成了0……5,这就是zerofill属性的作用,如果宽度小于设定的宽度,自动填充0.要注意的是,这只是最后显示的结果,在MySQL中实际存储的还是1。

5. 主键 PRIMARY KEY

主键:PRIMARY KEY用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数类型。

create table test_primary (id int not null primary key,name varchar(20) not null
);desc test_primary;


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

insert into test_primary values(1, 'a'), (1, 'b');


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

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

删除主键

alter table table_name drop primary key;

复合主键

在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键。

create table test_1 (id int,name varchar(20),score tinyint,primary key(id, name)
);desc test_1;

6. 自增长AUTO_INCREMENT

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

自增长的特点:

  1. 任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
  2. 自增长字段必须是整数
  3. 一张表最多只能有一个自增长。
create table test_auto (id int unsigned primary key auto_increment,name varchar (10) not null default ''
);insert into test_auto(name) values('a');insert into test_auto(name) values('b');select * from test_auto;

索引:
在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息。

7. 唯一键UNIQUE

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

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

关于唯一键和主键的区别:

主键更多的是标识唯一性,唯一键更多的是保证在业务上,不要和别的信息出现重复。

create table test_unique (id char(10) unique,name varchar(10)
);

插入第一条数据

insert into test_unique values('01', 'a');

插入第二条数据,id的值和第一条数据的id值一样

insert into test_unique values('01', 'b');

插入第三条数据,id值为空

insert into test_unique values('', 'b');

查询

select * from test_unique;

8. 外键

外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null

foreign key (字段名) references 主表(列)

create table myclass (id int primary key,name varchar(30) not null
);create table stu (id int primary key,name varchar(30) not null,class_id int,foreign key (class_id) references myclass(id)
);

正常插入数据

insert into myclass values(10, 'C++大牛班'),(20, 'java大神班');

插入一个班级号为15的学生,因为没有这个班级,是不会插入成功的。

insert into stu values(102, 'aa', 15);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/760267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web前端常用标签(html)

1.定义 1.1标签 语法规范&#xff1a;<标签名 属性名"属性值">标签名</标签名> 标签之间可以嵌套 1.2属性 定制元素的行为的。属性是不通用的&#xff0c;每一个标签存在自身的属性。当属性名属性值时&#xff0c;可以只写属性值 2.HTML常用标签 2…

前端项目构建过程中涉及低代码部分思考

表单常见的增删查改的重复问题解决 1市面上有很多表单设计器与框架进行结合&#xff0c;封装一个表单组件&#xff0c;结合响应式&#xff0c;然后给到我们下载使用 2修改起来很麻烦&#xff0c;有局限&#xff0c;但我们可以参考他们的思路&#xff0c;来设计符合项目的组件来…

面试笔记——Redis(分布式锁的使用场景及实现原理)

分布式锁的使用场景 资源竞争控制&#xff1a;多个客户端同时访问共享资源时&#xff0c;可以使用分布式锁来控制资源的并发访问&#xff0c;防止多个客户端同时对同一资源进行修改造成数据不一致的问题。 避免重复操作&#xff1a;在分布式环境中&#xff0c;可能会出现多个客…

算法51:动态规划专练(力扣139题,单词拆分)---从左往右尝试模型的误区

题目&#xff1a; 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 示例 1&#xff1a; 输入: s &qu…

如何实现手机遥控端关机按钮同时关闭TV端和手机端界面

目前家庭电视机主要通过其自带的遥控器进行操控&#xff0c;实现的功能较为单一。例如&#xff0c;当我们要在TV端搜索节目时&#xff0c;电视机在遥控器的操控下往往只能完成一些字母或数字的输入&#xff0c;而无法输入其他复杂的内容。分布式遥控器将手机的输入能力和电视遥…

基于springboot+vue的智慧生活商城系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Pytest自动化测试执行环境切换的两种解决方案(超详细)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 痛点分析 在实际企业的项目中&#xff0c;自动化测试的代码往往需要在不同的环境中进行切换&am…

蓝桥:重新排序(差分,python)

前言&#xff1a; 本题在模拟考试时还不会差分法&#xff0c;用纯暴力思路ac了60%的案列&#xff0c;之后看了蓝桥讲解&#xff0c;用差分做出来了&#xff08;但对差分还是一知半解&#xff09;&#xff0c;最近学会了差分又来做本题&#xff0c;又卡在了技巧思路上&#xff…

【超细完整版】C# WebService 通过URL生成WSDL文件和DLL文件 【生成篇】

目的 支持通过web url (自适应“?wsdl”的有无) 生成.wsdl文件 和 .dll文件 实现 将通过一个类的三部分来实现这些功能 获取url中的ClassName &#xff08;GetClassNameFromUrl&#xff09;转换为WSDL文件 &#xff08;UrlToWsdlFile&#xff09;转换为DLL文件 &#xff08;…

【算法】数组-二分搜索法

对应力扣704题目 左闭右闭 public class Solution{ public static void main(String[] args){ int[] nums {1,2,3,4,5,6,7,8,9,10}; int target 5; Solution solution new Soulution(); int result solution.search( nums, target); System.out.println("找到值的位置…

利用代理IP突破地域限制:解锁全球网络访问攻略

利用代理IP突破地域限制&#xff0c;实现解锁全球网络访问&#xff0c;是一种常见的网络技术手段。以下是一份详细的攻略&#xff1a; 1. 理解代理IP&#xff1a; 代理IP就像一个中间人&#xff0c;你的请求先发送到代理服务器&#xff0c;然后由代理服务器去获取你想要访问的网…

【STL基础】vector、stack、queue、list、pair、map、unordered_map、set、unordered_set(详细讲解)

vector、list、pair、unordered_map、unordered_set、stack、queue 参考文章&#xff1a; &#xff08;1&#xff09;【apollo】泛型编程 与 STL &#xff08;2&#xff09;c stack用法 入门必看 超详细 &#xff08;3&#xff09;C中queue的用法&#xff08;超详细&#xff0c…

C语言关于void类型的指针作为函数形参在使用时需要注意的坑

目录 前言 一、void*指针使用时不同编译器下的处理结果 二、void*指针传递的指针变量进行位运算时&#xff0c;一定要注意强制转换的类型&#xff0c;和值的取值范围 总结 前言 众所周知&#xff0c;void* 指针作为函数形参时&#xff0c;表示可以接受任意类型的参数&#xf…

C语言基础知识点(十七)结构体中只用指针来存储字符串

// 如果需要用结构存储字符串&#xff0c;用字符数组作为成员会比较简单 // 如果需要使用指向char的指针来进行存储&#xff0c;那么需要请求malloc来 // 为字符串分配合适的存储空间#include <stdio.h> #include <string.h> //提供strcpy()\strlen()的原型 #i…

Linux修改Redis密码

方法一&#xff1a;修改配置文件 找到Redis配置文件redis.conf&#xff0c;通常位于/etc/redis/或/usr/local/etc/目录 sudo vim /etc/redis/redis.conf找到requirepass指令&#xff0c;如果已经有这个指令&#xff0c;你可以直接修改密码&#xff0c;如果没有&#xff0c;添…

Python实战:上下文管理器与with语句

一、引言 在Python编程中&#xff0c;上下文管理器与with语句是实现资源高效管理的重要工具。当程序使用资源&#xff08;如文件、网络连接等&#xff09;时&#xff0c;我们需要确保这些资源在使用完毕后能够被正确地释放&#xff0c;以避免资源泄漏和程序崩溃。上下文管理器…

基于FFmpeg混流及录制rtmp直播流

1、什么是混流&#xff1f; 混流就是把多路音视频流合成单流。准确的说&#xff0c;混流应该叫做混音&#xff08;音频流&#xff09;混画面&#xff08;视频流&#xff09; 混流的过程包括解码、混流、编码和推流四个部分。混流这个环节包括做抖动缓冲&#xff0c;目的是把多…

GDPU Java 天码行空4

文章目录 一、实验目的二、实验内容及要求三、实验内容及要求1. 设计AnimalTool工具类&#xff0c;实现eat()函数多态性&#x1f496; AnimalDemo.java&#x1f338; 运行结果 2. 是猫是狗&#x1f496; DuoTaiDemo5.java&#x1f338; 运行结果 3. 太会了&#x1f496; DuoTai…

国内IP地址切换排行榜软件大全

随着互联网的飞速发展&#xff0c;IP地址切换技术在日常工作和生活中扮演着越来越重要的角色。无论是为了网络安全、访问特定地区网站&#xff0c;还是进行市场调研、网络爬虫等&#xff0c;IP地址切换都成为了不可或缺的工具。虎观代理将为您介绍国内较受欢迎的IP地址切换软件…

B004-springcloud alibaba 服务容错 Sentinel

目录 高并发带来的问题服务雪崩效应常见容错方案常见的容错思路隔离超时限流熔断降级 常见的容错组件 Sentinel入门什么是Sentinel微服务项目集成Sentinel核心库安装Sentinel控制台实现一个接口的限流 Sentinel的概念和功能基本概念重要功能 Sentinel规则流控规则三种流控模式三…