傳智播客超全面的javaweb視頻教程源碼筆記day15day_第1頁(yè)
傳智播客超全面的javaweb視頻教程源碼筆記day15day_第2頁(yè)
傳智播客超全面的javaweb視頻教程源碼筆記day15day_第3頁(yè)
傳智播客超全面的javaweb視頻教程源碼筆記day15day_第4頁(yè)
傳智播客超全面的javaweb視頻教程源碼筆記day15day_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、高級(jí)實(shí)作培訓(xùn)!lllll可大量數(shù)據(jù);方便檢索;保持?jǐn)?shù)據(jù)的一致性、完整性; 安全,可共享;通過組合分析,可產(chǎn)生新數(shù)據(jù)。1.2數(shù)據(jù)庫(kù)的發(fā)展歷程lllll沒有數(shù)據(jù)庫(kù),使用磁盤文件層次結(jié)構(gòu)模型數(shù)據(jù)庫(kù);網(wǎng)狀結(jié)構(gòu)模型數(shù)據(jù)庫(kù);數(shù)據(jù);結(jié)構(gòu)模型數(shù)據(jù)庫(kù):使用二維表格來(lái)-對(duì)象模型數(shù)據(jù)庫(kù);數(shù)據(jù);MySQL 就是型數(shù)據(jù)庫(kù)!1.3常見數(shù)據(jù)庫(kù)lllllOracle(神喻):甲骨文(最高?。?;DB2:;SQL Server:微軟;Sybase:;MySQL:甲骨文;1.4lll理解數(shù)據(jù)庫(kù)RDBMS = 管理員(manager)+倉(cāng)庫(kù)(database)database = N 個(gè) table table: 表結(jié)構(gòu):定義表的列

2、名和列類型! 表:一行一行的!我們現(xiàn)在所說的數(shù)據(jù)庫(kù)泛指“system)”,即“數(shù)據(jù)庫(kù)服務(wù)器”。型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS - Relational database management傳智播客教育高級(jí)實(shí)作培訓(xùn)!當(dāng)我們安裝了數(shù)據(jù)庫(kù)服務(wù)器后,就可以在數(shù)據(jù)庫(kù)服務(wù)器中創(chuàng)建數(shù)據(jù)庫(kù),每個(gè)數(shù)據(jù)庫(kù)中還可以包含多張表。數(shù)據(jù)庫(kù)表就是一個(gè)多行多列的表格。在創(chuàng)建表時(shí),需要指定表的列數(shù),以及列名稱,列類型等。而不用指定表格的行數(shù),行數(shù)是沒有上限的。下面是 tab_表的結(jié)構(gòu):當(dāng)把表格創(chuàng)建好了之后,就可以向表格中添加數(shù)據(jù)了。向表格添加數(shù)據(jù)是以行為的!下面是 s_表的:大家要學(xué)會(huì)區(qū)分什么是表結(jié)構(gòu),什么是表。傳智播客教育s

3、_ids_names_ages_sexS_1001zhangSan23maleS_1002liSi32femaleS_1003wangWu44male高級(jí)實(shí)作培訓(xùn)!1.5應(yīng)用程序與數(shù)據(jù)庫(kù)應(yīng)用程序使用數(shù)據(jù)庫(kù)完成對(duì)數(shù)據(jù)的!2安裝 MySQL 數(shù)據(jù)庫(kù)2.1安裝 MySQL參考:MySQL 安裝圖解.doc2.2MySQL 目錄結(jié)構(gòu)MySQL 的數(shù)據(jù)目錄為 data,data 目錄通常在 C:Documents and SettingsAll UsersApplicationDataMySQLMySQL Server 5.1data 位置。在 data 下的每個(gè)目錄都代表一個(gè)數(shù)據(jù)庫(kù)。MySQL 的安裝

4、目錄下:llbin 目錄中都是可執(zhí)行文件;my.ini 文件是 MySQL 的配置文件;3基本命令3.1啟動(dòng)和關(guān)閉 mysql 服務(wù)器ll啟動(dòng):net start mysql; 關(guān)閉:net stop mysql;在啟動(dòng) mysql 服務(wù)后,打開 windows 任務(wù)管理器,會(huì)有一個(gè)名為 mysqld.exe 的進(jìn)程運(yùn)行,所以mysqld.exe 才是 MySQL 服務(wù)器程序。傳智播客教育高級(jí)實(shí)作培訓(xùn)!3.2客戶端登錄mysql在啟動(dòng) MySQL 服務(wù)器后,我們需要使用管理員用戶登錄 MySQL 服務(wù)器,然后來(lái)對(duì)服務(wù)器進(jìn)行操作。登錄 MySQL 需要使用 MySQL 的客戶端程序:mysql.

