【发布时间】:2021-02-07 19:46:13
【问题描述】:
通过phpmyadmin的界面,我创建了一个存储过程如下:
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_checkin_create`(IN `userid` INT(10), IN `organizationid` INT(10), IN `checkindate` DATETIME(6), IN `checkoutdate` DATETIME(6), IN `checkinid` INT(10))
NO SQL
Insert Into checkin Values(CheckInID, UserID, OrganizationID, CheckInDate, CheckOutDate) ON DUPLICATE
KEY UPDATE CheckInID=CheckInID, UserID=userid, OrganizationID=organizationid, checkindate=checkindate, CheckOutDate=checkoutdate$$
DELIMITER ;
如何从这个过程中返回LAST_INSERT_ID()?我知道以下用例:
SELECT LAST_INSERTED_ID();
但我无法找到一种方法在过程中组合此查询而不会出现模棱两可的错误。
任何帮助将不胜感激。
编辑 1
创建表语句:
DROP TABLE IF EXISTS `checkin`;
CREATE TABLE IF NOT EXISTS `checkin` (
`CheckInID` int(11) NOT NULL AUTO_INCREMENT,
`UserID` int(11) NOT NULL,
`OrganizationID` int(11) DEFAULT NULL,
`CheckInDate` datetime DEFAULT NULL,
`CheckOutDate` datetime(6) NOT NULL,
PRIMARY KEY (`CheckInID`),
UNIQUE KEY `CheckInID` (`CheckInID`)
) ENGINE=MyISAM AUTO_INCREMENT=4407 DEFAULT CHARSET=latin1;
【问题讨论】:
-
显示
checkin表的完整 CREATE TABLE 脚本。什么约束可能导致 ODKU 动作? -
@Akina 检查编辑
-
1) 如果存在 PK 约束,则相同表达式的唯一键是多余的。您将有两个相似的索引。删除
UNIQUE KEY `CheckInID` (`CheckInID`)行。 2) 如果 ODKU 因现有转移的CheckInID值而被触发,则其分配过多。
标签: mysql sql phpmyadmin