SQL:如何从User表迁移数据至含默认值的tracking_user新表?
SQL脚本:创建tracking_user表并迁移User表数据
以下是实现需求的SQL脚本,针对主流数据库(MySQL、PostgreSQL)做了适配,你可根据实际使用的数据库选择:
1. 创建tracking_user表
先创建目标表,定义字段并设置custom的默认值:
MySQL版本
CREATE TABLE tracking_user ( username VARCHAR(50) NOT NULL, -- 字段类型请根据原User表实际情况调整 password VARCHAR(255) NOT NULL, -- 建议密码字段使用足够长度的VARCHAR custom INT DEFAULT 0, `time` DATETIME NOT NULL, PRIMARY KEY (username) -- 若原User表username是主键,这里也建议设置为主键 );
PostgreSQL版本
CREATE TABLE tracking_user ( username VARCHAR(50) NOT NULL, password VARCHAR(255) NOT NULL, custom INT DEFAULT 0, "time" TIMESTAMP NOT NULL, PRIMARY KEY (username) );
2. 从User表迁移数据
执行插入语句,将User表的username和password迁移过来,同时设置custom为0,time为脚本执行时的当前时间:
MySQL版本
INSERT INTO tracking_user (username, password, custom, `time`) SELECT username, password, 0, NOW() FROM User;
PostgreSQL版本
INSERT INTO tracking_user (username, password, custom, "time") SELECT username, password, 0, CURRENT_TIMESTAMP FROM "User"; -- PostgreSQL中表名如果是User(关键字),需要用双引号包裹
补充说明
- 请根据原
User表中username和password的实际字段类型调整脚本中的VARCHAR长度,确保数据兼容。 - 如果
User表中存在重复的username,插入时会报错,需要先处理原表的重复数据,或者调整tracking_user表的主键约束。 - 若希望
custom字段后续插入时默认值始终为0,插入时可省略该字段,直接使用表定义的默认值:-- 以MySQL为例,简化插入语句 INSERT INTO tracking_user (username, password, `time`) SELECT username, password, NOW() FROM User;
内容的提问来源于stack exchange,提问作者MIM
相关产品推荐
相关产品推荐

