学生表中的所在院系sdname参照department表的dname,删除规则是级联,更新规则是拒绝;学生表中的专业spec参照speciality表的specno,删除规则是设置为空,更新规则是级联。用数据库编写出来
时间: 2024-10-24 12:09:08 浏览: 20
在SQL中,你可以使用外键约束(Foreign Key Constraints)来表达这种关系,并设定相应的删除(onDelete)和更新(onUpdate)规则。这里是一个简单的例子,假设你有两个表`students`和`departments`,以及`students`和`specialities`之间的关系:
```sql
-- 创建department表
CREATE TABLE departments (
dname VARCHAR(50) PRIMARY KEY,
-- 其他列...
);
-- 创建specialities表
CREATE TABLE specialities (
specno INT PRIMARY KEY,
specname VARCHAR(50),
-- 其他列...
);
-- 创建students表,设置了外键约束
CREATE TABLE students (
sid INT PRIMARY KEY,
name VARCHAR(50),
sdname VARCHAR(50),
specno INT,
FOREIGN KEY (sdname) REFERENCES departments(dname) ON DELETE CASCADE ON UPDATE RESTRICT, -- 级联删除和拒绝更新部门
FOREIGN KEY (specno) REFERENCES specialities(specno) ON DELETE SET NULL ON UPDATE CASCADE -- 设置空值删除,级联更新专业
);
```
在这个示例中:
- `ON DELETE CASCADE` 表示当`departments.dname`被删除时,关联的学生会自动删除。
- `ON UPDATE RESTRICT` 意味着如果试图更新`departments.dname`,只有当新值存在时才会允许,否则操作会被拒绝。
- `ON DELETE SET NULL` 表示当`specialities.specno`被删除时,学生表中的`specno`字段将设为NULL。
- `ON UPDATE CASCADE` 表示如果`specialities.specno`更新了,学生表中的相应记录也会同步更新到新的值。
阅读全文