5、exel登錄:mysql -u root -p 123 -h localhost;-u:后面的 root 是用戶名,這里使用的是超級(jí)管理員 root;-p:后面的 123 是,這是在安裝 MySQL已經(jīng)指定的;-h:后面給出的 localhost 是服務(wù)器主機(jī)名,它是可以省略的,例如:mysql -u root -p 123;:quit 或 exit;l在登錄是客戶端程序。后,打開 windows 任務(wù)管理器,會(huì)有一個(gè)名為 mysql.exe 的進(jìn)程運(yùn)行,所以 mysql.exeSQL 語(yǔ)句1SQL 概述1.1什么是 SQLSQL(Structured Query Language)是“結(jié)構(gòu)化

6、語(yǔ)言”,它是對(duì)型數(shù)據(jù)庫(kù)的操作語(yǔ)言。它可以應(yīng)用到所有型數(shù)據(jù)庫(kù)中,例如:MySQL、Oracle、SQL Server 等。SQ 標(biāo)準(zhǔn)(ANSI/ISO)有:lllSQL-92:1992 年發(fā)布的 SQL 語(yǔ)言標(biāo)準(zhǔn);SQL:1999:1999 年發(fā)布的 SQL 語(yǔ)言SQL:2003:2003 年發(fā)布的 SQL 語(yǔ)言;這些標(biāo)準(zhǔn)就與 JDK 的版本一樣,在新的版本中總要有一些語(yǔ)法的變化。不同時(shí)期的數(shù)據(jù)庫(kù)對(duì)不同標(biāo)準(zhǔn)做了實(shí)現(xiàn)。雖然 SQL 可以用在所有型數(shù)據(jù)庫(kù)中,但很多數(shù)據(jù)庫(kù)還都有標(biāo)準(zhǔn)之后的一些語(yǔ)法,我們可以稱之為“方言”。例如 MySQL 中的 LIMIT 語(yǔ)句就是 MySQL 獨(dú)有的方言,其它數(shù)據(jù)庫(kù)都

7、不支持!當(dāng)然,Oracle 或 SQL Server 都有的方言。1.2語(yǔ)法要求lllSQL 語(yǔ)句可以單行或多行書寫,以分號(hào)結(jié)尾;可以用空格和縮進(jìn)來(lái)來(lái)增強(qiáng)語(yǔ)句的可讀性; 關(guān)鍵字不區(qū)別大小寫,建議使用大寫;2lDDL(Data Definition Language):數(shù)據(jù)定義語(yǔ)言,用來(lái)定義數(shù)據(jù)庫(kù)對(duì)象:庫(kù)、表、列等;傳智播客教育高級(jí)實(shí)作培訓(xùn)!lllDML(Data Manipulation Language):數(shù)據(jù)操作語(yǔ)言,用來(lái)定義數(shù)據(jù)庫(kù)(數(shù)據(jù));DCL(Data Control Language):數(shù)據(jù) DQL(Data Query Language):數(shù)據(jù)語(yǔ)言,用來(lái)定義語(yǔ)言,用來(lái)權(quán)限和安全級(jí)

8、別;(數(shù)據(jù))。3DDL3.1基本操作ll查看所有數(shù)據(jù)庫(kù)名稱:SHOW DATABASES;切換數(shù)據(jù)庫(kù):USE mydb1,切換到 mydb1 數(shù)據(jù)庫(kù);3.2操作數(shù)據(jù)庫(kù)l創(chuàng)建數(shù)據(jù)庫(kù):CREATE DATABASE IF NOT EXISTS mydb1;創(chuàng)建數(shù)據(jù)庫(kù),例如:CREATE DATABASE mydb1,創(chuàng)建一個(gè)名為 mydb1 的數(shù)據(jù)庫(kù)。如果這個(gè)數(shù)據(jù)已,那么會(huì)報(bào)錯(cuò)。例如 CREATE DATABASE IF NOT EXISTS mydb1,在名為 mydb1 的數(shù)據(jù)庫(kù)不經(jīng)時(shí)創(chuàng)建該庫(kù),這樣可以避免報(bào)錯(cuò)。l刪除數(shù)據(jù)庫(kù):DROP DATABASE IF EXISTS mydb1;刪除數(shù)據(jù)

9、庫(kù),例如:DROP DATABASE mydb1,刪除名為 mydb1 的數(shù)據(jù)庫(kù)。如果這個(gè)數(shù)據(jù)庫(kù)不存在,那么會(huì)報(bào)錯(cuò)。DROP DATABASE IF EXISTS mydb1,就算 mydb1 不,也的報(bào)錯(cuò)。l修改數(shù)據(jù)庫(kù)編碼:ALTER DATABASE mydb1 CHARACTER SET utf8修改數(shù)據(jù)庫(kù) mydb1 的編碼為 utf8。注意,在 MySQL 中所有的 UTF-8 編碼都不能使用中間的“-”,即 UTF-8 要書寫為 UTF8。3.3數(shù)據(jù)類型MySQL 與 Java 一樣,也有數(shù)據(jù)類型。MySQL 中數(shù)據(jù)類型主要應(yīng)用在列上。常用類型:llllllllllint:整型do

