gpt4 book ai didi

mysql - SQL添加忽略重复的新列

转载 作者:可可西里 更新时间:2023-11-01 07:35:46 24 4
gpt4 key购买 nike

我们有很多数据库,我们正在尝试对所有数据库运行升级脚本以使它们保持最新状态 - 因此,它们都有不同的列和表。

如果新表和列不存在,我们想添加它们,例如

CREATE TABLE IF NOT EXISTS `orders` ( `id` INT (11) NOT NULL , 
`value` VARCHAR (50) , `designId` INT (11) , PRIMARY KEY ( `id`));

这行得通,但我们正在为列寻找相同类型的解决方案。我们当前的解决方案抛出错误代码:1060 - 列名重复。

ALTER TABLE `orders` ADD COLUMN `customer` INT (1) NULL; 

我已经尝试了来自 garry passarella 的以下内容,但我收到一个错误,声称不正确的 sql 语法:

IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'orders' AND COLUMN_NAME = 'customer')
BEGIN ALTER TABLE orders
ADD customer BIT DEFAULT NULL
END

如果有什么东西可以让每一行忽略重复项,或者让整个脚本忽略错误代码 1060,我们将不胜感激。

最佳答案

if ... begin ... end 是 SQL Server 语法。对于 MySQL,它更像是 if ... then ... end if :

if not exists (select * from information_schema.columns
where column_name = 'customer' and table_name = 'orders') then
alter table orders add customer int(1) null;
end if

回复您的评论:在 MySQL 中,您不能输入 compound statements在命令行。它们必须在函数或存储过程中。例如:

drop procedure if exists sp_addcolumn;

delimiter //
create procedure sp_addcolumn()
begin
if not exists (select * from INFORMATION_SCHEMA.COLUMNS
where table_name = 'orders' and column_name = 'customer') then
alter table `orders` add column `customer` int(1) null;
end if;
end//

delimiter ;
call sp_addcolumn;

有一个open request on the MySQL bug tracker允许在存储过程之外使用 if 语句。它的当前状态是需要分类。

关于mysql - SQL添加忽略重复的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10106216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com