我正在尝试从表employee 中执行行删除,该表employee 在“emp_id”列上设置了主键,并被其他表及其外键引用。Sybase 不允许我执行删除。返回的示例味精是:
引用完整性约束中的从属外键约束违反。dbname = 'giraffe',表名 = 'branch',约束名 = 'client_800002850'。命令已中止。
使用 MySQL,如果您使用 ON DELETE 子句指定外键,则可以轻松进行这种删除,但 Sybase 不支持。此 RDBMS 中外键的唯一可选子句是 'MATCH FULL'
如果设置了外键,如何在 Sybase 中删除行或将值设置为 NULL?我是 t-sql 和 DBA 的新手。据我了解,拥有这样的数据库模式,它根本不需要外键,或者我错过了什么?也许这个模式是 MySQL 特定的,它应该以不同的方式编码以满足 Sybase t-sql 标准?
这是DDL。课程链接 - https://www.youtube.com/watch?v=HXV3zeQKqGY
============================
CREATE TABLE employee (
emp_id INT PRIMARY KEY,
first_name VARCHAR(40),
last_name VARCHAR(40),
birth_day DATE,
sex VARCHAR(1),
salary INT,
super_id INT,
branch_id INT
);
CREATE TABLE branch (
branch_id INT PRIMARY KEY,
branch_name VARCHAR(40),
mgr_id INT,
mgr_start_date DATE,
FOREIGN KEY(mgr_id) REFERENCES employee(emp_id) ON DELETE SET NULL
);
ALTER TABLE employee
ADD FOREIGN KEY(branch_id)
REFERENCES branch(branch_id)
ON DELETE SET NULL;
ALTER TABLE employee
ADD FOREIGN KEY(super_id)
REFERENCES employee(emp_id)
ON DELETE SET NULL;
CREATE TABLE client (
client_id INT PRIMARY KEY,
client_name VARCHAR(40),
branch_id INT,
FOREIGN KEY(branch_id) REFERENCES branch(branch_id) ON DELETE SET NULL
);
CREATE TABLE works_with (
emp_id INT,
client_id INT,
total_sales INT,
PRIMARY KEY(emp_id, client_id),
FOREIGN KEY(emp_id) REFERENCES employee(emp_id) ON DELETE CASCADE,
FOREIGN KEY(client_id) REFERENCES client(client_id) ON DELETE CASCADE
);
CREATE TABLE branch_supplier (
branch_id INT,
supplier_name VARCHAR(40),
supply_type VARCHAR(40),
PRIMARY KEY(branch_id, supplier_name),
FOREIGN KEY(branch_id) REFERENCES branch(branch_id)
这是此“员工”表的约束列表
- branch_1008003591 分支外键(mgr_id)参考员工(emp_id)2019 年 6 月 18 日上午 11:58
- employee_880003135 员工外键(branch_id)参考分支(branch_id)2019 年 6 月 18 日上午 10:44
- works_with_848003021works_with 外键(emp_id)参考员工(emp_id)2019 年 6 月 17 日晚上 7:26
- employee_752002679 员工外键(super_id)自引用员工(emp_id)2019 年 6 月 17 日晚上 7:24
- employee_960003420 员工外键(super_id)自引用员工(emp_id)匹配已满 2019 年 6 月 18 日上午 11:17
- employee_6720023941 主键索引(emp_id):集群,外引用
我想执行以下 DML:
DELETE from dbo.employee
WHERE employee.emp_id = 102
在那个 MySQL 课程中,如果“分支”表的外键已使用 ON DELETE SET NULL 子句设置,则随后的自动操作会将 branch.mgr_id 值从 102 设置为 NULL。
我尝试将 branch.mgr_id 设置为 NULL,因为它不是表的 PK,但显然它没有帮助。