10、uble:浮點(diǎn)型,例如 double(5,2)表示最多 5 位,其中必須有 2 位小數(shù),即最大值為 999.99;decimal:泛型型,在表單錢方面使用該類型,因?yàn)閏har:固定長(zhǎng)度字符串類型; varchar:可變長(zhǎng)度字符串類型;text:字符串類型; blob:字節(jié)類型;date:日期類型,格式為:yyyy-MM-dd; time:時(shí)間類型,格式為:hh:mm:ss timestamp:時(shí)間戳類型;出現(xiàn)精度缺失問題;傳智播客教育高級(jí)實(shí)作培訓(xùn)!3.4 操作表l 創(chuàng)建表:CREATE TABLE 表名(列名列名.列類型, 列類型,);例如:再例如:lllll1.查看當(dāng)前數(shù)據(jù)庫(kù)中所有表名稱:S

11、HOW TABLES;查看指定表的創(chuàng)建語(yǔ)句:SHOW CREATE TABLE emp,查看 emp 表的創(chuàng)建語(yǔ)句; 查看表結(jié)構(gòu):DESC emp,查看 emp 表結(jié)構(gòu);刪除表:DROP TABLE emp,刪除 emp 表; 修改表:修改之添加列:給 stu 表添加 classname 列:ALTER TABLE stu ADD (classname varchar(100);修改之修改列類型:修改 stu 表的 gender 列類型為 CHAR(2): ALTER TABLE stu MODIFY gender CHAR(2);修改之修改列名:修改 stu 表的 gender 列名為 se

12、x: ALTER TABLE stu change gender sex CHAR(2);修改之刪除列:刪除 stu 表的 classname 列:ALTER TABLE stu DROP classname;2.3.4.修改之修改表名稱:修改 stu 表名稱為:5.ALTER TABLE stu RENAME TO;傳智播客教育CREATE TABLE emp(eidCHAR(6), enameVARCHAR(50),ageINT,genderVARCHAR(6), birthday DATE, hiredate DATE,salaryDECIMAL(7,2), resume VARCHAR

13、(1000);CREATE TABLE stu(sidCHAR(6), snameVARCHAR(20),ageINT,genderVARCHAR(10);高級(jí)實(shí)作培訓(xùn)!4DML4.1數(shù)據(jù)語(yǔ)法:INSERT INTO 表名(列名 1,列名 2, ) VALUES(值 1, 值 2)語(yǔ)法:INSERT INTO 表名 VALUES(值 1,值 2,)因?yàn)闆]有指定要的列,表示按創(chuàng)建表時(shí)列的順序所有列的值:注意:所有字符串?dāng)?shù)據(jù)必須使用單!4.2修改數(shù)據(jù)語(yǔ)法:UPDATE 表名SET 列名 1=值 1, 列名n=值 n WHERE條件4.3刪除數(shù)據(jù)語(yǔ)法:DELETE FROM表名 WHERE 條件語(yǔ)法

14、:TRUNCATE TABLE 表名雖然 TRUNCATE 和 DELETE 都可以刪除表的所有TRUNCATE 高!,但有原理不同。DELETE的效率沒有TRUNCATE 其實(shí)屬性 DDL 語(yǔ)句,因?yàn)樗窍?DROP TABLE,再 CREATE TABLE。而且 TRUNCATE 刪除的是無(wú)法的,但 DELETE 刪除的是可以的(是事務(wù)的知識(shí)!)。傳智播客教育TRUNCATE TABLE stu;DELETE FROM stu WHERE sid=s_1001003BDELETE FROM stu WHERE sname=chenQi OR age 30;DELETE FROM stu;U

15、PDATE stu SET sname=zhangSanSan, age=32, gender=female WHERE sid=s_1001;UPDATE stu SET sname=liSi, age=20 WHERE age50 AND gender=male;UPDATE stu SET sname=wangWu, age=30 WHERE age60 OR gender=female;UPDATE stu SET gender=female WHERE gender IS NULL UPDATE stu SET age=age+1 WHERE sname=zhaoLiu;INSERT

16、 INTO stu VALUES(s_1002, liSi, 32, female);INSERT INTO stu(sid, sname,age,gender) VALUES(s_1001, zhangSan, 23, male);INSERT INTO stu(sid, sname) VALUES(s_1001, zhangSan);高級(jí)實(shí)作培訓(xùn)!5DCL5.1創(chuàng)建用戶語(yǔ)法:CREATE USER 用戶名地址 IDENTIFIED BY ;5.2給用戶語(yǔ)法:GRANT 權(quán)限 1, , 權(quán)限 n ON 數(shù)據(jù)庫(kù).* TO 用戶名5.3撤銷語(yǔ)法:REVOKE 權(quán)限 1, , 權(quán)限 n ON數(shù)據(jù)庫(kù)

