程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySql使用中的注意點(一)

MySql使用中的注意點(一)

編輯:MySQL綜合教程

MySql使用中的注意點(一)


這篇文章主要針對以前從事企業級應用開發的同學,因為企業級的應用,特別是金融企業通常選用Oracle或者DB2作為數據庫。

與上述要花費大價錢的數據庫軟件相比,免費的MySql還是有一些局限性,以及一些MySql自身的特點要留心、注意。

1.在創建外鍵時,MySql僅支持數字類型的外鍵。
這點真的比較惡心,因為表的主鍵設計既可以有物理主鍵,同時也可以有邏輯主鍵。而邏輯主鍵通常並非僅是數字,可能包含業務說明的英文字母,那這樣的邏輯主鍵是無法被設置為外鍵的。
但是如果選用物理主鍵作為外鍵,那麼在做數據遷移時,特別是將測試環境的數據導入到生產環境中時,必須特別留心要保持數據之間關聯關系。
那麼要麼把測試數據庫中的主鍵值一起帶入到生產數據庫中,要麼手動修改數據間關聯。後者容易照成錯誤,而前者會破壞數據庫主鍵連續的物理特性,
更壞的情況是,測試數據庫中的主鍵在生產數據庫中已經存在,而不得不使用再手動修改數據間關聯的辦法。
所以現在我們的數據庫沒有建立外鍵關聯,雖然這是一柄雙刃劍,但是多少會破壞數據庫的完整性設計。

2.同一張表內設置默認當前時間的Timestamp類型的字段只能有一個。
例如,通常我們在建立一張表時,即有update_time,也有create_time。我們可能希望這兩個字段的默認值都是當前時間,這樣在業務程序中可以簡化一些代碼處理。
但是不幸的是,同一張表中只能有一個字段被DEFAULT CURRENT_TIMESTAMP修飾。

3.MySql的Timestamp類型的精度僅到秒。
這點也沒什麼好說的,如果業務需求一定要精確到毫秒,那麼就保存long型的數字吧。

4.創建視圖的where條件不能包含子查詢。
例如:create view invalidView select * from A a where a.xxx = (select b.xxx from B b where ...)
即使上述語句去除前面create view invalidView部分可以正常運行,但是創建視圖時會被禁止。
一種解決方案是將子查詢變為表連接,另外一種方法是將子查詢的邏輯提到字段的部分,即select和from中間。

5.沒有對子查詢進行算法優化。
例如:select * from A a where a.xxx = (select b.xxx from B b where ...)
上述語句當在Oracle中之間,後面的子查詢只會被執行一次,但是在MySql中會被執行n次,n為A表中的數據量。
所以應該禁止子查詢的使用。
解決辦法首先是應該將子查詢變為表連接的查詢,如果不行,那麼請將上述查詢分拆為兩次查詢。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved