SQL约束与数据管理操作详解
立即解锁
发布时间: 2025-08-21 02:10:34 阅读量: 1 订阅数: 4 


深入掌握PROC SQL与SAS数据处理技巧
### SQL 约束与数据管理操作详解
在数据管理领域,确保数据的完整性和准确性至关重要。SQL 提供了多种约束机制,如 NOT NULL、UNIQUE、CHECK 约束,以及通过主键和外键实现的引用完整性约束,同时还具备删除表中数据行的功能。下面将详细介绍这些约束和操作。
#### 1. NOT NULL 约束
NOT NULL 约束用于确保列中不包含缺失或空值。当定义了 NOT NULL 约束并尝试向表中插入包含缺失值的行时,这些行将被拒绝,表会恢复到原始状态。
例如,以下代码尝试向 CUSTOMER_CITY 表插入数据:
```sql
PROC SQL;
INSERT INTO CUSTOMER_CITY
VALUES(101,'La Mesa Computer Land')
VALUES(1301,'Spring Valley Byte Center')
VALUES(1801,'');
QUIT;
```
SAS 日志显示由于第三行的 CUSTCITY 值为空,违反了 NOT NULL 约束,插入操作失败:
```plaintext
ERROR: Add/Update failed for data set WORK.CUSTOMER_CITY because data
value(s) do not comply with integrity constraint _NM0001_.
NOTE: This insert failed while attempting to add data from VALUES
clause 3 to the data set.
NOTE: Deleting the successful inserts before error noted above to
restore table to a consistent state.
```
此外,也可以使用 ALTER TABLE 语句为现有表的列添加 NOT NULL 约束,但前提是该列不能包含缺失或空值。例如:
```sql
PROC SQL;
ALTER TABLE CUSTOMERS
ADD CONSTRAINT NOT_NULL_CUSTCITY NOT NULL(CUSTCITY);
QUIT;
```
如果 CUSTOMERS 表的 CUSTCITY 列包含缺失值,添加约束将失败:
```plaintext
ERROR: Integrity constraint NOT_NULL_CUSTCITY was rejected because 1
observations failed the constraint.
```
#### 2. UNIQUE 约束
UNIQUE 约束用于防止表中出现重复值。在创建表时,可以为不希望出现重复数据的列指定 UNIQUE 约束。
例如,创建 CUSTOMER_CITY 表时为 CUSTNUM 列指定 UNIQUE 约束:
```sql
PROC SQL;
CREATE TABLE CUSTOMER_CITY
(CUSTNUM NUM UNIQUE,
CUSTCITY CHAR(20));
QUIT;
```
当尝试插入包含重复 CUSTNUM 值的行时,插入操作将失败:
```sql
PROC SQL;
INSERT INTO CUSTOMER_CITY
VALUES(101,'La Mesa Computer Land')
VALUES(1301,'Spring Valley Byte Center')
VALUES(1301,'Chula Vista Networks');
QUIT;
```
SAS 日志显示由于第三行的 CUSTNUM 值重复,违反了 UNIQUE 约束,插入操作失败:
```plaintext
ERROR: Add/Update failed for data set WORK.CUSTOMER_CITY because data
value(s) do not comply with integrity constraint _UN0001_.
NOTE: This insert failed while attempting to add data from VALUES
clause 3 to the data set.
NOTE: Deleting the successful inserts before error noted above to
restore table to a consistent state.
```
#### 3. CHECK 约束
CHECK 约束用于在向表中插入数据之前,验证数据值是否符合指定的条件,如值列表、最小值和最大值或值范围。
例如,为 PRODUCTS 表的 PRODTYPE 列添加 CHECK 约束,要求该列的值必须是 'Laptop'、'Phone'、'Software' 或 'Workstation' 之一:
```sql
PROC SQL;
ALTER TABLE PRODUCTS
ADD CONSTRAINT CHECK_PRODUCT_TYPE
CHECK (PRODTYPE IN ('Laptop',
'Phone',
'Software',
'Workstation'));
QUIT;
```
当尝试插入包含不符合约束条件的 PRODTYPE 值的行时,插入操作将失败:
```sql
PROC SQL;
INSERT INTO PRODUCTS
VALUES(5005,'Internet Software',500,'Software',99.)
VALUES(1701,'Elite Laptop',170,'Laptop',3900.)
VALUES(2103,'Digital Cell Phone',210,'Fone',199.);
QUIT;
```
SAS 日志显示由于第三行的 PRODTYPE 值为 'Fone',不符合约束条件,插入操作失败:
```plaintext
ERROR: Add/Update failed for data set WORK.PRODUCTS because data
value(s) do not comply with integrity constraint CHECK_PRODUCT_TYPE.
NOTE: This insert failed while attempting to add data from VALUES
clause 3 to the data set.
NOTE: Deleting the successful inserts before error noted above to
restore table to a consistent state.
```
#### 4. 引用完整性约束
引用完整性约束通过主键和外键在两个或多个表之间强制执行,用于防止数据完整性问题。引用完整性约束包括主键和外键,以及相应的约束操作子句,如 RESTRICT(默认)、SET NULL 和 CASCADE。
##### 4.1 建立主键
主键由一个或多个具有唯一值的列组
0
0
复制全文
相关推荐










