【发布时间】:2018-11-04 13:25:20
【问题描述】:
这是我当前的 SQL:
CREATE PROCEDURE addBlog(@title VARCHAR(255), @body VARCHAR(255), OUT @uuid INT) BEGIN
INSERT INTO blogs b (b.title, b.detail) VALUES (@title, @body);
SELECT LAST_INSERT_ID() INTO @uuid;
SELECT @uuid;
END
抛出此错误的原因(直接来自 SQL 导出):
1064 - 您的 SQL 语法有错误;查看与您的 MariaDB 服务器版本相对应的手册,了解在 '@title VARCHAR(255), @body VARCHAR(255), OUT @uuid INT) BEGIN 附近使用的正确语法 在第 1 行插入博客'
我的数据库在uuid INT (255) 上有一个AUTO_INCREMENT PRIMARY KEY,我想使用此过程返回它。任何帮助都会很棒。
我的桌子是这样的:
CREATE TABLE `blogs` (
`uuid` int(255) NOT NULL,
`title` varchar(1024) NOT NULL,
`detail` varchar(1024) NOT NULL,
`user_id` int(255) NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `blogs`
ADD PRIMARY KEY (`uuid`),
ADD KEY `user_id` (`user_id`);
ALTER TABLE `blogs`
MODIFY `uuid` int(255) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
ALTER TABLE `blogs`
ADD CONSTRAINT `blogs_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users`
(`uuid`) ON DELETE NO ACTION ON UPDATE NO ACTION;
更新的 SQL:
CREATE PROCEDURE addBlog(
IN in_title VARCHAR(255),
IN in_body VARCHAR(255),
IN in_user INT(255),
OUT out_uuid INT
) BEGIN
INSERT INTO `blogs` (`title`, `detail`, `user_id`) VALUES (in_title, in_body, in_user);
SELECT LAST_INSERT_ID() INTO out_uuid;
SELECT out_uuid;
END;
【问题讨论】:
-
你的问题说你想返回插入的行。这将返回该行的
uuid。此外,您可以让最后一个 SELECT 说出SELECT LAST_INSERT_ID() AS out_uuid;并获得与最后两个 SELECT 相同的结果。此外,int(255)也不是问题。对 32 位值使用INT,对 64 位值使用BIGINT。 -
抱歉,如果更适用,您可以更新问题标题以说出行 ID,我不知道如何措辞 @O.Jones
标签: mysql sql innodb delimiter