1.庫名、表名、字段名必須使用小寫字母,“_”分割。
原因:
MySQL在Linux下數據庫名、表名、列名、別名大小寫規則是這樣的:
1、數據庫名與表名是嚴格區分大小寫的;
2、表的別名是嚴格區分大小寫的;
3、列名與列的別名在所有的情況下均是忽略大小寫的;
4、變量名也是嚴格區分大小寫的;
MySQL在Windows下都不區分大小寫。
所以在不同操作系統中為了能使程序和數據庫都能正常運行,最好的辦法是在設計的時候都轉為小寫,但是如果在設計的時候已經規范化大小寫了,那么在Windows環境下只要對數據庫的配置做下改動就行了,具體操作如下:
在MySQL的配置文件中my.ini [mysqld]中增加一行 lower_case_table_names = 1
參數解釋:
0:區分大小寫
1:不區分大小寫
在 MySQL中,數據庫和表對就於那些目錄下的目錄和文件。因而,操作系統的敏感性決定數據庫和表命名的大小寫敏感。這就意味着數據庫和表名在Windows 中是大小寫不敏感的,而在大多數類型的 Unix系統中是大小寫敏感的。奇怪的是列名與列的別名在所有的情況下均是忽略大小寫的,而表的別名又是區分大小寫的。
要避免這個問題,你最好在定義數據庫命名規則的時候就全部采用小寫字母加下划線的組合,而不使用任何的大寫字母。
或者也可以強制以 -O lower_case_table_names=1 參數啟動mysqld(如果使用 --defaults-file=...\my.cnf參數來讀取指定的配置文件啟動 mysqld的話,你需要在配置文件的 [mysqld] 區段下增加一行lower_case_table_names=1)。這樣MySQL
將在創建與查找時將所有的表名自動轉換為小寫字符(這個選項缺省地在Windows 中為 1 ,在 Unix 中為 0。從 MySQL 4.0.2開始,這個選項同樣適用於數據庫名)。
2.建議使用InnoDB存儲引擎(如果一個表極少更新可以考慮MyISAM)。
原因:
1.MyISAM
MyISAM是mysql5.1及之前版本的默認引擎,很久未被更新。
使用表級鎖, 如果數據量大,一個插入操作鎖定表后,其他請求都將阻塞。
支持全文索引
支持查詢緩存
保存表的總行數,使用count(*) 並且無where子句的時候可以很快返回結果,但是實際使用時基本不會無where子句
簡要:不支持事務安全
沒有事務日志和分類,因此它只將數據寫入Linux文件緩存並希望能最終寫入磁盤。如果系統在這個過程中崩潰或者丟失一些數據,MyISAM表會經常出現無法啟動或者警告你需要修復表;它恢復數據的方法有限並且經常會丟失數據。另外,MyISAM也很難正確的備份,備份的時候通常需要鎖住整個系統的數據,這就意味着每天網站都要宕機或者無法使用一段時間。
MyISAM表允許在定期列中進行全文檢索,而InnoDB不支持(這個沒搞懂)
2.InnoDB
支持事務
支持行級鎖和表級鎖,能支持更多的並發量
mysql5.6版本開始支持 全文索引
查詢不加鎖,完全不影響查詢
Innodb會對每個表設置一個事務計數器,里面存儲當前最大的事務ID.當一個事務提交時,InnoDB會使用MVCC中系統事務ID最大的事務ID跟新當前表的計數器.只有比這個最大ID大的事務能使用查詢緩存,其他比這個ID小的事務則不能使用查詢緩存.另外,在InnoDB中,所有有加鎖操作的事務都不使用任何查詢緩存
簡要:支持事務安全
事務日志記錄真正的數據庫事務,但更重要的是數據崩潰恢復和回滾。基於 InooDB方式的IO,能給予更安全數據保護和更好性能表現
作者:河邊的老牛
鏈接:http://www.jianshu.com/p/6b45b150bfbf
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
4.建議使用UNSIGNED存儲非負數值。
create table t (
ip INT UNSIGNED
);
insert into t select INET_ATON('209.207.224.40');
select INET_NTOA(ip) from t;
6.整形定義中不添加長度,比如使用INT,而不是INT(4)。
長度與你存放的數值型的數的大小無關(參考http://www.cnblogs.com/echo-something/archive/2012/08/26/mysql_int.html)