17、.* FORM用戶名5.4查看用戶權(quán)限語(yǔ)法:SHOW GRANTS FOR 用戶名5.5刪除用戶語(yǔ)法:DROP USER 用戶名5.6修改用戶語(yǔ)法:USE mysql;UPDATE USER SET PASSWORD=PASSWORD() WHERE User=用戶名 and Host=IP; FLUSH PRIVILEGES;傳智播客教育UPDATE USER SET PASSWORD=PASSWORD(1234) WHERE User=user2 and Host=localhost; FLUSH PRIVILEGES;DROP USER user1localhost;SHOW GRANT

18、S FOR user1localhost;REVOKE CREATE,ALTER,DROP ON mydb1.* FROM user1localhost;GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON mydb1.* TO user1localhost;GRANT ALL ON mydb1.* TO user2localhost;CREATE USER user1localhost IDENTIFIED BY 123;CREATE USER user2% IDENTIFIED BY 123;高級(jí)實(shí)作培訓(xùn)!語(yǔ)法(DQL)數(shù)據(jù)DQL 就

19、是數(shù)據(jù)給客戶端。語(yǔ)法:語(yǔ)言,數(shù)據(jù)庫(kù)執(zhí)行 DQL 語(yǔ)句對(duì)數(shù)據(jù)進(jìn)行改變,而是讓數(shù)據(jù)庫(kù)發(fā)送結(jié)果集SELECT selection_list /*要的列名稱*/FROM table_list /*要的表名稱*/WHERE condition /*行條件*/GROUP BY grou_columns /*對(duì)結(jié)果分組*/ HAVING condition /*分組后的行條件*/ ORDER BY sorting_columns /*對(duì)結(jié)果分組*/ LIMIT offset_start, row_count /*結(jié)果限定*/創(chuàng)建名:l學(xué)生表:stul雇員表:emp傳智播客教育CREATE TABLE stu

