MySQL的键表约束

本文详细介绍了数据库中的各种约束,包括主键约束确保单个字段的唯一性,联合主键通过多个字段保证唯一,外键约束建立表间关联,唯一约束允许字段值不重复但可为空,非空约束确保字段不为空,以及默认约束为字段提供默认值。通过实例展示了如何创建、修改和删除这些约束,并探讨了它们在数据完整性和一致性中的作用。
摘要由CSDN通过智能技术生成

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

首先创建一张表:

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

并插入数据:

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

接下来使用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)
     );

在这里插入图片描述

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

我可以这样插入数据:

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

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

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

alter用法:

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

alter table db1 add primary key(id);

或者

alter table db modify id int primary key;

删除主键:

alter table db drop primary key;

自增约束:

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

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

演示一下:

insert into db1(name) values ('可莉');
insert into db1(name) values ('甘雨');
insert into db1(name) values ('刻晴');

在这里插入图片描述

在这里插入图片描述

由此可见,id随之递增

外键约束:

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

我们先来创建两张表

create table classes(
     id int(11) primary key,
     name varchar(20)
     );
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相关联
     );
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);

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

在这里插入图片描述

唯一约束:

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

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

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

create table db2(
     id int(11) unique,
     name char(11),
     sex char(2)
     );

或者创建完表之后用:

alter table db2 add unique(id); 

非空约束:

 create table db2(
     id int(11),
     name char(11) not null,
     sex char(1)
     );

alter用法:

 alter table db2
     change column id
     id int(11) not null;

默认约束:

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

create table db3(
     id int(11),
     name char(11),
     sex char(1) default '男'
     );

比如:

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

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

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值