“迁移数据库 Column 列”这件事在不同场景下含义不同,常见有 4 类需求。下面分别说明,你可以对号入座;如果还是不确定,我可以按你的具体数据库和环境直接给你可执行的 SQL。
例如:
-- 修改列类型
ALTER TABLE user
MODIFY COLUMN age INT;
-- 修改列名 + 类型
ALTER TABLE user
CHANGE old_name new_name VARCHAR(50);
-- 修改是否允许 NULL
ALTER TABLE user
MODIFY COLUMN email VARCHAR(100) NOT NULL;
-- 改类型
ALTER TABLE user
ALTER COLUMN age TYPE INT USING age::INT;
-- 改列名
ALTER TABLE user
RENAME COLUMN old_name TO new_name;
-- 改 NULL / NOT NULL
ALTER TABLE user
ALTER COLUMN email SET NOT NULL;
-- 改类型
ALTER TABLE user
ALTER COLUMN age INT;
-- 改列名
EXEC sp_rename 'user.old_name', 'new_name', 'COLUMN';
例如:
user 表的 address 拆分到 address 表-- 示例:迁移列数据
UPDATE new_table
SET new_col = old_table.old_col
FROM old_table
WHERE new_table.id = old_table.id;
或(MySQL):
UPDATE new_table n
JOIN old_table o ON n.id = o.id
SET n.new_col = o.old_col;
例如:
mysqldump -u user -p db table > table.sql
如果你说的是 “数据库变更版本管理”:
-- V1__add_user_phone.sql
ALTER TABLE user ADD phone VARCHAR(20);
<changeSet id="1" author="dev">
<addColumn tableName="user">
<column name="phone" type="varchar(20)"/>
</addColumn>
</changeSet>
✅ 生产环境一定做:
CREATE TABLE user_bak AS SELECT * FROM user;
你可以直接回复:
我可以直接帮你写 可执行的迁移 SQL + 回滚方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。