下面是我当前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 ;
以下是“我的数据库用户”表的外观:
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)
能够更新每个用户的默认值。
1条答案
按热度按时间5hcedyr01#
您需要在这里使用动态sql,如下所示
Default
合同条款Alter Table
将无法解析变量值: