【MySQL | 三、 表的约束介绍】

举例表结构

字段名称字段类型是否NULL键值默认值附加信息
FieldTypeNullKeyDefaultExtra
idintNoUNI(唯一键)Nullauto_increment
nameverchar(10)NoPRI(主键)Null
genderenumNoman
agetinyintYesNull
telphoneintYesNull
home_idintyesMUL(外键)Null

1. 空属性

  • 两个值:null(默认的)和 not null(不为空)

    • Null:是一种特殊的值,表示数据缺失、未知或者未定义。例如,在一个记录客户信息的数据库中,如果还没有获取到客户的电子邮箱地址,那么该“电子邮箱”字段可以设为Null。
    • Not Null:是一种约束条件,即必须有一个确定的值。比如在一个订单表中,“订单编号”字段通常被定义为Not Null,因为每个订单都必须有一个唯一的编号来标识。
  • 数据关联方面

    • Null:在外键关联中,允许外键为Null可以表示一种松散的关联关系或者未关联的状态。例如,在一个用户 - 部门关系表中,用户的“部门ID”外键为Null可以表示该用户还没有分配到具体的部门。
    • Not Null:当外键为Not Null时,强制建立了两个实体之间的紧密关联。例如,在一个订单 - 客户关系表中,“客户ID”外键为Not Null,这意味着每个订单都必须关联到一个具体的客户,保证了业务逻辑的完整性
  • 创建表时数据库默认字段字段为空(default null),但是实际开发时,尽可能保证字段不为空,因为数据为空无法参与运算

用法:

mysql > CREATE TABLE 表名称 (
     -> 字段1 数据类型 not null
	 -> );

2. 默认值 Default

  • 默认值的生效:数据在插入表数据的时候没有给该字段赋值,且该字段存在默认值,就使用默认值,否则报错。

用法:

mysql> create table 表名称 (
	-> name varchar(20) not null,
	-> age tinyint unsigned default 0,
	-> gender char(2) default '男'
	-> );
	--注意:not null和defalut一般不需要同时出现,
		   因为default本身有默认值,不会为空

3. 列描述 commenet

列描述:在构建表结构时用comment来做描述,类似于注释,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解

用法:

mysql> create table tt12 (
	-> name varchar(20) not null comment '姓名',
	-> age tinyint unsigned default 0 comment '年龄',
	-> sex char(2) default '男' comment '性别'
	-> );

4. 主键 primary key

  • 一张表中最多只能有一个主键
  • 主键所在的列通常是整数类型
  • 复合主键
    • 一个主键可以是多列
    • primary key( [字段1], [字段2] )
  • 主键约束:
    • 唯一性:主键的值在表中必须是唯一的,不能重复。
    • 非空性:主键列的值为 NOT NULL。这是因为 NULL 表示缺失或未知的数据,而主键需要明确地标识每一行,不能是不确定的。
  • 用法:
    mysql> create table t2 (
        -> name varchar(10) primary key
        -> );
    Query OK, 0 rows affected (0.00 sec)
    
    #复合主键用法:
    mysql> create table t3 (
        -> name varchar(10),
        -> age int,
        -> constraint pk_constraint_name primary key(name, age)
        -> );
    Query OK, 0 rows affected (0.01 sec)
    
  • 主外键自定义名称 constraint,用法如上。

5. 唯一键 unique key

一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。
唯一键的本质和主键差不多。

  • 与主键比唯一键允许为NULL,而且可以多个为NULL

  • 用法:

    mysql> create table student (
    	-> id char(10) unique key comment '学号,不能重复,但可以为空',
    	-> name varchar(10)
    	-> );
    Query OK, 0 rows affected (0.01 sec)
    

6. 外键 foreign key (字段名) references 主表(列)

  • 主表
    • 也称为父表,是在关系型数据库中拥有主键(Primary Key)的表。主键是一个或多个列的组合,其值唯一标识表中的每一行。主表中的数据通常是基础信息,不依赖于其他表的数据而存在。例如,在一个学生管理系统中,有一个 “班级” 表,它包含班级的基本信息,如班级编号(作为主键)、班级名称等,这个 “班级” 表就是主表。
  • 从表
    • 也称为子表,是包含外键(Foreign Key)的表外键是一个或多个列其值引用主表中主键的值从表中的数据依赖于主表的数据而存在。继续上面的例子,有一个 “学生” 表,其中包含学生的信息,并且有一个 “班级编号” 列,该列引用 “班级” 表中的 “班级编号”,那么 “学生” 表就是从表。
  • 主表则必须是有主键约束或unique约束。
  • 外键约束
    • 存在性约束:当在从表中插入或更新一条记录时,该记录的外键列的值必须是主表中主键列已经存在的值。这是为了保证数据的一致性和关联性。
    • 允许 NULL 值:在某些情况下,外键列可以为 NULL。这通常表示一种特殊情况,即从表中的数据与主表中的数据没有关联。例,可能存在一些员工暂时未分配到任何部门,这时在 employees 表中该员工的 department_id 可以为 NULL。但这需要在定义外键时允许 NULL 值
  • 用法
    #先创建主表
    mysql> create table myclass (
        -> id int primary key,
        -> name varchar(30) not null comment'班级名'
        -> );
    
    #创建从表
    mysql> create table stu (
        -> id int primary key,
        -> name varchar(30) not null comment '学生名',
        -> class_id int,
        -> foreign key (class_id) references myclass(id)
        -> );
    
    foreign key (字段名) references 主表(列)

7. 自增长 auto_increment

auto_increment:当插入数据时,若有该属性的字段被忽略,数据库会在上个值的基础上自动+1,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。

  • AUTO_INCREMENT 列必须被定义为键(通常是主键)。
  • 任何一个字段要做自增长,数值必须要有唯一性
  • 自增长字段必须是整数
  • 一张表最多只能有一个自增长列
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ヾ慈城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值