freeCodeCamp/guide/chinese/sql/sql-check-constraint/index.md

90 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: SQL CHECK Constraint
localeTitle: SQL CHECK约束
---
CHECK约束用于限制可以放在列中的值范围。
如果在单个列上定义CHECK约束则它仅允许此列的某些值。
如果在表上定义CHECK约束它可以根据行中其他列中的值限制某些列中的值。
### SQL CHECK CREATE TABLE
创建“Persons”表时以下SQL在“Age”列上创建CHECK约束。 CHECK约束确保您不能拥有18岁以下的任何人
**MySQL的**
```sql
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CHECK (Age>=18)
);
```
**SQL Server / Oracle / MS Access**
```sql
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int CHECK (Age>=18)
);
```
要允许命名CHECK约束并在多列上定义CHECK约束请使用以下SQL语法
**MySQL / SQL Server / Oracle / MS Access**
```sql
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
City varchar(255),
CONSTRAINT CHK_Person CHECK (Age>=18 AND City='Sandnes')
);
```
### SQL CHECK ALTER TABLE
要在已创建表时在“Age”列上创建CHECK约束请使用以下SQL
**MySQL / SQL Server / Oracle / MS Access**
```sql
ALTER TABLE Persons
ADD CHECK (Age>=18);
```
要允许命名CHECK约束并在多列上定义CHECK约束请使用以下SQL语法
**MySQL / SQL Server / Oracle / MS Access**
```sql
ALTER TABLE Persons
ADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND City='Sandnes');
```
### DROP一个CHECK约束
要删除CHECK约束请使用以下SQL
**SQL Server / Oracle / MS Access**
```sql
ALTER TABLE Persons
DROP CONSTRAINT CHK_PersonAge;
```
**MySQL的**
```sql
ALTER TABLE Persons
DROP CHECK CHK_PersonAge;
```