SQL中的约束

首先说下约束

约束是定义对一个表中的属性操作的限制

它的分类主要有主键和和外键约束,但还有一些其他的约束,以下介绍

主键约束是不允许重复元素,避免数据的冗余

外键约束是从语法上保证了本事物所关联的其他事物一定是存在的。再者

主键约束是实体完整,

外键约束是引用完整

事物和事物之间的关系是通过外键来表现的。

其他约束还有

1 Check约束是限制某一值在某一范围内

如限定表student中学费在3000-10000内

Stu_sal int check (stu_sal>=3000 and stu_sal<=10000)

2 Unique唯一约束

它和非空not null 是可以组合使用的

唯一约束保证了事物属性的取值不允许重复,但允许为空(允许其中有一列且只能有一列为空)如实例我们将学生的email设置不允许为空,姓名唯一。

Stu-email nvarchar(30) not null,

Stu_name nvarchar(20) nuique

Not null 要求用户必须为该属性赋值,否则语法报错

3 Default约束

保证了事物的实行一定会有一个值

如我们给student表中的学生设置默认性别

Sut_sex nchar(1) default ‘男’

注意:

相同点是都允许用户不赋值,不同点是null修饰的字段不赋值则默认是null

default不赋值,则默认是default制定的值。

<think>好的,用户想了解SQL中的约束类型及用法,包括主键、外键、唯一、检查、默认和非空约束。我需要先回忆这些约束的定义和常见用法,然后结合用户提供的引用资料中的示例来组织回答。 首先,主键约束用于唯一标识表中的每一条记录,确保列的值唯一且非空。用户提到的引用[1]中提到了如何在SQL Server中创建主键,可以使用PRIMARY KEY关键字,在创建表时指定,或者在现有表上添加。例如,创建表的时候定义主键,或者使用ALTER TABLE语句添加。 接下来是外键约束,用于维护表之间的引用完整性。引用[1]和[2]都提到了外键的创建方法,比如在CREATE TABLE中使用FOREIGN KEY REFERENCES,或者在已有表上通过ALTER TABLE添加。需要注意的是,不同数据库的语法可能略有不同,比如MySQL需要指定FOREIGN KEY名称,而SQL Server可能更简洁。 唯一约束确保某列的值唯一,但允许有空值。用户提供的引用中提到了UNIQUE关键字的使用,比如在创建表时添加,或者后续修改表结构。需要指出的是,主键和唯一约束的区别在于主键不允许NULL,而唯一约束允许。 检查约束用于限制列中的值的范围,比如年龄必须大于零。引用中没有直接提到,但这是常见的约束类型,应使用CHECK关键字,可以在创建表时或之后添加。 默认约束是当插入数据时,如果未指定该列的值,则使用默认值。使用DEFAULT关键字,例如在列定义后加DEFAULT '值'。 非空约束要求列不能有NULL值,使用NOT NULL关键字。这在创建表时指定,或者在修改表时更改列的属性。 然后,需要整理每个约束的语法示例,参考用户提供的引用中的例子,比如引用[1]中的主键创建,引用[2]中的外键删除。同时要注意不同数据库系统的差异,比如MySQLSQL Server在某些语法上的不同,比如自增列在SQL Server中使用IDENTITY,而MySQL使用AUTO_INCREMENT,但用户的问题可能更关注通用SQL语法。 最后,生成相关问题时要覆盖各个约束的应用场景、区别、修改删除方法以及常见错误处理。例如,主键和唯一约束的区别,外键的级联操作,检查约束的使用示例等。 确保回答结构清晰,分点列出每个约束的定义、用法和示例,并在适当的地方引用提供的资料,比如在讨论外键时引用[2]中的删除外键示例。同时,注意使用中文回答,行内公式使用$...$,但这里可能不太需要数学公式,更多是代码示例,所以需遵循用户的格式要求,代码块用反引号包裹,并标明语言类型,如SQL。 现在需要检查是否有遗漏的约束类型,比如默认和非空是否都被涵盖,以及示例是否正确。例如,用户问题中提到的检查约束,在引用中没有示例,需要自行补充。同时,确保每个约束的示例代码正确,符合标准SQL语法,并注明不同数据库的可能差异。 总结回答的结构:先概述,然后每个约束单独一段,包含定义、用法、示例,最后相关问题。引用标识放在相关段落末尾,如外键部分引用[^2],主键引用[^1]。</think>### SQL约束类型及用法详解 #### 一、主键约束(PRIMARY KEY) **定义**:主键用于唯一标识表中的每一条记录,要求值**唯一且非空**。 **用法**: 1. **创建表时定义**: ```sql CREATE TABLE Students ( StudentID INT PRIMARY KEY, Name VARCHAR(50) ); ``` 2. **为现有表添加主键**: ```sql ALTER TABLE Students ADD PRIMARY KEY (StudentID); ``` **示例**: 在SQL Server中,主键还可与自增属性结合使用: ```sql CREATE TABLE Employees ( ID INT IDENTITY(1,1) PRIMARY KEY, Name VARCHAR(50) ); ``` [^1] --- #### 二、外键约束(FOREIGN KEY) **定义**:外键用于关联两个表,确保引用完整性。 **用法**: 1. **创建表时定义**: ```sql CREATE TABLE Orders ( OrderID INT PRIMARY KEY, CustomerID INT, FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID) ); ``` 2. **为现有表添加外键**(以MySQL为例): ```sql ALTER TABLE Orders ADD CONSTRAINT fk_customer FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID); ``` **示例**: 删除外键时需指定约束名称: ```sql ALTER TABLE emp DROP FOREIGN KEY fk_emp_dept_id; -- MySQL示例 ``` --- #### 三、唯一约束(UNIQUE) **定义**:确保列的值唯一,但允许空值(主键不允许空值)。 **用法**: 1. **创建表时定义**: ```sql CREATE TABLE Users ( Email VARCHAR(100) UNIQUE, Username VARCHAR(50) ); ``` 2. **为现有表添加唯一约束**: ```sql ALTER TABLE Users ADD UNIQUE (Email); ``` --- #### 四、检查约束(CHECK) **定义**:限制列的取值范围(如年龄≥0)。 **用法**: 1. **创建表时定义**: ```sql CREATE TABLE Employees ( Age INT CHECK (Age >= 18), Salary DECIMAL(10,2) CHECK (Salary > 0) ); ``` 2. **为现有表添加检查约束**: ```sql ALTER TABLE Employees ADD CONSTRAINT chk_age CHECK (Age >= 18); ``` --- #### 五、默认约束(DEFAULT) **定义**:插入数据时,若未指定列值,则使用默认值。 **用法**: ```sql CREATE TABLE Products ( ProductID INT PRIMARY KEY, CreatedDate DATE DEFAULT GETDATE() -- SQL Server示例 ); ``` --- #### 六、非空约束(NOT NULL) **定义**:强制列不允许空值。 **用法**: ```sql CREATE TABLE Books ( ISBN VARCHAR(13) NOT NULL, Title VARCHAR(100) ); ``` --- ### 对比与注意事项 | 约束类型 | 核心特性 | 允许空值 | |------------|----------------------------|----------| | 主键 | 唯一标识记录 | 否 | | 唯一约束 | 值唯一 | 是 | | 外键 | 关联其他表的主键或唯一约束 | 是 | | 非空约束 | 强制列不为空 | 否 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值