MySQL数据库应用第3章操作数据库
?
MySQL安裝好以后,首先需要?jiǎng)?chuàng)建數(shù)據(jù)庫(kù),這是使用mysql各種功能的前提。本章將詳細(xì)介紹數(shù)據(jù)的基本操作,主要內(nèi)容包括數(shù)據(jù)庫(kù)的創(chuàng)建和刪除,不同類(lèi)型的數(shù)據(jù)存儲(chǔ)引擎和存儲(chǔ)引擎的選擇。
學(xué)習(xí)目標(biāo):
1、掌握創(chuàng)建數(shù)據(jù)庫(kù)的方法;
2、熟悉數(shù)據(jù)庫(kù)的刪除操作;
3、了解數(shù)據(jù)庫(kù)存儲(chǔ)引擎;
4、熟悉常見(jiàn)的存儲(chǔ)引擎工作原理;
5、掌握常見(jiàn)的mysql工具;
6、掌握綜合實(shí)例中數(shù)據(jù)庫(kù)的創(chuàng)建和刪除方法;
?
3.1?創(chuàng)建數(shù)據(jù)庫(kù)
mysql安裝完成后,將會(huì)在其data目錄下自動(dòng)創(chuàng)建幾個(gè)必須的數(shù)據(jù)庫(kù),可以使用"show databases;"語(yǔ)句來(lái)查看當(dāng)前所存在的數(shù)據(jù)庫(kù),輸入語(yǔ)句及其執(zhí)行結(jié)果如下:
注意事項(xiàng):語(yǔ)句必須以分號(hào)“;”結(jié)尾,否則會(huì)報(bào)錯(cuò)的。
?
可以看到,數(shù)據(jù)庫(kù)列表中包含 6個(gè)?數(shù)據(jù)庫(kù):
mysql:是必須的,用于描述用戶訪問(wèn)權(quán)限;
test:用于做測(cè)試的工作;
其它數(shù)據(jù)庫(kù)在后面的章節(jié)中介紹。
創(chuàng)建數(shù)據(jù)庫(kù)是指在系統(tǒng)磁盤(pán)上劃分一塊區(qū)域用于數(shù)據(jù)的存儲(chǔ)和管理。如果管理員在設(shè)置權(quán)限的時(shí)候?yàn)橛脩魟?chuàng)建了數(shù)據(jù)庫(kù),則可以直接使用,否則需要自己創(chuàng)建數(shù)據(jù)庫(kù)。mysql創(chuàng)建數(shù)據(jù)庫(kù)的基本sql語(yǔ)法格式如下:
create database database_name;
database_name為要?jiǎng)?chuàng)建的數(shù)據(jù)庫(kù)的名稱(chēng),該名稱(chēng)下不能與已經(jīng)存在的數(shù)據(jù)庫(kù)重名;
【示例3.1】創(chuàng)建測(cè)試數(shù)據(jù)test_db:?create database test_db;
【示例3.2】查看創(chuàng)建好的數(shù)據(jù)庫(kù)的定義:show create database test_db\G; 可以看到,如果數(shù)據(jù)庫(kù)創(chuàng)建成功,將顯示數(shù)據(jù)庫(kù)的創(chuàng)建信息。
再次使用show databases;語(yǔ)名來(lái)查看當(dāng)前所存在的數(shù)據(jù)庫(kù),輸入的語(yǔ)句及其搪行結(jié)果如下:
可以看到,數(shù)據(jù)庫(kù)列表中出現(xiàn)了剛剛創(chuàng)建的數(shù)據(jù)test_db和其他原有的數(shù)據(jù)庫(kù)。
?
3.2 刪除數(shù)據(jù)庫(kù)
刪除數(shù)據(jù)庫(kù)是指將已經(jīng)存在的數(shù)據(jù)庫(kù)從磁盤(pán)空間上刪除,清除數(shù)據(jù)庫(kù)之后,數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)也將一同被刪除。刪除數(shù)據(jù)庫(kù)的語(yǔ)句和數(shù)據(jù)庫(kù)的語(yǔ)句相似,mysql中刪除數(shù)據(jù)庫(kù)的基本語(yǔ)法格式如下:
drop database database_name;
database_name為要?jiǎng)h除的數(shù)據(jù)庫(kù)的名稱(chēng),如果指定的數(shù)據(jù)庫(kù)不存在,則刪除操作出錯(cuò)。
【示例3.3】刪除測(cè)試數(shù)據(jù)庫(kù):drop databaswe test_db;
語(yǔ)句執(zhí)行完成之后,數(shù)據(jù)庫(kù)被刪除,再次查看數(shù)據(jù)庫(kù)的定義,結(jié)果如下:
執(zhí)行結(jié)果報(bào)錯(cuò),即數(shù)據(jù)庫(kù)已不存在,刪除成功。
【注】使用drop database?語(yǔ)句時(shí)要非常謹(jǐn)慎,在執(zhí)行該語(yǔ)句時(shí),mysql不會(huì)給出任何提示確認(rèn)信息。并且數(shù)據(jù)庫(kù)中存儲(chǔ)的所有數(shù)據(jù)表和數(shù)據(jù)也將一同被刪除,而且不能恢復(fù)。
?
?
3.3?數(shù)據(jù)庫(kù)存儲(chǔ)引擎
數(shù)據(jù)庫(kù)存儲(chǔ)引擎是數(shù)據(jù)庫(kù)的底層軟件組件,數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)使用數(shù)據(jù)引擎進(jìn)行創(chuàng)建、查詢(xún)、更新和刪除數(shù)據(jù)庫(kù)操作。不同的存儲(chǔ)引擎提供不同的存儲(chǔ)機(jī)制、索引技巧、鎖定水平等功能,使用不同的存儲(chǔ)引擎,可以獲行不同的功能。現(xiàn)在許多不同的數(shù)據(jù)庫(kù)管理是系統(tǒng)都支持多種不同的數(shù)據(jù)引擎。mysql的核心就是存儲(chǔ)引擎。
mysql提供了多個(gè)不同的存儲(chǔ)引擎,包括處理事務(wù)安全表的引擎和處理非事務(wù)安全表的引擎。在mysql中,不需要在整個(gè)服務(wù)器中使用同一種存儲(chǔ)引擎,針對(duì)具體的要求,可以對(duì)每一個(gè)表使用不同的存儲(chǔ)引擎。mysql 5.6支持的存儲(chǔ)引擎有 InnoDB、MyISAM、Menory、Merge、Archive、Federated、CSV、BLACKHOLE等。可以使用show engines語(yǔ)句查看系統(tǒng)所支持的引擎類(lèi)型,結(jié)果如下:
mysql> show engines \G
*************************** 1. row ***************************
Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 2. row ***************************
Engine: MRG_MYISAM
Support: YES
Comment: Collection of identical MyISAM tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 3. row ***************************
Engine: CSV
Support: YES
Comment: CSV storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 4. row ***************************
Engine: FEDERATED
Support: NO
Comment: Federated MySQL storage engine
Transactions: NULL
XA: NULL
Savepoints: NULL
*************************** 5. row ***************************
Engine: PERFORMANCE_SCHEMA
Support: YES
Comment: Performance Schema
Transactions: NO
XA: NO
Savepoints: NO
*************************** 6. row ***************************
Engine: MyISAM
Support: YES
Comment: MyISAM storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 7. row ***************************
Engine: InnoDB
Support: DEFAULT
Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
XA: YES
Savepoints: YES
*************************** 8. row ***************************
Engine: BLACKHOLE
Support: YES
Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
XA: NO
Savepoints: NO
*************************** 9. row ***************************
Engine: ARCHIVE
Support: YES
Comment: Archive storage engine
Transactions: NO
XA: NO
Savepoints: NO
9 rows in set (0.00 sec)
support的值可以表示某種引擎是否能使用:YES表示可以使用,NO表示不能使用,default表示該引擎為當(dāng)前默認(rèn)存儲(chǔ)引擎。
?
3.3.1 InnoDB存儲(chǔ)引擎
? InnoDB是事務(wù)型數(shù)據(jù)庫(kù)的首選引擎,支持事務(wù)安全表(ACID),支持行鎖定和外鍵。mysql5.5.5之后,InnoDB作為默認(rèn)存儲(chǔ)引擎,其主要特性如下:
1、InnoDB給mysql提供了具有提交、回滾和崩潰恢復(fù)能力的事務(wù)安全(ACID?兼容)存儲(chǔ)引擎。InnoDB鎖定在行級(jí)并且也在select語(yǔ)句中提供一個(gè)類(lèi)似oracle的非鎖定讀。這此功能增強(qiáng)了多用戶部署的性能。在sql查詢(xún)中,可以自由地將InnoDB類(lèi)型的表與其他mysql類(lèi)型的表混合起來(lái),甚至在同一個(gè)查詢(xún)中也可以混合。
2、InnoDB是為提高處理巨大數(shù)據(jù)量的性能設(shè)計(jì)的。它的CPU效率可能是任何其它基于磁盤(pán)的關(guān)系統(tǒng)數(shù)據(jù)庫(kù)引擎所不能匹敵的。
3、InnoDB存儲(chǔ)引擎完全與mysql服務(wù)器整合,InnoDB存儲(chǔ)引擎為在主內(nèi)存中緩存數(shù)據(jù)和索引而維持它自己的緩沖池。InnoDB將它的表和索引放在一個(gè)邏輯表空間中,表空間可以包含整個(gè)文件(或原始磁盤(pán)分區(qū)),這與mysql表不同,比如在myisam表中每個(gè)表被存放在相互分離的文件中。InnoDB表可以是任何大小,即使在文件大小被限制為2GB的操作系統(tǒng)中也如此。、
4、InnoDB支持外鍵完整性約束(foreign key)。
存儲(chǔ)表中的數(shù)據(jù)時(shí),每張表的存儲(chǔ)都按主鍵順序存放,如果沒(méi)有在定義表時(shí)指定主鍵,InnoDB會(huì)為每一行生成一個(gè)6字節(jié)的rowid字段,并以此作為主鍵。
5、InnoDB被用在從多需要高性能的大型數(shù)據(jù)庫(kù)站點(diǎn)上。
InnoDB不創(chuàng)建目錄,使用InnoDB時(shí),mysql將在mysql數(shù)據(jù)目錄下創(chuàng)建一個(gè)名為ibdata1的10MB大小的自動(dòng)擴(kuò)展數(shù)據(jù)文件,以及名為ib_logfile0?和 ib_logfile1兩個(gè)5 MB大小的日志文件。
?
3.3.2?MyISAM存儲(chǔ)引擎
MyISAM是基于ISAM的存儲(chǔ)引擎,并對(duì)其進(jìn)行了擴(kuò)展。MyISAM是在web、數(shù)據(jù)倉(cāng)儲(chǔ)和其它應(yīng)用環(huán)境下最常使用的存儲(chǔ)引擎之一。MyISAM擁有較高的插入、查詢(xún)速度,但不支持事務(wù)。在mysql 5.5.5之前的版本中,MyISAM是默認(rèn)的存儲(chǔ)引擎。MyISAM的主要特性如下。
1、在支持大文件的文件系統(tǒng)和操作系統(tǒng)上,大文件(達(dá)63位文件長(zhǎng)度)被支持。
2、當(dāng)把刪除和更新及插入操作混合使用的時(shí)候,將產(chǎn)生更少的碎片。
3、每個(gè)MyISAM表的最大索引數(shù)量64,這可以通過(guò)重新編譯來(lái)改變。每個(gè)索引最大的列數(shù)是16.
4、最大的鍵長(zhǎng)度是1000字節(jié),這也可以通過(guò)編譯來(lái)改變。
5、blob和text列可以被索引。
6、每個(gè)MyISAM類(lèi)型的表都有一個(gè)auto_increment的內(nèi)部列,當(dāng)執(zhí)行inster?和?update?操作的時(shí)候,auto_increment列將被刷新,所以說(shuō),MyISAM類(lèi)型表的auto_increment列更新比InnoDB類(lèi)型的auto_increment更快。
8、可以把數(shù)據(jù)文件和索引文件放在不同的目錄。
9、每個(gè)字符列可以有不同的字符集。
10、varchar?和 char?列的長(zhǎng)度可以多達(dá)64kb。
使用MyISAM引擎創(chuàng)建數(shù)據(jù)庫(kù),將產(chǎn)生3個(gè)文件。文件的名字以表的名字開(kāi)始,擴(kuò)展名可以指出文件類(lèi)型:表定義文件的擴(kuò)展名為.frm,數(shù)據(jù)文件的擴(kuò)展名為.myd(mydata),索引文件的擴(kuò)展名是.myi(myindex)
?
3.3.3?memory存儲(chǔ)引擎
memory存儲(chǔ)引擎可以將表中的數(shù)據(jù)庫(kù)存儲(chǔ)到內(nèi)存中,為查詢(xún)和引用其他表數(shù)據(jù)提供快速訪問(wèn)。memory的主要特性如下:
1、memory表可以有多達(dá)32個(gè)索引,每個(gè)索引有16列,以及500字節(jié)最大鍵長(zhǎng)度。
2、memory存儲(chǔ)引擎執(zhí)行hash?和 btree?索引。
3、可以在memory表中有非唯一鍵。
4、memory表使用一個(gè)固定的記錄長(zhǎng)度格式。
5、memory存儲(chǔ)引擎不支持blob?或?text 列。
6、memory存儲(chǔ)引擎支持atuto_increment列和包含null值的列的索引。
7、memory表在所有客戶端之間共享(就像其它任何非temporary表)。
8、memory表的內(nèi)容被存放在內(nèi)存中,內(nèi)存是memory表和服務(wù)器在查詢(xún)處理時(shí)的空閑中創(chuàng)建的內(nèi)部表共享。
9、當(dāng)不在需要memory表的內(nèi)容時(shí),要釋放被memory表占用的內(nèi)存,應(yīng)該執(zhí)行delete from?或 truncate table,或者刪除整個(gè)表(使用drop?table)。
?
3.3.4?存儲(chǔ)引擎的選擇
不同的存儲(chǔ)引擎,都有各自的特點(diǎn),以適應(yīng)不同的需求,如下表。為了做出選擇,首先需要考慮每個(gè)存儲(chǔ)引擎提供了哪些不同的功能。
如果要提供提交 、回滾和崩潰恢復(fù)能力的事務(wù)安全(ACID?兼容)能力,并要求實(shí)現(xiàn)并發(fā)控制,InnoDB是個(gè)很好的選擇。
如果數(shù)據(jù)表主要用來(lái)插入和查詢(xún)記錄,則MyISAM引擎能提供較高的處理效率。
如果只是臨時(shí)存放數(shù)據(jù),數(shù)據(jù)量不大,并且不需要較高的數(shù)據(jù)安全性,可以選擇數(shù)據(jù)保存在內(nèi)存中的Menmory引擎,MySQL中使用該引擎作為臨時(shí)表,存放查詢(xún)的中間結(jié)果。
如果只有insert?和 select操作,可以選擇Archive引擎,Archive存儲(chǔ)引擎支持高并發(fā)的插入操作,但是本身并不是事務(wù)安全的。Archive存儲(chǔ)引擎非常適合存儲(chǔ)歸檔數(shù)據(jù),如記錄日志信息可以使用Archive引擎。
使用哪一種引擎要根據(jù)需要靈活選擇,一個(gè)數(shù)據(jù)庫(kù)中的多個(gè)表可以使用不同的引擎以慢足各種性能和實(shí)際需求。使用合適的存儲(chǔ)引擎,將會(huì)提高整個(gè)數(shù)據(jù)庫(kù)的性能。
?
3.4?綜合實(shí)例——數(shù)據(jù)庫(kù)的創(chuàng)建和刪除
本章介紹了數(shù)據(jù)庫(kù)的基本操作,包括創(chuàng)建、查看?和?刪除?數(shù)據(jù)庫(kù),并介紹了mysql中的各種存儲(chǔ)引擎。在這里,通過(guò)一個(gè)案例,讓讀者全面回顧數(shù)據(jù)庫(kù)的基本操作。
1、案例的目的:登錄mysql,使用數(shù)據(jù)庫(kù)操作語(yǔ)句創(chuàng)建、查看?和?刪除?數(shù)據(jù)庫(kù)。
2、案例操作過(guò)程:
step_01>登錄數(shù)據(jù)庫(kù):
打開(kāi)windows命令行,輸入登錄用戶名和密碼,命令如下:
mysql -h localhost -u root -p
enter password:****
出現(xiàn)mysql命令輸入提示符時(shí),表示登錄成功。如下圖:
step_02>創(chuàng)建數(shù)據(jù)庫(kù)zoo,執(zhí)行命令如下:
create database zoo;
query ok, 1 row affected (0.04 sec)
提示信息表明語(yǔ)句執(zhí)行成。
查看當(dāng)前系統(tǒng)中所有的數(shù)據(jù)庫(kù),執(zhí)行過(guò)程如下:
可以看到,數(shù)據(jù)庫(kù)列表中已經(jīng)有了名稱(chēng)為zoo的數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)創(chuàng)建成功。
?
step_03>選擇當(dāng)前數(shù)據(jù)庫(kù)zoo,查看數(shù)據(jù)庫(kù)zoo的信息,執(zhí)行過(guò)程如下:
usr zoo;
database changed
提示信息database changed表明選擇成功。
查看數(shù)據(jù)庫(kù)信息,如下所示:
database值表明當(dāng)前數(shù)據(jù)庫(kù)名稱(chēng),create database?值表示創(chuàng)建數(shù)據(jù)庫(kù)zoo的語(yǔ)句,后面為注釋信息。
step_04>刪除數(shù)據(jù)庫(kù)zoo,執(zhí)行過(guò)程如下:
drop database zoo;
query ok, 0 rows affected (0.00 sec)
以上語(yǔ)句執(zhí)行完畢,將數(shù)據(jù)庫(kù)zoo從系統(tǒng)中刪除。
查看當(dāng)前系統(tǒng)中所有的數(shù)據(jù)加,執(zhí)行過(guò)程如下:
可以看到在數(shù)據(jù)庫(kù)列表中已經(jīng)沒(méi)有名稱(chēng)為zoo的數(shù)據(jù)庫(kù)了。
?
3.5?高手甜點(diǎn)
甜點(diǎn)1:如何查看默認(rèn)的存儲(chǔ)引擎?
在前文介紹了使用show engines?語(yǔ)句查看系統(tǒng)中所有的存儲(chǔ)引擎,其中包括默認(rèn)的存儲(chǔ)引擎,當(dāng)然還可以使用一種方法直接查看默認(rèn)的存儲(chǔ)引擎,輸入的語(yǔ)句及其執(zhí)行結(jié)果如下:
show variables like '%storage_engine%';
在storage_engine兩邊要加上百分號(hào)(這里在書(shū)上是沒(méi)有加的,暫時(shí)還不清楚這兩個(gè)百分號(hào)是表示什么),如果不加百分號(hào)會(huì)報(bào)錯(cuò);
?
甜點(diǎn)2:如何修改默認(rèn)的存儲(chǔ)引擎?
打開(kāi)MySQL安裝目錄下的配置文件my.ini,然后找到default-storage-engine=INNODB語(yǔ)句,將默認(rèn)的存儲(chǔ)引擎InnoDB修改為實(shí)際需要的存儲(chǔ)引擎,之后重啟服務(wù)即可生效。
?
以上內(nèi)容來(lái)自《MySQL數(shù)據(jù)庫(kù)應(yīng)用_案例課堂》——?jiǎng)⒂窦t、郭廣新編著,若有侵權(quán)請(qǐng)聯(lián)系刪除。?
轉(zhuǎn)載于:https://www.cnblogs.com/liukang92/p/9639825.html
總結(jié)
以上是生活随笔為你收集整理的MySQL数据库应用第3章操作数据库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: BCH虫洞项目有多安全以及WHC究竟能干
- 下一篇: showSoftInput不起作用