MySQL创建/选择添加源表

时间:2016-08-23 15:43:42

标签: mysql

我遇到了MySQL的问题,在选择的源表中添加了字段。

以下是一个示例(您可以在SQL Fiddle上找到它:

CREATE TABLE source_table (
  id INT UNSIGNED NOT NULL,
  foo VARCHAR(3),
  INDEX (id)
);
INSERT INTO source_table (id, foo) VALUES (1, "one");

// Create another table and fill it from the source_table
CREATE TABLE example_table (
  id INT UNSIGNED NOT NULL,
  bar VARCHAR (3),
  INDEX (id)
) SELECT 
  source_table.id,
  source_table.foo
FROM source_table
WHERE source_table.id = 1;

最后,我的example_table将有一个foo字段,我从未要求创建该字段。 另外,bar将为空,而foo将被填充。

我找到的解决方案是为每个字段使用别名,但它是多余的:

CREATE TABLE example_table (
  id INT UNSIGNED NOT NULL,
  bar VARCHAR (3),
  INDEX (id)
) SELECT 
  source_table.id AS id,
  source_table.foo AS bar
FROM source_table
WHERE source_table.id = 1;

MySQL的配置中是否有任何技巧可以避免这种行为?我觉得它会创造出令人惊讶的表格。

1 个答案:

答案 0 :(得分:1)

这是insert ... select ...的记录行为,因此无法对其进行配置以避免此行为:

  

MySQL为SELECT中的所有元素创建新列。例如:

mysql> CREATE TABLE test (a INT NOT NULL AUTO_INCREMENT,
    ->        PRIMARY KEY (a), KEY(b))
    ->        ENGINE=MyISAM SELECT b,c FROM test2;
     

这将创建一个包含三列a,b和c的MyISAM表。