gpt4 book ai didi

Mysql存储过程改变多个表结构

转载 作者:行者123 更新时间:2023-11-30 00:24:51 24 4
gpt4 key购买 nike

我正在构建一个小脚本作为函数或存储过程,以便能够仅在没有名为“address”的列的表中更改表结构。

如果表没有列地址,则脚本将添加它:

ALTER TABLE XXXX ADD COLUMN address VARCHAR(150) NULL after command;

到目前为止,我已经找到了通过查询 information_schema.COLUMNS 表来访问其结构上具有“address”列的表列表的方法;这样的东西不是我需要的,因为我需要完全相反的东西,即表列表,其结构上没有名为“address”的列。

基本上是一个需要执行以下操作的脚本:

ALTER TABLE 
(SELECT TABLE_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'mydatabase'
AND TABLE_NAME LIKE 'mytable_%' AND COLUMN_NAME = 'address')
ADD COLUMN IF NOT EXISTS address VARCHAR(150) NULL after command;

类似的东西就是我所需要的,它需要验证列名地址,并且仅当该列不存在时才会尝试添加该列,否则它将返回异常并且查询将终止。

不能使用 PHP 或任何其他编程语言,因为将升级超过 4000 个表,并且在数据库完成操作之前 http 请求将终止。

另一种可能性是在存在名为“address”的列的情况下处理异常,无论异常是否返回,都能够继续操作,只是继续执行查询,因此表不会异常(exception)情况将被更新....

最佳答案

您必须为此构建动态 SQL。最好的选择就是这样做

OOTOMH 代码

Select 'Alter table ' + TableName ' + Add Address VarChar (150)'
From Information_schema.Tables T
Where Not Exists
(
Select 1
From Information_schema.Columns C
Where C.TableName = T.TableName
And C.ColumnName = 'Address'
)

现在您已经生成了代码,您可以手动执行它。

如果这不是您每天都会做的事情,那么就没有必要部署存储过程,不是吗?

如果你真的想要它,那么你有很多选择 - 将字符串添加到变量中,使用光标循环遍历集合,等等。

关于Mysql存储过程改变多个表结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22969872/

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