「emp_id」列に主キーが設定され、外部キーを持つ他のテーブルによって参照されているテーブル従業員から行の削除を実行しようとしています。Sybase では削除を実行できません。メッセージバックの例は次のとおりです。
参照整合性制約における依存外部キー制約違反。データベース名 = 'キリン'、テーブル名 = 'ブランチ'、制約名 = 'client_800002850'。コマンドは中止されました。
MySQL では、ON DELETE 句で外部キーを指定すると、この種の削除を簡単に行うことができますが、これは Sybase ではサポートされていません。この RDBMS の外部キーの唯一のオプション句は「MATCH FULL」です
外部キーが設定されている場合、Sybaseで行を削除したり、値をNULLに設定したりするにはどうすればよいですか? 私は t-sql と DBA のまったくの初心者です。私の理解では、このような db スキーマを使用すると、外部キーをまったく持たない必要がありますか、それとも何か不足していますか? おそらく、このスキーマは 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)
この「employee」テーブルの制約のリストは次のとおりです。
- branch_1008003591 ブランチ FOREIGN KEY (mgr_id) REFERENCES employee(emp_id) 2019 年 6 月 18 日 11:58AM
- employee_880003135 employee FOREIGN KEY (branch_id) REFERENCES branch(branch_id) 2019 年 6 月 18 日 10:44AM
- works_with_848003021 works_with FOREIGN KEY (emp_id) REFERENCES 従業員 (emp_id) 2019 年 6 月 17 日 19:26
- employee_752002679 employee FOREIGN KEY (super_id) SELF REFERENCES employee(emp_id) 2019 年 6 月 17 日 7:24PM
- employee_960003420 employee FOREIGN KEY (super_id) SELF REFERENCES employee(emp_id) MATCH FULL Jun 18 2019 11:17AM
- employee_6720023941 PRIMARY KEY INDEX ( emp_id) : クラスター化、外部参照
次の DML を実行したい:
DELETE from dbo.employee
WHERE employee.emp_id = 102
その MySQL コースでは、'branch' テーブルの外部キーが ON DELETE SET NULL 句で設定されていた場合、後続の自動アクションは branch.mgr_id 値を 102 から NULL に設定していたでしょう。
テーブルのPKではないため、branch.mgr_idをNULLに設定しようとしましたが、明らかに役に立ちませんでした。