1

このトリガーを変更して、sortorderテーブルに2つの列値(sortOrderIdsortOrder)が挿入されるようにすることはできますか?

の価値はどのようにsortOrder見つかりましたか?

それが既知であり、テーブルに挿入できる場合、それはimageテーブルにも挿入できsortorderますか?

-- Trigger DDL Statements
DELIMITER $$

USE `nextcart`$$

CREATE
DEFINER=`root`@`localhost`
TRIGGER `nextcart`.`insert_sortorderid` 

BEFORE INSERT ON `nextcart`.`image` 

FOR EACH ROW 
BEGIN
    INSERT INTO sortorder SET sortOrderId = NULL, sortOrder = NEW.sortOrder;

    SET NEW.sortOrderId = (SELECT LAST_INSERT_ID());
END;
$$

CREATE TABLEソート順:

delimiter $$

CREATE TABLE `sortorder` (
  `sortOrderId` int(11) NOT NULL AUTO_INCREMENT,
  `sortOrder` tinyint(4) NOT NULL,
  PRIMARY KEY (`sortOrderId`),
  KEY `sort_order` (`sortOrderId`,`sortOrder`),
  CONSTRAINT `fk_sortOrderId` FOREIGN KEY (`sortOrderId`) REFERENCES `image` (`imageId`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8$$

CREATE TABLEイメージ:

delimiter $$

CREATE TABLE `image` (
  `imageId` int(11) NOT NULL AUTO_INCREMENT,
  `imageFileName` varchar(45) DEFAULT NULL,
  `imagePath` varchar(255) DEFAULT NULL,
  `imageTitle` varchar(100) DEFAULT NULL,
  `imageAlt` varchar(100) DEFAULT NULL,
  `imageWidth` int(11) DEFAULT NULL,
  `imageHeight` int(11) DEFAULT NULL,
  `classId` int(11) DEFAULT NULL,
  `imageSizeId` tinyint(4) NOT NULL,
  `isImageEnabled` bit(1) DEFAULT b'0',
  `sortOrderId` int(11) DEFAULT NULL,
  PRIMARY KEY (`imageId`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8$$

エラーメッセージ:

エラー1054:「NEW」SQLステートメントの不明な列「sortOrder」:
CREATE TRIGGER insert_sortorderid BEFORE INSERT ON image FOR EACH ROW BEGIN INSERT INTO nextcart.sortorder SET sortOrderId = NULL、sortOrder = NEW.sortOrder; SET NEW.sortOrderId =(SELECT LAST_INSERT_ID()); 終わり; フェイルバックスクリプトの実行中にエラーが発生しました。詳細は以下の通りです。エラー1050:テーブル'image'は既に存在しますSQLステートメント:CREATE TABLE imageimageIdint(11)NOT NULL AUTO_INCREMENT、
imageFileNamevarchar(45)DEFAULT NULL、 imagePathvarchar(255)DEFAULT NULL、 imageTitlevarchar(100)DEFAULT NULL、 imageAlt varchar(100)DEFAULT NULL 、 imageWidthint(11)DEFAULT NULL、
imageHeightint(11)DEFAULT NULL、 classIdint(11)DEFAULT NULL、 imageSizeIdtinyint(4)NOT NULL、 isImageEnabledbit(1)DEFAULT b'0'、 sortOrderIdint(11)DEFAULT NULL、PRIMARY KEY(imageId))ENGINE = InnoDB AUTO_INCREMENT = 5 DEFAULT CHARSET = utf8

4

1 に答える 1

1

テーブルに名前が付けられsortOrderた列はありません。image

したがって、NEW.sortOrder(トリガーの挿入ステートメントでの)への参照は無効です。


最初の質問に答えるには:いいえ。INSERTステートメント(BEFORE INSERT TRIGGERを起動する)にはその値が指定されていないため、実際にはその値のソースがありません。

簡単なオプションは、デフォルト値を提供することです。

列に値を指定する場合sortOrder、1つのオプションは、sortOrder列をimageテーブルに追加することです。その後、値をINSERT INTO imageステートメントで指定できます。その後、トリガーで使用可能になります。

sortorder表の目的はまったく明確ではありません。)

于 2012-12-24T20:03:53.863 に答える