是否可以更改此触发器,以便sortorder
表格插入2列值(sortOrderId
,sortOrder
)?
如何找到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 sortorder:
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 image:
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:'新'SQL语句中的未知列'sortOrder':
在每次插入图像之前创建TRIGGER insert_sortorderid ROW BEGIN INSERT INTO nextcart.sortorder SET sortOrderId = NULL, sortOrder = NEW.sortOrder; SET NEW.sortOrderId =(SELECT LAST_INSERT_ID());结束;运行故障回复脚本时出错。细节 跟随。错误1050:表'image'已存在SQL语句:CREATE 表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
答案 0 :(得分:1)
sortOrder
表中没有名为image
的列。
因此,对NEW.sortOrder
的引用(在触发器中的insert语句中)无效。
回答你的第一个问题:不可以。因为在INSERT语句中没有提供任何值(它会触发BEFORE INSERT TRIGGER),你实际上没有该值的来源。
简单的选择是为它提供默认值。
如果要为sortOrder
列提供值,则一个选项是将sortOrder列添加到image
表,然后可以在INSERT INTO image
中提供该值声明。然后它将在触发器中可用。
(sortorder
表的目的一点都不清楚。)