【发布时间】:2019-04-08 05:10:41
【问题描述】:
这是我当前的 SQL 的样子:
DELIMITER $$
CREATE PROCEDURE updateDefaultUserRole(
IN rid_in INT
) BEGIN
ALTER TABLE _users
MODIFY rid INT(255) NOT NULL DEFAULT rid_in; -- Modify the columns default value
UPDATE _users SET rid = rid_in WHERE rid < rid_in; -- Update all entries lower than the role ID.
END $$
DELIMITER ;
这是我的数据库 _users 表的样子:
CREATE TABLE `_users` (
`uid` int(255) NOT NULL,
`forname` varchar(40) NOT NULL,
`surname` varchar(40) NOT NULL,
`email` varchar(120) NOT NULL,
`hash` varchar(60) NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`rid` int(255) NOT NULL DEFAULT '2'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `_users`
ADD PRIMARY KEY (`uid`),
ADD KEY `rid` (`rid`);
MODIFY `uid` int(255) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
我收到此错误:
您的 SQL 语法有错误;查看与您的 MariaDB 服务器版本相对应的手册,了解在 'rid_in; 附近使用的正确语法; -- 修改列默认值
哪些链接到此行:
ALTER TABLE _users
MODIFY rid INT(255) NOT NULL DEFAULT rid_in;
如果我改变这个,忽略 rid_in 值:
ALTER TABLE _users
MODIFY rid INT(255) NOT NULL DEFAULT '1';
工作正常,如何将rid_in 输入绑定到查询?
我的预期输出是能够用于更改默认用户角色值并将所有具有旧用户值的行更新为新值:
CALL updateDefaultUserRole(@someInt)
能够为每个用户更新默认值。
【问题讨论】:
-
我已经有很多程序了,我认为这不是问题所在。我认为
ALTER TABLE正在引发 SQL 错误,我以前从未更新过 SQL 中的默认值,并且无法弄清楚如何做到这一点@wchiquito -
如果我运行
... BEGIN ALTER TABLE _users MODIFY rid INT(255) NOT NULL DEFAULT '1';...它可以工作,出于某种原因,我不知道如何将rid_in绑定到查询而不是插入“1”。 -
这里需要用到动态SQL。
-
不相关:由于
PRIMARY KEY是密钥,因此您不需要key(rid)。
标签: mysql sql database mariadb innodb