Mysql 常见约束

含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性

分类:六大约束

1.not null 非空,保证该字段的只不能为空

2.default 默认,用于保证该字段有默认值

3.primary key 主键,用于保证该字段的值唯一,且非空

4.unique 唯一,用于保证该字段的值唯一,但可以为空

5.check 检查约束(mysql中不支持)

6.foreign key 外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值

添加的时机

1.创建表时

2.修改表时

 

约束的添加分类:

列级约束

六大约束语法均可,但外键约束没有效果

表级约束

除了非空和默认,其他的都支持

 

一、创建表时添加约束

1.添加列级约束

create table stuinfo
(
        id int primary key,#主键
        stuName varchar(20) not null,#非空
        gender char(1) check(gender = '男' or gender = '女'),#检查约束 
        seat int unique,#唯一约束
        age int default 18,#默认约束
        majorId int
        
) 

直接在字段名和类型名追加约束类型即可,check和外键不支持

2.添加表级约束

create table stuinfo
(
        id int,
        stuName varchar(20),
        gender char(1),
        seat int,
        age int,
        majorId int
        
        constraint pk primary key(id),#主键
        constraint uq unique(seat),#唯一
        constraint ck check(gender....)
        constraint fk_stufnfo_major foreign key(majorId) references major(id)#外键
        
) 

语法:在各个字段的最小码

【constraint 约束名】 约束类型(字段名)【】内容可以省略

 

主键和唯一键的比较

 保证唯一性是否允许为空一个表可以有多少个是否允许组合
主键可以不可以至多有一个可以,但不推荐
唯一可以可以可以有多个可以,但不推荐

外键的要求:

1.要求从表设置外键关系

2.从表的外键列的类型和主表的关联列的类型要求一致,名称无要求

3.主表的关联列必须是一个键(主键或唯一键)

4.插入数据时,先插入主表,再插入从表,删除数据时,先删除从表,再删除主表

 

二、修改表时添加约束

1.添加列级约束

alter table 表名 modify column 列名 类型 约束名

2.添加表级别约束

alter table 表名 add unique(列名)

三、修改表时删除约束

alter table 表名 modify column 列名 类型

或者

alter table 表名 drop 约束名

删除唯一

alter table 表名 drop index 列名

删除外键

alter table 表名 drop foreign key 外键名

删除主键

alter table 表名 drop primary key

注意 删除主键外键唯一只能用 drop

### MySQL 常见约束类型及作用总结 #### 主键约束 (PRIMARY KEY) 主键用于唯一标识表中的每一行记录。它不允许为空值(NULL),并且在一个表中只能定义一个主键。主键可以由单个字段组成,也可以由多个字段组合而成(复合主键)。通过主键约束,能够确保每条记录的唯一性和完整性[^1]。 #### 唯一键约束 (UNIQUE) 唯一键约束确保某列或多列组合的数据在整个表范围内不重复。与主键不同的是,唯一键允许存在 NULL 值,并且可以在同一张表上定义多个 UNIQUE 约束。需要注意的是,虽然唯一键允许多个 NULL 值,但在某些数据库实现中,这些 NULL 值可能仍然会被视为不同的实体[^2]。 #### 外键约束 (FOREIGN KEY) 外键用来建立两个表之间的关系,从而维护数据的一致性和参照完整性。具体来说,外键是一个字段或一组字段,其值必须匹配另一个表中的主键或其他唯一索引字段的值。如果违反这一规则,则无法执行相应的插入或更新操作。此外,在涉及级联删除或更新的情况下,外键还能自动同步相关联的数据变化[^3]。 #### 非空约束 (NOT NULL) 非空约束规定某一特定字段不得含有任何 NULL 值。这意味着当向该字段写入新纪录时,必须提供有效的输入值。此类型的约束有助于防止因缺失重要信息而导致的应用程序错误或逻辑混乱[^4]。 #### 默认值约束 (DEFAULT) 默认值约束为指定字段设定了一个初始值,这样在未明确给出其他值的时候就会采用这个预设值填充相应位置。这对于那些经常保持不变或者有固定模式可循的信息非常有用,比如状态标志位、时间戳等属性都可以利用 DEFAULT 来简化日常管理流程。 #### 检查约束 (CHECK) 尽管标准 SQL 支持 CHECK 约束以验证所存储数值是否满足一定条件范围内的要求,但目前主流版本的 MySQL 并未完全支持这种功能。不过可以通过触发器等方式间接达到类似效果——即限定某些列只接受符合条件的数据项加入其中。 ```sql -- 创建带各种约束的表格示例 CREATE TABLE employees ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, department_id INT, hire_date DATE DEFAULT CURRENT_DATE(), salary DECIMAL(10, 2), CONSTRAINT fk_department FOREIGN KEY (department_id) REFERENCES departments(id) ON DELETE CASCADE ); ``` 上述代码片段展示了如何综合运用多种约束来构建一张结构严谨的关系型数据库表 `employees` ,其中包括了主键自增机制、必填字段设定、电子邮件地址独占性保障措施以及雇佣日期自动化处理等内容。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值