MySQL中的约束

1)约束(Constraint)
1.1、什么是约束?
  在创建表的时候,可以给表的字段添加相应的约束,添加约束的目的是为了保证表中数据的合法性、有效性、完整性


1.2、常见的约束有哪些?
  非空约束(not null):约束的字段不能为NULL(只有列级约束)
  唯一约束(unique):约束的字段不能重复,可以为NULL(有列级、表级约束)
  主键约束(primary key):约束的字段既不能为NULL,也不能重复(简称PK)(同上)
  外键约束(foreign key):。。。(简称FK) (同上)
  检查约束(check):!!Oracle数据库有check约束,但MySQL目前不支持该约束


1.3、主键约束的一些特性

  • 主键相关的术语
      主键约束:primary key
      主键字段:id添加primary key后,id叫做主键字段
      主键值:id字段中的每一个值都是主键值

  • 主键的作用
      -表的设计三范式中有要求,第一范式要求任何一张表都应该有主键
      -作用:主键值是这一行记录在这张表当中的唯一标识。(和身份证号码一样)

  • 主键分类
    根据主键字段的字段数量划分:
      单一主键(常用)
      复合主键(多个字段联合起来添加成一个主键约束,不推荐
    根据主键性质划分
      自然主键:主键值最好就是一个业务没有任何关系的自然数。(推荐)
      业务主键:主键值和系统的业务挂钩(不推荐)。  因为以后的业务一旦发生改变,主键值可能也需要发生变化,但可能因为主键值重复而导致无法改变

  • 一张表的主键约束只能有一个

  • MySQL提供主键值自增
    格式:
     id  int  primary key  auto_increment,
     id字段自动维护一个自增的数字,从1开始


    1.4外键约束的一些特性

  • 外键约束的相关术语
       外键约束:foreign key
       外键字段:田间有外键约束的字段
       外键值:外键字段中的每一个值

  • 外键值可以为NULL

  • 外键字段引用其他表的某个字段的时候,被引用的字段至少有unique约束(防止该字段出现重复值)

  • 为什么使用外键约束?
       如果只使用一张表来储存所有的数据,会出现冗杂。因此这些数据分为多张表来储存。

  • 表顺序要求:
       删测数据时,先删除子表(外键约束),再删除父表
       添加数据时,先添加父表,在添加子表
       创建表时,先创建父表,再创建子表
       删除表时,先删除子表,在删除父表

eg:

create table t_class(
       cno  int,
       cname  varchar(255),
       primary key(cno)  //表级约束
       );

create table t_student(
       sno  int primary key,  //行级约束
       sname  varchar(255),
       classno  int  ,  
       foreign key(classno) references t_class(cno)  //添加外键
       );
### MySQL 中的约束类型及其使用方法 #### 主 (Primary Key) 主用于唯一标识表中的每一行记录。它不允许有重复值或 NULL 值。可以通过 `PRIMARY KEY` 关字定义主。 - 创建时设置主: ```sql CREATE TABLE content ( id INT(10) PRIMARY KEY, first_name VARCHAR(20), last_name VARCHAR(20) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; ``` - 删除主约束: ```sql ALTER TABLE content DROP PRIMARY KEY; ``` 删除主后,非空约束仍然保留[^3]。 --- #### (Foreign Key) 用于建立两个表之间的关系,通常用来维护参照完整性。通过 `FOREIGN KEY` 定义。 - 设置: ```sql ALTER TABLE child_table ADD CONSTRAINT fk_parent_child FOREIGN KEY (parent_id) REFERENCES parent_table(id); ``` - 删除: ```sql ALTER TABLE child_table DROP FOREIGN KEY fk_parent_child; ``` 需要注意的是,的存在可以防止非法数据被插入到子表中[^2]。 --- #### 唯一性约束 (Unique Constraint) 唯一性约束确保某列或多列组合的数据在整个表中具有唯一性。允许有一个 NULL 值。 - 创建时设置唯一约束: ```sql CREATE TABLE content ( id INT(10) PRIMARY KEY, first_name VARCHAR(20) UNIQUE, last_name VARCHAR(20) ); ``` - 创建后添加唯一约束: ```sql ALTER TABLE content ADD CONSTRAINT unique_last_name UNIQUE (last_name); ``` - 删除唯一约束: ```sql ALTER TABLE content DROP INDEX unique_last_name; ``` 唯一性约束作用类似于主,但它允许多个字段联合形成唯一的约束条件[^1]。 --- #### 检查约束 (Check Constraint) 检查约束用于限制某一列能够接受的值范围。虽然 MySQL 支持语法声明 CHECK 约束,但在较早版本中并未实际生效。自 MySQL 8.0 开始支持真正的 CHECK 约束功能。 - 添加检查约束: ```sql CREATE TABLE product ( price DECIMAL(10, 2), quantity INT CHECK (quantity >= 0) ); ``` 此语句确保 `quantity` 列只接受大于等于零的整数[^4]。 --- #### 默认值约束 (Default Constraint) 默认值约束为未显式赋值的列提供一个预设值。 - 设置默认值: ```sql CREATE TABLE user_info ( username VARCHAR(50), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` 当向 `user_info` 表插入新记录而未指定 `created_at` 的值时,默认会采用当前时间戳作为其值。 --- #### 自增列 (Auto Increment Column) 自增列是一种特殊的属性,主要用于为主生成连续递增的数值。注意,自增列不能与非空约束同时使用,因为它本身已经隐含了非空特性。 - 使用自增列: ```sql CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) ); ``` 如果尝试手动插入不符合序列逻辑的值,则可能会引发错误;但如果完全依赖于数据库引擎来填充这些值,则不会出现问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值