20、 ( sid CHAR(6),snameVARCHAR(50),ageINT,genderVARCHAR(50);INSERT INTO stu VALUES(S_1001, liuYi, 35, male); INSERT INTO stu VALUES(S_1002, chenEr, 15, female); INSERT INTO stu VALUES(S_1003, zhangSan, 95, male); INSERT INTO stu VALUES(S_1004, liSi, 65, female); INSERT INTO stu VALUES(S_1005, wangWu, 5

21、5, male);INSERT INTO stu VALUES(S_1006, zhaoLiu, 75, female); INSERT INTO stu VALUES(S_1007, sunQi, 25, male); INSERT INTO stu VALUES(S_1008, zhouBa, 45, female); INSERT INTO stu VALUES(S_1009, wuJiu, 85, male);INSERT INTO stu VALUES(S_1010, zhengShi, 5, female); INSERT INTO stu VALUES(S_1011, , NUL

22、L, NULL);字段名稱字段類型說明sidchar(6)學(xué)生學(xué)號(hào)snamevarchar(50)學(xué)生ageint學(xué)生gendervarchar(50)學(xué)生高級(jí)實(shí)作培訓(xùn)!l部分表:dept傳智播客教育CREATE TABLE dept(字段名稱字段類型說明deptnoint部分編碼dnamevarchar(50)部分名稱locvarchar(50)部分所在地點(diǎn)CREATE TABLE emp(empnoINT,enameVARCHAR(50), jobVARCHAR(50),mgrINT, hiredate DATE,salDECIMAL(7,2),commdecimal(7,2),deptn

23、oINT) ;INSERT INTO emp values(7369,SMITH,CLERK,7902,1980-12-17,800,NULL,20); INSERT INTO emp values(7499,ALLEN,SALESMAN,7698,1981-02-20,1600,300,30); INSERT INTO emp values(7521,WARD,SALESMAN,7698,1981-02-22,1250,500,30); INSERT INTO emp values(7566,JONES,MANAGER,7839,1981-04-02,2975,NULL,20); INSER

24、T INTO emp values(7654,MARTIN,SALESMAN,7698,1981-09-28,1250,1400,30); INSERT INTO emp values(7698,BLAKE,MANAGER,7839,1981-05-01,2850,NULL,30); INSERT INTO emp values(7782,CLARK,MANAGER,7839,1981-06-09,2450,NULL,10); INSERT INTO emp values(7788,SCOTT,ANALYST,7566,1987-04-19,3000,NULL,20); INSERT INTO

25、 emp values(7839,KING,PRESIDENT,NULL,1981-11-17,5000,NULL,10); INSERT INTO emp values(7844,TURNER,SALESMAN,7698,1981-09-08,1500,0,30); INSERT INTO emp values(7876,ADAMS,CLERK,7788,1987-05-23,1100,NULL,20); INSERT INTO emp values(7900,JAMES,CLERK,7698,1981-12-03,950,NULL,30);INSERT INTO emp values(79

26、02,FORD,ANALYST,7566,1981-12-03,3000,NULL,20); INSERT INTO emp values(7934,MILLER,CLERK,7782,1982-01-23,1300,NULL,10);字段名稱字段類型說明empnoint員工編號(hào)enamevarchar(50)員工jobvarchar(50)員工工作mgrint領(lǐng)導(dǎo)編號(hào)hiredatedate入職日期saldecimal(7,2)月薪commdecimal(7,2)獎(jiǎng)金deptnoint部分編號(hào)高級(jí)實(shí)作培訓(xùn)!1基礎(chǔ)1.1所有列SELECT * FROM stu;1.2指定列SELECT sid

27、, sname, age FROM stu;2條件2.1條件條件lllllll就是在時(shí)給出 WHERE 子句,在 WHERE 子句中可以使用如下運(yùn)算符及關(guān)鍵字:=、!=、=; BETWEENAND;IN(set); IS NULL; AND;OR; NOT;2.250 的為女,并且SELECT * FROM stuWHERE gender=female AND ge=20 AND age=40;或者SELECT *FROM stuWHERE age BETWEEN 20 AND 40;2.8非男的學(xué)生SELECT *FROM stuWHERE gender!=male;或者SELECT *FR

28、OM stuWHERE gendermale;或者SELECT *FROM stuWHERE NOT gender=male;傳智播客教育高級(jí)實(shí)作培訓(xùn)!2.9姓名不為 null 的學(xué)生SELECT *FROM stuWHERE NOT sname IS NULL;或者SELECT *FROM stuWHERE sname IS NOT NULL;3模糊當(dāng)想姓名中包含 a 字母的學(xué)生需要使用模糊了。模糊需要使用關(guān)鍵字 LIKE。3.1姓名由 5 個(gè)字母的學(xué)生SELECT *FROM stuWHERE sname LIKE ;模糊必須使用 LIKE 關(guān)鍵字。其中“_”匹配任意一個(gè)字母,5 個(gè)“_”

29、表示 5 個(gè)任意字母。3.2姓名由 5 個(gè)字母,并且第 5 個(gè)字母為“i”的學(xué)生SELECT *FROM stuWHERE sname LIKE i;3.3姓名以“z”開頭的學(xué)生SELECT *FROM stuWHERE sname LIKE z%;其中“%”匹配 0n 個(gè)任何字母。3.4姓名中第 2 個(gè)字母為“i”的學(xué)生SELECT *FROM stuWHERE sname LIKE _i%;3.5姓名中包含“a”字母的學(xué)生SELECT *傳智播客教育高級(jí)實(shí)作培訓(xùn)!FROM stuWHERE sname LIKE %a%;4字段4.1去除重復(fù)去除重復(fù)(兩行或兩行以上中系列的上的數(shù)據(jù)都相同),

30、例如 emp 表中 sal 字段就相同的。當(dāng)只emp 表的 sal 字段時(shí),那么會(huì)出現(xiàn)重復(fù),那么想去除重復(fù),需要使用 DISTINCT:SELECT DISTINCT sal FROM emp;4.2查看雇員的月薪與傭金之和因?yàn)?sal 和 comm 兩列的類型都是數(shù)值類型,所以可以做加運(yùn)算。如果 sal 或 comm 中有一個(gè)字段不是數(shù)值類型,那么會(huì)出錯(cuò)。SELECT *,sal+comm FROM emp;comm 列有很多的值為 NULL,因?yàn)槿魏螙|西與 NULL 相加結(jié)果還是 NULL,所以結(jié)算結(jié)果可能會(huì)出現(xiàn) NULL。下面使用了把 NULL 轉(zhuǎn)換成數(shù)值 0 的函數(shù) IFNULL:SE

31、LECT *,sal+IFNULL(comm,0) FROM emp;4.3給列名添加別名在上面為 total:中出現(xiàn)列名為 sal+IFNULL(comm,0),這很不美觀,現(xiàn)在我們給這一列給出一個(gè)別名,SELECT *, sal+IFNULL(comm,0) AS total FROM emp;給列起別名時(shí),是可以省略 AS 關(guān)鍵字的:SELECT *,sal+IFNULL(comm,0) total FROM emp;5排序5.1所有學(xué)生,按升序排序SELECT *FROM stuORDER BY sage ASC;或者SELECT *FROM stu ORDER BY sage;傳智播

32、客教育高級(jí)實(shí)作培訓(xùn)!5.2所有學(xué)生,按降序排序SELECT *FROM stuORDER BY age DESC;5.3所有雇員,按月薪降序排序,如果月薪相同時(shí),按編號(hào)升序排序SELECT * FROM empORDER BY sal DESC,empno ASC;6聚合函數(shù)聚合函數(shù)是用來(lái)做縱向運(yùn)算的函數(shù):lllllCOUNT():統(tǒng)計(jì)指定列不為 NULL 的行數(shù);MAX():計(jì)算指定列的最大值,如果指定列是字符串類型,那么使用字符串排序運(yùn)算; MIN():計(jì)算指定列的最小值,如果指定列是字符串類型,那么使用字符串排序運(yùn)算; SUM():計(jì)算指定列的數(shù)值和,如果指定列類型不是數(shù)值類型,那么計(jì)算

33、結(jié)果為 0; AVG():計(jì)算指定列的平均值,如果指定列類型不是數(shù)值類型,那么計(jì)算結(jié)果為 0;6.1COUNT當(dāng)需要縱向統(tǒng)計(jì)時(shí)可以使用 COUNT()。lemp 表中數(shù):SELECT COUNT(*) AS cnt FROM emp;lemp 表中有傭金的人數(shù):SELECT COUNT(comm) cnt FROM emp;注意,因?yàn)?count()函數(shù)中給出的是 comm 列,那么只統(tǒng)計(jì) comm 列非 NULL 的行數(shù)。lemp 表中月薪大于 2500 的人數(shù):SELECT COUNT(*) FROM empWHERE sal 2500;l統(tǒng)計(jì)月薪與傭金之和大于 2500 元的人數(shù):SEL

