《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约束的分享如果有不懂的或者有其他见解的欢迎在下方评论或者私信博主,也希望多多支持博主之后和博客!!🥰🥰

相关推荐
顾林海4 分钟前
深度解析LinkedHashMap工作原理
android·java·面试
Arbori_2621512 分钟前
Oracle REGEXP_SUBSTR
数据库·oracle
solihawk13 分钟前
国产数据库与Oracle数据库事务差异分析
数据库·oracle
一路向北he14 分钟前
杰理10k3950温度测量
java·数据结构·算法
K哥112516 分钟前
【多线程】线程池
java·开发语言·线程池
描绘一抹色21 分钟前
力扣-hot100(最长连续序列 - Hash)
数据结构·算法·leetcode
Monly2122 分钟前
Uniapp:确认框
开发语言·javascript·uni-app
LeicyII25 分钟前
面试题:Eureka和Nocas的区别
java·云原生·eureka
·云扬·32 分钟前
【BUG】Redis RDB快照持久化及写操作禁止问题排查与解决
数据库·redis·bug