我遇到了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的配置中是否有任何技巧可以避免这种行为?我觉得它会创造出令人惊讶的表格。
答案 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表。