最初 - 私はここ数日、これについての答えを運のない状態で探してきました。意味私は答えを見て、それらを試して、まだエラーを取得します。私は、コードを見ると私が気分が悪くなるという点に迫っています。だから、どんな助けでも大歓迎です。MySQL - 更新カスケード(複数のテーブル)
私は3つのテーブルCLIENT、PROJECTS、PROJECT_NOTESを持っています。プロジェクトは1つのクライアントにのみ割り当てることができますが、クライアントは複数のプロジェクトを持つことができます。プロジェクトは複数の音符を持つことができますが、その音符は1つのプロジェクトにのみ割り当てることができます。
私が探しているのは、私がクライアントを「ゴミ箱」にして、そのクライアントに関連付けられているすべてのプロジェクトが「ゴミ箱」になってしまうことです。その後、ゴミ箱に入れられたプロジェクトのプロジェクトメモもすべて「ゴミ箱」になります。
私はまた、プロジェクトを「ゴミ箱」にして、関連するすべてのプロジェクトノートを「ごみ箱」にすることもできます。
私は外部キーを使用し、更新カスケードを使用する必要があると想定しています。私は私の主キーが設定されている方法で何かをねじっていると思う - しかし、これは私に間違っているかもしれないので私には新しいものです。
問題なくテーブルを作成できます。私は問題なく、すべてのテーブルにデータを挿入できます。ただし、CLIENTまたはPROJECTSテーブルのいずれかで更新クエリを実行すると、CLIENT以外のテーブルにデータを挿入できなくなります。ここで
は、テーブルを作成するために使用されるコードです:
CREATE TABLE clients (
clientID INT UNSIGNED NOT NULL AUTO_INCREMENT,
companyName VARCHAR(128),
clientTrash TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (clientID, clientTrash),
INDEX (companyName)
)ENGINE=INNODB;
CREATE TABLE projects (
projectID INT UNSIGNED NOT NULL AUTO_INCREMENT,
clientID INT UNSIGNED NOT NULL,
projectTitle VARCHAR(128),
projectTrash TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (projectID, projectTrash),
INDEX (projectTitle),
FOREIGN KEY (clientID, projectTrash) REFERENCES clients (clientID, clientTrash)
ON DELETE CASCADE
ON UPDATE CASCADE
)ENGINE=INNODB;
CREATE TABLE project_notes (
projectNoteID INT UNSIGNED NOT NULL AUTO_INCREMENT,
projectID INT UNSIGNED NOT NULL,
note TEXT,
projectNoteTrash TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (projectNoteID, projectNoteTrash),
FOREIGN KEY (projectID, projectNoteTrash) REFERENCES projects (projectID, projectTrash)
ON DELETE CASCADE
ON UPDATE CASCADE
)ENGINE=INNODB;
(うまくいけば、そのコードが正しくフォーマットされた - それはここに掲示する私の最初の時間です)。
オンデマンドカスケードを使用するよりも(より簡単な)方法がある場合はお知らせください。また、何かすべての助けに感謝します。
追加する忘れた場合:CLIENTテーブルでclientTrash = 1を設定するための更新クエリを実行した後。 は、子行を追加または更新できません:。私はプロジェクトに値を挿入すると、エラー#1452で終わるようにするよ外部キー制約が失敗する(_clientmanage
をprojects
、CONSTRAINT projects_ibfk_1
FOREIGN KEY(clientID
、projectTrash
)は、clientID
(clients
を参照しますclientTrash
)
「コードを見れば何度も病気になっています。 –
それは機能しましたか?これがあなたが必要とするものなら、私は興味があります。 (ああ、upvoteにも気をつけません;)) – Inca