数据库约束与表的设计

本文详细介绍了数据库设计中的关键约束,包括notnull非空约束、unique唯一约束、default默认值约束和primarykey主键约束,以及foreignkey外键约束。通过实例演示了一对一、一对多和多对多关系的表设计。
摘要由CSDN通过智能技术生成

数据库约束

not null —>非空约束

创建表时,指定某列不为空(null)

举例

创建学生表结构,并指定id不为空;


mysql> create table student(
    -> id int not null,
    -> sn int,
    -> name varchar(20)
    -> );

在这里插入图片描述
指定为非空约束后,就不能再插入空(null)了,否则报错;
在这里插入图片描述

unique ---->唯一约束

指定某列是唯一的,不重复的

举例

创建学生表结构,指定id不为空,学号唯一;


mysql> create table student(
    -> id int not null,
    -> sn int unique,
    -> name varchar(20)
    -> );

在这里插入图片描述
指定唯一约束后,就不能添加重复数据在表中,否则就会报错;
在这里插入图片描述

default ---->默认值约束

指定插入数据时,某列为空就默认为unkown:

举例

设置:name列为空时,使用默认值unknown


mysql> create table student(
    -> id int not null,
    -> sn int unique,
    -> name varchar(20) default 'unknown'
    -> );

在这里插入图片描述
注意

  • 插入四条数据,空字符串(' ')和空(null)的显示是不一样的哦~
mysql> insert into student values
    -> (1,1001,null),
    -> (2,1002,'小花')-> (3,1003,''),
    -> (4,1004,'小猪');

查询结果在这里插入图片描述

  • 插入时,只有不指定该字段,才能显示以默认值的形式插入,如果指定,哪怕是null,也会真实的插入,如上所示;

mysql> insert into student (id,sn) values(7,1008);

查询结果

在这里插入图片描述

primary key—>主键约束

not null 和 unique 的结合体,确保某列(多列)有唯一标识,便于查询、删除、修改数据

举例

创建学生表结构,id设为主键;

mysql> create table student(
    -> id int  primary key,
    -> sn int unique,
    -> name varchar(20) default 'unknown'
    -> );

在这里插入图片描述

对于整数类型的主键,常常搭配 auto_increme 来使用; 表示从1开始自增,但插入数据时,不要指定主键字段

场景

创建课程表,id为整形数字的主键,如下所示:

mysql> create table course(
    -> id int  primary key auto_increment,
    -> name varchar(20)
    -> );

插入数据,但不要指定主键字段

mysql> insert into course(name) values
    -> ('高等数学'),
    -> ('大学英语'),
    -> ('智能控制');

查询结果:
在这里插入图片描述

foreign key---->外键约束

foreign key :用于关联其他表的主键或唯一键;
语法
foreign key (本表字段名) references (关联表的表名)(关联的字段名)

举例

  1. 创建班级表classesid为主键;
  2. 创建学生表student,一个学生对应一个班级,一个班级对应多个学生,使用id为主键,classes_id为外键,关联班级表id
mysql> create table classes(
    -> id int primary key auto_increment,
    -> name varchar(20)
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql>
mysql> drop table if exists student;
Query OK, 0 rows affected (0.00 sec)

mysql> create table student(
    -> id int  primary key auto_increment,
    -> sn int unique,
    -> name varchar(20)  default 'unknown',
    -> classes_id int,
    -> foreign key (classes_id) references classes(id)
    -> );

插入数据

  • (1) 插入班级信息

在这里插入图片描述
查询结果在这里插入图片描述

  • (2)插入学生信息
mysql> insert into student (sn,name,classes_id) values
    -> (1001,'李宁',1),
    -> (1002,'张伟',1),
    -> (1003,'乔丹',2);

查询结果

李宁、张伟均在计算机1班,乔丹在计算机2班;在这里插入图片描述

表的设计

一对一

  • 一个人对应一个身份证信息

在这里插入图片描述

一对多

  • 一个班级拥有多个学生

在这里插入图片描述

多对多

  • 一个学生,要修多门课程

在这里插入图片描述
注意

  • 表的直接关系只有:1对1 、1对多;
  • 多对多的关系,是中间表产生的中间关系

举例

班级表、学生表、考试成绩表,总共有三张表,在考试的场景发生后,就有学生和课程多对多的对应关系了!

  • 考试成绩表

在这里插入图片描述

  • 课程表

在这里插入图片描述

  • 班级表
    在这里插入图片描述

在这里插入图片描述

插入数据

mysql> insert into score  values
    -> (null,59,8,1),
    -> (null,70,8,2),
    -> (null,87,9,2),
    -> (null,69,10,1),
    -> (null,99,8,1);

结果查询在这里插入图片描述

内容总结

约束类型说明
not null表示某列不能存储 null 值
unique保证某列的每行必须有唯一的值
default规定没有给列赋值时的默认值
primary keynot null 和unique 的结合
foreign key保证一个表中的数据匹配另一个表中的值的参照完整性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值