版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Mysql從入門(mén)到精通講師:韓順平學(xué)習(xí)內(nèi)容 主講:韓順平(一)項(xiàng)目演示(二)php數(shù)據(jù)庫(kù)編程-mysql 2.1mysql數(shù)據(jù)庫(kù)-基礎(chǔ)部分 2.2mysql數(shù)據(jù)庫(kù)-加強(qiáng)部分1 --mysql表類(lèi)型和存儲(chǔ)引擎 --mysql中事務(wù)處理 2.3mysql數(shù)據(jù)庫(kù)-加強(qiáng)部分2 --mysql表的基本查詢加強(qiáng) --mysql表的復(fù)雜查詢 --維護(hù)數(shù)據(jù)的完整性—約束 --mysql內(nèi)連接、外連接 2.4mysql數(shù)據(jù)庫(kù)-加強(qiáng)部分3 --維護(hù)數(shù)據(jù)的完整性—約束 --mysql表自增 --mysql索引(三)數(shù)據(jù)庫(kù)用戶的管理PHP數(shù)據(jù)庫(kù)編程-mysql 主講:韓順平1.數(shù)據(jù)庫(kù)的基本概念2.mysql數(shù)據(jù)庫(kù)的基本操作3.mysql的curd操作4.mysql常用函數(shù)5.php如何操作mysql數(shù)據(jù)庫(kù)學(xué)習(xí)目標(biāo) 主講:韓順平1.mysql基本操作2.mysql簡(jiǎn)單的crud操作3.php操作mysql解決之道 主講:韓順平數(shù)據(jù)庫(kù)簡(jiǎn)介SQLServer、Oracle、MySQL、DB2、informix對(duì)當(dāng)前主流數(shù)據(jù)庫(kù)做一個(gè)比較介紹廠家、軟件工程師、類(lèi)型、特點(diǎn)MySQL數(shù)據(jù)庫(kù)的安裝和配置(帶學(xué)生安裝)使用命令行窗口連接MYSQL數(shù)據(jù)庫(kù)mysql–h主機(jī)名-P端口–u用戶名–p密碼啟動(dòng)mysql數(shù)據(jù)庫(kù)的常用方式:服務(wù)方式啟動(dòng)(界面)netstopmysql服務(wù)名netstartmysql服務(wù)名如何在任何目錄下都可以連接到mysql數(shù)據(jù)庫(kù)服務(wù)器、數(shù)據(jù)庫(kù)和表的關(guān)系 主講:韓順平所謂安裝數(shù)據(jù)庫(kù)服務(wù)器,只是在機(jī)器上裝了一個(gè)數(shù)據(jù)庫(kù)管理程序,這個(gè)管理程序可以管理多個(gè)數(shù)據(jù)庫(kù),一般開(kāi)發(fā)人員會(huì)針對(duì)每一個(gè)應(yīng)用創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)。為保存應(yīng)用中實(shí)體的數(shù)據(jù),一般會(huì)在數(shù)據(jù)庫(kù)創(chuàng)建多個(gè)表,以保存程序中實(shí)體的數(shù)據(jù)。數(shù)據(jù)庫(kù)服務(wù)器、數(shù)據(jù)庫(kù)和表的關(guān)系如圖所示:MySQLdbmsDBDB數(shù)據(jù)對(duì)象(表)數(shù)據(jù)對(duì)象(表)數(shù)據(jù)對(duì)象(表)Client命令行PHP文件數(shù)據(jù)在數(shù)據(jù)庫(kù)中的存儲(chǔ)方式 主講:韓順平雇員表(employee)行(row)列(column)表的一行稱(chēng)之為一條記錄表中一條記錄對(duì)應(yīng)一個(gè)php數(shù)組或?qū)ο蟮臄?shù)據(jù)SQL語(yǔ)句分類(lèi) 主講:韓順平DDL:數(shù)據(jù)定義語(yǔ)句DML:數(shù)據(jù)操作語(yǔ)句DQL:數(shù)據(jù)查詢語(yǔ)句DCL:數(shù)據(jù)控制語(yǔ)句小面試題:mysql數(shù)據(jù)庫(kù)的sql語(yǔ)句分幾類(lèi)?并舉例說(shuō)明.創(chuàng)建數(shù)據(jù)庫(kù) 主講:韓順平CREATEDATABASE[IFNOTEXISTS]db_name
[create_specification[,create_specification]...]create_specification:
[DEFAULT]CHARACTERSETcharset_name
|[DEFAULT]COLLATEcollation_nameCHARACTERSET:指定數(shù)據(jù)庫(kù)采用的字符集COLLATE:指定數(shù)據(jù)庫(kù)字符集的比較方式(默認(rèn)utf8_general_ci,一般不指定)練習(xí):創(chuàng)建一個(gè)名稱(chēng)為db1的數(shù)據(jù)庫(kù)。創(chuàng)建一個(gè)使用utf8字符集的db2數(shù)據(jù)庫(kù)。創(chuàng)建一個(gè)使用utf8字符集,并帶校對(duì)規(guī)則的mydb3數(shù)據(jù)庫(kù)創(chuàng)建數(shù)據(jù)庫(kù)-細(xì)節(jié)說(shuō)明 主講:韓順平對(duì)字符集和排序規(guī)則的說(shuō)明:CHARACTERSETcharset_nameCOLLATEcollation_nameshowcharacterset;[字符集]showcollation;[排序和校對(duì)規(guī)則]案例:分開(kāi)測(cè)試ci是caseinsensitive,即"大小寫(xiě)不敏感",a和A會(huì)在字符判斷中會(huì)被當(dāng)做一樣的;utf8_bin是二進(jìn)制,a和A會(huì)別區(qū)別對(duì)待.例如你運(yùn)行:SELECT*FROMtableWHEREtxt='a'那么在utf8_bin中你就找不到txt='A'的那一行,而utf8_general_ci則可以排序規(guī)則了解Mysql字符集和校驗(yàn)集 主講:韓順平collate:校對(duì)規(guī)則指:在對(duì)某個(gè)字段排序時(shí),按照怎樣的規(guī)則來(lái)排序這里我們先簡(jiǎn)單舉一個(gè)案例,大家了解即可(不用深入研究).?請(qǐng)查看Mysql關(guān)于校對(duì)規(guī)則手冊(cè)數(shù)據(jù)庫(kù)相關(guān)操作-查看、刪除數(shù)據(jù)庫(kù)主講:韓順平顯示數(shù)據(jù)庫(kù)語(yǔ)句:SHOWDATABASES顯示數(shù)據(jù)庫(kù)創(chuàng)建語(yǔ)句:SHOWCREATEDATABASEdb_name
數(shù)據(jù)庫(kù)刪除語(yǔ)句:DROPDATABASE[IFEXISTS]db_name
練習(xí):查看當(dāng)前數(shù)據(jù)庫(kù)服務(wù)器中的所有數(shù)據(jù)庫(kù)查看前面創(chuàng)建的db2數(shù)據(jù)庫(kù)的定義信息刪除前面創(chuàng)建的db1數(shù)據(jù)庫(kù)查看當(dāng)前mysql數(shù)據(jù)庫(kù)連接進(jìn)程情況修改、備份恢復(fù)數(shù)據(jù)庫(kù) (重點(diǎn)) 主講:韓順平ALTERDATABASE[IFEXISTS]db_name
[alter_specification[,alter_specification]...]alter_specification:
[DEFAULT]CHARACTERSETcharset_name
|[DEFAULT]COLLATEcollation_name備份數(shù)據(jù)庫(kù)表中的數(shù)據(jù) mysqldump-u用戶名-p數(shù)據(jù)庫(kù)名>文件名.sql恢復(fù)數(shù)據(jù)庫(kù) Source文件名.sql練習(xí)1查看服務(wù)器中的數(shù)據(jù)庫(kù),并把其中某一個(gè)庫(kù)的字符集修改為utf8;2備份test庫(kù)中的數(shù)據(jù),并恢復(fù)12修改、備份恢復(fù)數(shù)據(jù)庫(kù) 主講:韓順平使用細(xì)節(jié)說(shuō)明:mysqldump–u用戶名–p密碼數(shù)據(jù)庫(kù)表1表2表3..>d:\\文件名.sqlmysqldump–u用戶名–p密碼-B數(shù)據(jù)庫(kù)1數(shù)據(jù)庫(kù)2..>d:\\文件名.sql單庫(kù),單庫(kù)多表,多庫(kù)安裝Ecshop數(shù)據(jù)庫(kù) 主講:韓順平課堂練習(xí)題:這是一個(gè)ecshop的數(shù)據(jù)庫(kù),包括ecshop所有的表,請(qǐng)導(dǎo)入到mysql數(shù)據(jù)庫(kù)中將ecshop整個(gè)數(shù)據(jù)庫(kù)備份到你的c:盤(pán)ecshop.bak將ecshop的表ecs_goods備份到c:盤(pán)ecshop.goods.bak將mysql的ecshop數(shù)據(jù)庫(kù)刪除,并通過(guò)備份的ecshop.bak恢復(fù)刪除剛剛恢復(fù)的ecshop庫(kù)中的ecs_goods表,然后使用備份的ecshop.goods.bak來(lái)恢復(fù).使用php把ecs_goods表的商品名數(shù)據(jù)取出顯示到網(wǎng)頁(yè)(晚上一個(gè)練習(xí)題)表的創(chuàng)建(基本語(yǔ)句) 主講:韓順平CREATETABLEtable_name( field1datatype, field2datatype, field3datatype)characterset字符集collate校對(duì)規(guī)則engine存儲(chǔ)引擎方式field:指定列名datatype:指定列類(lèi)型(字段類(lèi)型)【說(shuō)明下】注意:創(chuàng)建表時(shí),要根據(jù)需保存的數(shù)據(jù)創(chuàng)建相應(yīng)的列,并根據(jù)數(shù)據(jù)的類(lèi)型定義相應(yīng)的列類(lèi)型。例:user表(快速入門(mén)案例) id整形 name字符串 password字符串 birthday日期創(chuàng)建表(基本語(yǔ)句) 主講:韓順平細(xì)節(jié)說(shuō)明在創(chuàng)建表的時(shí)候可以指定engine通常使用InnoDB或者M(jìn)yISAM給說(shuō)明一下創(chuàng)建的表對(duì)應(yīng)的文件在什么地方(不同的表存儲(chǔ)引擎對(duì)應(yīng)的文件不同InnoDB對(duì)應(yīng)一個(gè)文件,MyISAM對(duì)應(yīng)三個(gè)文件*.frm表信息*.MYD存儲(chǔ)數(shù)據(jù)*.MYI存儲(chǔ)索引信息)Mysql數(shù)據(jù)類(lèi)型(重點(diǎn)) 主講:韓順平VARCHAR、BLOB和TEXT類(lèi)是變長(zhǎng)類(lèi)型。每個(gè)類(lèi)型的存儲(chǔ)需求取決于列值的實(shí)際長(zhǎng)度。分類(lèi)數(shù)據(jù)類(lèi)型說(shuō)明數(shù)值類(lèi)型BIT(M)TINYINT[UNSIGNED]BOOL,BOOLEANSMALLINT[UNSIGNED]INT[UNSIGNED]BIGINT[UNSIGNED]FLOAT[(M,D)][UNSIGNED]DOUBLE[(M,D)][UNSIGNED]DECIMAL(M,D)[UNSIGNED]位類(lèi)型。M指定位數(shù),默認(rèn)值1,范圍1-64帶符號(hào)的范圍是-128到127。無(wú)符號(hào)0到255。默認(rèn)是有符號(hào)使用0或1表示真或假帶符號(hào)是負(fù)的2的15次方到2的15次方-1,無(wú)符號(hào)2的16方-1帶符號(hào)是負(fù)的2的31次方到2的31次方-1,無(wú)符號(hào)2的32方-1帶符號(hào)是負(fù)的2的63次方到2的63次方-1,無(wú)符號(hào)2的64方-1M指定顯示長(zhǎng)度,d指定小數(shù)位數(shù),占用空間4個(gè)字節(jié)表示比f(wàn)loat精度更大的小數(shù),占用空間8個(gè)字節(jié)定點(diǎn)數(shù)M指定長(zhǎng)度,D表示小數(shù)點(diǎn)的位數(shù),文本、二進(jìn)制類(lèi)型CHAR(size)char(20)VARCHAR(size)varchar(20)BLOBLONGBLOBTEXTLONGTEXT固定長(zhǎng)度字符串最大255可變長(zhǎng)度字符串最大65532【在mysql5.0中最大21844】二進(jìn)制數(shù)據(jù)大文本,不支持全文索引,不支持默認(rèn)值,建議使用varchar時(shí)間日期DATE/DATETIME/TimeStamp日期類(lèi)型(YYYY-MM-DD)(YYYY-MM-DDHH:MM:SS),TimeStamp表示時(shí)間戳,它可用于自動(dòng)記錄insert、update操作的時(shí)間Mysql常用數(shù)據(jù)類(lèi)型 主講:韓順平分類(lèi)數(shù)據(jù)類(lèi)型說(shuō)明String類(lèi)型ENUM類(lèi)型(枚舉)SET類(lèi)型(集合)ENUM是一個(gè)字符串對(duì)象,其值來(lái)自表創(chuàng)建時(shí)在列規(guī)定中顯式枚舉的一列值。在某些情況下,ENUM值也可以為空字符串('')或NULL:SET是一個(gè)字符串對(duì)象,可以有零或多個(gè)值,其值來(lái)自表創(chuàng)建時(shí)規(guī)定的允許的一列值。指定包括多個(gè)SET成員的SET列值時(shí)各成員之間用逗號(hào)(‘,’)間隔開(kāi)。這樣SET成員值本身不能包含逗號(hào)。SET最多可以有64個(gè)不同的成員可以使用FIND_IN_SET()函數(shù)或LIKE操作符搜索SET值?在表設(shè)計(jì)時(shí),為提高效率和安全,最好notnulldefaul值的形式來(lái)控制Mysql常用數(shù)據(jù)類(lèi)型 主講:韓順平數(shù)值型(整數(shù))的基本使用Mysql常用數(shù)據(jù)類(lèi)型 主講:韓順平數(shù)值型(整數(shù))的使用細(xì)節(jié)如何定義一個(gè)無(wú)符號(hào)的整數(shù)?createtablet10(idintnotnulldefault0);//默認(rèn)是有符號(hào)的createtablet11(idintunsignednotnulldefault0);有符號(hào)的2.解釋一下整數(shù)范圍的原因(深入)Mysql常用數(shù)據(jù)類(lèi)型 主講:韓順平數(shù)值型(整數(shù))的使用細(xì)節(jié)2.關(guān)于zerofill的說(shuō)明在數(shù)據(jù)庫(kù)定義是int(6)這個(gè)6到底表示什么意思?對(duì)于數(shù)值型(也可以是tinyint等),我們這樣定義時(shí)int(6)unsignedzerofill/*①zerofill只能和unsinged配合使用*//*②6表示當(dāng)zerofill時(shí),填充的寬度,就是如果數(shù)據(jù)不足6位,則這個(gè)字段將被0填充,如果不設(shè)置zerofill,則這個(gè)6沒(méi)有什么含義*//*③int(6)zerofill/*只要指定zerofill則默認(rèn)就是unsigned*//*④6并不是表示,存放的數(shù)不能超過(guò)6位,這點(diǎn)請(qǐng)注意哈*/測(cè)試案例:createtabletest(num1int,num2int(4)zerofill,num3int(6)unsignedzerofill);insertintotestvalues(345,345,345);//看結(jié)果就清楚insertintotestvalues(34578,34578,34578);//看結(jié)果就清楚insertintotestvalues(-345,-345,-345);//num2字段就存放不了,因?yàn)槭莡nsigned的.Mysql常用數(shù)據(jù)類(lèi)型 主講:韓順平數(shù)值型(bit)的使用基本使用mysql>createtabletest2(idint,abit(1));mysql>insertintotest2(1,3);mysql>insertintotest2values(2,65);細(xì)節(jié)說(shuō)明bit字段在顯示時(shí),按ascii碼對(duì)應(yīng)的字符顯示.查詢的時(shí)候仍然可以用數(shù)值位類(lèi)型。M指定位數(shù),默認(rèn)值1,范圍1-64Mysql常用數(shù)據(jù)類(lèi)型 主講:韓順平數(shù)值型(小數(shù))的基本使用FLOAT[(M,D)][UNSIGNED]M指定顯示長(zhǎng)度,d指定小數(shù)位數(shù),占用空間4個(gè)字節(jié)小數(shù):float(4,2)表示的范圍是-99.99~99.99float(4,2)unsigned表示的范圍是0-99.99DECIMAL(M,D)[UNSIGNED]定點(diǎn)數(shù)M指定長(zhǎng)度,D表示小數(shù)點(diǎn)的位數(shù)decimal(5,2)表示的范圍是-999.99~999.99decaimal(5,2)unsigned表示的范圍是0-999.99思考加入99.999會(huì)是什么結(jié)果?Mysql常用數(shù)據(jù)類(lèi)型 主講:韓順平數(shù)值型(小數(shù))的細(xì)節(jié)說(shuō)明FLOAT[(M,D)][UNSIGNED]單精度浮點(diǎn)數(shù)精確到大約7位小數(shù)位。DECIMAL(M,D)[UNSIGNED]可以支持更加精確的小數(shù)位,壓縮的“嚴(yán)格”定點(diǎn)數(shù)。M是小數(shù)位數(shù)(精度)的總數(shù),D是小數(shù)點(diǎn)(標(biāo)度)后面的位數(shù)。小數(shù)點(diǎn)和(負(fù)數(shù))的‘-’符號(hào)不包括在M中。如果D是0,則值沒(méi)有小數(shù)點(diǎn)或分?jǐn)?shù)部分。DECIMAL整數(shù)最大位數(shù)(M)為65。支持的十進(jìn)制數(shù)的最大位數(shù)(D)是30。如果D被省略,默認(rèn)是0。如果M被省略,默認(rèn)是10。建議:如果希望小數(shù)的精度高,推薦使用decimalMysql常用數(shù)據(jù)類(lèi)型 主講:韓順平字符串的基本使用CHAR(size)固定長(zhǎng)度字符串最大255字符VARCHAR(size)可變長(zhǎng)度字符串最大65532字節(jié)【utf-8編碼最大21844字符1-3個(gè)字節(jié)用于記錄大小】Mysql常用數(shù)據(jù)類(lèi)型 主講:韓順平字符串使用細(xì)節(jié)1char(4)//這個(gè)4表示字符數(shù)(絕對(duì)最大255),不是字節(jié)數(shù),不管是中文還是字母都是放四個(gè),按字符計(jì)算.varchar(4)//這個(gè)4表示字符數(shù),不管是字母還是中文都以定義好的表的編碼來(lái)存放數(shù)據(jù).不管是中文還是英文字母,都是最多存放2個(gè),是按照字符來(lái)存放的.Mysql常用數(shù)據(jù)類(lèi)型 主講:韓順平字符串使用細(xì)節(jié)2char(4)是定長(zhǎng),就是說(shuō),即使你插入'aa',也會(huì)占用分配的4個(gè)字符.varchar(4000)是變長(zhǎng),就是說(shuō),如果你插入了'aa',實(shí)際占用空間大小是L+1[注:同CHAR對(duì)比,VARCHAR值保存時(shí)只保存需要的字符數(shù),另加一個(gè)字節(jié)來(lái)記錄長(zhǎng)度(如果列聲明的長(zhǎng)度超過(guò)255,則使用兩個(gè)字節(jié))。]Mysql常用數(shù)據(jù)類(lèi)型 主講:韓順平字符串使用細(xì)節(jié)3什么時(shí)候使用char,什么時(shí)候使用varchar答:如果數(shù)據(jù)是定長(zhǎng),推薦使用char,比如md5的密碼,郵編,手機(jī)號(hào),身份證號(hào)碼等.如果一個(gè)字段的長(zhǎng)度是不確定,我們使用varchar,比如留言,文章查詢速度,char>varcharMysql常用數(shù)據(jù)類(lèi)型 主講:韓順平字符串使用細(xì)節(jié)4char在存放空格時(shí)會(huì)丟失,一定要小心,varchar不會(huì)丟失比如在char中存放了'aaa'取出來(lái)就是'aaa’'了而varchar中存放了‘a(chǎn)aa’,取出來(lái)還是‘a(chǎn)aa’,后面的那個(gè)空格沒(méi)有丟失為什么,因?yàn)閏har的存放規(guī)則是當(dāng)數(shù)據(jù)放入不夠時(shí),后面全面補(bǔ)空格,這樣就導(dǎo)致mysql數(shù)據(jù)庫(kù)會(huì)誤殺你希望的空格,小心通過(guò)php獲取數(shù)據(jù)在頁(yè)面來(lái)證明Mysql常用數(shù)據(jù)類(lèi)型 主講:韓順平字符串使用細(xì)節(jié)5在存放文本時(shí),也可以使用Text數(shù)據(jù)類(lèi)型.可以將TEXT列視為VARCHAR列,注意Text不能有默認(rèn)值.Mysql常用數(shù)據(jù)類(lèi)型 主講:韓順平字符串使用細(xì)節(jié)6表的所有字段加起來(lái)不能超過(guò)65535個(gè)字節(jié)下面的能創(chuàng)建成功嗎?Mysql常用數(shù)據(jù)類(lèi)型 主講:韓順平日期類(lèi)型的基本使用CREATETABLEbirthday(idINT,t1DATE,t2DATETIME,t3TimeStamp);timestamp時(shí)間戳mysql>INSERTINTObirthday(t1,t2)VALUES('2016-01-01','2016-01-0112:12:12');日期類(lèi)型的細(xì)節(jié)說(shuō)明TimeStamp在Insert和update時(shí),自動(dòng)聯(lián)動(dòng)Mysql常用數(shù)據(jù)類(lèi)型 主講:韓順平Enum,SET類(lèi)型基本使用看一個(gè)需求:有一個(gè)調(diào)查表votes,需求調(diào)查人的喜好,比如(蘋(píng)果,西瓜,菠蘿)中去選擇(可以多選)。(男,女,保密)【單選】名字[非空]基本語(yǔ)法enum('值1','值2',...)set('值1','值2',....)Mysql常用數(shù)據(jù)類(lèi)型 主講:韓順平enum枚舉類(lèi)型基本使用枚舉類(lèi)型,其實(shí)就是“單選”類(lèi)型,對(duì)應(yīng)網(wǎng)頁(yè)表單中的“單選項(xiàng)”的數(shù)據(jù)值;形式:enum(‘選項(xiàng)值1’,‘選項(xiàng)值2’,‘選項(xiàng)值3’,......);該設(shè)定只是提供了若干個(gè)選項(xiàng)的值,最終一個(gè)單元格中,實(shí)際只存儲(chǔ)了其中的一個(gè)值;而且,出于效率的考慮,這些值實(shí)際存儲(chǔ)的是“數(shù)字”,因?yàn)檫@些選項(xiàng),每個(gè)選項(xiàng)值,依次對(duì)應(yīng)如下數(shù)字:1,2,3,4,5,.......最多65535個(gè);Mysql常用數(shù)據(jù)類(lèi)型 主講:韓順平SET類(lèi)型基本使用就是“多選”類(lèi)型,對(duì)應(yīng)網(wǎng)頁(yè)表單中的“多選項(xiàng)”的數(shù)據(jù)值形式:set(‘選項(xiàng)值1’,‘選項(xiàng)值2’,‘選項(xiàng)值3’,......);該設(shè)定只是提供了若干個(gè)選項(xiàng)的值,最終一個(gè)單元格中,實(shí)際可存儲(chǔ)了任何其中的多個(gè)值(就是多選);而且,出于效率的考慮,這些值實(shí)際存儲(chǔ)的是“數(shù)字”,因?yàn)檫@些選項(xiàng),每個(gè)選項(xiàng)值,依次對(duì)應(yīng)如下數(shù)字:1,2,4,8,16,32,......最多64個(gè);[偶數(shù)]1=Mysql常用數(shù)據(jù)類(lèi)型 主講:韓順平Enum,SET類(lèi)型基本使用添加數(shù)據(jù)INSERTINTOusersvalues('zs','男','足球');INSERTINTOusersvalues('zs',1,'足球');INSERTINTOusersvalues('zs',3,'足球');//失敗INSERTINTOusersvalues('zs','中','足球');//失敗INSERTINTOusersvalues('zs',2,'足球,籃球');//okINSERTINTOusersvalues('zs',2,'足球,大球');//失敗,沒(méi)有大球INSERTINTOusersvalues('zs',2,2);//okINSERTINTOusersvalues('zs',2,4);//okINSERTINTOusersvalues('zs',2,5);//ok5=1+4Mysql常用數(shù)據(jù)類(lèi)型 主講:韓順平Enum,SET類(lèi)型的查詢以后只要是對(duì)set的查詢,使用find_in_set()Mysql常用數(shù)據(jù)類(lèi)型 主講:韓順平圖片,電影,音頻數(shù)據(jù)類(lèi)型怎么存放?
創(chuàng)建表練習(xí) 主講:韓順平創(chuàng)建一個(gè)員工表(課堂練習(xí)/評(píng)講),選用適當(dāng)?shù)臄?shù)據(jù)類(lèi)型,添加2條數(shù)據(jù),然后通過(guò)php來(lái)網(wǎng)頁(yè)中顯示。字段屬性Id整形name字符型sex枚舉類(lèi)型brithday日期型(date)entry_date日期型(date)job字符型Salary小數(shù)型resume文本型創(chuàng)建表練習(xí) 主講:韓順平顯示表的細(xì)節(jié)問(wèn)題:如何在顯示表有較長(zhǎng)中文字符時(shí),可以對(duì)其顯示的技巧先將控制臺(tái)的寬度設(shè)置大一點(diǎn)比如800寬登錄的時(shí)候這樣登錄mysql--default-character-set=latin1-uroot-pxxxx然后進(jìn)入后再設(shè)置成setnamesgbk即可對(duì)其顯示中文了.修改表(重點(diǎn))-基本介紹 主講:韓順平使用ALTERTABLE語(yǔ)句追加,修改,或刪除列的語(yǔ)法.ALTERTABLEtablenameADD (columndatatype[DEFAULTexpr] [,columndatatype]...);ALTERTABLEtablenameMODIFY (columndatatype[DEFAULTexpr] [,columndatatype]...);ALTERTABLEtablenameDROP (column);修改表的名稱(chēng):Renametable表名to新表名修改表的字符集:altertablestudentcharactersetutf8;修改表-課堂練習(xí) 主講:韓順平練習(xí)在上面員工表的上增加一個(gè)image列(要求在resume后面)。修改job列,使其長(zhǎng)度為60。刪除sex列。表名改為employee。修改表的字符集為utf8列名name修改為user_namealtertableuserchangecolumnnameusernamevarchar(20);?修改表的注意事項(xiàng)總結(jié)給5min學(xué)生練習(xí)幫助命令的使用 主講:韓順平在mysql使用中,我們可能忘記一個(gè)mysql命令的使用,我們可以通過(guò)幫助命令?來(lái)查看相關(guān)命令的使用方式1.?create方式2?createtable提示:控制臺(tái)給出的都是英文說(shuō)明,如果英文不好,還是用mysql中文手冊(cè)吧!數(shù)據(jù)庫(kù)CRUD語(yǔ)句主講:韓順平Insert語(yǔ)句(增加數(shù)據(jù))Update語(yǔ)句(更新數(shù)據(jù))Delete語(yǔ)句(刪除數(shù)據(jù))Select語(yǔ)句(查找數(shù)據(jù))Insert語(yǔ)句 -基本介紹 主講:韓順平INSERTINTO tablename[(column[,column...])]VALUES (value[,value...]);使用INSERT語(yǔ)句向表中插入數(shù)據(jù)。快速入門(mén)案例:創(chuàng)建一張商品表(有idint,goods_namevarchar(50),pricefloat);//飲料添加2條記錄Insert-課堂練習(xí) 主講:韓順平練習(xí):使用insert語(yǔ)句向表中插入三個(gè)員工的信息。字段屬性Id整形name字符型sex字符型brithday日期型Entry_date日期型job字符型Salary小數(shù)型resume文本型Insert語(yǔ)句 -使用細(xì)節(jié) 主講:韓順平?細(xì)節(jié)說(shuō)明(為講解的比較清楚,創(chuàng)建幾個(gè)小表來(lái)說(shuō)明問(wèn)題)插入的數(shù)據(jù)應(yīng)與字段的數(shù)據(jù)類(lèi)型相同。比如把'abc'添加到int類(lèi)型會(huì)錯(cuò)誤數(shù)據(jù)的大小應(yīng)在字段的規(guī)定范圍內(nèi),例如:不能將一個(gè)長(zhǎng)度為80的字符串加入到長(zhǎng)度為40的列中。在values中列出的數(shù)據(jù)位置必須與被加入的列的排列位置相對(duì)應(yīng)。字符和日期型數(shù)據(jù)應(yīng)包含在單引號(hào)中。插入空值[前提是該字段允許為空],不指定或insertintotablevalue(null)insertinto(),(),()形式添加多條記錄如果是給表中的所有字段添加數(shù)據(jù),可以不寫(xiě)前面的字段名稱(chēng)默認(rèn)值的使用,當(dāng)不給某個(gè)字段值時(shí),如果有默認(rèn)值就會(huì)添加,否則報(bào)錯(cuò)建議我們以后添加數(shù)據(jù),都給我把''引起了.Insert語(yǔ)句課堂練習(xí) 主講:韓順平練習(xí):寫(xiě)一個(gè)PHP,通過(guò)PHP來(lái)添加/顯示/刪除/修改學(xué)生表要求:加入js前端驗(yàn)證和php后臺(tái)驗(yàn)證[可選]驗(yàn)證要求編號(hào)、語(yǔ)文、數(shù)學(xué)、英語(yǔ)是數(shù)字并且不為空,學(xué)生名字不能為空。刪除修改刪除修改刪除修改刪除修改刪除修改刪除修改1.分析程序框架圖2.設(shè)計(jì)好表和數(shù)據(jù)3.關(guān)鍵技術(shù)提示(計(jì)算器)update語(yǔ)句 主講:韓順平UPDATE tbl_name
SETcol_name1=expr1[,col_name2=expr2...]
[WHEREwhere_definition]
使用update語(yǔ)句修改表中數(shù)據(jù)?基本使用練習(xí):在上面創(chuàng)建的employee表中修改表中的紀(jì)錄。要求將所有員工薪水修改為5000元。將姓名為'小妖怪’的員工薪水修改為3000元。將'老妖怪'的薪水在原有基礎(chǔ)上增加1000元。 update語(yǔ)句 主講:韓順平?使用細(xì)節(jié):UPDATE語(yǔ)法可以用新值更新原有表行中的各列。SET子句指示要修改哪些列和要給予哪些值。WHERE子句指定應(yīng)更新哪些行。如沒(méi)有WHERE子句,則更新所有的行。如果需要修改多個(gè)字段,可以通過(guò)set字段1=值1,字段2=值2....delete語(yǔ)句 -基本介紹 主講:韓順平deletefromtbl_name
[WHEREwhere_definition]
使用delete語(yǔ)句刪除表中數(shù)據(jù)??焖偃腴T(mén)案例(可以創(chuàng)建一些表來(lái)測(cè)試/可以復(fù)制一張表測(cè)試)刪除表中名稱(chēng)為’zs’的記錄。刪除表中所有記錄。使用truncate刪除表中記錄。delete語(yǔ)句 -使用細(xì)節(jié) 主講:韓順平使用delete語(yǔ)句刪除表中數(shù)據(jù)。?使用細(xì)節(jié):如果不使用where子句,將刪除表中所有數(shù)據(jù)。Delete語(yǔ)句不能刪除某一列的值(可使用update設(shè)為null或者'')使用delete語(yǔ)句僅刪除記錄,不刪除表本身。如要?jiǎng)h除表,使用droptable語(yǔ)句。同insert和update一樣,從一個(gè)表中刪除記錄將引起其它表的參照完整性問(wèn)題,在修改數(shù)據(jù)庫(kù)數(shù)據(jù)時(shí),頭腦中應(yīng)該始終不要忘記這個(gè)潛在的問(wèn)題。[外鍵基本介紹]delete語(yǔ)句 -使用細(xì)節(jié) 主講:韓順平使用delete語(yǔ)句刪除表中數(shù)據(jù)。?使用細(xì)節(jié):刪除表中數(shù)據(jù)也可使用TRUNCATETABLE語(yǔ)句,它和delete有所不同。如果要清空表中的所有記錄,可以使用下面的兩種方法:DELETEFROMtable1
TRUNCATETABLEtable1效果一樣,TRUNCATE速度快DELETE可以帶WHERE條件,刪除更加靈活,truncate不能帶whereDELETE可以返回被刪除的記錄數(shù),而TRUNCATETABLE返回的是0推薦使用DELETE查詢表select語(yǔ)句(1) 主講:韓順平SELECT[DISTINCT]*|{column1,column2.column3..} FROM tablename;?注意事項(xiàng)(需要?jiǎng)?chuàng)建新的學(xué)生表)Select指定查詢哪些列的數(shù)據(jù)。column指定列名。*號(hào)代表查詢所有列。From指定查詢哪張表。DISTINCT可選,指顯示結(jié)果時(shí),是否剔除重復(fù)數(shù)據(jù)基本select[重點(diǎn),難點(diǎn)]語(yǔ)句select語(yǔ)句(1) 主講:韓順平課堂練習(xí):查詢表中所有學(xué)生的信息。查詢表中所有學(xué)生的姓名和對(duì)應(yīng)的英語(yǔ)成績(jī)。過(guò)濾表中重復(fù)數(shù)據(jù)[distinct]。學(xué)員練習(xí),再評(píng)講select語(yǔ)句(2)-對(duì)列進(jìn)行運(yùn)算和別名操作 主講:韓順平SELECT*|{column1|expression,column2|expression,..} FROM tablename;在select語(yǔ)句中可使用表達(dá)式對(duì)查詢的列進(jìn)行運(yùn)算在select語(yǔ)句中可使用as語(yǔ)句SELECTcolumnnameas別名from表名;三種形式select語(yǔ)句(2) 主講:韓順平練習(xí)在所有學(xué)生分?jǐn)?shù)上加10分特長(zhǎng)分(即查詢所有學(xué)生總分再加10分)。統(tǒng)計(jì)每個(gè)學(xué)生的總分。使用別名表示學(xué)生分?jǐn)?shù)。課堂練習(xí)在姓趙的學(xué)生分?jǐn)?shù)上增加60%(即查詢總分再加60%)。統(tǒng)計(jì)姓李的學(xué)生的總分。使用別名表示學(xué)生的數(shù)學(xué)分?jǐn)?shù)。select語(yǔ)句(3)-使用where子句,進(jìn)行過(guò)濾查詢主講:韓順平使用where子句,進(jìn)行過(guò)濾查詢。練習(xí):查詢姓名為wu的學(xué)生成績(jī)查詢英語(yǔ)成績(jī)大于90分的同學(xué)查詢總分大于200分的所有同學(xué)使用where子句,課堂練習(xí):查詢姓名為趙并且(and)id大于90的學(xué)生成績(jī)查詢英語(yǔ)成績(jī)大于語(yǔ)文成績(jī)的同學(xué)查詢總分大于200分并且數(shù)學(xué)成績(jī)小于語(yǔ)文成績(jī),的姓宋的學(xué)生.select語(yǔ)句(4) 主講:韓順平在where子句中經(jīng)常使用的運(yùn)算符比較運(yùn)算符><<=>==<>!=大于、小于、大于(小于)等于、不等于BETWEEN...AND...顯示在某一區(qū)間的值IN(set)顯示在in列表中的值,例:in(100,200)LIKE‘張pattern’NOTLIKE‘’模糊查詢模糊查詢ISNULL判斷是否為空邏輯運(yùn)算符and多個(gè)條件同時(shí)成立or多個(gè)條件任一成立not不成立,例:wherenot(salary>100);select語(yǔ)句(4) 主講:韓順平查詢英語(yǔ)分?jǐn)?shù)在80-90之間的同學(xué)。查詢數(shù)學(xué)分?jǐn)?shù)為89,90,91的同學(xué)。查詢所有姓李的學(xué)生成績(jī)。查詢數(shù)學(xué)分>80,語(yǔ)文分>80的同學(xué)。課堂練習(xí)查詢語(yǔ)文分?jǐn)?shù)在70-80之間的同學(xué)。查詢總分為189,190,191的同學(xué)。查詢所有姓李或者姓宋的學(xué)生成績(jī)。查詢數(shù)學(xué)比語(yǔ)文多30分的同學(xué)。select語(yǔ)句(5) 主講:韓順平SELECTcolumn1,column2,column3.. FROM table orderbycolumnasc|desc,...使用orderby子句排序查詢結(jié)果。Orderby指定排序的列,排序的列即可是表中的列名,也可以是select語(yǔ)句后指定的列名。Asc升序[默認(rèn)]、Desc降序ORDERBY子句應(yīng)位于SELECT語(yǔ)句的結(jié)尾。課堂練習(xí):對(duì)數(shù)學(xué)成績(jī)排序后輸出【升序】。對(duì)總分排序后輸出,然后再按從高到低的順序輸出對(duì)不姓李的學(xué)生成績(jī)排序輸出合計(jì)函數(shù)-count 主講:韓順平Selectcount(*)|count(列名)fromtablename [WHEREwhere_definition]
課堂練習(xí):統(tǒng)計(jì)一個(gè)班級(jí)共有多少學(xué)生?統(tǒng)計(jì)數(shù)學(xué)成績(jī)大于90的學(xué)生有多少個(gè)?統(tǒng)計(jì)總分大于250的人數(shù)有多少?count(*)和count(列名)的區(qū)別[單獨(dú)建表]Count(列名)返回某一列,行的總數(shù)合計(jì)函數(shù)-sum 主講:韓順平Selectsum(列名){,sum(列名)…}fromtablename [WHEREwhere_definition]
課堂練習(xí):統(tǒng)計(jì)一個(gè)班級(jí)數(shù)學(xué)總成績(jī)?統(tǒng)計(jì)一個(gè)班級(jí)語(yǔ)文、英語(yǔ)、數(shù)學(xué)各科的總成績(jī)統(tǒng)計(jì)一個(gè)班級(jí)語(yǔ)文、英語(yǔ)、數(shù)學(xué)的成績(jī)總和統(tǒng)計(jì)一個(gè)班級(jí)語(yǔ)文成績(jī)平均分注意1.:sum僅對(duì)數(shù)值起作用,否則會(huì)報(bào)錯(cuò)。注意2.:sum函數(shù)中,如果有null值,對(duì)結(jié)果有影響,舉例說(shuō)明(創(chuàng)建測(cè)試表)注意:對(duì)多列求和,“,”號(hào)不能少。Sum函數(shù)返回滿足where條件的行的和合計(jì)函數(shù)-avg 主講:韓順平Selectavg(列名){,avg(列名)…}fromtablename [WHEREwhere_definition]
練習(xí):求一個(gè)班級(jí)數(shù)學(xué)平均分?求一個(gè)班級(jí)總分平均分AVG函數(shù)返回滿足where條件的一列的平均值合計(jì)函數(shù)-Max/min 主講:韓順平Selectmax(列名)fromtablename [WHEREwhere_definition]
練習(xí):求班級(jí)最高分和最低分(數(shù)值范圍在統(tǒng)計(jì)中特別有用)Max/min函數(shù)返回滿足where條件的一列的最大/最小值select語(yǔ)句(6) 主講:韓順平SELECTcolumn1,column2.column3..FROM table groupbycolumn使用groupby子句對(duì)列進(jìn)行分組SELECTcolumn1,column2.column3.. FROM table groupbycolumnhaving...使用having子句過(guò)濾groupby用于對(duì)查詢的結(jié)果分組統(tǒng)計(jì),(畫(huà)出分組示意圖)having子句用于限制分組顯示結(jié)果.?如何顯示每個(gè)部門(mén)的平均工資和最高工資?顯示每個(gè)部門(mén)的每種崗位的平均工資和最低工資?顯示平均工資低于2000的部門(mén)號(hào)和它的平均工資[別名]Mysql函數(shù)-一覽 主講:韓順平CURRENT_DATE(
)當(dāng)前日期CURRENT_TIME(
)當(dāng)前時(shí)間CURRENT_TIMESTAMP()當(dāng)前時(shí)間戳DATE(datetime)返回datetime的日期部分DATE_ADD(date2,INTERVALd_valued_type)在date2中加上日期或時(shí)間DATE_SUB(date2,INTERVALd_valued_type)在date2上減去一個(gè)時(shí)間DATEDIFF(date1,date2)兩個(gè)日期差(結(jié)果是天)TIMEDIFF(date1,date2)兩個(gè)時(shí)間差(多少小時(shí)多少分鐘多少秒)NOW(
)當(dāng)前時(shí)間YEAR|Month|DATE(datetime)FROM_UNIXTIME()年月日時(shí)間日期相關(guān)函數(shù) 主講:韓順平CURRENT_DATE(
)當(dāng)前日期CURRENT_TIME(
)當(dāng)前時(shí)間CURRENT_TIMESTAMP()當(dāng)前時(shí)間戳selectcurrent_date()fromdual;selectcurrent_time()fromdual;時(shí)間日期相關(guān)函數(shù) 主講:韓順平DATE(datetime)返回datetime的日期部分DATE_ADD(date2,INTERVALd_valued_type)在date2中加上日期或時(shí)間DATE_SUB(date2,INTERVALd_valued_type)在date2上減去一個(gè)時(shí)間DATEDIFF(date1,date2)兩個(gè)日期差(結(jié)果是天)四個(gè)函數(shù)的基本使用,創(chuàng)建一張留言表:mysql>createtablemes(idint,contentvarchar(256),sendtimedatetime);添加一些數(shù)據(jù)mysql>insertintomessagevalues(3,'hello1',now());mysql>insertintomessagevalues(4,'hello1',now());查詢顯示所有留言信息,發(fā)布日期只顯示日期,不用顯示時(shí)間.請(qǐng)查詢?cè)?0分鐘內(nèi)發(fā)布的帖子請(qǐng)?jiān)趍ysql的sql語(yǔ)句中求出2011-11-11和1990-1-1相差多少天請(qǐng)用mysql的sql語(yǔ)句求出你活了多少天?時(shí)間日期相關(guān)函數(shù) 主講:韓順平DATE(datetime)返回datetime的日期部分DATE_ADD(date2,INTERVALd_valued_type)在date2中加上日期或時(shí)間DATE_SUB(date2,INTERVALd_valued_type)在date2上減去一個(gè)時(shí)間DATEDIFF(date1,date2)兩個(gè)日期差(結(jié)果是天)上面函數(shù)的細(xì)節(jié)說(shuō)明:DATE_ADD()中的interval后面可以是yearminuteseconddayDATE_SUB()中的interval后面可以是yearminuteseconddayDATEDIFF(date1,date2)得到的是天數(shù),而且是date1-date2的天數(shù),因此可以取負(fù)數(shù)這四個(gè)函數(shù)的日期類(lèi)型可以是date,datetime或者timestamp這幾個(gè)函數(shù)經(jīng)常在論壇留言表中使用.時(shí)間日期相關(guān)函數(shù) 主講:韓順平四個(gè)函數(shù)的基本使用,創(chuàng)建一張留言表:mysql>createtablemes(idint,contentvarchar(30),sendtimedatetime);添加一些數(shù)據(jù)mysql>insertintomessagevalues(10'第一條留言',now());mysql>insertintomessagevalues(20,'第二條留言',now());課堂練習(xí)查詢:顯示所有留言信息,發(fā)布日期只顯示日期,不用顯示時(shí)間.請(qǐng)查詢?cè)?0秒以前發(fā)布的帖子select*frommeswheredate_add(sendtime,interval30second)<=now();請(qǐng)?jiān)趍ysql的sql語(yǔ)句中求出2009-11-11和1997-1-1相差多少天你活了多少年,取整數(shù)時(shí)間日期相關(guān)函數(shù) 主講:韓順平TIMEDIFF(date1,date2)兩個(gè)時(shí)間差(多少小時(shí)多少分鐘多少秒)NOW(
)當(dāng)前時(shí)間YEAR|Month|DATE(datetime)FROM_UNIXTIME()unix_timestamp();年月日這里用的比較多的是now()另外函數(shù)演示一下即可mysql>selecttimediff(now()+10,now());mysql>selectyear(now());mysql>selectunix_timestamp();from_unixtime默認(rèn)顯示時(shí)間日期相關(guān)函數(shù) 主講:韓順平TIMEDIFF(date1,date2)兩個(gè)時(shí)間差(多少小時(shí)多少分鐘多少秒)NOW(
)當(dāng)前時(shí)間YEAR|Month|DATE(datetime)FROM_UNIXTIME()unix_timestamp();年月日在實(shí)際開(kāi)發(fā)中,我們也經(jīng)常使用int來(lái)保存一個(gè)unix時(shí)間戳.請(qǐng)?jiān)O(shè)計(jì)一張留言表,使用int保存時(shí)間,在顯示時(shí),可以按年-月-日時(shí):分:秒的形式顯示在控制臺(tái)(控制臺(tái)添加和顯示)能夠通過(guò)php程序添加時(shí)間,并且可以在php頁(yè)面也安年-月-日時(shí)分秒形式顯示在頁(yè)面date_default_timezone_set(PHP添加顯示)時(shí)間日期相關(guān)函數(shù) 主講:韓順平TIMEDIFF(date1,date2)兩個(gè)時(shí)間差(多少小時(shí)多少分鐘多少秒)NOW(
)當(dāng)前時(shí)間YEAR|Month|DATE(datetime)FROM_UNIXTIME()unix_timestamp();年月日上機(jī)練習(xí)題,先練后講.思考,如何查詢?cè)?0秒/1天/2小時(shí)內(nèi)發(fā)布的消息如何查詢?cè)?0秒/1天/2小時(shí)前發(fā)布的消息字符串相關(guān)函數(shù) 主講:韓順平CHARSET(str)返回字串字符集CONCAT(string2
[,...])連接字串INSTR(string,substring)返回substring在string中出現(xiàn)的位置,沒(méi)有返回0UCASE(string2)轉(zhuǎn)換成大寫(xiě)LCASE(string2)轉(zhuǎn)換成小寫(xiě)LEFT(string2,length)從string2中的左邊起取length個(gè)字符LENGTH(string)string長(zhǎng)度[按照字節(jié)]REPLACE(str,search_str,replace_str)在str中用replace_str替換search_strSTRCMP(string1,string2)逐字符比較兩字串大小,SUBSTRING(str,position
[,length])從str的position開(kāi)始,取length個(gè)字符LTRIM(string2)RTRIM(string2)trim去除前端空格或后端空格綜合練習(xí):以首字母小寫(xiě)的方式顯示所有員工的姓名數(shù)學(xué)相關(guān)函數(shù) 主講:韓順平ABS(number2)絕對(duì)值BIN(decimal_number)十進(jìn)制轉(zhuǎn)二進(jìn)制CEILING(number2)向上取整CONV(number2,from_base,to_base)進(jìn)制轉(zhuǎn)換FLOOR(number2)向下取整FORMAT(number,decimal_places)保留小數(shù)位數(shù),格式化一把xx,xxx形式顯示HEX(DecimalNumber)轉(zhuǎn)十六進(jìn)制LEAST(number,number2
[,..])求最小值MOD(numerator,denominator)求余RAND([seed])RAND([seed])其范圍為0≤v≤1.0rand()返回一個(gè)隨機(jī)浮點(diǎn)值v,范圍在0到1之間(即,其范圍為0≤v≤1.0)。若已指定一個(gè)整數(shù)參數(shù)N,則它被用作種子值,用來(lái)產(chǎn)生重復(fù)序列。
流程控制函數(shù)[了解] 主講:韓順平IF(expr1,expr2,expr3)如果expr1為T(mén)rue,則返回expr2否則返回expr3IFNULL(expr1,expr2)如果expr1不為空NULL,則返回expr1,否則返回expr2SELECTCASEWHENexpr1THENexpr2WHENexpr1THENexpr3ELSEexpr4END;[也可以多重分支.]其它函數(shù) 主講:韓順平USER()查詢用戶DATABASE()數(shù)據(jù)庫(kù)名稱(chēng)MD5(str)為字符串算出一個(gè)MD5128比特檢查和,通常用于對(duì)應(yīng)用程序使用到的表的某個(gè)字段(比如用戶密碼)加密PASSWORD(str)select*frommysql.user\G從原文密碼str計(jì)算并返回密碼字符串,通常用于對(duì)mysql數(shù)據(jù)庫(kù)的用戶密碼加密基本使用mysql>createtableusers(idint,namevarchar(64)notnulldefault'',pwdchar(32)notnulldefault'');添加一個(gè)用戶名.PHP對(duì)Mysql進(jìn)行操作實(shí)例 主講:韓順平//1.對(duì)mysql完成查詢,得到連接$conn=mysql_connect("localhost","root","root");//選擇數(shù)據(jù)mysql_select_db("hspdb1",$conn); //查詢數(shù)據(jù),返回結(jié)果$res=mysql_query("select*fromusers",$conn);//得到查詢到多少記錄$recs=mysql_num_rows($res);echo"共".$recs."條記錄<br/>";//取出記錄.while($row=mysql_fetch_array($res)){ //打印 echo"編號(hào):".$row[0]."名稱(chēng)".$row[1]."郵件".$row[2]."<br/>";}//添加記錄//mysql_query("insertintousers(name,email)values('abc1','beijing')",$conn) //修改 //mysql_query("updateuserssetemail=''whereid=4",$conn);//刪除mysql_query("deletefromuserswhereid=4",$conn);echo"<br/>執(zhí)行ok!";課后練習(xí)題 主講:韓順平練習(xí):寫(xiě)一個(gè)PHP,可以顯示任意一張表的信息要求:編寫(xiě)一個(gè)php程序,顯示一張表的全部信息要求,只需要給$sql="select*from表名"即可顯示表的信息,表頭是動(dòng)態(tài)顯示的。不需要指定.提示:使用mysql_num_fields()函數(shù)和mysql_field_name()就可以搞定php數(shù)據(jù)庫(kù)編程(2)-mysql 主講:韓順平1.mysql表的基本查詢加強(qiáng)2.mysql表的復(fù)雜查詢3.維護(hù)數(shù)據(jù)的完整性—約束mysql表的基本查詢--加強(qiáng) 主講:韓順平■介紹-公欲善其事,必先利其器在前面我們講過(guò)mysql表的基本查詢,但是都是對(duì)一張表進(jìn)行的查詢,這在實(shí)際的軟件開(kāi)發(fā)中,還遠(yuǎn)遠(yuǎn)的不夠。下面我們講解的過(guò)程中,將模擬一個(gè)簡(jiǎn)單的公司管理系統(tǒng),創(chuàng)建三張表(emp,dept,salgrade)為大家演示如何進(jìn)行多表查詢,select語(yǔ)句在軟件編程中非常的有用,希望大家好好的掌握。mysql表的基本查詢--加強(qiáng) 主講:韓順平■查看表結(jié)構(gòu)■查詢所有列■查詢指定列■如何取消重復(fù)行distinct?查詢SMITH的薪水,工作,所在部門(mén)mysql表的基本查詢--加強(qiáng) 主講:韓順平■使用算數(shù)表達(dá)式?顯示每個(gè)雇員的年工資■使用列的別名selectename"姓名",sal*12as"年收入"fromemp;
mysql表的基本查詢--加強(qiáng) 主講:韓順平■使用where子句 ?如何顯示工資高于3000的員工 ?如何查找1982.1.1后入職的員工//日期類(lèi)型是可以比較 ?如何顯示工資在2000到2500的員工情況//比較運(yùn)算符between■如何使用like操作符 %:表示任意0到多個(gè)字符_:表示任意單個(gè)字符 ?如何顯示首字符為S的員工姓名和工資 ?如何顯示第三個(gè)字符為大寫(xiě)O的所有員工的姓名和工資■在where條件中使用in?如何顯示empno為123,345,800...的雇員情況■?如何顯示沒(méi)有上級(jí)的雇員的情況mysql表的基本查詢--加強(qiáng) 主講:韓順平■使用邏輯操作符號(hào)?查詢工資高于500或是崗位為MANAGER的雇員,同時(shí)還要滿足他們的姓名首寫(xiě)字母為大寫(xiě)的J■使用orderby字句(示意圖)?如何按照工資的從低到高的順序顯示雇員的信息?按照部門(mén)號(hào)升序而雇員的工資降序排列■使用列的別名排序[津貼]對(duì)所有員工的年工資進(jìn)行排序.
mysql表的基本查詢--加強(qiáng) 主講:韓順平■分頁(yè)查詢按雇員的id號(hào)升序取出,每頁(yè)顯示3條記錄。請(qǐng)分別顯示第一頁(yè),第二頁(yè),第三頁(yè)
課堂練習(xí)題:按雇員的id號(hào)降序取出,每頁(yè)顯示4條記錄。請(qǐng)分別顯示第3頁(yè),第5頁(yè)對(duì)應(yīng)的sql語(yǔ)句mysql表的基本查詢--加強(qiáng) 主講:韓順平■說(shuō)明在實(shí)際應(yīng)用中經(jīng)常需要執(zhí)行復(fù)雜的數(shù)據(jù)統(tǒng)計(jì),經(jīng)常需要顯示多張表的數(shù)據(jù),現(xiàn)在我們給大家介紹較為復(fù)雜的select語(yǔ)句■數(shù)據(jù)分組-max,min,avg,sum,count?如何顯示所有員工中最高工資和最低工資?顯示所有員工的平均工資和工資總和?計(jì)算共有多少員工?請(qǐng)統(tǒng)計(jì)部門(mén)編號(hào)為10的平均工資.擴(kuò)展要求:[上機(jī)練習(xí),同學(xué)們先做]?請(qǐng)顯示工資最高的員工的名字,工作崗位?請(qǐng)顯示工資高于平均工資的員工信息mysql表的基本查詢--加強(qiáng) 主講:韓順平■groupby和having子句groupby用于對(duì)查詢的結(jié)果分組統(tǒng)計(jì),having子句用于限制分組顯示結(jié)果.同學(xué)們先思考?如何顯示每個(gè)部門(mén)的平均工資和最高工資?顯示每個(gè)部門(mén)的每種崗位的平均工資和最低工資?顯示平均工資低于2000的部門(mén)號(hào)和它的平均工資[別名可用]擴(kuò)展要求:mysql表的基本查詢--加強(qiáng)主講:韓順平課堂練習(xí)(后面評(píng)講):使用分組函數(shù)和數(shù)據(jù)分組子句(1)顯示所有雇員的平均工資、總計(jì)工資、最高工資、最低工資。(2)顯示每種崗位的雇員總數(shù)、平均工資。(3)顯示雇員總數(shù),以及獲得補(bǔ)助的雇員數(shù)。(4)顯示管理者的總?cè)藬?shù)。(5)顯示雇員工資的最大差額。(6)顯示每個(gè)部門(mén)每個(gè)崗位的平均工資[1]、每個(gè)部門(mén)的平均工資[2]、每個(gè)崗位的平均工資[3]。mysql表的基本查詢--加強(qiáng)主講:韓順平■對(duì)數(shù)據(jù)分組的總結(jié)1.如果在select語(yǔ)句種同時(shí)包含有g(shù)roupby,having,orderby那么他們的順序是groupby,having,orderby請(qǐng)統(tǒng)計(jì)各個(gè)部門(mén)的平均工資,并且是大于1000的,并且按照平均工資從高到低排序wheresalin('xxx');mysql表的復(fù)雜查詢 主講:韓順平■多表查詢問(wèn)題的引出(重點(diǎn),難點(diǎn))后面,要求大家能夠完成!mysql表的復(fù)雜查詢-多表查詢主講:韓順平■說(shuō)明課堂練習(xí):顯示雇員名,雇員工資及所在部門(mén)的名字,并按部門(mén)排序[降序排].思考題:請(qǐng)查詢出雇員的名字,薪水,工作,部門(mén)的名稱(chēng),工資的級(jí)別多表查詢是指基于兩個(gè)和兩個(gè)以上的表或是視圖的查詢.在實(shí)際應(yīng)用中,查詢單個(gè)表可能不能滿足你的需求,(如顯示sales部門(mén)位置和其員工的姓名),這種情況下需要使用到(dept表和emp表)?顯示雇員名,雇員工資及所在部門(mén)的名字【笛卡爾集】規(guī)定:多表查詢的條件是至少不能少于表的個(gè)數(shù)-1?如何顯示部門(mén)號(hào)為10的部門(mén)名、員工名和工資?顯示各個(gè)員工的姓名,工資,及其工資的級(jí)別mysql表的復(fù)雜查詢-自連接主講:韓順平■自連接自連接是指在同一張表的連接查詢。?顯示某個(gè)員工的上級(jí)領(lǐng)導(dǎo)的姓名比如顯示’FORD’的上級(jí). 課堂練習(xí)題[同學(xué)們先做!]思考題:顯示公司每個(gè)員工名字和他的上級(jí)的名字mysql表的復(fù)雜查詢-子查詢主講:韓順平■什么是子查詢子查詢是指嵌入在其它sql查詢語(yǔ)句中的select語(yǔ)句,也叫嵌套查詢■單行子查詢單行子查詢是指只返回一行數(shù)據(jù)的子查詢語(yǔ)句請(qǐng)思考:如何顯示與SMITH同一部門(mén)的所有員工?■多行子查詢多行子查詢指返回多行數(shù)據(jù)的子查詢使用關(guān)鍵字in課堂練習(xí):如何查詢和10號(hào)部門(mén)的工作相同的雇員的名字、崗位、工資、部門(mén)號(hào),但是不含10號(hào)部門(mén)的雇員.mysql表的復(fù)雜查詢- 主講:韓順平?上機(jī)練習(xí)題查詢ecshop中各個(gè)類(lèi)別中,價(jià)格最高的商品.提示,會(huì)使用到:ecs_goods的字段goods_idcat_idgoods_nameshop_pricegroupby會(huì)默認(rèn)返回第一行.mysql表的復(fù)雜查詢- 主講:韓順平■在多行子查詢中使用all操作符請(qǐng)思考:如何顯示工資比部門(mén)30的所有員工的工資高的員工的姓名、工資和部門(mén)號(hào)selectename,sal,deptnofromempwheresal>all(selectsalfromempwheredeptno=30);
擴(kuò)展要求:大家想想還有沒(méi)有別的查詢方法.Selectename,sal,deptnofromempwheresal>(selectmax(sal)fromempwheredeptno=30);mysql表的復(fù)雜查詢- 主講:韓順平■在多行子查詢中使用any操作符請(qǐng)思考:如何顯示工資比部門(mén)30的其中一個(gè)員工的工資高的員工的姓名、工資和部門(mén)號(hào)selectename,sal,deptnofromempwheresal>any(selectsalfromempwheredeptno=30)擴(kuò)展要求:大家想想還有沒(méi)有別的查詢方法.selectename,sal,deptnofromempwheresal>(selectmin(sal)fromempwheredeptno=30)mysql表的復(fù)雜查詢 主講:韓順平■多列子查詢單行子查詢是指子查詢只返回單列、單行數(shù)據(jù),多行子查詢是指返回單列多行數(shù)據(jù),都是針對(duì)單列而言的,而多列子查序則是指查詢返回多個(gè)列數(shù)據(jù)的子查詢語(yǔ)句請(qǐng)思考如何查詢與smith的部門(mén)和崗位完全相同的所有雇員(并且不含smith本人)(字段1,字段2...)=(select字段1,字段2from。。。。)請(qǐng)查詢和宋江數(shù)學(xué),英語(yǔ),語(yǔ)文完全相同的學(xué)生[查作弊學(xué)生]mysql表的復(fù)雜查詢 主講:韓順平好好琢磨琢磨吧■在from子句中使用子查詢請(qǐng)思考:如何顯示高于自己部門(mén)平均工資的員工的信息(名字,薪水,和該部門(mén)的平均薪水)這里要用到數(shù)據(jù)查詢的小技巧,把一個(gè)子查詢當(dāng)作一個(gè)臨時(shí)表使用解法①【課堂練習(xí)】selecte1.*,e2.myavgfromempe1,(selectavg(sal)myavg,deptnofromempgroupbydeptno)e2wheree1.deptno=e2.deptnoande1.sal>e2.myavg解法②selecte1.*fromempe1wheree1.sal>(selectavg(sal)fromempe2wheree2.deptno=e1.deptno)mysql表的復(fù)雜查詢 主講:韓順平好好琢磨琢磨吧■在from子句中使用子查詢請(qǐng)思考:查找每個(gè)部門(mén)工資最高的人的詳細(xì)資料(雇員們,薪水,部門(mén)編號(hào),最高工資)解法①解法②思路:得到所有的員工,進(jìn)行篩選,每拿到一個(gè)員工,判斷該員工的工資是否是他們部門(mén)的最高工資。select*fromempase1wheree1.sal=(selectmax(sal)fromempase2wheree2.deptno=e1.deptno);mysql表的復(fù)雜查詢 主講:韓順平好好琢磨琢磨吧■在from子句中使用子查詢—課堂小練習(xí)先練,再講:顯示每個(gè)部門(mén)的信息(部門(mén)名,編號(hào),地址)和人員數(shù)量,我們一起完成。思路:1.先將人員信息和部門(mén)信息關(guān)聯(lián)顯示2.然后統(tǒng)計(jì)mysql表的復(fù)雜查詢 主講:韓順平■在from子句中使用子查詢這里需要說(shuō)明的當(dāng)在from子句中使用子查詢時(shí),為了查詢方便,需要給子查詢指定別名.總結(jié)一下mysql表的復(fù)雜查詢 主講:韓順平■自我復(fù)制數(shù)據(jù)(蠕蟲(chóng)復(fù)制)有時(shí),為了對(duì)某個(gè)sql語(yǔ)句進(jìn)行效率測(cè)試,我們需要海量數(shù)據(jù)時(shí),可以使用此法為表創(chuàng)建海量數(shù)據(jù)。insertintomytable(id,name,sal,job,deptno)selectempno,ename,sal,job,deptnofromemp;
思考題:如何刪除掉一張表重復(fù)記錄temp_table是一張臨時(shí)表[使用createtable表名likexxx]aa:是你要處理表(有重復(fù)行的.)insertintotemp_tableselectdistinct*fromaadeletefromaainsertintoaaselect*fromtemp_tabledroptabletemp_tablemysql表的復(fù)雜查詢-合并查詢主講:韓順平■合并查詢【了解】有時(shí)在實(shí)際應(yīng)用中,為了合并多個(gè)select語(yǔ)句的結(jié)果,可以使用集合操作符號(hào)union,unionall1)union該操作符用于取得兩個(gè)結(jié)果集的并集。當(dāng)使用該操作符時(shí),會(huì)自動(dòng)去掉結(jié)果集中重復(fù)行。selectename,sal,jobfromempwheresal>2000unionselectename,sal,jobfromempwherejob='MANAGER'; mysql表的復(fù)雜查詢-合并查詢主講:韓順平2)unionall該操作賦與union相似,但是它不會(huì)取消重復(fù)行,而且不會(huì)排序。selectename,sal,jobfromempwheresal>2000unionallselectename,sal,jobfromempwherejob='manager';mysql表的內(nèi)連接和外連接主講:韓順平■概述表連接分為內(nèi)連接和外連接?!鰞?nèi)連接內(nèi)連接實(shí)際上就是利用where子句對(duì)兩張(多表)表形成的笛卡爾積進(jìn)行篩選,我們前面學(xué)習(xí)的查詢都是內(nèi)連接,也是在開(kāi)發(fā)過(guò)程中用的最多的連接查詢?;菊Z(yǔ)法:select字段from表1innerjoin表2on連接條件AND其它條件;請(qǐng)顯示雇員的名字,工作,和部門(mén)的名稱(chēng)??mysql表的內(nèi)連接和外連接主講:韓順平■外連接①左外連接 (如果左側(cè)的表完全顯示我們就說(shuō)是左外連接)②右外連接 (如果右側(cè)的表完全顯示我們就說(shuō)是右外連接)為了講清楚,我們舉例說(shuō)明。--表stuidname1,Jack2,Tom3,Kity4,nono--表examidgrade1,562,7611,8mysql表的內(nèi)連接和外連接主講:韓順平■外連接1)左連接(顯示所有人的成績(jī),如果沒(méi)有成績(jī),也要顯示該人的姓名和id號(hào),成績(jī)顯示為空)selectstu.id,,exam.gradefromstuleftjoinexamonstu.id=exam.idmysql表的內(nèi)連接和外連接主講:韓順平■外連接2)右連接(顯示所有成績(jī),如果沒(méi)有名字匹配,顯示空)思考題,實(shí)現(xiàn)學(xué)生表(stu)和考試成績(jī)(exam)的完全顯示效果?mysql表的內(nèi)連接和外連接主講:韓順平■一個(gè)小練習(xí)(課堂練習(xí))為加深大家對(duì)外連接的理解,我們做一個(gè)小練習(xí)列出部門(mén)名稱(chēng)和這些部門(mén)的員工信息,同時(shí)列出那些沒(méi)有員工的部門(mén)。要求兩種方式使用左外連接實(shí)現(xiàn)使用右外連接實(shí)現(xiàn)php數(shù)據(jù)庫(kù)編程(3)-mysql主講:韓順平1.維護(hù)數(shù)據(jù)的完整性—約束2.mysql表自增3.mysql索引mysql維護(hù)數(shù)據(jù)的完整性-約束主講:韓順平■約束約束用于確保數(shù)據(jù)庫(kù)數(shù)據(jù)滿足特定的商業(yè)規(guī)則。在mysql中,約束包括:notnull、unique,primarykey,foreignkey,和check五種.mysql維護(hù)數(shù)據(jù)的完整性-約束主講:韓順平■primarykey(主鍵)-基本使用用于唯一標(biāo)示表行的數(shù)據(jù),當(dāng)定義主鍵約束后,該列不能重復(fù),不能null字段名字段類(lèi)型primarykeyuser表字段:id name emailmysql維護(hù)數(shù)據(jù)的完整性-約束主講:韓順平■primarykey(主鍵)-細(xì)節(jié)說(shuō)明primarykey不但不能重復(fù)而且不能為null。一張表最多只能有一個(gè)主鍵,但可以是復(fù)合主鍵一般來(lái)說(shuō)一張表總有primarykey,而且是整數(shù)類(lèi)型的(ecs_vote、ecs_users、ecs_goods等等)主鍵的指定方式有兩種直接在字段名后指定:字段名primakrykey在表定義最后寫(xiě)primarykey(列名);如果一個(gè)字段設(shè)置成notnull并unique,從使用效果上非常像primarykey使用desc表名,可以看到primarykey的情況.mysql維護(hù)數(shù)據(jù)的完整性-約束主講:韓順平■notnull(非空)如果在列上定義了notnull,那么當(dāng)插入數(shù)據(jù)時(shí),必須為列提供數(shù)據(jù)?!鰑nique(唯一)當(dāng)定義了唯一約束后,該列值是不能重復(fù)的.。字段名字段類(lèi)型notnull字段名字段類(lèi)型uniqueunique細(xì)節(jié)(注意):指定notnull和不指定notnull,會(huì)怎樣?一張表可以有幾個(gè)unique?mysql維護(hù)數(shù)據(jù)的完整性-約束主講:韓順平■foreignkey(外鍵)-基本使用用于定義主表和從表之間的關(guān)系:外鍵約束要定義在從表上,主表則必須具有主鍵約束或是unique約束.,當(dāng)定義外鍵約束后,要求外鍵列數(shù)據(jù)必須在主表的主鍵列存在或是為null(學(xué)生/班級(jí)圖示)InnoDBFOREIGNKEY(本表字段名)REFERENCES主鍵表名(主鍵名或unique字段名)學(xué)生表(從表) 班級(jí)表(主表)idnameclass_id id class_nameintroducestu_nummysql維護(hù)數(shù)據(jù)的完整性-約束主講
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教師自學(xué)計(jì)劃范文
- 幼兒園園長(zhǎng)工作每月提示11月-幼兒園園務(wù)計(jì)劃
- 物業(yè)公司出納工作計(jì)劃模板
- 2025銷(xiāo)售工作計(jì)劃的范文
- 區(qū)殘聯(lián)某年工作初步計(jì)劃
- 2025-2025學(xué)年度上學(xué)期小學(xué)學(xué)校工作計(jì)劃
- 1月秘書(shū)個(gè)人工作計(jì)劃
- 《氣血循環(huán)機(jī)》課件
- 《行政的執(zhí)行及手段》課件
- 合同備案的法律規(guī)定
- HCIP-Intelligent Computing H13-211考試認(rèn)證題庫(kù)
- 西南交通大學(xué)2016-2017第二學(xué)期概率論與數(shù)理統(tǒng)計(jì)期末試題及解析
- 其他常見(jiàn)疾病的康復(fù)
- 例談實(shí)驗(yàn)教學(xué)的強(qiáng)化與優(yōu)化(吳加澍)(共39張)
- 【建模教程】-數(shù)學(xué)建模題目及答案-數(shù)學(xué)建模100題
- 水上通航安全維護(hù)方案
- 幼兒口頭作文800字(通用范文6篇)
- 泥水平衡機(jī)械頂管施工專(zhuān)項(xiàng)方案設(shè)計(jì)
- 2023年高校財(cái)務(wù)處長(zhǎng)述職報(bào)告范文
- 體系年度工作總結(jié)培訓(xùn)課件
- YY/T 0506.6-2009病人、醫(yī)護(hù)人員和器械用手術(shù)單、手術(shù)衣和潔凈服第6部分:阻濕態(tài)微生物穿透試驗(yàn)方法
評(píng)論
0/150
提交評(píng)論