34、ECT COUNT(*) AS cnt FROM emp WHERE sal+IFNULL(comm,0) 2500;l有傭金的人數(shù),以及有領(lǐng)導(dǎo)的人數(shù):SELECT COUNT(comm), COUNT(mgr) FROM emp;傳智播客教育高級(jí)實(shí)作培訓(xùn)!6.2SUM 和AVG當(dāng)需要縱向求和時(shí)使用 sum()函數(shù)。l所有雇員月薪和:SELECT SUM(sal) FROM emp;l所有雇員月薪和,以及所有雇員傭金和:SELECT SUM(sal), SUM(comm) FROM emp;l所有雇員月薪+傭金和:SELECT SUM(sal+IFNULL(comm,0) FROM emp;l

35、統(tǒng)計(jì)所有員工平均工資:SELECT SUM(sal), COUNT(sal) FROM emp;或者SELECT AVG(sal) FROM emp;6.3MAX 和MINl最高工資和最低工資:SELECT MAX(sal), MIN(sal) FROM emp;7分組當(dāng)需要分組來(lái)分組。時(shí)需要使用 GROUP BY 子句,例如每個(gè)部門的工資和,這說明要使用部分7.1分組l每個(gè)部門的部門編號(hào)和每個(gè)部門的工資和:SELECT deptno, SUM(sal)FROM emp GROUP BY deptno;l每個(gè)部門的部門編號(hào)以及每個(gè)部門的人數(shù):SELECT deptno,COUNT(*)FROM

36、 emp GROUP BY deptno;l每個(gè)部門的部門編號(hào)以及每個(gè)部門工資大于 1500 的人數(shù):SELECT deptno,COUNT(*)FROM emp傳智播客教育高級(jí)實(shí)作培訓(xùn)!WHERE sal1500GROUP BY deptno;7.2HAVING 子句l工資總和大于 9000 的部門編號(hào)以及工資和:SELECT deptno, SUM(sal)FROM emp GROUP BY deptnoHAVING SUM(sal) 9000;注意,WHERE 是對(duì)分組前的條件,如果某行沒有滿足 WHERE 子句的條件,那么這行參加分組;而 HAVING 是對(duì)分組后數(shù)據(jù)的約束。8LIMI

37、TLIMIT 用來(lái)限定結(jié)果的起始行,以及總行數(shù)。8.15 行,起始行從 0 開始SELECT * FROM emp LIMIT 0, 5;注意,起始行從 0 開始,即第一行開始!8.210 行,起始行從 3 開始SELECT * FROM emp LIMIT 3, 10;8.3分頁(yè)如果一頁(yè)為 10 條,希望查看第 3 頁(yè)應(yīng)該怎么查呢?lll第一頁(yè)第二頁(yè)第三頁(yè)起始行為 0,一共起始行為 10,一共起始行為 20,一共10 行;10 行;10 行;完整性約束完整性約束是為了表的數(shù)據(jù)的正確性!如果數(shù)據(jù)不正確,那么一開始就不能添加到表中。傳智播客教育高級(jí)實(shí)作培訓(xùn)!1主鍵當(dāng)某一列添加了主鍵約束后,那么這

38、一列的數(shù)據(jù)就不能重復(fù)出現(xiàn)。這樣每行中其主鍵列的值就是這一行的唯一標(biāo)識(shí)。例如學(xué)生的學(xué)號(hào)可以用來(lái)做唯一標(biāo)識(shí),而學(xué)生的姓名是不能做唯一標(biāo)識(shí)的,因?yàn)閷W(xué)習(xí)有可能同名。主鍵列的值不能為 NULL,也不能重復(fù)! 指定主鍵約束使用 PRIMARY KEY 關(guān)鍵字l創(chuàng)建表:定義列時(shí)指定主鍵:CREATE TABLE stu(sidsname age genderCHAR(6) PRIMARY KEY,VARCHAR(20), INT, VARCHAR(10);l創(chuàng)建表:定義列之后指定主鍵:CREATE TABLE stu(sidsname age genderCHAR(6),VARCHAR(20), INT,

39、VARCHAR(10),PRIMARY KEY(sid);l修改表時(shí)指定主鍵:ALTER TABLE stuADD PRIMARY KEY(sid);l刪除主鍵(只是刪除主鍵約束,而刪除主鍵列):ALTER TABLE stu DROP PRIMARY KEY;2主鍵自增長(zhǎng)MySQL 提供了主鍵自動(dòng)增長(zhǎng)的功能!這樣用戶就不用再為是否有主鍵是否重復(fù)而煩惱了。當(dāng)主鍵設(shè)置為自動(dòng)增長(zhǎng)后,在沒有給出主鍵值時(shí),主鍵的值會(huì)自動(dòng)生成,而且是最大主鍵值+1,也就不會(huì)出現(xiàn)重復(fù)主鍵的可能了。l創(chuàng)建表時(shí)設(shè)置主鍵自增長(zhǎng)(主鍵必須是整型才可以自增長(zhǎng)):CREATE TABLE stu(sid INT PRIMARY KE

40、Y AUTO_INCREMENT,snameage genderVARCHAR(20),INT, VARCHAR(10)傳智播客教育高級(jí)實(shí)作培訓(xùn)!);l修改表時(shí)設(shè)置主鍵自增長(zhǎng):ALTER TABLE stu CHANGE sid sid INT AUTO_INCREMENT;l修改表時(shí)刪除主鍵自增長(zhǎng):ALTER TABLE stu CHANGE sid sid INT;3非空指定非空約束的列不能沒有值,也就是說在時(shí),對(duì)添加了非空約束的列一定要給值;在修改時(shí),不能把非空列的值設(shè)置為 NULL。l指定非空約束:CREATE TABLE stu(sid INT PRIMARY KEY AUTO_IN

41、CREMENT, sname VARCHAR(10) NOT NULL,ageINT,genderVARCHAR(10);當(dāng)為 sname 字段指定為非空后,在向 stu 表中報(bào)錯(cuò):INSERT INTO stu(sid) VALUES(1);時(shí),必須給 sname 字段指定值,否則會(huì)的中 sname 沒有指定值,所以會(huì)報(bào)錯(cuò)!4唯一還可以為字段指定唯一約束!當(dāng)為字段指定唯一約束后,那么字段的值必須是唯一的。這一點(diǎn)與主鍵相似!例如給 stu 表的 sname 字段指定唯一約束:CREATE TABLE tab_ab(sid INT PRIMARY KEY AUTO_INCREMENT, snam

42、e VARCHAR(10) UNIQUE);INSERT INTO sname(sid, sname) VALUES(1001, zs);INSERT INTO sname(sid, sname) VALUES(1002, zs);當(dāng)兩次相同的名字時(shí),MySQL 會(huì)報(bào)錯(cuò)!5外鍵主外鍵是表與表關(guān)聯(lián)的唯一途徑!外鍵是另一張表的主鍵!例如員工表與部門表之間就關(guān)聯(lián),其中員工表中的部門編號(hào)傳智播客教育高級(jí)實(shí)作培訓(xùn)!字段就是外鍵,是相對(duì)部門表的外鍵。我們?cè)賮?lái)看 BBS 系統(tǒng)中:用戶表(t_user)、。表(t_section)、帖子表(t_topic)三者之間的例如在t_section 表中 sid 為

43、1 的即 zs!例如在 t_topic 表中 tid 為 2 的的作者是 ww。說明有一個(gè)叫 java,版主是 t_user 表中 uid 為 1 的用戶,是名字為“Java 是咖啡”的帖子,它是 java 版塊的帖子,它外鍵就是用來(lái)約束這一列的值必須是另一張表的主鍵值!l創(chuàng)建 t_user 表,指定 uid 為主鍵列:CREATE TABLE t_user(uid INT PRIMARY KEY AUTO_INCREMENT, unameVARCHAR(20) UNIQUE NOT NULL);l創(chuàng)建 t_section 表,指定 sid 為主鍵列,u_id 為相對(duì) t_user 表的 ui

44、d 列的外鍵:CREATE TABLE t_section(sid INT PRIMARY KEY AUTO_INCREMENT,snameu_id INT,VARCHAR(30),CONSTRAINT fk_t_user FOREIGN KEY(u_id) REFERENCES t_user(uid);l修改 t_section 表,指定 u_id 為相對(duì) t_user 表的 uid 列的外鍵:ALTER TABLE t_sectionADD CONSTRAINT fk_t_user傳智播客教育高級(jí)實(shí)作培訓(xùn)!FOREIGN KEY(u_id)REFERENCES t_user(uid);l修

45、改 t_section 表,刪除 u_id 的外鍵約束:ALTER TABLE t_sectionDROP FOREIGN KEY fk_t_user;6表與表之間的l一對(duì)一:例如 t_表和 t_card 表,即人和。這種情況需要找出主從,即誰(shuí)是主表,誰(shuí)是從表。人可以沒有,但必須要有行,所以人是主表,而身份證是從表。設(shè)計(jì)從表可以有兩種方案:在 t_card 表中添加外鍵列(相對(duì) t_user 表),并且給外鍵添加唯一約束;給 t_card 表的主鍵添加外鍵約束(相對(duì) t_user 表),即 t_card 表的主鍵也是外鍵。l一對(duì)多(多對(duì)一):最為常見的就是一對(duì)多!一對(duì)多和多對(duì)一,這是從哪個(gè)角度

46、去看得出來(lái)的。t_user 和 t_section 的,從 t_user 來(lái)看就是一對(duì)多,而從 t_section 的角度來(lái)看就是多對(duì)一!這種情況都是在多方創(chuàng)建外鍵!多對(duì)多:例如 t_stu 和 t_teacher 表,即一個(gè)學(xué)生可以有多個(gè)l,而一個(gè)也可以有多個(gè)學(xué)生。這種情況通常需要?jiǎng)?chuàng)建中間表來(lái)處理多對(duì)多。例如再創(chuàng)建一張表 t_stu_tea 表,給出兩個(gè)外鍵,一個(gè)相對(duì) t_stu 表的外鍵,另一個(gè)相對(duì) t_teacher 表的外鍵。編碼1查看 MySQL 編碼SHOW VARIABLES LIKE char%;因?yàn)楫?dāng)初安裝時(shí)指定了字符集為 UTF8,所以所有的編碼都是 UTF8。lchara

