我有这个密码:
ALTER TABLE `settings`
ADD COLUMN `multi_user` TINYINT(1) NOT NULL DEFAULT 1
我只想在这个列不存在的情况下修改这个表。
我尝试了很多不同的方法,但都不管用:
ALTER TABLE `settings`
ADD COLUMN IF NOT EXISTS `multi_user` TINYINT(1) NOT NULL DEFAULT 1
使用程序:
DELIMITER $$
CREATE PROCEDURE Alter_Table()
BEGIN
DECLARE _count INT;
SET _count = ( SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'settings' AND
COLUMN_NAME = 'multi_user');
IF _count = 0 THEN
ALTER TABLE `settings` ADD COLUMN `multi_user` TINYINT(1) NOT NULL DEFAULT 1
END IF;
END $$
DELIMITER ;
我最后出错了,如果,然后在最后,然后在1
我怎样才能使这个尽可能简单?
10条答案
按热度按时间b4lqfgs41#
在存储过程中使用以下命令:
smtd7mpg2#
使用
PREPARE
/EXECUTE
以及查询模式。主机不需要具有创建或运行过程的权限:yjghlzjz3#
这里有一个不涉及查询的解决方案
INFORMATION_SCHEMA
,如果列确实存在,它将忽略错误。p、 请随便给它起个别的名字,而不是
?
o0lyfsai4#
添加字段(如果不存在):
addfieldifnotexists代码:
这不是原件,但它是复制和粘贴
来源:javajon.blogspot.com/2012/10/
hgncfbus5#
希望这对你有帮助
或
o0lyfsai6#
我使用了这种方法(不使用存储过程):
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'tbl_name' AND COLUMN_NAME = 'column_name'
如果未返回任何行,则该列不存在,然后更改表:ALTER TABLE tbl_name ADD COLUMN column_name TINYINT(1) NOT NULL DEFAULT 1
希望这有帮助。vsmadaxz7#
abobe查询返回0如果表中不存在该列,则需要如下运行alterquery
kuhbmx9i8#
siotufzp9#
有时在数据库中可能会创建多个模式。
所以要成为我们需要针对的特定模式,这将有助于做到这一点。
uplii1fm10#
下面这个对我有用: