一昔榴、導(dǎo)入hellodb.sql生成數(shù)據(jù)庫
mysql -uroot -p
use hellodb;
source /installcd/hellodb_innodb.sql;
mysql> show tables;
+-------------------+
| Tables_in_hellodb |
+-------------------+
| classes |
| coc |
| courses |
| scores |
| students |
| teachers |
| toc |
+-------------------+
7 rows in set (0.00 sec)
1)在students表中辛藻,查詢年齡大于25歲,且為男性的同學(xué)的名字和年齡
mysql> SELECT NAME,age FROM students WHERE age > 25 AND Gender = 'M';
+--------------+-----+
| NAME | age |
+--------------+-----+
| Xie Yanke | 53 |
| Ding Dian | 32 |
| Yu Yutong | 26 |
| Shi Qing | 46 |
| Tian Boguang | 33 |
| Xu Xian | 27 |
| Sun Dasheng | 100 |
+--------------+-----+
7 rows in set (0.00 sec)
2)以ClassID為分組依據(jù)互订,顯示每組的平均年齡
mysql> SELECT classid,AVG(age) FROM students WHERE classid IS NOT NULL GROUP BY classid;
+---------+----------+
| classid | AVG(age) |
+---------+----------+
| 1 | 20.5000 |
| 2 | 36.0000 |
| 3 | 20.2500 |
| 4 | 24.7500 |
| 5 | 46.0000 |
| 6 | 20.7500 |
| 7 | 19.6667 |
+---------+----------+
7 rows in set (0.00 sec)
3)顯示第2題中平均年齡大于30的分組及平均年齡
mysql> SELECT classid,AVG(age) AS AVGage FROM students WHERE classid IS NOT NULL GROUP BY classid HAVING AVGage > 30;
+---------+---------+
| classid | AVGage |
+---------+---------+
| 2 | 36.0000 |
| 5 | 46.0000 |
+---------+---------+
2 rows in set (0.00 sec)
4)顯示以L開頭的名字的同學(xué)的信息
mysql> SELECT * FROM students WHERE NAME LIKE 'l%';
+-------+-------------+-----+--------+---------+-----------+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+-------+-------------+-----+--------+---------+-----------+
| 8 | Lin Daiyu | 17 | F | 7 | NULL |
| 14 | Lu Wushuang | 17 | F | 3 | NULL |
| 17 | Lin Chong | 25 | M | 4 | NULL |
+-------+-------------+-----+--------+---------+-----------+
3 rows in set (0.00 sec)
二吱肌、數(shù)據(jù)庫授權(quán)magedu用戶,允許192.168.1.0/24網(wǎng)段可以連接mysql
mysql> create user 'magedu'@'192.168.1.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on `hellodb`.* to 'magedu'@'192.168.1.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
三仰禽、總結(jié)mysql常見的存儲(chǔ)引擎以及特點(diǎn)
1氮墨、MyISAM
(1)不支持事務(wù)
(2)表級(jí)鎖定
(3)讀寫相互阻塞,寫入不能讀吐葵,讀時(shí)不能寫
(4)只緩存索引
(5)不支持外鍵約束
(6)不支持聚簇索引
(7)讀取數(shù)據(jù)較快规揪,占用資源較少 ,不支持MVCC(多版本并發(fā)控制機(jī)制)高并發(fā)
(8)崩潰恢復(fù)性較差
(9)MySQL5.5.5前默認(rèn)的數(shù)據(jù)庫引擎 温峭,查詢速度快猛铅、存儲(chǔ)空間小,原因是在磁盤上分成三個(gè)文件存儲(chǔ):
.frm(存儲(chǔ)表定義)凤藏,.MYD(MYData奸忽,存儲(chǔ)數(shù)據(jù)),.MYI(MYIndex揖庄,存儲(chǔ)索引)栗菜,SELECT COUNT(*) FROM TABLE時(shí),避免了全表掃描蹄梢。
2疙筹、InnoDB
(1)InnoDB最大的特點(diǎn)就是支持事務(wù)和行鎖,是現(xiàn)在Mysql的默認(rèn)存儲(chǔ)引擎。
(2)對(duì)事務(wù)和寫并發(fā)的支持使InnDB成為最常使用的存儲(chǔ)引擎而咆。
(3)行級(jí)鎖 霍比,支持行級(jí)鎖及外鍵約束,所以在可以支持寫并發(fā)翘盖。
(4)支持事務(wù)桂塞,適合處理大量短期事務(wù) ,支持ACID的事務(wù)馍驯,支持事務(wù)的四種隔離級(jí)別阁危。
(5)讀寫阻塞與事務(wù)隔離級(jí)別相關(guān)
(6)可緩存數(shù)據(jù)和索引
(7)支持聚簇索引
(8)崩潰恢復(fù)性更好
(9)支持MVCC高并發(fā)
(10)從MySQL5.5后支持全文索引 ,SELECT COUNT(*) FROM TABLE時(shí)會(huì)進(jìn)行全表掃描汰瘫,效率低于MyISAM,從MySQL5.5.5開始為默認(rèn)的數(shù)據(jù)庫引擎
3狂打、MEMORY
(1)MEMORY是一種特殊的存儲(chǔ)引擎,特點(diǎn)是使用存儲(chǔ)在內(nèi)存中的內(nèi)容來創(chuàng)建表混弥,并且數(shù)據(jù)全部放在內(nèi)存中趴乡。
(2)每個(gè)基于MEMORY存儲(chǔ)引擎的表實(shí)際對(duì)應(yīng)一個(gè)磁盤文件,該文件的文件名與表名相同,類型為frm類型蝗拿。
該文件中只存儲(chǔ)表的結(jié)構(gòu)晾捏,而其數(shù)據(jù)文件,都是存儲(chǔ)在內(nèi)存中哀托,這樣有利于數(shù)據(jù)的快速處理惦辛,提高整個(gè)表的效率。需要注意的是仓手,服務(wù)器需要有足夠的內(nèi)存來維持MEMORY存儲(chǔ)引擎的表的使用胖齐。如果不需要了,可以釋放內(nèi)存嗽冒,甚至刪除不需要的表呀伙。
(3)將所有數(shù)據(jù)存儲(chǔ)在RAM中,以便在需要快速查找參考和其他類似 數(shù)據(jù)的環(huán)境中進(jìn)行快速訪問添坊。適用存放臨時(shí)數(shù)據(jù)剿另。
(4)引擎以前被稱為HEAP引擎
(5)MEMORY默認(rèn)使用哈希索引,速度比使用B樹索引快贬蛙。當(dāng)然如果你想用B型樹索引雨女,可以在創(chuàng)建索引時(shí)指定。注意速客,MEMORY用到的很少,因?yàn)樗前褦?shù)據(jù)存到內(nèi)存中五鲫,如果內(nèi)存出現(xiàn)異常就會(huì)影響數(shù)據(jù)溺职。
(6)如果重啟或者關(guān)機(jī),所有數(shù)據(jù)都會(huì)消失。因此浪耘,基于MEMORY的表的生命周期很短乱灵,一般是一次性的。
(7)所有的數(shù)據(jù)都在內(nèi)存中七冲,處理速度快痛倚,但是安全性不高。對(duì)表的大小有要求澜躺,依賴內(nèi)存蝉稳,不能建立太大的表。