在SPJ数据库中,创建以下完整性约束: 1、为数据库表S创建check约束: 当插入或修改一个记录时, 确保此记录的STATUS在10到30之间。 2.为P表创建check约束: 当插入或修改一个记录时, COLOR只能是 (红,绿,蓝,黄,青,黑,紫,白)中的一种。 3、为SPJ表创建check约束: 当插入或修改个记录时, QTY在1-1000之间。4.为SPJ表创建外键约束 (如果先前没有指定外键) : SNO, PNO, JNO均为外码分别对应S, P,表中的SNO, PNO, JNO. 5、为S表创建约束:指定SNAME为唯一 的(unique)。 5.用实例验证上述约束(插入或修改不满足约束的值或元组进行测试) 7、删除上面创建的3, 5约束。
时间: 2023-06-07 20:08:04 浏览: 276
我可以回答你的第一个问题。以下是针对SPJ数据库的完整性约束创建的SQL语句:
1. 创建S表的完整性约束,确保记录的STATUS在10到30之间:
```sql
ALTER TABLE S
ADD CONSTRAINT CK_STATUS CHECK (STATUS >= 10 AND STATUS <= 30);
```
2. 创建P表的完整性约束,确保COLOR只能是 (红,绿,蓝,黄,青,黑,紫,白)中的一种:
```sql
ALTER TABLE P
ADD CONSTRAINT CK_COLOR CHECK (COLOR IN ('红', '绿', '蓝', '黄', '青', '黑', '紫', '白'));
```
3. 创建SPJ表的完整性约束,确保QTY在1到1000之间:
```sql
ALTER TABLE SPJ
ADD CONSTRAINT CK_QTY CHECK (QTY >= 1 AND QTY <= 1000);
```
4. 创建SPJ表的外键约束,确保SNO、PNO、JNO是S、P、J表中的外码:
```sql
ALTER TABLE SPJ
ADD CONSTRAINT FK_SPJ_SNO FOREIGN KEY (SNO) REFERENCES S(SNO),
ADD CONSTRAINT FK_SPJ_PNO FOREIGN KEY (PNO) REFERENCES P(PNO),
ADD CONSTRAINT FK_SPJ_JNO FOREIGN KEY (JNO) REFERENCES J(JNO);
```
5. 创建S表的唯一约束,确保SNAME是唯一的:
```sql
ALTER TABLE S
ADD CONSTRAINT UQ_SNAME UNIQUE (SNAME);
```
6. 用示例验证上述约束:
你可以使用INSERT语句插入不符合约束的数据来测试约束的有效性,例如:
```sql
-- 测试S表的CHECK约束
INSERT INTO S (SNO, SNAME, STATUS, CITY)
VALUES ('S01', 'Tom', 9, 'New York'); -- 无法插入,STATUS不符合约束
-- 测试P表的CHECK约束
INSERT INTO P (PNO, PNAME, COLOR, WEIGHT, CITY)
VALUES ('P01', 'Pen', '橙', 0.2, 'Shanghai'); -- 无法插入,COLOR不符合约束
-- 测试SPJ表的CHECK约束
INSERT INTO SPJ (SNO, PNO, JNO, QTY)
VALUES ('S01', 'P01', 'J01', 1001); -- 无法插入,QTY不符合约束
-- 测试SPJ表的外键约束
INSERT INTO SPJ (SNO, PNO, JNO, QTY)
VALUES ('S99', 'P99', 'J01', 10); -- 无法插入,SNO和PNO不在对应的表中
-- 测试S表的唯一约束
INSERT INTO S (SNO, SNAME, STATUS, CITY)
VALUES ('S01', 'Tom', 10, 'New York'); -- 无法插入,SNAME已经存在
```
7. 删除3和5的约束:
```sql
ALTER TABLE S
DROP CONSTRAINT CK_STATUS,
DROP CONSTRAINT UQ_SNAME;
ALTER TABLE SPJ
DROP CONSTRAINT CK_QTY,
DROP CONSTRAINT FK_SPJ_SNO,
DROP CONSTRAINT FK_SPJ_PNO,
DROP CONSTRAINT FK_SPJ_JNO;
ALTER TABLE P
DROP CONSTRAINT CK_COLOR;
```
阅读全文