如何在MYSQL中创建像另一个表一样带有附加列的表

问题描述 投票:0回答:3

我的“测试”表中有“姓名、年龄、性别”列。

我现在想要创建另一个表“test1”,其中包含以下列: “姓名、年龄、性别、职业”。

如何在不创建然后更改的情况下做到这一点?有什么办法可以在一行中完成吗?

我尝试添加一列,但我只能在开始时添加它,例如: CREATE TABLE test1 (Occupation VARCHAR(50)) LIKE test;

这将导致“职业、姓名、年龄、性别”。

我尝试了 CREATE TABLE test1 LIKE test (Occupation VARCHAR(50)),这给了我一个错误。

创建时如何最后添加列?

mysql sql
3个回答
4
投票

您可以将

CREATE TABLE AS ...
与包含新列的选择一起使用:

CREATE TABLE test1 AS
SELECT Name, Age, Gender, '' AS Occupation
FROM test;

上面只是将空字符串作为新职业列的值。 如果您想要其他值,那么您需要提供如何填充它的逻辑。


3
投票

虽然您有义务在一开始就添加列,但我在这里分享两种方法,您可以在从旧表创建新表时添加列和约束。

 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<>小提琴这里


0
投票

这是一个单行解决方案,可以避免列出所有源列:

CREATE TABLE test1 AS 
SELECT *, '' AS Occupation FROM test;

使用 MySQL 8.0 进行测试。感谢@Tim 的基本想法。

© www.soinside.com 2019 - 2024. All rights reserved.