当前位置:   article > 正文

MySQL的键表约束_mysql联合组件字段可以为null吗?

mysql联合组件字段可以为null吗?

主键约束(primary key):
一张表只有一个主键,使得该字段不重复,不为空

首先创建一张表:

create table db (
       id int(11) primary key,	#创建主键
       name char(10),
       sex char(1)
       );
  • 1
  • 2
  • 3
  • 4
  • 5

并插入数据:

insert into db values(001,'张三','男');
insert into db values(002,'李四','男');
insert into db values(003,'王五','男');
insert into db values(004,'马六','女');
  • 1
  • 2
  • 3
  • 4

接下来使用desc db;查看表的结构:

在这里插入图片描述

于是id成了唯一值,比如‘001’的id不能出现两次当我们尝试添加‘001’这个id时,会出现如下报错:在这里插入图片描述
联合主键:

联合主键就是用2个或2个以上的字段组成主键。
用这个主键包含的字段作为主键,这个组合在数据表中是唯一,且加了主键索引。

联合主键任何一个字段都不能为空。

我们先来创建一张表:

create table db1(
     id int(11),
     name varchar(11),
     sex char(1),
     primary key(id,name)
     );
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

这里并不是有两个主键的意思哈,在这里‘id’和‘name’这种组合是唯一的

我可以这样插入数据:

insert into db1 (id,name) values (001,'小王');
insert into db1 (id,name) values (001,'小红');
insert into db1 (id,name) values (002,'小王');
  • 1
  • 2
  • 3

但是我不能这样插入数据 :

insert into db1 (id,name) values (001,'小王');
insert into db1 (id,name) values (001,'小王');
  • 1
  • 2

alter用法:

我们创建表的时候忘记创建主键的时候

alter table db1 add primary key(id);
  • 1

或者

alter table db modify id int primary key;
  • 1

删除主键:

alter table db drop primary key;
  • 1

自增约束:

create table db1 (
       id int(11) primary key auto_increment,	#创建自增约束
       name char(10),
       sex char(1)
       );
  • 1
  • 2
  • 3
  • 4
  • 5

于是,我们每insert一条数据,即使不用插入id,id也会随之递增。

演示一下:

insert into db1(name) values ('可莉');
insert into db1(name) values ('甘雨');
insert into db1(name) values ('刻晴');
  • 1
  • 2
  • 3

在这里插入图片描述

在这里插入图片描述

由此可见,id随之递增

外键约束:

外键约束涉及到两个表:父表与子表

我们先来创建两张表

create table classes(
     id int(11) primary key,
     name varchar(20)
     );
  • 1
  • 2
  • 3
  • 4
create table students(
     id int(11) primary key,
     name varchar(20),
     class_id int,
     foreign key(class_id) references classes(id)	#设置外键(class_id)与表classes中的id相关联
     );
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
insert into classes values (1,'一班');
insert into classes values (2,'二班');
insert into classes values (3,'三班');
insert into student values (001,'甘雨',1);
insert into student values (002,'可莉',2);
insert into student values (003,'神里凝华',3);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

以上代码可以执行,但是我们插入这条数据insert into student values (004,'七七',4)就会报错,原因是,我们父表没有创建‘4班’,子表的外键有四班的数据,所以就会报错

在这里插入图片描述

唯一约束:

唯一约束:改字段的值不重复

唯一约束与主键约束比较明显的区别是:

唯一约束可以为:NULL
主键约束不可为:NULL

create table db2(
     id int(11) unique,
     name char(11),
     sex char(2)
     );
  • 1
  • 2
  • 3
  • 4
  • 5

或者创建完表之后用:

alter table db2 add unique(id); 
  • 1

非空约束:

 create table db2(
     id int(11),
     name char(11) not null,
     sex char(1)
     );
  • 1
  • 2
  • 3
  • 4
  • 5

alter用法:

 alter table db2
     change column id
     id int(11) not null;
  • 1
  • 2
  • 3

默认约束:

填写默认值,即使不插入改字段的数据,插入其它数据时按照填写的默认值进行补充

create table db3(
     id int(11),
     name char(11),
     sex char(1) default '男'
     );
  • 1
  • 2
  • 3
  • 4
  • 5

比如:

我插入了一条数据,没有填写sex,sex默认为‘男’

insert into db3(id,name) values (001,'小王');
  • 1

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/791876
推荐阅读
相关标签
  

闽ICP备14008679号