posted @ 2010-09-03 12:45 ∪∩BUG 閱讀(123) | 評論 (0) | 編輯 收藏
posted @ 2010-09-03 12:43 ∪∩BUG 閱讀(309) | 評論 (0) | 編輯 收藏
posted @ 2009-04-25 21:13 ∪∩BUG 閱讀(1228) | 評論 (0) | 編輯 收藏
My SQL 學習筆記
2008 09 29
首先:MySQL是一個小型關系型數據庫管理系統,開發者為瑞典MySQL AB公司。在2008年1月16號被Sun公司收購。
(1)系統管理
1.運行CMD后用CD命令到Mysql的BIN目錄下(如:E:\Program File\MySQL\MySQL Server 5.0\bin)[以下幾步的操作都在此目錄下執行]
2.啟動MySQL服務: net start mysql
3.連接MySQL: mysql -h localhost(主機) -u userName(用戶) -p databaseName(可選) (然后輸入密碼)
4.修改root密碼:
1)新密碼不為空
mysqladmin -u root -p password 新密碼 (然后輸入:舊密碼)
2)新密碼為空
mysql -u root -p (然后輸入:舊密碼)
use mysql;
update user set password=password('') where user='root';
flush privileges; (刷新權限.)
quit (退出)
3)原密碼為空
mysql -u root -p (然后回車)
use mysql;
update user set password=password('新密碼') where user='root';
flush privileges; (刷新權限.)
quit (退出)
(2)基本命令(注意:執行語句以";"號或"\g"結束!)
1.列出My SQL的有多少個數據庫: show databases;
2.選擇某個數據庫: use databaseName;
3.列出當前數據庫中的所有表: show tables;
4.列出某個表的結構: desc tableName;
5.顯示當前數據庫: select database();
6.顯示當前用戶: select user();
7.顯示時間: select now(); [按格式顯示時間:select date_format(now(),'%Y-%m-%d %H:%i:%s');]
8.顯示MySQL版本: select version();
(3)MySQL實現分頁的思路
所謂分頁顯示,也就是將數據庫中的結果集人為的分成一段一段的來顯示,這里需要兩個初始的參數:
每頁多少條記錄(PageSize)?
當前是第幾頁(CurrentPageID)?
現在只要給一個結果集,就可以顯示某段特定的結果出來。
至于其他的參數,比如:上一頁(PreviousPageID)、下一頁(NextPageID)、總頁數(numPages)等等,都可以根據前邊這幾個東西得到。
以mysql數據庫為例,如果要從表內截取某段內容,sql語句可以用:select * from table limit offset, rows。
(offset是起始行(第一行從0開始),row是要顯示的行個數)
看看下面一組sql語句,嘗試一下發現其中的規率。
前10條記錄:select * from table limit 0,10
第11至20條記錄:select * from table limit 10,10
第21至30條記錄:select * from table limit 20,10
……
這一組sql語句其實就是當PageSize=10的時候取表內每一頁數據的sql語句,我們可以總結出這樣一個模板:
select * from table limit (CurrentPageID - 1) * PageSize, PageSize
拿這個模板代入對應的值和上邊那一組sql語句對照一下看看是不是那么回事。
posted @ 2008-09-30 00:58 ∪∩BUG 閱讀(414) | 評論 (1) | 編輯 收藏
現代軟件和以往傳統軟件主要區別在于:現代軟件基于internet互聯網技術,運行于開放的網絡環境,不象傳統軟件只是運行在封閉的局域網,運行環境的區別就決定了軟件操作用戶的多少,在一個開放互聯網環境, 你的軟件系統用戶是不斷增長,特別是那些對所有人群開放的社區網站系統,更是承受前所未有的訪問負載。那么,這些軟件系統承受的壓力主要會集中在軟件的哪個環節呢?如果你使用傳統軟件的設計思路,那么無疑壓力都集中在數據庫上。
隨著用戶的爆發量增長,在某個凌晨醒來時,你發現:數據庫已死。
傳統軟件系統實則應該叫數據庫軟件系統,是一個數據庫系統,開發這樣的系統非常簡單,成本 也非常低廉,只要根據需求先設計好數據表結構,然后,就找一些大學畢業生寫大量SQL語句,雖然還使用 JAVA/PHP/.NET等語言,但實際上這些語言只是將SQL送往數據庫執行的運輸工,沒有什么價值和地位。
所以,這樣的系統運行在互聯網環境下以后,主要負載就集中在數據庫的SQL運行上,也就是說:整個軟件系統性能關鍵點就集中在數據庫上了,數據庫是性能主角,是王者;雖然你購置了昂貴的Websphere/weblogic等應用服務器,但是由于Java只是運輸工,根本起不到性能上負載分擔的作用。
著名的社區網站MySpace就是因為一個好的idea,用戶瘋狂增長,但是系統卻不能平滑承受增長的用戶訪問,這些用戶訪問網站緩慢、無法訪問甚至丟失數據,他們經過幾次傷筋動骨的架構升級,在微軟SQLServer直接技術支持下, 好容易才勉強應付過去。看看他們痛苦經歷,你是否也愿意再來一次呢?詳細情況: http://www.jdon.com/jivejdon/thread/34601.html
從中可以看出,數據庫性能微調和挖潛總是有限度的,對數據庫性能優化提高性能的步伐永遠趕不上用戶增長量, 有人也提出數據庫集群的概念,其實數據庫集群是一個騙人概念,一般只是備份,在集群數量和failover上有制約, 否則,數據庫巨頭Oracle不會跑到JavaEE陣營搖旗吶喊,還最早推出EJB3服務器,并揚言要收購JavaEE過去老大 Bea Weblogic。
很顯然,數據庫成已經為軟件系統的主要性能瓶頸了,單純依靠數據庫自救的方式已經行不通,是宣布數據庫退出主角時候了,那么由誰來宣布:教皇數據庫已死?無疑是Java。
Java社區早在本世紀初就提出中間件概念,用以取代數據庫地位,實則就是將軟件系統主要負載從數據庫上轉移到中間件服務器上,分擔負載。 也就是說:Java社區提出:既然數據庫已經成為瓶頸,修修補補也無濟于事,不如放棄它,不再依賴它。
也就是說:Java不再做SQL的運輸工,不再是跑龍套的了,而是主角,那么如何讓Java成為主角呢?那必須依賴對象這個概念,對象是生活在中間件服務器內存中,它又是數據庫數據的業務封裝,它和數據庫有著 千絲萬縷的關系,但是它又和關系數據庫存在天然矛盾,兩者水火不容。
過去,我們是將業務邏輯寫成SQL送往數據庫執行,導致數據庫成為業務邏輯主要運行瓶頸,那么,如果我們將 業務邏輯用對象概念表達,而不是SQL,那么我們的業務邏輯就圍繞內存中的對象反復計算,這樣,負載不是集中在 對象運行的中間件服務器上(也就是應用服務器Weblogic/websphere/JBoss/Tomcat)?而對象/中間件都是用Java 語言表達的,無疑,這樣的架構,Java才成為主角。
再進一步想想:如果我們從軟件系統開始之初,就使用對象分析設計,不與數據庫沾邊,整個流程就完全OO,分析設計直至代碼都擺脫了數據庫影響,這個流程如下:
分析建模 細化設計(通過Evans DDD) 架構設計 代碼實現 調試測試 部署運行。
那么數據庫在什么時候建立呢?數據庫表結構的創建可以延緩到部署運行時,由Hibernate/EJB CMP/JPA等ORM技術自動實現。這樣, 整個上游環節就不涉及數據庫技術,而是使用更符合自然的表達OO方式,軟件質量就更高了。我在J道網站已經大量闡述了如何從OO分析 到OO實現的過程,包括我的Jdon框架也直接支持這樣一個自然方式。
現在,很多人已經理解,分析設計要用OO,但是數據庫是運行階段缺少不了的,確實,這是正確觀點,我們奪取數據庫的王位,不是將它打倒,只是理性和平移交權力重心而已,數據庫退出主角地位,讓位于Java中間件,也預示著過去數據庫為王的時代的結束, 但是數據庫會和操作系統一樣,成為我們現代軟件系統一個不可缺少重要的基礎環節。
正是基于這樣事實,雖然我早在2005年喊出“數據庫時代的終結一文,回帖長達幾百貼, 大部分是懷疑論,不信論,由此可見,由于傳統觀點影響和不及時與國際新思想同步,國內數據庫保皇派還是有相當人數的。我BanQ人微言輕,拋出這些觀點被保皇派譏諷為所瘋話,那么看看,著名ORM框架Hibernate和SEAM框架創始人Gavin King的一段觀點:
In almost all enterprise applications, the database is the primary bottleneck, and the least scalable tier of the runtime environment. 數據庫成為了大多數企業應用的主要瓶頸,也成為了運行環境中最不具伸縮性的層。... PHP/Ruby的用戶會說什么都不共享(share nothing)的架構照樣具有很好的伸縮性,.... 這些傻瓜真正想的是“除了數據庫以外什么都不共享(Share nothing except for the database)”的架構。更多參看這里
所謂伸縮性,就是彈性,整個軟件架構既支持小負載運行,也支持大負載支持,只要增加服務器即可; 由于軟件系統負載已經從SQL轉移到內存中的對象上,那么我們就可以通過增加這些應用服務器數量,通過分布式計算甚至云計算,達到業務對象在多臺應用服務器之間傳遞共享,而不必通過數據庫這個環節,既減輕數據庫負載,又能輕松擴充性能,不必走 集中試大型主機之路,只要添置低廉PC服務器即可。經過權威測試:websphere/weblogic的20臺PC服務器集群性能不亞于一臺SUN/IBM的中型機,性價比已經一目了然了。
JavaEE的服務器的集群相對于Linux等操作系統集群的好處在于:JavaEE集群能夠針對某個繁忙負載大的具體業務功能進行集群,換句話說: 就是做到精確制導,精確解決問題,而顯然,Linux操作系統的集群則無法直至業務核心的。
從另外一個方面看:雖然現在PHP號稱走上對象路線,Ruby的鐵軌開始鋪進企業,但是他們的運行環境實則依賴數據庫的, 特別是Ruby On Rails還是最適合Evans DDD對象建模路線,但是目前來講還是"披著羊皮的狼",批著DDD,實則是以數據庫中心。當然相信 ROR等將來會提供分布式計算環境,但是JavaEE在2002年時就通過EJB以及分布式緩存成熟穩定地提供分布式計算的中間件,并且已經大量成熟應用。
本文結束以前,我相信大家明白,在眾多語言平臺競爭中,為什么Java能夠擊敗過去拳王數據庫,奪得新的拳王冠軍,以及他的特點所在。有人可能會說:你忘記談.NET了,這個不用我回答你,用微軟中國董事長張亞勤的話回答:8年前.NET戰略很天真, 你會將你的重要業務企業計算依賴一個很天真不成熟的技術嗎?除非你自己也很天真:)。
進入原文:http://www.jdon.com/artichect/dbdead.htm
posted @ 2008-09-28 22:50 ∪∩BUG 閱讀(416) | 評論 (3) | 編輯 收藏
posted @ 2008-09-01 17:18 ∪∩BUG 閱讀(636) | 評論 (1) | 編輯 收藏
posted @ 2008-09-01 17:03 ∪∩BUG 閱讀(558) | 評論 (1) | 編輯 收藏
posted @ 2008-09-01 16:43 ∪∩BUG 閱讀(922) | 評論 (1) | 編輯 收藏
posted @ 2008-09-01 16:12 ∪∩BUG 閱讀(601) | 評論 (4) | 編輯 收藏