新增欄位對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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL:查詢欄位數量多少對查詢效率的影響MySql
- MySQL中join語句的基本使用教程及其欄位對效能的影響MySql
- INDEX建立方式對SQL的影響IndexSQL
- MySQL alter 新增列對dml影響MySql
- Oracle-欄位的新增Oracle
- fastadmin 新增欄位記圖片欄位AST
- mysql建立表的時候對欄位和表新增COMMENTMySql
- MySQL欄位新增註釋,但不改變欄位的型別MySql型別
- sql語句修改欄位型別和增加欄位SQL型別
- sqlserver採集欄位的sql語句SQLServer
- 頭位資訊平臺對運營影響有多大?
- DB2_更新SQL欄位DB2SQL
- sql 統計多個欄位的和(如果欄位中含有 null 的處理)SQLNull
- SQL字元型欄位按數字型欄位排序實現方法SQL字元排序
- jpa~為欄位新增insert的預設值
- SQL Server中獲取資料庫名、表名、欄位名和欄位註釋的SQL語句SQLServer資料庫
- 欄位管理,為什麼只有新增的時候才自動匹配欄位型別型別
- unusable index對DML/QUERY的影響Index
- Nologging對恢復的影響(二)
- 語言對思維的影響
- Nologging對恢復的影響(一)
- SQL基礎 AUTO_INCREMENT 欄位SQLREM
- sql設定欄位預設值SQL
- sql小筆記(增刪改查——新增列、修改表名、列的欄位型別等)SQL筆記型別
- 網線的分類與對網速的影響 網線對網速影響大嗎?
- 浮動的盒子對img的影響
- mysql資料庫新增和修改欄位MySql資料庫
- laravel生產環境下新增欄位Laravel
- 在 SQL Server 中,建立表時可以直接為欄位新增唯一約束(UNIQUE)SQLServer
- 如何自動填充SQL語句中的公共欄位SQL
- 將多個JSON欄位對映到單個Java欄位JSONJava
- SQL Server中事務日誌自動增長對效能的影響(下)PGSQLServer
- SQL Server中事務日誌自動增長對效能的影響(上)OSSQLServer
- [提問交流]建立模型,新增屬性,欄位型別如何設定2位小數的欄位型別模型型別
- MySQL線上新增欄位的幾種方案介紹MySql
- 來電對播放音樂的影響
- python:super()對多繼承的影響Python繼承
- DB2 HADR對效能的影響DB2
- 關於OPcache對Swoole影響的理解opcache