我的“测试”表中有“姓名、年龄、性别”列。
我现在想要创建另一个表“test1”,其中包含以下列: “姓名、年龄、性别、职业”。
如何在不创建然后更改的情况下做到这一点?有什么办法可以在一行中完成吗?
我尝试添加一列,但我只能在开始时添加它,例如: CREATE TABLE test1 (Occupation VARCHAR(50)) LIKE test;
这将导致“职业、姓名、年龄、性别”。
我尝试了 CREATE TABLE test1 LIKE test (Occupation VARCHAR(50)),这给了我一个错误。
创建时如何最后添加列?
您可以将
CREATE TABLE AS ...
与包含新列的选择一起使用:
CREATE TABLE test1 AS
SELECT Name, Age, Gender, '' AS Occupation
FROM test;
上面只是将空字符串作为新职业列的值。 如果您想要其他值,那么您需要提供如何填充它的逻辑。
虽然您有义务在一开始就添加列,但我在这里分享两种方法,您可以在从旧表创建新表时添加列和约束。
CREATE TABLE test (
name varchar(100),
age int,
gender char(1)
);
INSERT INTO test values('name1',30,'M');
INSERT INTO test values('name2',50,'F');
从旧表创建表语句:
CREATE TABLE test1 (id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id))
SELECT * FROM test;
在旧表上选择查询:
SELECT* FROM test;
输出:
名字 | 年龄 | 性别 |
---|---|---|
姓名1 | 30 | M |
名称2 | 50 | F |
在新表上选择查询:
select * from test1
输出:
id | 名字 | 年龄 | 性别 |
---|---|---|---|
1 | 姓名1 | 30 | M |
2 | 名称2 | 50 | F |
另一种方法是创建一个新表,其中包含旧表中的所有列名称,新列位于末尾
CREATE TABLE test2 (
name varchar(100),
age int,
gender char(1),
id int not null auto_increment,
primary key(id)
);
然后使用一条插入语句将旧表中的数据插入到新表中:
insert into test2 (name,age,gender) select name, age, gender from test
在新表上选择查询:
select * from test2
输出:
名字 | 年龄 | 性别 | id |
---|---|---|---|
姓名1 | 30 | M | 1 |
名称2 | 50 | F | 2 |
db<>小提琴这里
这是一个单行解决方案,可以避免列出所有源列:
CREATE TABLE test1 AS
SELECT *, '' AS Occupation FROM test;
使用 MySQL 8.0 进行测试。感谢@Tim 的基本想法。