2013-03-15 61 views
0

MySQL版本5.5.27INSERT INTO ..從存儲過程的錯誤選擇了上被丟棄的列

UPDATE2:很肯定這是一個很大的,做了一個從無到有的測試與相同的行爲。在MySQL網站上打開錯誤,並將更新結果。

更新:如果我從存儲過程中的臨時表中刪除列,它工作正常。只有手動放下色譜柱時纔會出現問題。

下面一行在存儲過程中失敗,出現錯誤:

mysql> insert into player_record_week select * from pr_temp; 

mysql> call insert_agg_week('2013-02-26'); 
ERROR 1054 (42S22): Unknown column 'prod_gamestats.pr_temp.total_battles' in 'field list' 

如果我用手它的工作原理運行。

mysql> insert into player_record_week select * from pr_temp; 
Query OK, 211708 rows affected (2.23 sec) 
Records: 211708 Duplicates: 0 Warnings: 0 

如果我將total_battles列留在臨時表中,它會失敗並顯示有關列數不匹配的錯誤。表pr_temp是通過複製player_record_week表創建的。

| insert_agg_week |   | CREATE PROCEDURE  `insert_agg_week`(insert_week date) 
begin 
delete from player_record_week where stat_week = insert_week; 
delete from player_tank_record_week where stat_week = insert_week; 
delete from player_ratings_week_agg where stat_week = insert_week; 
delete from player_ratings_week_per where stat_week = insert_week; 
delete from global_week where stat_week = insert_week; 
delete from global_tank_week where stat_week = insert_week; 
insert into player_record_week select * from pr_temp; 
insert into player_tank_record_week select * from ptr_temp; 
insert into player_ratings_week_agg select * from pratings_temp_agg; 
insert into player_ratings_week_per select * from pratings_temp_per; 
insert into global_week select * from global_week_temp; 
insert into global_tank_week select * from global_tank_week_temp; 
end | utf8     | utf8_general_ci  | latin1_swedish_ci | 

如果我保留額外的列,那麼存儲過程會出現列計數不匹配的錯誤。

如果我把額外的列,存儲過程的錯誤了一起,我放棄了列的引用:

mysql> call insert_agg_week('2013-02-26'); 
ERROR 1054 (42S22): Unknown column 'prod_gamestats.pr_temp.total_battles' in 'field list' 

如果我用手運行的命令就沒有問題運行:

mysql> delete from player_record_week where stat_week = '2013-02-26'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> delete from player_tank_record_week where stat_week = '2013-02-26'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> delete from player_ratings_week_agg where stat_week = '2013-02-26'; 
Query OK, 0 rows affected (0.52 sec) 

mysql> delete from player_ratings_week_per where stat_week = '2013-02-26'; 
Query OK, 0 rows affected (0.09 sec) 

mysql> delete from global_week where stat_week = '2013-02-26'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> delete from global_tank_week where stat_week = '2013-02-26'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> insert into player_record_week select * from pr_temp; 
Query OK, 211708 rows affected (2.23 sec) 
Records: 211708 Duplicates: 0 Warnings: 0 

mysql> insert into player_tank_record_week select * from ptr_temp; 
Query OK, 1618240 rows affected (25.61 sec) 
Records: 1618240 Duplicates: 0 Warnings: 0 

mysql> insert into player_ratings_week_agg select * from pratings_temp_agg; 
Query OK, 211708 rows affected (1.86 sec) 
Records: 211708 Duplicates: 0 Warnings: 0 

mysql> insert into player_ratings_week_per select * from pratings_temp_per; 
Query OK, 41648 rows affected (0.39 sec) 
Records: 41648 Duplicates: 0 Warnings: 0 

mysql> insert into global_week select * from global_week_temp; 
Query OK, 21 rows affected (0.00 sec) 
Records: 21 Duplicates: 0 Warnings: 0 

mysql> insert into global_tank_week select * from global_tank_week_temp; 
Query OK, 257 rows affected (0.00 sec) 
Records: 257 Duplicates: 0 Warnings: 0 

下面是兩個表:

