新增欄位對SQL的影響
年會的路上和PINER聊天時,PINER提到的問題。
表中新增一個欄位肯定會影響現有的SQL,比如查詢語句指定了SELECT * FROM TABLE,則得到的結果就會發生變化。同樣的道理還發生在INSERT語句不寫COLUMN LIST,也會造成這個問題。
上面提到的兩種情況都是SQL編碼不嚴謹造成的,透過好的編碼風格可以避免上面問題的發生。
現在要說的這個問題,雖然也和編碼嚴謹有關,但是問題要隱蔽得多。某個表新增欄位後,可能影響到和新增欄位根本沒有任何關係業務的SQL。
下面透過一個簡單的例子來說明這個問題:
SQL> CREATE TABLE T1 (ID NUMBER, NAME VARCHAR2(30), FLAG VARCHAR2(1));
表已建立。
SQL> CREATE TABLE T2 (ID NUMBER, NAME VARCHAR2(30));
表已建立。
SQL> INSERT INTO T1 VALUES (1, 'A', '1');
已建立 1 行。
SQL> INSERT INTO T2 VALUES (1, 'B');
已建立 1 行。
SQL> SELECT T1.ID, T2.NAME FROM T1, T2
2 WHERE T1.ID = T2.ID
3 AND T1.NAME = 'A'
4 AND FLAG = '1';
ID NAME
---------- ------------------------------
1 B
上面例子中,給出的SELECT語句沒有什麼問題,但是如果這時給T2新增一個FLAG欄位:
SQL> ALTER TABLE T2 ADD FLAG VARCHAR2(1);
表已更改。
SQL> SELECT T1.ID, T2.NAME FROM T1, T2
2 WHERE T1.ID = T2.ID
3 AND T1.NAME = 'A'
4 AND FLAG = '1';
AND FLAG = '1'
*
第 4 行出現錯誤:
ORA-00918: 未明確定義列
現在問題出現了,T2表新增的欄位與T1的FLAG欄位同名,則聯合查詢T1和T2表時,沒有明確指定表資訊的FLAG列將會導致SQL分析錯誤。
這個問題比較隱蔽,不過在書寫SQL的時候依照良好的SQL編碼規範,還是可以避免問題的方式的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-157122/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- alter table新增欄位操作究竟有何影響?(上篇)
- alter table新增欄位操作究竟有何影響?(下篇)
- SQL新增表欄位SQL
- MySQL:查詢欄位數量多少對查詢效率的影響MySql
- MySQL中join語句的基本使用教程及其欄位對效能的影響MySql
- MySQL alter 新增列對dml影響MySql
- SQL最佳化-關於ORDERED-HASH中錯誤選擇連線欄位對效能的影響SQL
- INDEX建立方式對SQL的影響IndexSQL
- 【Oracle】修改indexed 欄位是否影響索引的有效性OracleIndex索引
- Oracle-欄位的新增Oracle
- sql server中對日期欄位值的比較SQLServer
- 修改欄位長度應用會影響到生產效能
- MySQL欄位新增註釋,但不改變欄位的型別MySql型別
- MFC對話方塊新增選單欄並新增滑鼠單擊響應
- mysql建立表的時候對欄位和表新增COMMENTMySql
- 頭位資訊平臺對運營影響有多大?
- SQL查詢結果集對注入的影響及利用SQL
- 行連結與行遷移, LOB欄位的儲存及效能影響
- [zt] 影響SQL效能的原因SQL
- RAID的概念和RAID對於SQL效能的影響AISQL
- 【Oracle】-【COMMIT對索引的影響】-從trace看COMMIT對索引的影響OracleMIT索引
- MySQL-新增列,新增或修改欄位的註釋MySql
- 巧用欄位對映實現指定欄位的搜尋
- 淺談SQL Server中統計對於查詢的影響SQLServer
- 複合索引中前導列對sql查詢的影響索引SQL
- 淺談cursor_sharing取值對SQL共享的影響(上)SQL
- 淺談cursor_sharing取值對SQL共享的影響(下)SQL
- shrink 操作對索引的影響索引
- Update操作對索引的影響索引
- 【SQL*Plus】直接X掉視窗對SQL*Plus中的操作結果的影響SQL
- 對錶中的欄位設定了預設值,新增記錄後卻發現該欄位為nullNull
- 轉:RAID的概念及RAID對於SQL效能的影響AISQL
- arraysize/TDU/SDU的設定對sql執行代價的影響SQL
- sql語句修改欄位型別和增加欄位SQL型別
- Sql Server之旅——第十站 看看DML操作對索引的影響SQLServer索引
- unusable index對DML/QUERY的影響Index
- Arraysize 對consistent get的影響
- mysql event對主從的影響MySql