私は2つのテーブル、テーブル(ファイル)とテーブル(ハッシュ)が存在しない場合は(ハッシュ)を追加する新しい(ファイル)を挿入するプロシージャを作成したいと思うし、(ID)テーブルが存在する場合は(ID)を選択して挿入してください。(ファイルトリガーを挿入する前に)使用する必要がありますが、CONSTRAINTエラーまたは挿入されたファイルがありません。その下のようなあなたのトリガでトリガーを挿入する前に?
CREATE TABLE `Hashes` (
`ID` int(255) unsigned NOT NULL AUTO_INCREMENT,
`Hash` varchar(255) NOT NULL,
`Counter` int(255) NOT NULL DEFAULT '1',
PRIMARY KEY (`ID`),
UNIQUE KEY `Hash` (`Hash`)
)
と
CREATE TABLE `Files` (
`ID` int(255) unsigned NOT NULL AUTO_INCREMENT,
`Name` varchar(255) NOT NULL,
`ParentPath` varchar(255) DEFAULT NULL,
`Size` double NOT NULL,
`Date` date NOT NULL,
`ParentID` int(255) unsigned NOT NULL DEFAULT '0',
`HashID` int(255) unsigned DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `fk_Hash_ID` (`HashID`),
CONSTRAINT `fk_Hash_ID` FOREIGN KEY (`HashID`) REFERENCES `hashes` (`ID`)
)
////////
CREATE PROCEDURE SP_Files_Insert
(
parmName VARCHAR(255),
parmParentPath VARCHAR(255),
parmSize DOUBLE,
parmDate DATE,
parmParentID INTEGER,
parmHash VARCHAR(255)
)
BEGIN
INSERT INTO Files(Name, ParentPath, Size, Date, ParentID, HashID)
VALUES(parmName, parmParentPath, parmSize, parmDate, parmParentID, LAST_INSERT_ID());
END;
////////////
CREATE TRIGGER TR_Insert_File BEFORE INSERT ON Files
FOR EACH ROW
BEGIN
INSERT INTO Hash(Hash, Counter)
VALUE(parmHash, 1)
ON DUPLICATE KEY UPDATE ID = LAST_INSERT_ID(ID), Counter = Counter + 1;
END;
たちが追加または子の行を更新することはできませんあなたの完全なエラーメッセージ –
をお知らせするために動作します:外部キー制約が失敗しました( 'cloudimagesdb'.files'、CONSTRAINT'fk_Hash_ID')外部キー(' HashID')参照 'ハッシュ'( 'ID')ON更新カスケード) – user3552185
あなたのエラーメッセージは、 fk関係を最初に作成するか、または外部キーを無効にする必要があります。外部キーを無効にするにはSET FOREIGN_KEY_CHECKS = 0;外部キーを有効にするにはSET FOREIGN_KEY_CHECKS = 1; –