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;

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值