mysql> describe pr_temp; 
+------------------------+-----------------------+------+-----+---------+-------+ 
| Field     | Type     | Null | Key | Default | Extra | 
+------------------------+-----------------------+------+-----+---------+-------+ 
| player_id    | int(10) unsigned  | NO | PRI | NULL |  | 
| stat_week    | date     | NO | PRI | NULL |  | 
| insert_date   | date     | NO |  | NULL |  | 
| tier_weight   | float     | YES |  | 0  |  | 
| tier_weight_adj  | float     | YES |  | 0  |  | 
| battles_count   | int(10) unsigned  | YES |  | NULL |  | 
| wins     | mediumint(8) unsigned | YES |  | NULL |  | 
| losses     | mediumint(8) unsigned | YES |  | NULL |  | 
| survived_battles  | mediumint(8) unsigned | YES |  | NULL |  | 
| spotted    | mediumint(8) unsigned | YES |  | NULL |  | 
| hits_percents   | tinyint(3) unsigned | YES |  | NULL |  | 
| capture_points   | mediumint(8) unsigned | YES |  | NULL |  | 
| damage_dealt   | int(10) unsigned  | YES |  | NULL |  | 
| frags     | mediumint(8) unsigned | YES |  | NULL |  | 
| dropped_capture_points | mediumint(8) unsigned | YES |  | NULL |  | 
| max_xp     | smallint(5) unsigned | YES |  | NULL |  | 
| battle_avg_xp   | smallint(5) unsigned | YES |  | NULL |  | 
| xp      | int(10) unsigned  | YES |  | NULL |  | 
| integrated_rating  | smallint(5) unsigned | YES |  | NULL |  | 
| efficiency    | smallint(6)   | YES |  | NULL |  | 
| efficiency_adj   | smallint(6)   | YES |  | NULL |  | 
| wn7     | smallint(6)   | YES |  | NULL |  | 
| wn7_adj    | smallint(6)   | YES |  | NULL |  | 
+------------------------+-----------------------+------+-----+---------+-------+ 
23 rows in set (0.00 sec) 

mysql> describe player_record_week; 
+------------------------+-----------------------+------+-----+---------+-------+ 
| Field     | Type     | Null | Key | Default | Extra | 
+------------------------+-----------------------+------+-----+---------+-------+ 
| player_id    | int(10) unsigned  | NO | PRI | NULL |  | 
| stat_week    | date     | NO | PRI | NULL |  | 
| insert_date   | date     | NO |  | NULL |  | 
| tier_weight   | float     | YES |  | 0  |  | 
| tier_weight_adj  | float     | YES |  | 0  |  | 
| battles_count   | int(10) unsigned  | YES |  | NULL |  | 
| wins     | mediumint(8) unsigned | YES |  | NULL |  | 
| losses     | mediumint(8) unsigned | YES |  | NULL |  | 
| survived_battles  | mediumint(8) unsigned | YES |  | NULL |  | 
| spotted    | mediumint(8) unsigned | YES |  | NULL |  | 
| hits_percents   | tinyint(3) unsigned | YES |  | NULL |  | 
| capture_points   | mediumint(8) unsigned | YES |  | NULL |  | 
| damage_dealt   | int(10) unsigned  | YES |  | NULL |  | 
| frags     | mediumint(8) unsigned | YES |  | NULL |  | 
| dropped_capture_points | mediumint(8) unsigned | YES |  | NULL |  | 
| max_xp     | smallint(5) unsigned | YES |  | NULL |  | 
| battle_avg_xp   | smallint(5) unsigned | YES |  | NULL |  | 
| xp      | int(10) unsigned  | YES |  | NULL |  | 
| integrated_rating  | smallint(5) unsigned | YES |  | NULL |  | 
| efficiency    | smallint(6)   | YES |  | NULL |  | 
| efficiency_adj   | smallint(6)   | YES |  | NULL |  | 
| wn7     | smallint(6)   | YES |  | NULL |  | 
| wn7_adj    | smallint(6)   | YES |  | NULL |  | 
+------------------------+-----------------------+------+-----+---------+-------+ 
23 rows in set (0.00 sec) 

回答

1

錯誤在MySQL,固定在5.6.6;元數據在初始過程運行後不​​會更新。從bug報告

http://bugs.mysql.com/bug.php?id=32868

解決方法是刷新緩存: CREATE OR REPLACE VIEW tmpview AS SELECT 1;