




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
MYSQL實(shí)用技術(shù)杜梓平MYSQL實(shí)用技術(shù)杜梓平MySQL的安裝詳見安裝指南MySQL的安裝詳見安裝指南2MySQL基本操作PHP+MySQL+Linux目前已逐漸成為小型web服務(wù)器的一種經(jīng)典組合。在Windows環(huán)境下構(gòu)筑和調(diào)試MySQL數(shù)據(jù)庫是許多網(wǎng)站研發(fā)者的一種最佳選擇。啟動mysql,有如下方法:方法一:使用winmysqladmin1)、進(jìn)入d::\mysql\bin目錄,運(yùn)行winmysqladmin.exe,在屏幕右下角的任務(wù)欄內(nèi)會有一個(gè)帶紅色的圖符。2)、鼠標(biāo)左鍵點(diǎn)擊該圖符,選擇“showme”,出現(xiàn)“WinMySQLAdmin”操作界面;首次運(yùn)行時(shí)會中間會出現(xiàn)一個(gè)對話框需求輸入并設(shè)置你的用戶名和口令。MySQL基本操作PHP+MySQL+Linux目前已逐漸33)、選擇“My.INIsetup”4)、在“mysqldfile”中選擇“mysqld-opt”(win9x)或“mysqld-nt”(winNT)5)、選擇“Pick-uporEditmy.inivalues”能在右邊窗口內(nèi)對你的my.ini文件進(jìn)行編輯6)、選擇“SaveModification”保存你的my.ini文件7)、如果你想快速使用winmysqladmin(開機(jī)時(shí)自動運(yùn)行),選擇“CreateShortCutonStartMenu”8)、測試:進(jìn)入DOS界面;在d:\mysql\bin目錄下運(yùn)行mysql,進(jìn)入mysql交互操作界面輸入showdatabases并回車,屏幕顯示出當(dāng)前已有的兩個(gè)數(shù)據(jù)庫mysql和test3)、選擇“My.INIsetup”4方法二:不使用winmysqladmin1)、在DOS窗口下,進(jìn)入d:/mysql/bin目錄2)、win9X下)運(yùn)行:mysqld在NT下運(yùn)行:mysqld-nt--standalone3)、此后,mysql在后臺運(yùn)行4)、測試mysql:(在d:/mysql/bin目錄下)a)、mysqlshow正常時(shí)顯示已有的兩個(gè)數(shù)據(jù)庫mysql和test方法二:不使用winmysqladmin5b)、mysqlshow-urootmysql正常時(shí)顯示數(shù)據(jù)庫mysql里的五個(gè)表:columns_privdbhosttables_privuserc)、mysqladminversionstatusproc顯示版本號、狀態(tài)、進(jìn)程信息等d)、mysqltest進(jìn)入mysql操作界面,當(dāng)前數(shù)據(jù)庫為test5)、mysql關(guān)閉方法:mysqladmin-urootshutdown4、至此,MySQL已成功安裝,接著能熟悉MySQL的常用命令并創(chuàng)建自己的數(shù)據(jù)庫了。上篇講了怎么安裝并測試MySQL,環(huán)境建好后就能繼續(xù)我們的學(xué)習(xí)了。本篇主要熟悉一寫b)、mysqlshow-urootmysql6常用命令。1、啟動MySQL服務(wù)器實(shí)際上上篇已講到怎么啟動MySQL。兩種方法:一是用winmysqladmin,如果機(jī)器啟動時(shí)已自動運(yùn)行,則可直接進(jìn)入下一步操作。二是在DOS方式下運(yùn)行d:mysqlbinmysqld2、進(jìn)入mysql交互操作界面在DOS方式下,運(yùn)行:d:mysqlbinmysql出現(xiàn):mysql的提示符,此時(shí)已進(jìn)入mysql的交互操作方式。如果出現(xiàn)"ERROR2003:Can’tconnecttoMySQLserveron’localhost’(10061)“,說明你的MySQL還沒有啟動。3、退出MySQL操作界面在mysql>提示符下輸入quit能隨時(shí)退出交互操作界面:GeneratedbyFoxitPDFCreator?FoxitSoftwareForevaluationonly.mysql>quitBye你也能用control-D退出。常用命令。7mysql命令mysql命令mysql–h8-uroot–ppasswordh:當(dāng)連接MySQL服務(wù)器不在同臺主機(jī)時(shí),填寫主機(jī)名或IP地址u:登錄MySQL的用戶名p:登錄MySQL的密碼注意:密碼如果寫在命令行的時(shí)候一定不能有空格。如果使用的系統(tǒng)為linux并且登陸用戶名字與MySQL的用戶名相同即可不用輸入用戶名密碼,linux默認(rèn)是以root登陸,windows默認(rèn)用戶是ODBCmysql命令mysql命令8更改密碼:在MySql安裝目錄下:mysql\bin下輸入如下命令:Mysqladmin–uroot–p舊密碼password新密碼注意:結(jié)尾無分號更改密碼:在MySql安裝目錄下:mysql\bin下輸入如9新建用戶Grant操作權(quán)限(select,insert,update,delete或者all)on數(shù)據(jù)庫名.*to用戶名@訪問地址identifiedby“密碼”;Flushprivileges;\\刷新系統(tǒng)權(quán)限表新建用戶Grant操作權(quán)限(select,insert10刪除用戶Deletefromuserwhereuser=“test2”andhost=“l(fā)ocalhost”;修改指定用戶名密碼:Updatemysql.usersetpassword=password(‘新密碼‘)whereuser=“test2”andhost=“l(fā)ocalhost”;DropUSER用戶名;刪除用戶Deletefromuserwhereuse11mysql程序常用命令選定默認(rèn)數(shù)據(jù)庫:usedbname;顯示所有數(shù)據(jù)庫:showdatabases;顯示默認(rèn)數(shù)據(jù)庫中所有表:showtables;放棄正在輸入的命令:\c顯示命令清單:\h退出mysql程序:\q查看MySQL服務(wù)器狀態(tài)信息:\smysql程序常用命令選定默認(rèn)數(shù)據(jù)庫:usedbname;12處理SQL文件mysql命令處理存放在文件里的SQL命令格式:mysql[option]dbname<file.sqlmysql–uroot–p--default-character-set=latin1dbname<backup.sql注:latin1是MySQL4.0的默認(rèn)字符集或者utf-8是MySQL5.0的默認(rèn)字符集,如果不知道使用什么字符集的時(shí)候,可以選用這兩個(gè)其中一個(gè)處理SQL文件mysql命令13使用的幾點(diǎn)提示字符集Windows命令窗口默認(rèn)字符集為cp850或者gbk,因此存在許多字符顯示不出來的問題??梢栽趍ysql命令加入--default-character-set=cp850或gbk選項(xiàng),cp850字符集需要再追加一個(gè)--character-sets-dir=
C:/MySQL/share/characters選項(xiàng)使用的幾點(diǎn)提示字符集14mysqladmin命令mysqladmin命令完成許多系統(tǒng)管理任務(wù),如創(chuàng)建或刪除一個(gè)數(shù)據(jù)庫、修改密碼等 格式:mysqladmin[option]admincommand創(chuàng)建數(shù)據(jù)庫 mysqladmin–uroot–pcreatenewdb刪除數(shù)據(jù)庫 mysqladmin–uroot–pdropnewdb更改密碼 mysqladmin–uroot–ppassword“newpasswd”mysqladmin命令mysqladmin命令15mysqldump命令mysqldump命令用于為數(shù)據(jù)庫創(chuàng)建備份 格式:mysqldump[option]dbname>bak.sql mysqldump–uroot–ptmpdb>backuptmp.sql備份出來的是一個(gè)文本文件,默認(rèn)為utf-8字符集,如果想使用另外一種字符集,必須使用
--default-character-set=gbk選項(xiàng)來設(shè)置mysqldump命令mysqldump命令16附加工具M(jìn)ySQLCC/products/mysqlcc/index.html對于MySQL,它是一個(gè)極好的前端查詢和數(shù)據(jù)庫管理工具?,F(xiàn)有Windows,UNIX和Linux版本可用,并且MacOSX的版本現(xiàn)在也有DBTOOL專業(yè)管理器,來自.br,是一個(gè)用于管理MySQL數(shù)據(jù)庫、表和索引的圖形客戶,其輸入來自其他RDBMS的數(shù)據(jù),該管理器提供一個(gè)用于查詢和報(bào)告設(shè)計(jì)的接口。附加工具M(jìn)ySQLCChttp://www.mysql.17總結(jié)MySQL是一種功能非常強(qiáng)大的關(guān)系型客戶服務(wù)器數(shù)據(jù)庫系統(tǒng),它的安全性和穩(wěn)定性足以滿足許多應(yīng)用程序的要求,而且有著非常高的性價(jià)比??偨Y(jié)MySQL是一種功能非常強(qiáng)大的關(guān)系型客戶服務(wù)器數(shù)據(jù)庫系統(tǒng)18第二部分:數(shù)據(jù)庫基礎(chǔ)知識數(shù)據(jù)庫基礎(chǔ)知識概述SQL概述SQL語言第二部分:數(shù)據(jù)庫基礎(chǔ)知識數(shù)據(jù)庫基礎(chǔ)知識概述數(shù)據(jù)庫基礎(chǔ)知識
數(shù)據(jù)庫由一批數(shù)據(jù)構(gòu)成的有序集合,這些數(shù)據(jù)被分門別類地存放在一些結(jié)構(gòu)化的數(shù)據(jù)表(table)里,而數(shù)據(jù)表之間又往往存在交叉引用的關(guān)系,這種關(guān)系使數(shù)據(jù)庫又被稱為關(guān)系型數(shù)據(jù)庫檔案柜=數(shù)據(jù)庫抽屜=表文件=記錄數(shù)據(jù)庫基礎(chǔ)知識數(shù)據(jù)庫由一批數(shù)據(jù)構(gòu)成的有序集合,這些數(shù)據(jù)被分20數(shù)據(jù)庫數(shù)據(jù)表存儲過程視圖….…
訂單
客戶
產(chǎn)品
產(chǎn)品數(shù)據(jù)庫表數(shù)據(jù)庫數(shù)據(jù)表…訂單客戶產(chǎn)品產(chǎn)品數(shù)據(jù)庫表21數(shù)據(jù)表行(記錄)列(字段)數(shù)據(jù)表行(記錄)列(字段)22數(shù)據(jù)在表中的存放1127李梅21133王濤1部門編碼民族編碼年齡姓名編號回族2漢族1民族民族編碼市場營銷部2人事管理部1部門部門編碼存在冗余為減少數(shù)據(jù)查找的麻煩,允許數(shù)據(jù)有一定的冗余數(shù)據(jù)在表中的存放1127李梅21133王濤1部門編碼民族編碼23數(shù)據(jù)存儲的完整性RollNumberNameAddressBookTaken12AliciaRuth12,TempleStreetAC09114JasonDarren123,SunsetBlvd.AC04315MaryBeth32,GoldenAvenueAC02112AliciaRuth12,TempleStreetAC04312AliciaRuth12,TmpleStreetAC01115MaryBeth33,GoldenAvenueAC011不同的地址!存在不正確、不準(zhǔn)確的數(shù)據(jù),數(shù)據(jù)庫“失去了完整性”姓名數(shù)據(jù)存儲的完整性RollNumberNameAddress24數(shù)據(jù)的完整性數(shù)據(jù)完整性+=可靠性準(zhǔn)確性數(shù)據(jù)的完整性數(shù)據(jù)完整性+=可靠性準(zhǔn)確性25完整性分類數(shù)據(jù)實(shí)體完整性字段完整性引用完整性自定義完整性完整性分類數(shù)據(jù)實(shí)體完整性26數(shù)據(jù)實(shí)體完整性河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑0010015江西南昌雷銅0010014湖南新田吳蘭0010013山東定陶李山0010012….地址姓名學(xué)號江西南昌雷銅0010014×約束方法:唯一約束、主鍵約束、標(biāo)識列數(shù)據(jù)實(shí)體完整性河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑0027字段完整性河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑0010015江西南昌雷銅0010014湖南新田吳蘭0010013山東定陶李山0010012….地址姓名學(xué)號湖北江門李亮8700000000×約束方法:限制數(shù)據(jù)類型、檢查約束、外鍵約束、默認(rèn)值、非空約束字段完整性河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑001028引用完整性河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑0010015江西南昌雷銅0010014湖南新田吳蘭0010013山東定陶李山0010012…地址姓名學(xué)號980010021數(shù)學(xué)×約束方法:外鍵約束引用完整性河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑0010自定義完整性AV121322喬峰CV0016AV372133玄痛CV0015AV378291沙悟凈AV0014AV378290豬悟能AV0013AV378289孫悟空AV0012….會員證用戶姓名用戶編號約束方法:規(guī)則、存儲過程、觸發(fā)器×觸發(fā)器:檢查信用值自定義完整性AV121322喬峰CV0016AV372133完整性包括…輸入的類型是否正確?——年齡必須是數(shù)字輸入的格式是否正確?——身份證號碼必須是18位是否在允許的范圍內(nèi)?——性別只能是”男”或者”女”是否存在重復(fù)輸入?——學(xué)員信息輸入了兩次是否符合其他特定要求?——信譽(yù)值大于5的用戶才能夠加入會員列表……列值要求(約束)整行要求(約束)完整性包括…輸入的類型是否正確?列值要求(約束)整行要求(約31創(chuàng)建數(shù)據(jù)庫表完畢!輸入數(shù)據(jù)項(xiàng),驗(yàn)證主鍵、主外鍵關(guān)系、檢查約束……創(chuàng)建數(shù)據(jù)庫表完畢!輸入數(shù)據(jù)項(xiàng),驗(yàn)證主鍵、主外鍵關(guān)系、檢查約束32SQL概述什么是SQL?
SQL是StructuredQueryLanguage(結(jié)構(gòu)化查詢語言)的縮寫。SQL是專為數(shù)據(jù)庫而建立的操作命令集,是一種功能齊全的數(shù)據(jù)庫語言。在使用它時(shí),只需要發(fā)出“做什么”的命令,“怎么做”是不用使用者考慮的。SQL概述什么是SQL?33SQL語法組成DML(
DataManipulationLanguage數(shù)據(jù)操作語言)——查詢、插入、刪除和修改數(shù)據(jù)庫中的數(shù)據(jù);——SELECT、INSERT、UPDATE、DELETE等;DCL(DataControlLanguage數(shù)據(jù)控制語言)——用來控制存取許可、存取權(quán)限等;——GRANT、REVOKE等;DDL(DataDefinitionLanguage數(shù)據(jù)定義語言)——用來建立數(shù)據(jù)庫、數(shù)據(jù)庫對象和定義其列——CREATETABLE、DROPTABLE、ALTERTABLE等功能函數(shù)——日期函數(shù)、數(shù)學(xué)函數(shù)、字符函數(shù)、系統(tǒng)函數(shù)等SQL語法組成DML(DataManipulation34MySQL中使用SQL語言幾點(diǎn)說明屬于一個(gè)SQL語句,使用分號(;)結(jié)尾,否則mysql認(rèn)為語句沒有輸入完。箭頭(->)代表SQL語句沒有輸入完取消SQL語句使用(\c)SQL語句關(guān)鍵字和函數(shù)名不區(qū)分大小寫(Linux區(qū)分,Windows不區(qū)分)使用函數(shù)時(shí),函數(shù)名和后面的括號之間不能有空格MySQL中使用SQL語言幾點(diǎn)說明屬于一個(gè)SQL語句,使用分35MySQL數(shù)據(jù)類型數(shù)據(jù)類型種類數(shù)值列類型字符串列類型日期和時(shí)間列類型MySQL數(shù)據(jù)類型數(shù)據(jù)類型種類36數(shù)據(jù)類型種類數(shù)值型 分為整型和浮點(diǎn)型整型:
可以由十進(jìn)制和十六進(jìn)制表示 整數(shù)由數(shù)字序列組成,如:1,100。 由十六進(jìn)制表示方法:0x且后面加1—9和 A—F的任意數(shù)字或字母,并且0x中的X不 能大寫。浮點(diǎn)型: 浮點(diǎn)數(shù)由一個(gè)數(shù)字加一個(gè)小數(shù)點(diǎn)再加上一 個(gè)數(shù)字組成。兩個(gè)數(shù)字序列不能同時(shí)為空。
數(shù)據(jù)類型種類數(shù)值型37字符串: 由單引號或者雙引號括起來的字符或者數(shù)字。 如:”abc”,‘a(chǎn)bc10’字符串中要用轉(zhuǎn)義字符才能表示的特殊符號字符串:38日期和時(shí)間值 是存儲如“2005-1-1”或者“12:00:00”這樣的數(shù)值的值。在MySQL中日期是按”年-月-日”的順序。NULL值 是一種無類型的值,表示“空,什么也沒有”。日期和時(shí)間值39數(shù)值列類型 MySQL為除了NULL值外的所有通用數(shù)據(jù)類型提供了列類型。列類型是一種手段,通過這種手段可以描述表的列可以包含什么樣類型的值。數(shù)值列類型 所有數(shù)值列類型的類型名及其說明和所占的字節(jié)數(shù)見下表:數(shù)值列類型 MySQL為除了NULL值外的所有通用40數(shù)值列類型包括整型和浮點(diǎn)型說明:TINYINT,SAMLLINT,MEDIUMINT,INT,BIGINT每個(gè)數(shù)據(jù)類型的取值范圍不同,故分別可以表示不同的數(shù)值范圍。在定義整型列時(shí),可以指定可選的顯示尺寸M(見上表),M是從1到255的值,它表示顯示列中值的字符數(shù)。數(shù)值列類型包括整型和浮點(diǎn)型41嘗試輸入以下語句,觀察結(jié)果Createtabledata1(TINTINYINT,SMALLSMALLINT);Describedata1;觀察結(jié)構(gòu)Createtabledata2(TINTINYINT(1),SMALLSMALLINT(2));Describedata2;觀察結(jié)構(gòu)Insertintodata2values(1,1);Insertintodata2values(128,1);Insertintodata2values(127,1);Insertintodata2values(127,32768);Insertintodata2values(127,32767);嘗試輸入以下語句,觀察結(jié)果42例如:INT(4)意思是指定了一個(gè)具有4個(gè)字符顯示寬度的INT列。如果定義了一個(gè)沒有明確寬度的整數(shù)列,則會分配缺省的寬度,缺省值為每種類型的最長值的長度。對于每種浮點(diǎn)型,可指定一個(gè)最大的顯示尺寸M和小數(shù)位數(shù)D,M的取值應(yīng)該是0-30。正數(shù)位最大為M-D-1,M和D對于DECIMAL是必須的。例如:INT(4)意思是指定了一個(gè)具有4個(gè)字符顯示寬度的43AUTO_INCREMENT自動標(biāo)識列,在需要產(chǎn)生唯一標(biāo)志符號或者順序值時(shí)候,可用此屬性。值一般從1開始,每行增加1,在插入NULL到一個(gè)AUTO_INCREMENT列時(shí),MySQL會插入一個(gè)比該列中當(dāng)前最大值大1的值,一個(gè)表中最多能有一個(gè)有此屬性的列。對于想使用此屬性的列應(yīng)該定義為NOTNULL,并定義為PRIMARYKEY或者定義為UNIQUE鍵。 舉例:createtablet(idintauto_incrementnotnullprimarykey);UNSIGNED無符號,此屬性禁用負(fù)值,將數(shù)值的取值范圍從零開始。 舉例:createtablet(numtinyint,num2tinyintunsigned);數(shù)值列的完整性約束AUTO_INCREMENT數(shù)值列的完整性約束44NULL和NOTNULL默認(rèn)為NULL,即插入值時(shí)沒有在此字段插入值時(shí)自動填NULL,如果指定了NOTNULL,則必須在插入值時(shí)在此字段添入值,不允許插入NULL值。DEFAULT 可以通過此屬性來指定一個(gè)缺省值,即如果沒有在此列添加值,那么默認(rèn)添加DEFAULT后指定值。ZEROFILL前導(dǎo)零填充數(shù)值類型值以達(dá)到列的顯示寬度。 舉例: createtabletest2(num1intdefault1,num2intzerofill);NULL和NOTNULL45mysql教程教學(xué)講解課件46字符串列類型所有字符串列類型及其說明和所占的字節(jié)數(shù)見下表:
字符串列類型47說明:對于可變長的字符串類型,其長度取決于實(shí)際存放在列中的值的長度。此長度在上表中用L來表示。附加若干額外字節(jié),用來記錄字符串長度,也就是說總長度等于L+n(n=1、2、3、4、8)說明:48CHAR和VARCHAR類型CHAR類型和VARCHAR類型長度范圍都是0~255之間的大小。他們之間的差別在于MySQL處理存儲的方式: CHAR把這個(gè)大小視為值的準(zhǔn)確大?。ㄓ每崭裉钛a(bǔ)比較短的值)。 VARCHAR類型把它視為最大值并且只使用了存儲字符串實(shí)際上需要的字節(jié)數(shù)(增加了一個(gè)額外的字節(jié)記錄長度)。因而,較短的值當(dāng)被插入一個(gè)語句為VARCHAR類型的字段時(shí),將不會用空格填補(bǔ)(然而,較長的值仍然被截短)。CHAR和VARCHAR類型49mysql教程教學(xué)講解課件50BLOB和TEXT類型 BLOB是二進(jìn)制大對象,如果想存儲二進(jìn)制數(shù)BLOB將是最佳選擇,而TEXT與之相同,只是BOLOB按照二進(jìn)制編碼排序(區(qū)分大小寫),TEXT按照字符文本模式排序(不區(qū)分大小寫)。ENUM和SET類型 是特殊的串類型,其列值必須從固定的串集中選擇,二者差別為前者必須是只能選擇其中的一個(gè)值,而后者可以多選。(不推薦使用)BLOB和TEXT類型51字符串列類型的可選屬性BINARY 使用此屬性可以使列值作為二進(jìn)制串處理,即看成BLOB類型。NULL和NOTNULL 同數(shù)值型功能相同DEFAULT 同數(shù)值型功能相同字符串列類型的可選屬性52日期和時(shí)間列類型所有時(shí)間和日期列類型的類型名及其說明和所占的字節(jié)數(shù)見下表 :日期和時(shí)間列類型53mysql教程教學(xué)講解課件54說明:每個(gè)時(shí)間和日期列類型都有一個(gè)零值,當(dāng)插入非法數(shù)值時(shí)就用零值來添加表示日期時(shí)必須先按:年,月,日的順序給出DATE,TIME,DATETIME分別是存儲日期,時(shí)間與日期和時(shí)間的組合,其格式為“YYYY-MM-DD”,
“hh:mm:ss”和“YYYY-MM-DDhh:mm:ss”,對于DATETIME類型,日期和時(shí)間部分都需要TIMESTAMP 時(shí)間戳列類型以YYYYMMDDhhmmss的格式來表示值,其取值范圍是19700101000000到2037年的某個(gè)時(shí)間,主要用于記錄更改或創(chuàng)建某個(gè)記錄說明:55mysql教程教學(xué)講解課件56mysql教程教學(xué)講解課件57mysql教程教學(xué)講解課件58總結(jié):常用數(shù)據(jù)類型總結(jié):常用數(shù)據(jù)類型創(chuàng)建數(shù)據(jù)庫建立數(shù)據(jù)庫操作: 語法:createdatabase數(shù)據(jù)庫名敘述:創(chuàng)建一個(gè)具有指定名稱的數(shù)據(jù)庫。如果要?jiǎng)?chuàng)建的數(shù)據(jù)庫已經(jīng)存在,或者沒有創(chuàng)建它的適當(dāng)權(quán)限,則此語句失敗。例:建立一個(gè)student庫。mysql>createdatabasestudent;創(chuàng)建數(shù)據(jù)庫建立數(shù)據(jù)庫操作: 60mysql數(shù)據(jù)庫備份及恢復(fù)命令mysqldump,source的用法還原一個(gè)數(shù)據(jù)庫:mysql-hlocalhost-uroot-p123456數(shù)據(jù)庫名<數(shù)據(jù)庫所在路徑(c:\數(shù)據(jù)庫名.sql)備份一個(gè)數(shù)據(jù)庫:mysqldump-hlocalhost-uroot-p123456數(shù)據(jù)庫名>數(shù)據(jù)庫所在路徑(d:\數(shù)據(jù)庫.sql)mysql數(shù)據(jù)庫備份及恢復(fù)命令mysqldump,sourc61備份MySQL數(shù)據(jù)庫的命令mysqldump-hhostname-uusername-ppassworddatabasename>backupfile.sql備份MySQL數(shù)據(jù)庫的命令62備份MySQL數(shù)據(jù)庫為帶刪除表的格式備份MySQL數(shù)據(jù)庫為帶刪除表的格式,能夠讓該備份覆蓋已有數(shù)據(jù)庫而不需要手動刪除原有數(shù)據(jù)庫。mysqldump-–add-drop-table-uusername-ppassworddatabasename>backupfile.sql備份MySQL數(shù)據(jù)庫為帶刪除表的格式63直接將MySQL數(shù)據(jù)庫壓縮備份mysqldump-hhostname-uusername-ppassworddatabasename|gzip>backupfile.sql.gz備份MySQL數(shù)據(jù)庫某個(gè)(些)表mysqldump-hhostname-uusername-ppassworddatabasenamespecific_table1specific_table2>backupfile.sql直接將MySQL數(shù)據(jù)庫壓縮備份64同時(shí)備份多個(gè)MySQL數(shù)據(jù)庫mysqldump-hhostname-uusername-ppassword–databasesdatabasename1databasename2databasename3>multibackupfile.sql僅僅備份數(shù)據(jù)庫結(jié)構(gòu)mysqldump–no-data–databasesdatabasename1databasename2databasename3>structurebackupfile.sql備份服務(wù)器上所有數(shù)據(jù)庫mysqldump–all-databases>allbackupfile.sql同時(shí)備份多個(gè)MySQL數(shù)據(jù)庫65還原MySQL數(shù)據(jù)庫的命令mysql-hhostname-uusername-ppassworddatabasename<backupfile.sql還原壓縮的MySQL數(shù)據(jù)庫gunzip<backupfile.sql.gz|mysql-uusername-ppassworddatabasename將數(shù)據(jù)庫轉(zhuǎn)移到新服務(wù)器mysqldump-uusername-ppassworddatabasename|mysql–host=*.*.*.*-Cdatabasename
還原MySQL數(shù)據(jù)庫的命令66幾個(gè)常用用例:1.導(dǎo)出整個(gè)數(shù)據(jù)庫mysqldump-u用戶名-p數(shù)據(jù)庫名>導(dǎo)出的文件名mysqldump-uroot-pdataname>dataname.sql這個(gè)時(shí)候會提示要你輸入root用戶名的密碼,輸入密碼后dataname數(shù)據(jù)庫就成功備份在mysql/bin/目錄中.2.導(dǎo)出一個(gè)表mysqldump-u用戶名-p數(shù)據(jù)庫名表名>導(dǎo)出的文件名mysqldump-uroot-pdatanameusers>dataname_users.sql3.導(dǎo)出一個(gè)數(shù)據(jù)庫結(jié)構(gòu)mysqldump-uwcnc-p-d–add-drop-tablesmgp_apps_wcnc>d:\wcnc_db.sql-d沒有數(shù)據(jù)–add-drop-table在每個(gè)create語句之前增加一個(gè)droptable幾個(gè)常用用例:1.導(dǎo)出整個(gè)數(shù)據(jù)庫674.導(dǎo)入數(shù)據(jù)庫常用source命令進(jìn)入mysql數(shù)據(jù)庫控制臺,如mysql-uroot-pmysql>use數(shù)據(jù)庫然后使用source命令,后面參數(shù)為腳本文件(如這里用到的.sql)mysql>sourced:\wcnc_db.sql4.導(dǎo)入數(shù)據(jù)庫68mysql教程教學(xué)講解課件69建立表操作:語法:createtable表名(列名1列類型[<列的完整性約束>],列名2列類型[<列的完整性約束>],......);敘述:在當(dāng)前數(shù)據(jù)庫下新創(chuàng)建一個(gè)數(shù)據(jù)表。列類型:表示該列的數(shù)據(jù)類型。例:建立一個(gè)表school,其由兩列組成,第一列屬性為非空,并做為主鍵,并自增createtableschool(school_idint(10)notnullauto_incrementprimarykey,school_namevarchar(20) );創(chuàng)建表建立表操作:創(chuàng)建表70常見完整性約束:PRIMARYKEY 主碼約束(主鍵)UNIQUE 唯一性約束NOTNULL 非空值約束 AUTO_INCREMENT 用于整數(shù)列默認(rèn)自增1UNSIGNED無符號整數(shù)DEFAULTdefault_value 默認(rèn)值約束DEFAULTcur_timestamp創(chuàng)建新記錄時(shí)默認(rèn)保存當(dāng)前時(shí)間(僅適用timestamp數(shù)據(jù)列)ONUPDATEcur_timestamp修改記錄時(shí)默認(rèn)保存當(dāng)前時(shí)間(僅適用timestamp數(shù)據(jù)列)CHARACTERSETname指定字符集(僅適用字符串)常見完整性約束:71數(shù)據(jù)表類型在創(chuàng)建一個(gè)新的MySQL數(shù)據(jù)表時(shí),可以為它設(shè)置一個(gè)類型,其中最重要的3種類型是MyISAM:成熟、穩(wěn)定和易于管理InnoDB:加入事物、數(shù)據(jù)行級鎖定機(jī)制、外鍵約束條件、崩潰恢復(fù)等新功能HEAP:只存在于內(nèi)存中,可做臨時(shí)表createtabletmp(…)ENGINE=MyISAM數(shù)據(jù)表類型在創(chuàng)建一個(gè)新的MySQL數(shù)據(jù)表時(shí),可以為它設(shè)置一個(gè)72主鍵與外鍵數(shù)據(jù)表之間的關(guān)聯(lián)/引用關(guān)系是依靠具體的主鍵(primarykey)和外鍵(foreignkey)建立起來的。主鍵:幫助MySQL以最快的速度把一條特點(diǎn)的數(shù)據(jù)記錄的位置確定下來。主鍵必須是唯一的主鍵應(yīng)該是緊湊的,因此整數(shù)類型比較適合外鍵:引用另外一個(gè)數(shù)據(jù)表的某條記錄。外鍵列類型盡可能與主鍵列類型保持一致外鍵列應(yīng)該加上NOTNULL主鍵與外鍵數(shù)據(jù)表之間的關(guān)聯(lián)/引用關(guān)系是依靠具體的主鍵(pri73主鍵createtablestudent( sidintnotnullauto_increment, namevarchar(20)notnull,
primarykey(sid));外鍵(自動檢查外鍵是否匹配,僅適用InnoDB)createtablescore( cidintnotnullauto_incrementprimarykey, scoreint, sidint,
foreignkey(sid)referencesstudent(sid));主鍵74主表和從表1、當(dāng)主表中沒有對應(yīng)的記錄時(shí),不能將記錄添加到子表 ——成績表中不能出現(xiàn)在學(xué)員信息表中不存在的學(xué)號;2、不能更改主表中的值而導(dǎo)致子表中的記錄孤立 ——把學(xué)員信息表中的學(xué)號改變了,學(xué)員成績表中的學(xué)號也應(yīng)當(dāng)隨之改變;3、子表存在與主表對應(yīng)的記錄,不能從主表中刪除該行 ——不能把有成績的學(xué)員刪除了4、刪除主表前,先刪子表 ——先刪學(xué)員成績表、后刪除學(xué)員信息表主表和從表1、當(dāng)主表中沒有對應(yīng)的記錄時(shí),不能將記錄添加到子表思考電話號碼一般使用什么數(shù)據(jù)類型存儲?性別一般使用什么數(shù)據(jù)類型存儲?年齡信息一般使用什么數(shù)據(jù)類型存儲?照片信息一般使用什么數(shù)據(jù)類型存儲?薪水一般使用什么數(shù)據(jù)類型存儲?思考電話號碼一般使用什么數(shù)據(jù)類型存儲?思考學(xué)員姓名允許為空嗎?家庭地址允許為空嗎?電子郵件信息允許為空嗎?考試成績允許為空嗎?思考學(xué)員姓名允許為空嗎?思考在主鍵列輸入的數(shù)值,允許為空嗎?不允許一個(gè)表可以有多個(gè)主鍵嗎?不可以在一個(gè)學(xué)校數(shù)據(jù)庫中,如果一個(gè)學(xué)校內(nèi)允許重名的學(xué)員,但是一個(gè)班級內(nèi)不允許學(xué)員重名,可以組合班級和姓名兩個(gè)字段一起來作為主鍵嗎?思考在主鍵列輸入的數(shù)值,允許為空嗎?不允許選擇主鍵的原則最少性盡量選擇單個(gè)鍵作為主鍵穩(wěn)定性盡量選擇數(shù)值更新少的列作為主鍵選擇主鍵的原則最少性思考標(biāo)識列允許為字符數(shù)據(jù)類型嗎?INT如果標(biāo)識列A的初始值為1,則輸入三行數(shù)據(jù)以后,再刪除兩行,下次再輸入數(shù)據(jù)行的時(shí)候,標(biāo)識值從多少開始?四思考標(biāo)識列允許為字符數(shù)據(jù)類型嗎?INT例:建立一個(gè)學(xué)生信息表(student)定義列sno學(xué)號,類型為5位定長字符串,非空,主鍵定義列sname姓名,類型為8位定長字符串,非空定義列ssex性別,取值1或0定義列sage年齡,類型為短整型定義列sdept系名,數(shù)據(jù)類型為20位變長字符串例:建立一個(gè)課程信息表(course)定義列courseid課程號,類型為整型,非空,自動增長,主鍵定義列cname課程名,類型為16位變長字符串,非空例:建立一個(gè)學(xué)生考試成績信息表(sc)定義列g(shù)rade成績,類型為整型要求把表字段補(bǔ)充完整,可以通過學(xué)號查看學(xué)生相關(guān)課程的成績例:建立一個(gè)學(xué)生信息表(student)81顯示表結(jié)構(gòu)操作語法:describe表名;
desc 表名;敘述:用于顯示表的創(chuàng)建結(jié)構(gòu)。顯示表結(jié)構(gòu)操作語法:describe表名;82 刪除數(shù)據(jù)庫或表操作刪除表操作語法:droptable[ifexists]tab_name[,tab_name]...敘述:從數(shù)據(jù)庫中刪除給定的表。如果給出ifexists子句,則刪除不存在的表不會出錯(cuò)。刪除數(shù)據(jù)庫操作語法:dropdatabase[ifexists]db_name敘述:刪除給定的數(shù)據(jù)庫。在刪除一個(gè)數(shù)據(jù)庫后,它就永遠(yuǎn)沒有了,因此要特別小心。如果給出ifexists子句,則刪除不存在的數(shù)據(jù)庫不會出錯(cuò)。 刪除數(shù)據(jù)庫或表操作刪除表操作83更改表結(jié)構(gòu)操作語法:altertable表名action;
說明:action可以是如下語句:add列名建表語句[first|after列名]可以為表添加一列,如果沒指定first或者after,則在列尾添加一列,否則在指定列添加新列addprimarykey(列名)為表添加一個(gè)主鍵,如果主鍵已經(jīng)存在,則出現(xiàn)錯(cuò)誤addforeignkey(列名)references表名(列名)
為表添加一個(gè)外鍵alter列名setdefault默認(rèn)值可以更改指定列默認(rèn)值更改表結(jié)構(gòu)操作語法:altertable表名actio84change舊列名新列名<建表語句>[first|after列名]可以更改列類型和列名稱,如果原列的名字和新列的名字相同modify列名<建表語句>[first|after列名]
和change的作用相同drop列名//可以刪除一列dropprimarykey//可以刪除主鍵engine類型名//可以改變表類型renameas新表名//可以將表名更改change舊列名新列名<建表語句>[first|85舉例1:向people表中添加字段address2,類型為varchar,最大長度為100altertablepeopleaddaddress2varchar(100);舉例2: 將people表中的name列默認(rèn)值改為100:altertablepeoplealternamesetdefault100;舉例3:向student表增加“入學(xué)時(shí)間”列,其數(shù)據(jù)類型為日期型。 altertablestudentaddscomedate;注:無論基本表中原來是否已有數(shù)據(jù),新增加的列一律為空值。舉例4:將年齡的數(shù)據(jù)類型改為半字長整數(shù)。 altertablestudentmodifysagesmallint; 注:修改原有的列定義有可能會破壞已有數(shù)據(jù)舉例1:86MySQL運(yùn)算符算數(shù)運(yùn)算符比較運(yùn)算符邏輯運(yùn)算符位運(yùn)算符MySQL運(yùn)算符算數(shù)運(yùn)算符87算數(shù)運(yùn)算符算數(shù)運(yùn)算符88
用字符串表示的數(shù)字在任何可能便于計(jì)算的地方都被自動地轉(zhuǎn)換為數(shù)字。當(dāng)執(zhí)行轉(zhuǎn)換時(shí),MySQL遵循兩個(gè)基本規(guī)則:如果第一位是數(shù)字的字符串被用于一個(gè)算數(shù)運(yùn)算中,那么它被轉(zhuǎn)換為這個(gè)數(shù)字的值。如果一個(gè)包含字符和數(shù)字混合的字符串不能被正確的轉(zhuǎn)換為數(shù)字,那么它被轉(zhuǎn)換成0。字符串自動轉(zhuǎn)換數(shù)字 用字符串表示的數(shù)字在任何可能便于計(jì)算的地方都被自動地89mysql教程教學(xué)講解課件90mysql教程教學(xué)講解課件91比較運(yùn)算符
比較運(yùn)算符允許我們對表達(dá)式的左邊和右邊進(jìn)行比較。一個(gè)比較運(yùn)算符的結(jié)果總是1(真),0(假),或是為NULL(不能確定)。比較運(yùn)算符可以用于比較數(shù)字和字符串。數(shù)字作為浮點(diǎn)值比較,而字符串以不區(qū)分大小寫的方式進(jìn)行比較(除非使用特殊的BINARY二進(jìn)制關(guān)鍵字)比較運(yùn)算符92mysql教程教學(xué)講解課件93對于<>運(yùn)算符,如果表達(dá)式兩邊不相等返回真值,相等返回假值。還可以比較字符串對于<>運(yùn)算符,如果表達(dá)式兩邊不相等返回真值,相等返回假值。94BETWEEN運(yùn)算符
用于檢驗(yàn)一個(gè)值(或者一個(gè)求值表達(dá)式)是否存在一個(gè)指定的范圍內(nèi):BETWEEN運(yùn)算符用于檢驗(yàn)一個(gè)值(或者一個(gè)求值表達(dá)式)是95IN運(yùn)算符用于檢驗(yàn)一個(gè)值(或者一個(gè)求值表達(dá)式)是否包含在一個(gè)指定的值集合中。
IN運(yùn)算符用于檢驗(yàn)一個(gè)值(或者一個(gè)求值表達(dá)式)是否包含在一個(gè)96可以使用ISNULL或者ISNOTNULL運(yùn)算符來測定是否為空??梢允褂锰厥獾?lt;=>運(yùn)算符,MySQL稱為”NULL安全的等于”運(yùn)算符。這意味著即使當(dāng)包含在比較運(yùn)算符中的表達(dá)式含有一個(gè)NULL值時(shí),MySQL也會為比較運(yùn)算符返回一個(gè)真值或假值??梢允褂肐SNULL或者ISNOTNULL運(yùn)算符來測定97如果想執(zhí)行通配符數(shù)據(jù)搜索,應(yīng)該使用LIKE運(yùn)算符。它通過在表達(dá)式中允許使用專門的通配字符,可以找出與指定搜索字符串全部或部分匹配的記錄。如果想執(zhí)行通配符數(shù)據(jù)搜索,應(yīng)該使用LIKE運(yùn)算符。它通過在表98默認(rèn)情況下,比較是不區(qū)分大小寫的方式執(zhí)行的。然而,以前我們注意到,可以添加BINARY關(guān)鍵字讓MySQL執(zhí)行區(qū)分大小寫的比較。默認(rèn)情況下,比較是不區(qū)分大小寫的方式執(zhí)行的。然而,以前我們注99MySQL數(shù)據(jù)庫中的通配符“%”(百分號)代表任意長度(長度可以為0)的字符串舉例: a%b表示以a開頭,以b結(jié)尾的任意長度的字符串。如acb,addgb,ab等都滿足該匹配串“_”(下橫線)代表任意單個(gè)字符舉例: a_b表示以a開頭,以b結(jié)尾的長度為3的任意字符串。如acb,afb等都滿足該匹配串MySQL數(shù)據(jù)庫中的通配符“%”(百分號)代表任意長度100REGEXP運(yùn)算符
允許我們執(zhí)行更復(fù)雜的字符串比較運(yùn)算,在這里使用UNIX正則表達(dá)式。REGEXP運(yùn)算符允許我們執(zhí)行更復(fù)雜的字符串比較運(yùn)算,在這101mysql教程教學(xué)講解課件102 邏輯運(yùn)算符 邏輯運(yùn)算符103mysql教程教學(xué)講解課件104位運(yùn)算符如下表所示:
“~” 表示按位取反。
“^” 表示異或。位運(yùn)算符如下表所示:105mysql教程教學(xué)講解課件106mysql教程教學(xué)講解課件107 插入記錄操作語法:
敘述:如果表名后面沒寫字段名,則默認(rèn)是向所有的字段添加值,另外字符串值應(yīng)該用‘’或“”引號括起來舉例1:向people表中添加一條記錄:insertintopeople(name,age)
values(“zhangsan”,20);INSERT
[INTO]<表名>[列名]
VALUES
<值列表> 插入記錄操作語法: INSERT[INTO]<表名>108插入案例創(chuàng)建一張學(xué)生信息表,往表中插入數(shù)據(jù)createtablestudents( scodeintnotnullauto_increment, snamevarchar(20)notnull, saddressvarchar(20)default‘未知’, sgradeint, semailvarchar(20), ssexbit, primarykey(scode));插入案例創(chuàng)建一張學(xué)生信息表,往表中插入數(shù)據(jù)109插入數(shù)據(jù)行1注意事項(xiàng)1:每次插入一行數(shù)據(jù),不可能只插入半行或者幾列數(shù)據(jù),因此,插入的數(shù)據(jù)是否有效將按照整行的完整性的要求來檢驗(yàn);INSERTINTOStudents(SName,SAddress,SGrade,SEmail,SSEX)VALUES(‘小明')×插入數(shù)據(jù)行1注意事項(xiàng)1:每次插入一行數(shù)據(jù),不可能只插入半行插入數(shù)據(jù)行2注意事項(xiàng)2:每個(gè)數(shù)據(jù)值的數(shù)據(jù)類型、精度和小數(shù)位數(shù)必須與相應(yīng)的列匹配;INSERTINTOStudents(SName,SAddress,SGrade,SEmail,SSEX)VALUES(‘張青裁’,‘上海松江’,ZQC,‘ZQC@S’,‘男')×插入數(shù)據(jù)行2注意事項(xiàng)2:每個(gè)數(shù)據(jù)值的數(shù)據(jù)類型、精度和小數(shù)位插入數(shù)據(jù)行3注意事項(xiàng)4:如果在設(shè)計(jì)表的時(shí)候就指定了某列不允許為空,則必須插入數(shù)據(jù);INSERTINTOStudents(SAddress,SGrade,SEmail,SSEX)VALUES('上海松江',6,'ZQC@S',0)
×插入數(shù)據(jù)行3注意事項(xiàng)4:如果在設(shè)計(jì)表的時(shí)候就指定了某列不允許插入數(shù)據(jù)行4注意事項(xiàng)6:具有缺省值的列,可以使用DEFAULT(缺?。╆P(guān)鍵字來代替插入的數(shù)值INSERTINTOStudents(SName,SAddress,SGrade,SEmail,SSEX)VALUES('張青裁',DEFAULT,6,'ZQC@S',0)插入數(shù)據(jù)行4注意事項(xiàng)6:具有缺省值的列,可以使用DEFAUL插入多行數(shù)據(jù)INSERTSTUDENTS(SName,SGrade,SSex)VALUES('測試女生1',75,0),('測試女生2',77,0),('測試女生3',83,0),(‘測試男生1',81,1),('測試女生4',90,0),(‘測試男生2',94,1),('測試女生5',51,0),(‘測試男生3',53,1);INSERTINTO
<表名>(列名)VALUES(<列名值>),(<列名值>),(<列名值>)……插入多行數(shù)據(jù)INSERTSTUDENTS(SName,插入多行數(shù)據(jù)INSERTINTO TongXunLu('姓名','地址','電子郵件')
SELECT SName,SAddress,SEmailFROM StudentsINSERTINTO
<表名>(列名)SELECT
<列名>FROM
<源表名>插入多行數(shù)據(jù)INSERTINTO TongXunLu(學(xué)生、課程、成績插入數(shù)據(jù)學(xué)生信息'95001','洛燕妮','女',20,'信息系''95002','歐陽炎','男',19,'計(jì)算機(jī)系''95003','何東升','男',21,'美術(shù)系''95004','劉晨','男',18,'計(jì)算機(jī)系''95005','沙明華','女',21,'美術(shù)系''95006','歐陽寶寶','男',19,'美術(shù)系’課程信息1,'JAVA'2,'C'3,'.NET'成績信息'95001',1,98'95002',1,50'95004',1,70'95003',4,95'95005',4,40'95006',4,77'95001',2,80'95002',3,58'95006',2,70學(xué)生、課程、成績插入數(shù)據(jù)學(xué)生信息116 更改記錄操作語法:敘述:
where子句是判斷語句,用來設(shè)定條件,限制只更新匹配的行,如果不帶where子句,則更新所有行數(shù)據(jù)。舉例:
將student表中的所有學(xué)生名稱為"Alex"的改為"Tom":updatestudentsetsname="Tom"wheresname="Alex";UPDATE
<表名>
SET<列名=更新值>
[WHERE<更新條件>] 更改記錄操作語法:UPDATE<表名>SET<列名117更新數(shù)據(jù)行UPDATEStudentSETSSEX=0UPDATEStudentSETSdept='家政系'WHERESdept='刺繡系'UPDATEScSETGrade=Grade+5WHEREGrade<=95更新數(shù)據(jù)行UPDATEStudentSETSSEX=刪除記錄操作語法:敘述:此語句刪除表中的行,如果不帶where子句,則刪除整個(gè)表中的記錄,但是表不被刪除。舉例:刪除student表中的所有年齡小于18歲的記錄:
deletefromstudentwheresage<18;DELETEFROM<表名>[WHERE
<刪除條件>]刪除記錄操作語法:DELETEFROM<表名>[WHE119補(bǔ)充說明刪除學(xué)生編號為'95005'的學(xué)生信息包括成績信息deletefromstudent,sc
usingstudent,sc
wherestudent.sno=sc.studentid
andstudent.sno='95005';說明:表和字段的引用方式有兩種:絕對引用和相對引用絕對引用:數(shù)據(jù)庫名.表名(.字段名)相對引用:表名.(字段名)補(bǔ)充說明120刪除數(shù)據(jù)行河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑0010015江西南昌雷銅0010014湖南新田吳蘭0010013山東定陶李山0010012….地址姓名學(xué)號980010016數(shù)學(xué)810010013語文670010012語文740010013數(shù)學(xué)880010012數(shù)學(xué)….分?jǐn)?shù)學(xué)號科目DELETEFROM學(xué)員信息表
WHERE學(xué)號='0010012'刪除數(shù)據(jù)行河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑0010什么是查詢?ApplicationLogic客戶程序查詢請求查詢結(jié)果集SQLSERVERABCDEFG
SELECT*FROMSALES查詢產(chǎn)生一個(gè)虛擬表,看到的是表形式顯示的結(jié)果,但結(jié)果并不真正存儲,每次執(zhí)行查詢只是現(xiàn)從數(shù)據(jù)表中提取數(shù)據(jù),并按照表的形式顯示出來什么是查詢?ApplicationLogic客戶程序查詢請122怎么查的?S202陜西臨潼羅林光010…S202湖北宜昌李菲002S202北京順義張明敏008SELECT*FROMStudentWHERE所在班級=‘S202’怎么查的?S202陜西臨潼羅林光010…S202湖北宜昌李菲123SQL語法SELECT[DISTINCT|DISTINCTROW|ALL]select_expression,...
[FROMtable_references
[WHEREwhere_definition]
[GROUPBYcol_name,...]
[HAVINGwhere_definition]
[ORDERBY{unsigned_integer|col_name| formula}[ASC|DESC],...]
[LIMIT[offset,]rows]
[PROCEDUREprocedure_name]
]SQL語法SELECT[DISTINCT|DISTIN124查詢記錄操作from子句:指定查詢數(shù)據(jù)的表where子句:查詢數(shù)據(jù)的過濾條件groupby子句:對匹配where子句的查詢結(jié)果進(jìn)行分組having子句:對分組后的結(jié)果進(jìn)行條件限制orderby子句:對查詢結(jié)果結(jié)果進(jìn)行排序,后面跟desc降序或asc升序(默認(rèn))。
limit子句:對查詢的顯示結(jié)果限制數(shù)目procedure子句:查詢存儲過程返回的結(jié)果集數(shù)據(jù)查詢記錄操作from子句:指定查詢數(shù)據(jù)的表125查詢舉例SELECT<列名>FROM
<表名>[WHERE<查詢條件表達(dá)式>][ORDERBY<排序的列名>[ASC或DESC]]
列名稱SELECT
SNo,
SName, Sdept
表名FROMStudent過濾條件WHERE
SSEX=0排序條件ORDERBY
SNoSELECT
SNo,SName,SdeptFROM
StudentsWHERE
SSEX=0
ORDERBY
SNo查詢舉例SELECT<列名>
列名稱SELECT126舉例1: 查詢?nèi)w學(xué)生的學(xué)號與姓名。selectsno,snamefromstudent;舉例2: 查詢?nèi)w學(xué)生的詳細(xì)記錄。selectsno,sname,ssex,sage,sdeptfromstudent;或select*fromstudent;舉例3:
查全體學(xué)生的姓名及其出生年份。selectsname,2008-sagefromstudent;
舉例4:
查詢?nèi)w學(xué)生的姓名、出生年份和所有系,要求用小寫字母表示所有系名。 selectsname,'yearofbirth:',2008-sage,islower(sdept)fromstudent;舉例5: 查詢選修了課程的學(xué)生學(xué)號(去掉重復(fù)的記錄)selectdistinctstudentidfromsc;舉例1: 查詢?nèi)w學(xué)生的學(xué)號與姓名。127舉例6: 查詢?nèi)w學(xué)生的學(xué)號與姓名,用中文顯示列名。selectsnoas‘編號’,snameas‘姓名’fromstudent;舉例7: 給表設(shè)置別名。selects.sno,s.snamefromstudentass;舉例8:
查詢年齡在20以下的學(xué)生的姓名。selectsnamefromstudentwheresage<20;
舉例9:
查詢?nèi)w學(xué)生的姓名、年齡,要求按照年齡降序排序。 selectsname,sagefromstudentorderbysagedesc;舉例10: 查詢年齡最大的前3個(gè)學(xué)生的姓名和年齡,或第4、5個(gè)學(xué)生selectsname,sagefromstudentorderbysagedesclimit3;或(limit3,2)舉例6: 查詢?nèi)w學(xué)生的學(xué)號與姓名,用中文顯示列名。128使用集函數(shù)SQL提供的統(tǒng)計(jì)函數(shù)稱為集函數(shù).主要的集函數(shù):記數(shù)函數(shù):count(列名)計(jì)算元素的個(gè)數(shù)求和函數(shù):sum(列名) 對某一列的值求和,但屬性必須是整型計(jì)算平均值:avg(列名)對某一列的值計(jì)算平均值求最大值:max(列名)找出某一列的最大值求最小值:min(列名)找出某一列的最小值使用集函數(shù)SQL提供的統(tǒng)計(jì)函數(shù)稱為集函數(shù).129舉例11: 查詢學(xué)生總數(shù)。
selectcount(*)fromstudent;舉例12: 查詢選修了課程的學(xué)生人數(shù)。
selectcount(distinctstudentid)fromsc;舉例13: 查詢1號課程的學(xué)生平均成績。
selectavg(grade)fromscwherecourseid=1;舉例14: 查詢1號課程的學(xué)生最高分和最低分。selectmax(grade)as‘最高分’,min(grade)as‘最低分’fromscwherecourseid=1;舉例15: 查詢每個(gè)學(xué)生的平均成績。selectstudentid,avg(grade)as‘平均成績’fromscgroupbystudentid;舉例16: 查詢學(xué)生的平均成績在70分以上的。selectstudentid,avg(grade)as‘平均成績’fromscgroupbystudentidhavingavg(grade)>70;舉例11: 查詢學(xué)生總數(shù)。
selectco130在WHERE子句中使用謂詞:
BETWEEN
AND:在兩數(shù)之間 NOTBETWEENAND:不在兩數(shù)之間 IN<值表> :是否在特定的集合里(枚舉) NOTIN<值表>:與上面相反 LIKE :是否匹配于一個(gè)模式 ISNULL(為空的)或ISNOTNULL(不為空的)REGEXP:檢查一個(gè)值是否匹配一個(gè)常規(guī)表達(dá)式。在WHERE子句中使用謂詞:131舉例17: 查詢年齡在20~23歲(包括20歲和23歲)之間的學(xué)生的姓名、系別和年齡。selectsname,sdept,sagefromstudentwheresagebetween20and23;舉例18: 查詢年齡不在20~23歲之間的學(xué)生姓名、系別和年齡。selectsname,sdept,sagefromstudentwheresagenotbetween20and23;舉例19: 查詢'信息系'、'美術(shù)系'和'計(jì)算機(jī)系'學(xué)生的姓名和性別。selectsname,ssexfromstudentwheresdeptin(‘信息系',‘美術(shù)系',‘計(jì)算機(jī)系');舉例17: 查詢年齡在20~23歲(包括20歲和23歲)之132舉例20: 查詢學(xué)號為95001的學(xué)生的詳細(xì)情況。select*fromstudentwheresnolike'95001';等價(jià)于:select*fromstudentwheresno='95001';舉例21: 查詢所有姓劉學(xué)生的姓名、學(xué)號和性別。selectsname,sno,ssexfromstudentwheresnamelike‘劉%';舉例22: 某些學(xué)生選修課程后沒有參加考試,所以有選課記錄,但沒有考試成績。查詢?nèi)鄙俪煽兊膶W(xué)生的學(xué)號和相應(yīng)的課程號。selectstudentid,courseidfromsc
wheregradeisnull;舉例23: 查所有有成績的學(xué)生學(xué)號和課程號。 selectstudentid,courseidfromsc
wheregradeisnotnull;舉例24: 查詢計(jì)算機(jī)系年齡在20歲以下的學(xué)生姓名。selectsnamefromstudentwheresdept=‘計(jì)算機(jī)系'andsage<20;舉例20: 查詢學(xué)號為95001的學(xué)生的詳細(xì)情況。133舉例25: 查詢信息系、美術(shù)系和計(jì)算機(jī)系學(xué)生的姓名和性別selectsname,ssexfromstudentwheresdeptin(‘信息系','美術(shù)','計(jì)算機(jī)系');可改寫為:Selectsname,ssexfromstudentwheresdept='信息系'orsdept='美術(shù)'orsdept='計(jì)算機(jī)系';舉例26: 查詢選修了3號課程的學(xué)生的學(xué)號及其成績,查詢結(jié)果按分?jǐn)?shù)降序排列。selectstudentid,gradefromscwherecourseid=3orberbygradedesc;舉例27: 查詢?nèi)w學(xué)生情況,查詢結(jié)果按所在系的系號升序排列,同一系中的學(xué)生按年齡降序排列。select*fromstudentorderbysdept,sagedesc;舉例25: 查詢信息系、美術(shù)系和計(jì)算機(jī)系學(xué)生的姓名和性別134多表查詢—問題學(xué)員內(nèi)部測試成績查詢的每次顯示的都是學(xué)員的編號信息,因?yàn)樵摫碇兄淮鎯α藢W(xué)員的編號;實(shí)際上最好顯示學(xué)員的姓名,而姓名存儲在學(xué)員信息表;如何同時(shí)從這兩個(gè)表中取得數(shù)據(jù)?多表查詢—問題學(xué)員內(nèi)部測試成績查詢的每次顯示的都是學(xué)員的編號135多表查詢—分類連接查詢同時(shí)涉及多個(gè)表的查詢稱為連接查詢用來連接兩個(gè)表的條件稱為連接條件內(nèi)連接(INNERJOIN)外連接——左外聯(lián)結(jié)(LEFTJOIN)——右外聯(lián)結(jié)(RIGHTJOIN)外連接與普通連接的區(qū)別普通連接操作只輸出滿足連接條件的元組外連接操作以指定表為連接主體,將主體表中不滿足連接條件的元組一并輸出:多表查詢—分類連接查詢136SELECT S.SName,C.CourseID,C.GradeFrom ScASCINNERJOIN StudentsASSON C.StudentID=S.SNoScStudentsIDCourseIDGrade122300100100200297896776300381猜一猜:這樣寫,返回的查詢結(jié)果是一樣的嗎?SELECT S.SName,C.CourseID,C.GradeFrom StudentsASSINNERJOIN ScASCON C.StudentID=S.SNo再猜一猜:以下返回多少行?SELECT S.SName,C.CourseID,C.GradeFrom StudentsASSINNERJOIN ScASCON C.StudentID<>S.SNo多表查詢—內(nèi)連接-1StundentsSName梅超風(fēng)陳玄風(fēng)陸乘風(fēng)曲靈風(fēng)SNo1234查詢結(jié)果SName梅超風(fēng)陳玄風(fēng)陳玄風(fēng)陸乘風(fēng)CourseIDGrade00100100200297896776陸乘風(fēng)00381SELECT S.SName,C.CourseID,C.G137多表查詢—內(nèi)連接-2SELECTStudents.SName,Sc.CourseID,Sc.GradeFROM Students,ScWHERE
Students.SNo=Sc.StudentID多表查詢—內(nèi)連接-2SELECTStudents.SNam138多表查詢—三表連接SELECT
S.SNameAS姓名,CS.CNameAS課程,C.GradeAS成績FROMStudentsASSINNERJOINScASCON(S.SCode=C.StudentID)INNERJOINCourseASCSON(CS.CourseID=C.CourseID)多表查詢—三表連接SELECT139ScStudentsIDCourseIDGrade122300100100200297896776300381多表查詢—左外連接StundentsSName梅超風(fēng)陳玄風(fēng)陸乘風(fēng)曲靈風(fēng)SNo1234查詢結(jié)果SName梅超風(fēng)陳玄風(fēng)陳玄風(fēng)陸乘風(fēng)CourseIDGrade00100100200297896776陸乘風(fēng)00381曲靈風(fēng)NULLNULLSELECT S.SName,C.CourseID,C.GradeFrom StudentsASSLEFTJOIN ScASCON C.StudentID=S.SNo猜一猜:這樣寫,返回的查詢結(jié)果是一樣的嗎?SELECT
S.SName,C.CourseID,C.GradeFrom
ScASCLEFTJOIN
StudentsASSON
C.StudentID=S.SNoScStudentsIDCourseIDGrade12230140多表查詢—右外連接SELECTTitles.Title_id,Titles.Title,Publishers.Pub_nameFROMtitlesRIGHTOUTERJOINPublishersONTitles.Pub_id=Publishers.Pub_id多表查詢—右外連接SELECTTitles.Title_i141子查詢:將一個(gè)查詢塊嵌套在另一個(gè)查詢塊的WHERE子句或HAVING短語的條件中的查詢稱為子查詢。一個(gè)SELECT-FROM-WHERE語句稱為一個(gè)查詢塊例如:selectsnamefromstudentwheresnoin(selectstudentidfromscwherecourseid=2);子查詢:142例如:查詢選修了課程名為“Java”的學(xué)生學(xué)號和姓名selectsno,snamefromstudent
wheresnoin(selectstudentidfromsc
wherecno=(selectcnofromcourse
wherecname=‘Java’)
);例如:143復(fù)制表我們來創(chuàng)建一個(gè)副本:復(fù)制表我們來創(chuàng)建一個(gè)副本:144復(fù)制表可以通過在SELECT查詢中指定字段來限制出現(xiàn)在附表中的字段復(fù)制表可以通過在SELECT查詢中指定字段來限制出現(xiàn)在附表中145復(fù)制表通過使用SELECT語句創(chuàng)建已存在表的空副本,并且返回一個(gè)空結(jié)果集。復(fù)制表通過使用SELECT語句創(chuàng)建已存在表的空副本,并且返146MYSQL實(shí)用技術(shù)杜梓平MYSQL實(shí)用技術(shù)杜梓平MySQL的安裝詳見安裝指南MySQL的安裝詳見安裝指南148MySQL基本操作PHP+MySQL+Linux目前已逐漸成為小型web服務(wù)器的一種經(jīng)典組合。在Windows環(huán)境下構(gòu)筑和調(diào)試MySQL數(shù)據(jù)庫是許多網(wǎng)站研發(fā)者的一種最佳選擇。啟動mysql,有如下方法:方法一:使用winmysqladmin1)、進(jìn)入d::\mysql\bin目錄,運(yùn)行winmysqladmin.exe,在屏幕右下角的任務(wù)欄內(nèi)會有一個(gè)帶紅色的圖符。2)、鼠標(biāo)左鍵點(diǎn)擊該圖符,選擇“showme”,出現(xiàn)“WinMySQLAdmin”操作界面;首次運(yùn)行時(shí)會中間會出現(xiàn)一個(gè)對話框需求輸
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度股東致行動協(xié)議:董事會席位調(diào)整與決策權(quán)分配
- 二零二五年度汽車充電樁場地租賃及維護(hù)服務(wù)合同
- 旅游景區(qū)服務(wù)質(zhì)量提升策略手冊
- 汽車配件銷售及售后支持協(xié)議
- 企業(yè)級軟件系統(tǒng)開發(fā)合作協(xié)議
- 水滸傳經(jīng)典人物宋江征文
- 租賃房屋補(bǔ)充協(xié)議
- 關(guān)于提高工作效率的研討會紀(jì)要
- 文化創(chuàng)意產(chǎn)業(yè)發(fā)展規(guī)劃策略
- 融資租賃資產(chǎn)轉(zhuǎn)讓協(xié)議
- (完整版)第五章養(yǎng)殖場環(huán)境保護(hù)
- 祖國版圖知識主題班會
- 2025年上半年東方電氣集團(tuán)科學(xué)技術(shù)研究院限公司公開招聘易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 高中不同主題閱讀理解高頻詞匯清單-2025屆高三下學(xué)期英語一輪復(fù)習(xí)專項(xiàng)
- 2025年上半年高郵市國資產(chǎn)投資運(yùn)營限公司(國企業(yè))公開招聘工作人員易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年高考地理二輪復(fù)習(xí):地球運(yùn)動(講義)解析版
- 2024年金華金開招商招才服務(wù)集團(tuán)有限公司招聘筆試真題
- 【地理】亞洲的自然環(huán)境第3課時(shí) 2024-2025學(xué)年七年級地理下冊同步課件(人教版2024)
- 2024年江蘇護(hù)理職業(yè)學(xué)院高職單招語文歷年參考題庫含答案解析
- 《國別和區(qū)域研究專題》教學(xué)大綱
- 2025年日歷表含農(nóng)歷(2025年12個(gè)月日歷-每月一張A4可打?。?/a>
評論
0/150
提交評論