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

MySQL:数据库的约束

约束类型

  • NOT NULL - 指示某列不能存储 NULL 值。
  • UNIQUE - 保证某列的每行必须有唯一的值。
  • DEFAULT - 规定没有给列赋值时的默认值。
  • PRIMARY KEY - NOT NULL UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
  • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
  • CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句。

1. NOT NULL

指示某列不能存储 NULL

注:如果没有指定非空时,当前列是可以填入非空的,在把某一列定义为一个必填项,就可以使用not null来定义。

此时的id几句成为了一个必填项,null设置为NO

此时的id就不能为null,否则就会报错

满足条件设置成功

 create table student(
    -> id bigint not null,
    -> name varchar(10)
    -> );
 desc student;
insert into student  values (null,'shangsan');
insert into student  values (123456,'shangsan');
 select * from student;

2. UNIQUE

保证某列的每行必须有唯一的值(某列的值在整个表中不能有重复)

 

如果插入id相同的,则不满足唯一的条件,则会报错 

 这次插入id不唯一,就可以成功的插入了

 create table student1(
    -> id bigint unique,
    -> name varchar(20)
    -> );
desc student1;
insert into student1 values (123,'zhangsan'),(123,'lisi');
insert into student1 values (123,'zhangsan'),(456,'lisi');
 select * from student1;

3. DEFAULT

规定没有给列赋值时的默认值(将值为空的设置为默认值)

 随机的插入一个id,但是不给name赋值,则name会自定赋值成已经定义的 ‘无名氏’

 

注:如果我们手动置为null,则显示的值必然是我们手动置成的null

 

 create table student2(
    -> id bigint,
    -> name varchar(20) default'无名氏'
    -> );
desc student2;
  insert into student2 (id) values (1);
 select * from student2;
insert into student2 (name) values (null);

 

4.PRIMARY KEY

NOT NULL UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。 (主键的列即时非空又是唯一的)

  

注:id指定为非空并且唯一,列就会被标识为primary 表示它是一个主键

 create table student3(
    -> id bigint not null unique,
    -> name varchar(20) default'无名氏'
    -> );
 desc student3;

一个表不能有多个主键

create table student5(
    -> id int primary key,
    -> na int primary key
    -> );

但一个主键可以包括多个列(复合主键)

其中有一个不同是可以插入的,但如果全部都不同的话,则无法插入 

create table student6(
    -> id int ,
    -> na int,
    -> primary key(id,na)
    -> );

自增类型(auto increment)

表示在表上一条的基础上加1(在插入时,先找到最大值,然后再最大值的基础上+1,作为一个新的值,作为新的数据行的值)

当插入一个id为空的列,它会按照id的最大值自动生成一个+1的值 

 

 create table student4(
    -> id bigint primary key auto_increment,
    -> name varchar(10)
    -> );
desc syudent4;
insert into student4 (id) values (1);
 insert into student4 (name) values ('zhangsan');
 select * from student4;

5.FOREIGN KEY 

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

创建外键的语法:foreign key (字段名) references  主表(列)

看表(MUL说明存在外键关系)

 

写入正确的数据可以读入

 

写入不存在的数,则会报错

注;如果要删除一个主表中的数,要先删除子表中的数据,因为子表对主表有依赖作用,只有先将子表中的对应的数据删除,才可以删除主表中的数据。

 create table c(
    -> id bigint primary key auto_increment,
    -> name varchar(10)
    -> );
 create table n(
    -> id bigint primary key auto_increment,
    -> name varchar(20) not null,
    -> c_id bigint,
    -> foreign key (c_id) references c(id)
    -> );
desc n;

6.CHECK

保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句。

满足条件

 

不满足条件

create table check_gender(
    -> id bigint,
    -> gender varchar(1),
    -> check(gender='男' or gender='女')
    -> );
 insert into check_gender values(1,'男');
insert into check_gender values(1,'1');//错误的
 select * from check_gender;

希望能对大家有所帮助!!!!


http://www.kler.cn/a/400775.html

相关文章:

  • 第23次CCF计算机软件能力认证
  • HTTP 1.0、HTTP 1.1 和 HTTP 2.0 区别
  • RabbitMQ的基本概念和入门
  • 【计算机网络】水平触发与边缘触发有什么优缺点呢?
  • Quartus+Nios II for eclipse问题合集
  • Tomcat启动过程中cmd窗口(控制台)中文乱码的问题
  • QT<30> Qt中使鼠标变为转圈忙状态
  • 第 12 章 - Go语言 方法
  • 【机器学习】数学知识:欧式距离(Euclidean Distance)和曼哈顿距离(Manhattan Distance)
  • Siglus引擎 Unpack | 未完待续
  • 单用户模式下执行passwd root ,返回的是(current) UNIX passwd
  • WPF命令
  • OAI-5G开源通信平台实践(二)
  • 【数据结构】【线性表】静态链表(附C语言源码)
  • 多模态基础模型:从专家到通用助手
  • 【后端】版本控制
  • 特权帐户安全 CyberArk
  • 开源财富管理软件Ghostfolio的安装
  • el-table中增加校验方法(二)
  • JavaScript 原型
  • golang通用后台管理系统09(系统操作日志记录)
  • MySQL —— MySQL索引介绍、索引数据结构、聚集索引和辅助索引、索引覆盖
  • C#.Net筑基-模式匹配汇总
  • 剧本杀门店预约小程序,解锁沉浸式推理体验
  • 热点更新场景,OceanBase如何实现性能优化
  • Debezium-EmbeddedEngine