约束的类型

约束的类型:

主键约束: 要求主键列不能为空,要求主键列唯一

非空约束: 要求该列不能存在空值

唯一约束: 要求该列的值必须唯一的,允许为空,但只能出一个空值

检查约束: 限制某列取值的范围是否合适

默认约束: 设计某列的默认值

外键约束: 用于在两表之间建立关系,需要指定引用主表是哪一列

 

主键约束与唯一约束的区别

1.主键约束所在的列不允许有空值,唯一约束所列允许为空值

2.每个表中可以有一个主键,多个唯一约束

 

语法

alter table 表名

add constraint 约束名 约束类型 具体的约束说明

约束名的取名规则推荐采用: 约束类型_约束列

主键[primary key]约束 :如 PK_userid

唯一[unique key] 约束 :如 UQ_userid

默认[default key] 约束 :如 DF_userid

检查[check key]  约束 :如 CK_userid

外键[foreign key] 约束 :如 FK_userid

 

 

--添加主键约束   
Alter Table stuInfo   
Add Constraint  PK_stuNO primary Key(stuNo)   
---添加唯一约束   
Alter Table stuInfo   
Add Constraint UQ_stuID unique(stuID)   
---添加默认约束   
Alter Table stuInfo   
Add Constraint DF_stuAddress default('地址不详') for stuAddress   
---添加检查约束   
Alter Table stuInfo   
Add Constraint CK_stuAge check(stuAge between 15 and 40)   
---添加外键约束   
Alter Table stuMarks   
Add Constraint FK_stuNo foreign key(stuNo) references stuInfo(stuNo)  

 

在创建表的时候同时添加约束的写法:
use stuDB   
go   
if exists(select * from Sysobjects where name = 'stuInfo')   
drop table stuInfo   
go   
create table stuInfo   
(   
     stuName varchar(20) not null primary key(stuName)    
,stuID int not null unique(stuID)   
,stuAddress varchar(20) not null default('地址不详')   
,stuAge int not null check(stuAge between 15 and 40)  

 

转载于:https://www.cnblogs.com/xiaowie/p/8674980.html

<think>好的,我现在需要回答用户关于MySQL支持的约束类型的问题。用户提到主键、外键、唯一性、非空、默认值这些约束,我需要详细说明每个类型,并结合引用中的信息。 首先,主键约束。根据引用[1]和[2],主键约束的特点是唯一且非空,一个表只能有一个主键,可以使用列级或表级约束。比如引用[2]中的例子是列级主键。 接下来是外键约束,引用[1]提到外键约束用于关联其他表的主键,确保数据完整性。需要说明外键的作用和用法,可能还需要提到级联操作。 唯一性约束,引用[3]指出可以有多个唯一约束,允许空值,并且MySQL会自动创建唯一索引。需要强调与主键的区别,比如是否允许空值和数量限制。 非空约束,引用[1]和[2]提到非空约束只有列级,没有表级,必须显式插入值,否则报错。例子如NOT NULL。 默认值约束,引用[1]和[4]说明默认值在未插入时使用预设值,例如DEFAULT '默认值'。引用[4]中的建表示例有使用默认值的情况。 还需要检查是否有其他约束类型,比如自增约束,但用户的问题中没有提到,但引用[4]提到了自增约束,可能需要简要提及作为补充。 现在要组织这些信息,结构清晰,每个约束类型分点说明,包括特点、用法和示例。同时根据用户要求,生成相关问题。 需要确保使用正确的中文表达,行内公式用$...$,但这里可能更多是代码块,所以注意语法。同时,引用文献要正确标注,如[^1]、[^2]等。 最后生成的相关问题要围绕约束类型,比如如何添加、区别、组合使用等。</think>MySQL支持的约束类型主要包括以下五种,这些约束共同保障了数据的完整性和一致性[^1][^2][^3][^4]: --- ### 一、主键约束(PRIMARY KEY) **特点**: - 同时具备**唯一性**和**非空性** - 每个表只能存在一个主键 - 支持列级定义(直接在字段后声明)和表级定义(单独声明) **示例**: ```sql -- 列级主键 CREATE TABLE t_user( id INT PRIMARY KEY, username VARCHAR(255) ); -- 表级主键 CREATE TABLE employee( eid INT, ename VARCHAR(20), PRIMARY KEY(eid) ); ``` --- ### 二、外键约束(FOREIGN KEY) **特点**: - 用于维护表之间的关联关系 - 确保引用另一个表的主键或唯一键的值存在 - 支持级联操作(如 `ON DELETE CASCADE`) **示例**: ```sql CREATE TABLE orders( order_id INT PRIMARY KEY, user_id INT, FOREIGN KEY (user_id) REFERENCES t_user(id) ); ``` --- ### 三、唯一性约束(UNIQUE) **特点**: - 保证字段值的唯一性,但允许空值(`NULL`) - 一个表可定义多个唯一约束 - MySQL会自动为唯一约束字段创建唯一索引[^3] **示例**: ```sql CREATE TABLE product( product_code VARCHAR(50) UNIQUE, serial_number VARCHAR(50) UNIQUE ); ``` --- ### 四、非空约束(NOT NULL) **特点**: - 强制字段不能为`NULL` - **仅支持列级定义**,无表级定义形式[^2] **示例**: ```sql CREATE TABLE employee( eid INT PRIMARY KEY, ename VARCHAR(20) NOT NULL ); ``` --- ### 五、默认值约束(DEFAULT) **特点**: - 当插入数据未指定字段值时,自动填充预设值 - 常与非空约束配合使用 **示例**: ```sql CREATE TABLE orders( status VARCHAR(20) DEFAULT 'pending', create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` --- ### 扩展:自增约束(AUTO_INCREMENT) **特点**: - 字段值自动递增,通常与主键配合使用 - 仅适用于整数类型字段 **示例**: ```sql CREATE TABLE t_user( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(255) ); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值