《mysql》--mysql约束

数据库约束

有的时候数据库中的数据是有一定要求的,有些数据认为是合法数据,有些是非法数据,如果靠人工检查显然是不靠谱的;

数据库会自动的对数据的合法性进行校验检查目的就是,保证数据中能够避免被插入/修改一些非法的数据

MySQL中提供了以下约束:

not null-指示某列不能存储null值

unique-保证某列的每行必须有唯一值

default-规定没有给列赋值时的默认值

paimary key--not null和nuique的结合,确保某列(或两个列多个列的结合)有唯一标识,有助于更容易增删查改

foreign key-保证一个表中的数据匹配另一个表中的值的参照完整性

check-保证列中的值符合指定的条件

//这些约束一般都是在创建表时添加上的

not null

在创建表时在所对应的字段后面加上not null该列字段就不能为空

举例: create table student1(name varchar(20) not null,age int,score int,calss varchar(20));

unique

在创建表时在对应字段后面追加上unique,该列就不能出现重复的数据

举例: create table student1(name varchar(20) ,age int,score int unique,calss varchar(20));

default

创建表时在对应字段后面追加上在default '默认值',可以设定该行字段的默认值

举例:create table student1(name varchar(20) default 'unknow' ,age int,score int,calss varchar(20));

主键

创建表时在对应字段后面追加上paimary key,确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录。

举例: create table student1(id int primary key,name varchar(20) default 'unknow' ,age int,score int);

自增主键primary key auto_increment

//可以自己增加的主键,会在原有主键的最大值上+1,最为新数据的主键

举例: create table student1(id int paimary key auto_increment key,name varchar(20) default 'unknow' ,age int,score int);

我们再来看另外一个例子:

//相当于使用了一个变量,来保存了当前的id的最大值,后续分配自增主键,都是根据这个最大值来分配,如果手动指定id,也会更新最大值

//3-4之间的id在这里就是浪费了,不过并不影响后面的操作

//此处id的自动分配也是有局限性的,如果是单个的mysql服务器,就没问题,但如果是一个分布式系统,有多个mysql服务器构成的集群,这个时候依靠自增主键就不行了

外键

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

举例: create table classes(classID int primary key auto_increment,

grade int,

class varchar(20));

create table student(

id int primary key auto_increment,

classID int,name varchar(20),

foreign key(classID) references classes(classID));

//描述了两个表之间的关联关系,这里classes是父表,student是子表

//两个表用外键连接起来,子表(student)中的classID列中的数据必须在父表(classes)中的classID列里能找到一样的数据,不然无法插入

//针对父表进行修改/删除操作,如果当前被修改/删除的值,已经被子表引用了,这样的操作也会失败,外键约束始终要保持,子表中的数据在对应的父表的列中存在

以上就是博主对mysql约束的分享如果有不懂的或者有其他见解的欢迎在下方评论或者私信博主,也希望多多支持博主之后和博客!!🥰🥰

相关推荐
aaaameliaaa4 小时前
字符函数和字符串函数
c语言·笔记·算法
圆山猫5 小时前
[Virtualization](四):Linux KVM/RISC-V 的 vCPU 运行路径
java·linux·risc-v
天桥下的卖艺者5 小时前
使用scitable包,两步生成逆概率删失权重(IPCW)
数据库·r语言
微学AI5 小时前
一根针指向所有方向:挂谷猜想对 LLM Agent 技能-记忆架构的启示
开发语言·人工智能·架构·挂谷猜想
城管不管5 小时前
ReAct、Plan-and-Execute、Reflection 三大智能 Agent 范式核心区别
java·人工智能·算法·spring·ai·动态规划
隔窗听雨眠5 小时前
AI原生数据库浪潮:国产数据库的架构重构与路径之争
数据库
IT小白杨5 小时前
从环境制备到自动化工作流:多账号运营的工程化架构拆解
java·经验分享·自动化·安全架构·指纹浏览器
数据库小学妹6 小时前
数据库选型实战:从数据类型到TCO成本,五维决策框架+九款产品横评
数据库·信创·国产数据库·数据库选型·oracle迁移
月疯6 小时前
二分法算法(水平等分图形面积)
算法
豆瓣鸡6 小时前
算法日记 - Day3
java·开发语言·算法