是否可以更改此触发器,以便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;
$$
创建表排序顺序:
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$$
创建表图像:
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”未知:
在INSERT ON image之前为每一行开始INSERT to nextcart.sortOrder设置sortOrderId=NULL,sortOrder=new.sortOrder;设置new.sortorderId=(SELECT LAST_INSERT_ID());结束;运行故障恢复脚本时出错。详情如下。错误1050:表“image”已存在SQL语句:创建表image
(imageID
int(11)NOT NULL AUTO_INCREMENT,imageFileName
varchar(45)默认NULL,imagePath
varchar(255)默认NULL,imageTitle
varchar(100)默认NULL,imageAlt
varchar(100)默认NULL,
在image
表中没有名为sortorder
的列。
因此,对new.sortorder
(在触发器中的insert语句上)的引用无效。
回答您的第一个问题:不是,因为INSERT语句(它激发了BEFORE INSERT触发器)中没有为该值提供任何值,所以您实际上没有该值的源。
简单的选项是为它提供一个默认值。
如果要为sortOrder
列提供一个值,那么一个选项是向Image
表添加一个sortOrder列,然后可以在Insert INTO Image
语句中提供该值。那么它将在触发器中可用。
(sortorder
表的用途根本不清楚。)
在“name=new.user_name”后面发现意外的标记“end-of-statement”。预期的令牌可能包括:“”..sqlcode=-104,sqlstate=42601,driver=4.9.78 SQL code:-104,SQL state:42601
也许有人能帮我澄清一下。 我正在尝试编写一个插入前触发器,如果它留空,可以设置关闭。这可能吗? 没有太多代码可显示。我所做的只是创建了一个带有调试语句的简单的插入前触发器,以确保我的触发器在验证规则之前执行。似乎验证规则是第一位的(我显然无法更改它)。触发器永远不会触发。 这是可行的还是不可能的?
我创建了一个用于插入和更新的SQL触发器,它基本上执行以下操作: 从插入的表中获取LineID(表的PrimaryID)和RegionID,并将其存储在INT变量中。然后,它对连接表进行检查,以找到RegionID应该是什么,如果RegionID不等于插入表中应该是什么,那么它应该更新该记录。 我的问题是,它没有更新记录,我猜,这是因为记录还没有插入到PurchaseOrderLine表中,我正在
我写了这个触发器,但它不工作,我执行了这个错误: 11:24:11创建触发器check_venduti在INSERT ON venduti之后,对每一行开始SELECT count(*)作为num_rows FROM prodotto(其中COD_PRODOTTO=New.COD_PRODOTO如果numrows<0,则发出“Error”信号,结束错误代码:1064)。您的SQL语法有错误;检查与
问题内容: 用户表: user_records表: 在用户表上的插入前触发器: 基本上,这里的问题是,当我尝试输入由MySQL自动分配的用户的ID(PK,NN,自动递增)时,在触发器上,它只是将user_records表中的userid放入0。我该怎么做,以便它将选择SQL分配给用户的ID,并将其作为用户ID放入记录条目中(该ID在“创建”之后)? 另外,如果您看到可以在表格上进行其他优化,请随时
问题内容: 我正在尝试编写触发器,我有下表:BookingRequest: 状态表: 被占领的房间: 我需要一个触发器,如果将具有相同ID的请求插入到OccupiedRoom表中,它将把BookingReques中的状态更改为1,所以我尝试了类似的操作 而且它不起作用,所以任何建议都非常有用 问题答案: 尝试这个: