Category Archives: DateBase

ORM到底是用還是不用?

ORM即Object/Relation Mapping的簡寫,一般稱作「對象關係映射」,在Web開發中最常出沒於和關係型數據庫交互的地方。接口、中間件、庫、包,你都可以這麼稱呼它。

我們可以結合PHP和MySQL,從ORM的四個核心理念來認識它:

  • 簡單:ORM以最基本的形式建模數據。比如ORM會將MySQL的一張表映射成一個PHP類(模型),表的字段就是這個類的成員變量
  • 精確:ORM使所有的MySQL數據表都按照統一的標準精確地映射成PHP類,使系統在代碼層面保持準確統一
  • 易懂:ORM使數據庫結構文檔化。比如MySQL數據庫就被ORM轉換為了PHP程序員可以讀懂的PHP類,PHP程序員可以只把注意力放在他擅長的PHP層面(當然能夠熟練掌握MySQL更好)
  • 易用:ORM的避免了不規範、冗餘、風格不統一的SQL語句,可以避免很多人為Bug,方便編碼風格的統一和後期維護 

Read more »

mysql數據庫常有status為sleep的連接解決方法

網站訪問量大的時候,數據庫會出現sleep的連接,進程這個大多數原因是因為,程序在使用了mysql查詢以後,沒有及時釋放連接。
當然下面的方法只是解決了表面的,不會導致mysql擁堵,要根本解決要從代碼入手,找到操作數據庫以後沒有釋放連接的程序修改掉。
兩個參數mysql默認的都是28800要等好多小時以後才會釋放資源,修改時間短點以後,過一定時間超時會自己回收資源

修改方法:

1, mysql的配置文件my.conf中

[mysqld]部分

添加
interactive_timeout=30
wait_timeout=30

時間長短由自己來設定。

然後重啟mysql服務/etc/init.d/mysql restart

2,
用root登陸mysql執行命令

不過這個方法重啟mysql以後配置會變成默認。

mysql>set global wait_timeout = 10;對當前交互鏈接有效; (由於mysql的BUG所有這邊必須加global)
mysql>set global interactive_timeout = 10;對後續起的交互鏈接有效;

ON DUPLICATE KEY UPDATE的使用

如果您指定了ON DUPLICATE KEY UPDATE,並且插入行後會導致在一個UNIQUE索引或PRIMARY KEY中出現重複值,則執行舊行UPDATE。例如,如果列a被定義為UNIQUE,並且包含值1,則以下兩個語句具有相同的效果:

mysql> INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;
mysql> UPDATE table SET c=c+1 WHERE a=1;

如果行作為新記錄被插入,則受影響行的值為1;如果原有的記錄被更新,則受影響行的值為2。
註釋:如果列b也是唯一列,則INSERT與此UPDATE語句相當:

Read more »

NoSQL

今天來介紹一個最近的技術趨勢,針對企業IT不一定用的上,但開會討論的時候聽到,如果對他有些瞭解,總讓人感覺比較跟的上潮流、比較厲害一些,不是嗎?

Read more »

MySQL最佳化分析指令EXPLAIN

還有一個非常棒的指令可以用來分析SELECT指令在MySQL中的執行情況,那就是 EXPLAIN

EXPLAIN 顯示的訊息可以用來幫助索引和查出最佳化的查詢語法。

EXPLAIN 使用的方式:
只要在SELECT語法前面加上 EXPLAIN 指令即可。

Read more »

淺談MySQL存儲引擎選擇 InnoDB還是MyISAM

MyISAM 是MySQL中默認的存儲引擎,一般來說不是有太多人關心這個東西。決定使用什麼樣的存儲引擎是一個很tricky的事情,但是還是值我們去研究一下,這裡的文章只考慮MyISAM 和InnoDB這兩個,因為這兩個是最常見的。

Read more »

MySQL再易主 創始人Michael Widenius 另創MariaDB瑪莉亞資料庫

MySQL資料庫的主要創始人Michael Widenius宣佈成立開源資料庫聯盟,將提供一套名為瑪莉亞(MariaDB)的企業級開源資料庫,由他帶頭負責長期開發、維護和技術服務。本刊透過電子郵件專訪Michael Widenius,瞭解他對瑪莉亞資料庫(MariaDB)的未來規畫。

Read more »