gpt4 book ai didi

mysql - 更新 MySQL 数据库表架构

转载 作者:可可西里 更新时间:2023-11-01 07:58:37 25 4
gpt4 key购买 nike

我想更新 MySQL 数据库模式(使用 MySQL 代码),但不幸的是我不确定表的状态,因为它们是分布式的。

假设一些“客户”有一个名为“user”的表,其架构如下

name VARCHAR(64) NOT NULL
password VARCHAR(64) NOT NULL

我想添加一个 email 列,但他们可能已经有一个 email 列(取决于他们的安装版本)。

我如何运行一个命令来确保有一个 email 列并且如果它已经存在则什么也不做?请记住,我会对许多更复杂的表执行此操作。

我知道我可以创建临时表并重新填充(如果这是唯一的解决方案,我会这样做)但我认为可能会有某种CREATEUPDATE具有“哦,您已经有了该列,请跳过”逻辑的表命令。

最佳答案

你可以这样尝试:

DELIMITER $$
CREATE PROCEDURE Alter_MyTable()
BEGIN
DECLARE _count INT;
SET _count = ( SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'user' AND
COLUMN_NAME = 'email');
IF _count = 0 THEN
ALTER TABLE user
ADD COLUMN email varchar(512);
END IF;
END $$
DELIMITER ;

或者更确切地说,让它成为一个像这样的通用存储过程:

create procedure AddColumnIfDoesntExists(
IN dbName tinytext,
IN tableName tinytext,
IN fieldName tinytext,
IN fieldDef text)
begin
IF NOT EXISTS (
SELECT * FROM information_schema.COLUMNS
WHERE column_name=fieldName
and table_name=tableName
and table_schema=dbName
)
THEN
set @ddl=CONCAT('ALTER TABLE ',dbName,'.',tableName,
' ADD COLUMN ',fieldName,' ',fieldDef);
prepare stmt from @ddl;
execute stmt;
END IF;
end;
//

delimiter ';'

关于mysql - 更新 MySQL 数据库表架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29903198/

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