跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
SQL约束条件
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= SQL约束条件 = '''SQL约束条件'''(SQL Constraints)是应用于数据库表中列或表的规则,用于限制可以存储的数据类型。这些约束条件帮助维护数据的准确性、完整性和一致性,是关系型数据库设计的核心组成部分。 == 概述 == SQL约束条件定义了数据库中数据的有效性和关系规则。它们可以应用于列级别(仅影响单个列)或表级别(影响多个列)。约束条件在创建表时定义(通过<code>CREATE TABLE</code>语句),也可以在表创建后通过<code>ALTER TABLE</code>语句添加。 主要的SQL约束条件包括: * <code>NOT NULL</code> - 确保列不能存储NULL值 * <code>UNIQUE</code> - 确保列中的所有值都不同 * <code>PRIMARY KEY</code> - 唯一标识表中的每一行 * <code>FOREIGN KEY</code> - 确保一个表中的数据匹配另一个表中的值 * <code>CHECK</code> - 确保列中的值满足特定条件 * <code>DEFAULT</code> - 为列设置默认值 == 详细约束类型 == === NOT NULL 约束 === NOT NULL约束强制列不接受NULL值,这意味着必须始终包含一个值。 <syntaxhighlight lang="sql"> CREATE TABLE Employees ( EmployeeID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255) NOT NULL, Age int ); </syntaxhighlight> 在此示例中,EmployeeID、LastName和FirstName列不能包含NULL值,而Age列可以。 === UNIQUE 约束 === UNIQUE约束确保列中的所有值都不同。 <syntaxhighlight lang="sql"> CREATE TABLE Persons ( ID int NOT NULL UNIQUE, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int ); </syntaxhighlight> 或者使用表级约束: <syntaxhighlight lang="sql"> CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, UNIQUE (ID) ); </syntaxhighlight> === PRIMARY KEY 约束 === PRIMARY KEY约束唯一标识表中的每条记录。主键必须包含UNIQUE值且不能包含NULL值。 <syntaxhighlight lang="sql"> CREATE TABLE Customers ( CustomerID int NOT NULL PRIMARY KEY, CustomerName varchar(255) NOT NULL, ContactName varchar(255), Country varchar(255) ); </syntaxhighlight> 对于复合主键: <syntaxhighlight lang="sql"> CREATE TABLE OrderDetails ( OrderID int NOT NULL, ProductID int NOT NULL, Quantity int, PRIMARY KEY (OrderID, ProductID) ); </syntaxhighlight> === FOREIGN KEY 约束 === FOREIGN KEY约束用于防止破坏表之间链接的操作,它指向另一个表中的PRIMARY KEY。 <syntaxhighlight lang="sql"> CREATE TABLE Orders ( OrderID int NOT NULL PRIMARY KEY, OrderNumber int NOT NULL, CustomerID int, FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID) ); </syntaxhighlight> === CHECK 约束 === CHECK约束限制列中可以放置的值范围。 <syntaxhighlight lang="sql"> CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, CHECK (Age>=18) ); </syntaxhighlight> === DEFAULT 约束 === DEFAULT约束为列提供默认值。 <syntaxhighlight lang="sql"> CREATE TABLE Orders ( ID int NOT NULL, OrderNumber int NOT NULL, OrderDate date DEFAULT GETDATE() ); </syntaxhighlight> == 约束的实际应用案例 == === 用户注册系统 === 在一个用户注册系统中,我们可以使用多种约束来确保数据质量: <syntaxhighlight lang="sql"> CREATE TABLE Users ( UserID int NOT NULL PRIMARY KEY, Username varchar(50) NOT NULL UNIQUE, Email varchar(100) NOT NULL UNIQUE, PasswordHash varchar(255) NOT NULL, RegistrationDate datetime DEFAULT CURRENT_TIMESTAMP, Age int CHECK (Age >= 13), CountryCode char(2) REFERENCES Countries(Code) ); </syntaxhighlight> 这个表定义使用了: 1. PRIMARY KEY约束确保每个用户有唯一标识 2. NOT NULL约束确保关键信息不缺失 3. UNIQUE约束防止用户名和邮箱重复 4. DEFAULT约束自动记录注册时间 5. CHECK约束确保用户年龄符合要求 6. FOREIGN KEY约束关联国家代码表 == 约束的添加与删除 == === 添加约束 === 可以在表创建后添加约束: <syntaxhighlight lang="sql"> ALTER TABLE Persons ADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND Age<=120); </syntaxhighlight> === 删除约束 === 要删除约束: <syntaxhighlight lang="sql"> ALTER TABLE Persons DROP CONSTRAINT CHK_PersonAge; </syntaxhighlight> == 约束的级联操作 == 对于FOREIGN KEY约束,可以定义级联操作: <syntaxhighlight lang="sql"> CREATE TABLE Orders ( OrderID int NOT NULL PRIMARY KEY, CustomerID int NOT NULL, OrderDate datetime, FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID) ON DELETE CASCADE ON UPDATE NO ACTION ); </syntaxhighlight> 级联选项包括: * <code>NO ACTION</code> - 默认,阻止删除/更新 * <code>CASCADE</code> - 级联删除/更新相关行 * <code>SET NULL</code> - 将外键值设为NULL * <code>SET DEFAULT</code> - 将外键值设为默认值 == 约束的性能考虑 == 虽然约束对于数据完整性至关重要,但它们确实会带来性能开销: * 每次插入、更新或删除操作都需要验证约束 * 外键约束需要检查引用完整性 * 复杂的CHECK约束可能影响性能 在设计大型数据库时,需要在数据完整性和性能之间找到平衡。 == 约束的验证与禁用 == 在某些情况下(如大数据导入),可能需要临时禁用约束: <syntaxhighlight lang="sql"> -- 禁用所有约束 ALTER TABLE Orders NOCHECK CONSTRAINT ALL; -- 重新启用 ALTER TABLE Orders CHECK CONSTRAINT ALL; -- 禁用特定约束 ALTER TABLE Orders NOCHECK CONSTRAINT FK_Orders_Customers; </syntaxhighlight> == 总结 == SQL约束条件是数据库设计的基础工具,它们确保: * 数据的准确性和一致性(通过NOT NULL、CHECK等) * 数据的唯一性(通过PRIMARY KEY、UNIQUE) * 表之间的关系完整性(通过FOREIGN KEY) * 合理的默认值(通过DEFAULT) 合理使用约束可以显著减少应用程序中的错误检查代码,将数据验证逻辑集中在数据库层。 == 参见 == * [[SQL数据类型]] * [[数据库规范化]] * [[事务处理]] [[Category:计算机科学]] [[Category:数据库与信息系统]] [[Category:SQL基础]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)