47、cter_set_:你發(fā)送的數(shù)據(jù)必須與來(lái)解讀客戶端發(fā)送過來(lái)的數(shù)據(jù); character_set_connection:通過該編碼與傳智播客教育指定的編碼一致!服務(wù)器會(huì)使用該編碼l一致!該編碼導(dǎo)致亂碼!當(dāng)執(zhí)行的是查高級(jí)實(shí)作培訓(xùn)!詢語(yǔ)句時(shí),客戶端發(fā)送過來(lái)的數(shù)據(jù)會(huì)先轉(zhuǎn)換成 connection 指定的編碼。但只要客戶端發(fā)送過來(lái)的數(shù)據(jù)與指定的編碼一致,那么轉(zhuǎn)換就出現(xiàn)問題;lcharacter_set_database:數(shù)據(jù)庫(kù)默認(rèn)編碼,在創(chuàng)建數(shù)據(jù)庫(kù)時(shí),如果沒有指定編碼,那么默認(rèn)使用 database 編碼;character_set_server:MySQL 服務(wù)器默認(rèn)編碼;llcharacter_se

48、t_results:響應(yīng)的編碼,即用 result 指定的編碼來(lái)解碼;結(jié)果返回給客戶端的編碼。這說明客戶端必須使2臺(tái)編碼修改 character_set_、character_set_results、character_set_connection 為 GBK,就出現(xiàn)亂碼了。但其實(shí)只需要修改 character_set_和 character_set_results。臺(tái)的編碼只能是 GBK,而不能修改為 UTF8,這就出現(xiàn)一個(gè)問題??蛻舳税l(fā)送的數(shù)據(jù)是 GBK,而 character_set_為 UTF8,這就說明客戶端數(shù)據(jù)到了服務(wù)器端后一定會(huì)出現(xiàn)亂碼。既然不能修改臺(tái)的編碼,那么只能修改 cha

49、racter_set_為 GBK 了。服務(wù)器發(fā)送給客戶端的數(shù)據(jù)編碼為 character_set_result,它如果是 UTF8,那么臺(tái)使用 GBK解碼也一定會(huì)出現(xiàn)亂碼。因?yàn)闊o(wú)法修改臺(tái)編碼,所以只能把 character_set_result 修改為 GBK。ll修改 character_set_變量:set character_set_=gbk;修改 character_set_results 變量:set character_set_results=gbk;設(shè)置編碼只對(duì)當(dāng)前連接有效,這說明每次登錄 MySQL 提示符后都要去修改這兩個(gè)編碼,但可以通過修改配置文件來(lái)處理這一問題:配置文件路徑:D:Program FilesMySQLMySQL Server 5.1 my.ini3MySQL 工具使用 MySQL 工具是出現(xiàn)亂碼的,因?yàn)樗鼈儠?huì)每次連接時(shí)都修改 character_set_、出character_set_results、character

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論