mysql數(shù)據(jù)庫知識點總結_第1頁
mysql數(shù)據(jù)庫知識點總結_第2頁
mysql數(shù)據(jù)庫知識點總結_第3頁
mysql數(shù)據(jù)庫知識點總結_第4頁
mysql數(shù)據(jù)庫知識點總結_第5頁
已閱讀5頁,還剩39頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、高級軟件人才實作培訓專家!MySQL數(shù)據(jù)庫i數(shù)據(jù)庫概念(了解)i.i什么是數(shù)據(jù)庫數(shù)據(jù)庫就是用來存儲和管理數(shù)據(jù)的倉庫!數(shù)據(jù)庫存儲數(shù)據(jù)的優(yōu)先:北京傳智播客教育www.itcast.c n高級軟件人才實作培訓專家!www* 直8 st. cn可存儲大量數(shù)據(jù);方便檢索;保持數(shù)據(jù)的一致性、完整性;安全,可共享;通過組合分析,可產生新數(shù)據(jù)。數(shù)據(jù)庫具有原子性,數(shù)據(jù)不可再分割!1.2數(shù)據(jù)庫的發(fā)展歷程沒有數(shù)據(jù)庫,使用磁盤文件存儲數(shù)據(jù); 層次結構模型數(shù)據(jù)庫; 網狀結構模型數(shù)據(jù)庫;關系結構模型數(shù)據(jù)庫:使用二維表格來存儲數(shù)據(jù); 關系-對象模型數(shù)據(jù)庫;MySQL就是關系型數(shù)據(jù)庫!1.3常見數(shù)據(jù)庫Oracle :甲骨文;

2、DB2: IBM ;SQL Serve:微軟;Sybase:賽爾斯;MySQL:甲骨文;1.4理解數(shù)據(jù)庫我們現(xiàn)在所說的數(shù)據(jù)庫泛指關“系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS -Relatio nal database man ageme ntsystem ) ”,即“數(shù)據(jù)庫服務器”。rRDBMSManagerdatabaseldatabasedatabasekdatabase!J當我們安裝了數(shù)據(jù)庫服務器后,就可以在數(shù)據(jù)庫服務器中創(chuàng)建數(shù)據(jù)庫,每個數(shù)據(jù)庫中還可以包 含多張表。rDATABASEtableltable2tablestable4數(shù)據(jù)庫表就是一個多行多列的表格。在創(chuàng)建表時,需要指定表的列數(shù),以及列

3、名稱,列類型等 信息。而不用指定表格的行數(shù),行數(shù)是沒有上限的。下面是tab_student表的結構:Fs_id1varchar(lO)s_namevarchar(2O)intssexvarchar(lO)當把表格創(chuàng)建好了之后,就可以向表格中添加數(shù)據(jù)了。向表格添加數(shù)據(jù)是以行為單位的!下面 是 s_student表的記錄:s ids names ages sexS_1001zhangSan23maleS_1002liSi32femaleS 1003wan gWu44male大家要學會區(qū)分什么是表結構,什么是表記錄。1.5應用程序與數(shù)據(jù)庫應用程序使用數(shù)據(jù)庫完成對數(shù)據(jù)的存儲!北京傳智播客教育www.i

4、tcast.c n高級軟件人才實作培訓專家!應用毘序數(shù)攝專般務蠱或戴眞庫譴求數(shù)熱井能示結果2 安裝MySQL數(shù)據(jù)庫2.1 安裝 MySQL參考:MySQL安裝圖解.doc2.2 MySQL目錄結構MySQL 的數(shù)據(jù)存儲目錄為 data,data 目錄通常在 C:Documents and SettingsAII UsersApplication DataMySQLMySQL Server 5.1data位置。在data下的每個目錄都代表一個數(shù)據(jù)庫。MySQL的安裝目錄下:bin目錄中都是可執(zhí)行文件;my.ini文件是MySQL的配置文件;3 基本命令3.1啟動和關閉mysql服務器啟動:net

5、 start mysql(后面不加分號);關閉:net stop mysql(后面不加分號);在啟動mysql服務后,打開 windows任務管理器,會有一個名為mysqld.exe的進程運行,所以mysqld.exe才是MySQL服務器程序。3.2 客戶端登錄退出 mysql在啟動MySQL服務器后,我們需要使用管理員用戶登錄MySQL服務器,然后來對服務器進行操作。登錄 MySQL需要使用MySQL的客戶端程序:mysql.exe北京傳智播客教育高級軟件人才實作培訓專家!登錄: mysql -u root -p 123 -h localhost ;-u:后面的root是用戶名,這里使用的是

6、超級管理員root;-p:后面的123是密碼,這是在安裝 MySQL時就已經指定的密碼;-h :后面給出的localhost是服務器主機名,它是可以省略的,例如:mysql -u root -p 123 ; 退出:quit 或 exit ;在登錄成功后,打開windows任務管理器,會有一個名為mysql.exe的進程運行,所以mysql.exe 是客戶端程序。SQL語句1 SQL概述1.1 什么是SQLSQL( Structured Query Language )是"結構化查詢語言”,它是對關系型數(shù)據(jù)庫的操作語言。它 可以應用到所有關系型數(shù)據(jù)庫中,例如:MySQL、Oracle、

7、SQL Server等。SQ標準(ANSI/ISO)有:SQL-92 1992年發(fā)布的SQL語言標準;SQL:1999: 1999年發(fā)布的SQL語言標簽; SQL:2003: 2003年發(fā)布的SQL語言標簽;這些標準就與 JDK的版本一樣,在新的版本中總要有一些語法的變化。不同時期的數(shù)據(jù)庫對不 同標準做了實現(xiàn)。雖然SQL可以用在所有關系型數(shù)據(jù)庫中,但很多數(shù)據(jù)庫還都有標準之后的一些語法,我們可以 稱之為“方言”。例如MySQL中的LIMIT語句就是MySQL獨有的方言,其它數(shù)據(jù)庫都不支持!當然, Oracle或SQL Server都有自己的方言。1.2 語法要求SQL語句可以單行或多行書寫,以分

8、號結尾;可以用空格和縮進來來增強語句的可讀性;關鍵字不區(qū)別大小寫,建議使用大寫;2分類DDL( Data Definition Language):數(shù)據(jù)定義語言,用來定義數(shù)據(jù)庫對象:庫、表、列等; DML ( Data Manipulation Language):數(shù)據(jù)操作語言,用來定義數(shù)據(jù)庫記錄(數(shù)據(jù)) DCL( Data Control Language):數(shù)據(jù)控制語言,用來定義訪問權限和安全級別; DQL( Data Query Language):數(shù)據(jù)查詢語言,用來查詢記錄(數(shù)據(jù)) 。3DDL3.1基本操作查看所有數(shù)據(jù)庫名稱:SHOW DATABASES 切換數(shù)據(jù)庫:USE mydbl

9、,切換到mydbl數(shù)據(jù)庫;3.2操作數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫: CREATE DATABASE IF NOT EXISTS mydbl創(chuàng)建數(shù)據(jù)庫,例如: CREATEDATABASEmydb1,創(chuàng)建一個名為 mydb1的數(shù)據(jù)庫。如果這個數(shù)據(jù) 已經存在,那么會報錯。例如CREATE DATABASE IF NOT EXISTS mydb在名為 mydb1的數(shù)據(jù)庫不存在時創(chuàng)建該庫,這樣可以避免報錯。刪除數(shù)據(jù)庫: DROP DATABASE IF EXISTS mydb1刪除數(shù)據(jù)庫,例如:DROP DATABASE mydb1刪除名為mydb1的數(shù)據(jù)庫。如果這個數(shù)據(jù)庫不存在,那么會報錯。 DROP DATA

10、BASE IF EXISTS mydb就算 mydb1不存在,也不會的報錯。修改數(shù)據(jù)庫編碼: ALTER DATABASE mydb1 CHARACTER SET utf8修改數(shù)據(jù)庫 mydb1的編碼為utf8。注意,在MySQL中所有的UTF-8編碼都不能使用中間的 “ 即UTF-8要書寫為UTF&3.3數(shù)據(jù)(列)類型MySQL與Java 樣,也有數(shù)據(jù)類型。MySQL中數(shù)據(jù)類型主要應用在列上。常用類型:int:整型double :浮點型,例如double(5,2)表示最多5位,其中必須有2位小數(shù),即最大值為999.99 ; decimal:浮點型,在表示錢方面使用該類型,因為不會出現(xiàn)

11、精度缺失問題;char :固定長度字符串類型;varchar :可變長度字符串類型;text:字符串類型;blob :字節(jié)類型;date :日期類型,格式為:yyyy-MM-dd ;time :時間類型,格式為:hh:mm:sstimestamp :時間戳類型;3.4 操作表創(chuàng)建表:CREATE TABL表名(列名列類型,列名列類型,);例如:CREATE TABLE stu(sidCHAR(6),snameVARCHAR(20),ageINT,genderVARCHAR(10); 再例如:CREATE TABLE emp(eidCHAR(6),enameVARCHAR(50),ageINT,

12、genderVARCHAR(6),birthdayDATE,hiredateDATE,salaryDECIMAL(7,2),resumeVARCHAR(1000);查看當前數(shù)據(jù)庫中所有表名稱:SHOW TABLES查看指定表的創(chuàng)建語句:SHOW CREATE TABLE emi查看emp表的創(chuàng)建語句;查看表結構:DESC emp查看emp表結構;刪除表:DROP TABLE emp刪除emp表;修改表:1. 修改之添加列:給 stu表添加class name列:ALTER TABLEtu ADD (class name varchar(100);2. 修改之修改列類型:修改stu表的gende

13、r列類型為CHAR(2):ALTER TABLE stMODIFY gender CHAR(2);3. 修改之修改列名:修改 stu表的gender列名為sex:ALTER TABLE stuha nge gen der sex CHAR(2);4. 修改之刪除列:刪除 stu表的class name列:ALTER TABLE stDROP class name5. 修改之修改表名稱:修改stu表名稱為student:ALTER TABLE stRENAME TO stude nt4 DML4.1插入數(shù)據(jù)語法:INSERT INT0表名(列名1,列名2,)VALUES值1,值2)INSERT

14、INTO stu(sid, sname,age,gender) VALUES('s_1001', 'zhangSan', 23, 'male');INSERT INTO stu(sid, sname) VALUES('s 1001', 'zhangSan');語法:INSERT INTO表名 VALUES值 1,值 2,)因為沒有指定要插入的列,表示按創(chuàng)建表時列的順序插入所有列的值:INSERT INTO stu VALUES('s 1002', 'liSi', 32, 'f

15、emale');注意:所有字符串數(shù)據(jù)必須使用單引用!4.2修改數(shù)據(jù)語法:UPDATE表名 SET列名 仁值1,列名 門=值n WHERE條件UPDATE stu SET snamd=hangSanSan age='32 ;gender='female'WHERE sid=s_1001UPDATE stu SET sname=Si;age='2O'WHERE age>50 AND gender=maleUPDATE stu SET snameWangWu;age='3O 'WHERE age>60 OR gende>

16、;4emaleUPDATE stu SET gendeifemale' WHERE gender IS NULLUPDATE stu SET age=age+1 WHERE snam'e=aoLiu'4.3刪除數(shù)據(jù)語法:DELETE FROM表名WHERE 條件DELETE FROM stu WHERE sid=_1001' 003BDELETE FROM stu WHERE snamechenQi' OR age > 30;DELETE FROM stu;語法:TRUNCATE TABLE表名TRUNCATE TABLE stu;雖然TRUNCA

17、TE和DELETE都可以刪除表的所有記錄,但有原理不同。DELETE的效率沒有TRUNCATE高!TRUNCATE其實屬性 DDL語句,因為它是先 DROP TABLE再 CREATETABLE而且 TRUNCATE! 除的記錄是無法回滾的,但DELETE!除的記錄是可以回滾的(回滾是事務的知識!)。5 DCL5.1創(chuàng)建用戶語法:CREATE USER用戶名 地址 IDENTIFIED BY?密碼'CREATE USER user1localhost IDENTIFIED Y3 'CREATE USER user2% IDENTIFIED BY1'23 '5.2

18、給用戶授權語法:GRANT權限1,權限n ON數(shù)據(jù)庫.* TO用戶名GRANT CREATE,ALTER,DROISERT,UPDATE,DELETE,SELECT ON mydb1.* TO user1localhost;GRANT ALL ON mydb1.* TO user2localhost;5.3撤銷授權語法:REVOKE權限1,權限n ON數(shù)據(jù)庫.* FORM用戶名REVOKE CREATE,ALTER,DROPONmydb1.*FROMuser1localhost;5.4查看用戶權限語法:SHOW GRANTS FOF用戶名SHOW GRANTS FOR user1localho

19、st;5.5刪除用戶語法:DROP USER用戶名DROP USER user1localhost;5.6 修改用戶密碼語法:USE mysql;UPDATE USER SET PASSWORD=PASSWO密碼('WHERE User=用戶名and Host= 'IP'FLUSH PRIVILEGES;UPDATE USER SET PASSWORD=PASSWORD('1234') WHERE User='user2' and Hostrihost'FLUSH PRIVILEGES;數(shù)據(jù)查詢語法(DQL)DQL就是數(shù)據(jù)查詢語言

20、,數(shù)據(jù)庫執(zhí)行DQL語句不會對數(shù)據(jù)進行改變,而是讓數(shù)據(jù)庫發(fā)送結果集給客戶端。語法:SELECT selection_list /*要查詢的列名稱 */FROM table_list /*要查詢的表名稱*/WHERE condition /* 行條件 */GROUP BY group in g_colu mns /* 對結果分組 */HAVING condition /*分組后的行條件*/ORDER BY sorting_columns /*對結果分組 */LIMIT offset_start, row_count /* 結果限定 */創(chuàng)建名:學生表:stu字段名稱字段類型說明sidchar(6)

21、學生學號snamevarchar(50)學生姓名ageint學生年齡gendervarchar(50)學生性別CREATE TABLE stu (sid CHAR(6),sn ameVARCHAR(50),age INT,gen der VARCHAR(50);INSERT INTO stu VALUES('S_1001', 'liuYi', 35, 'male');INSERT INTO stu VALUES('S_1002', 'chenEr', 15, 'female');INSERT INT

22、O stu VALUES('S_1003', 'zhangSan', 95, 'male');INSERT INTO stu VALUES('S_1004', 'liSi', 65, 'female');INSERT INTO stu VALUES('S_1005', 'wan gWu', 55, 'male');INSERT INTO stu VALUES('S_1006', 'zhaoLiu', 75, 'f

23、emale');INSERT INTO stu VALUES('S_1007', 'sun Qi', 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', 'zhen

24、gShi', 5, 'female');INSERT INTO stu VALUES('S 1011', 'xxx', NULL, NULL);雇員表:emp北京傳智播客教育www.itcast.c n高級軟件人才實作培訓專家!www. itca 字段名稱字段類型說明empnoint員工編號enamevarchar(50)員工姓名jobvarchar(50)員工工作mgrint領導編號hiredatedate入職日期saldecimal(7,2)月薪commdecimal(7,2)獎金deptnoint部分編號CREATE TABLE e

25、mp(emp noINT,en ameVARCHAR(50)jobVARCHAR(50),mgrINT,hiredateDATE,salDECIMAL(7,2),commdecimal(7,2),dept noINTINSERT 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

26、,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);INSERT INTO emp values(7654,'MARTIN','SALESMAN',7698,'1981-09-28'

27、;,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-

28、19',3000,NULL,20);INSERT INTO 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

29、-05-23',1100,NULL,20);INSERT INTO emp values(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);INSERT INTO emp values(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);INSERT INTO emp values(7934,'MILLER','CLERK',7782,'198

30、2-01-23',1300,NULL,10);部分表:dept字段名稱字段類型說明deptnoint部分編碼dnamevarchar(50)部分名稱locvarchar(50)部分所在地點CREATE TABLE dept(dept noINT,dn amevarchar(14),loc varchar(13);INSERT INTO dept values(10, 'ACCOUNTING', 'NEW YORK');INSERT INTO dept values(20, 'RESEARCH', 'DALLAS');INS

31、ERT INTO dept values(30, 'SALES', 'CHICAGO');INSERT INTO dept values(40, 'OPERATIONS', 'BOSTON');1 基礎查詢1.1 查詢所有列SELECT * FROM stu;1.2 查詢指定列SELECT sid, sname, age FROM stu;2 條件查詢2.1 條件查詢介紹條件查詢就是在查詢時給出WHERE子句,在 WHERE子句中可以使用如下運算符及關鍵字:=、!=、=、=;BETWEENANDIN(set);IS NULLAND

32、;OR;NOT;2.2查詢性別為女,并且年齡50的記錄SELECT * FROM stuWHERE gender='female' AND ge<50;2.3 查詢學號為S_1001,或者姓名為liSi的記錄SELECT * FROM stuWHERE sid ='S_1001' OR sname='liSi'2.4 查詢學號為 S_1001, S_1002, S_1003的記錄SELECT * FROM stuWHERE sid IN ('S_1001','S_1002','S_1003')

33、;2.5 查詢學號不是 S_1001, S_1002,S_1003的記錄SELECT * FROM tab_studentWHERE s_number NOT IN ('S_1001','S_1002','S_1003');2.6 查詢年齡為null的記錄SELECT * FROM stuWHERE age IS NULL;2.7 查詢年齡在20到40之間的學生記錄SELECT *FROM stuWHERE age>=20 AND age<=40;或者SELECT *FROM stuWHERE age BETWEEN 20 AND 4

34、0;2.8查詢性別非男的學生記錄SELECT *FROM stuWHERE gender!='male'或者SELECT *FROM stuWHERE gender<>'male'或者SELECT *FROM stuWHERE NOT gender='male'2.9查詢姓名不為null的學生記錄SELECT *FROM stuWHERE NOT sname IS NULL;或者SELECT *FROM stuWHERE sname IS NOT NULL;3模糊查詢當想查詢姓名中包含 a字母的學生時就需要使用模糊查詢了。模糊查詢需要

35、使用關鍵字LIKE3.1 查詢姓名由5個字母構成的學生記錄SELECT *FROM stuWHERE sname LIKE ''模糊查詢必須使用 LIKE關鍵字。其中“匹配任意一個字母,5個“”表示5個任意字母。3.2查詢姓名由5個字母構成,并且第 5個字母為“ i”的學生記錄SELECT *FROM stuWHERE sname LIKE 'i'3.3 查詢姓名以“ z”開頭的學生記錄SELECT *FROM stuWHERE sname LIKE 'z%'其中“ ”匹配0n個任何字母。3.4查詢姓名中第2個字母為“ i”的學生記錄SELECT

36、 *FROM stuWHERE sname LIKE '_i%'3.5查詢姓名中包含“a”字母的學生記錄SELECT *FROM stuWHERE sname LIKE '%a%'4字段控制查詢4.1 去除重復記錄去除重復記錄(兩行或兩行以上記錄中系列的上的數(shù)據(jù)都相同),例如emp表中sal字段就存在相同的記錄。當只查詢 emp表的sal字段時,那么會出現(xiàn)重復記錄,那么想去除重復記錄,需要使用 DISTINCTSELECT DISTINCT sal FROM emp;4.2 查看雇員的月薪與傭金之和因為sal和comm兩列的類型都是數(shù)值類型,所以可以做加運算。如

37、果sal或comm中有一個字段不是數(shù)值類型,那么會出錯。SELECT *,sal+comm FROM emp;comm列有很多記錄的值為 NULL,因為任何東西與 NULL相加結果還是NULL,所以結算結果可 能會出現(xiàn)NULL。下面使用了把NULL轉換成數(shù)值0的函數(shù)IFNULLSELECT *,sal+IFNULL(comm,O) FROM emp;4.3給列名添加別名在上面查詢中出現(xiàn)列名為sal+IFNULL(comm,0),這很不美觀,現(xiàn)在我們給這一列給出一個別名,為 total:SELECT *, sal+IFNULL(comm,0) AS total FROM emp;給列起別名時,是

38、可以省略AS關鍵字的:SELECT *,sal+IFNULL(comm,0) total FROM emp;5排序5.1查詢所有學生記錄,按年齡升序排序SELECT *FROM stuORDER BY sage ASC;或者SELECT *FROM stu ORDER BY sage;5.2查詢所有學生記錄,按年齡降序排序SELECT *FROM stuORDER BY age DESC;5.3查詢所有雇員,按月薪降序排序,如果月薪相同時,按編號升序排序SELECT * FROM empORDER BY sal DESC,empno ASC;6聚合函數(shù)聚合函數(shù)是用來做縱向運算的函數(shù):COUNT

39、():統(tǒng)計指定列不為 NULL的記錄行數(shù);MAX():計算指定列的最大值,如果指定列是字符串類型,那么使用字符串排序運算;MIN():計算指定列的最小值,如果指定列是字符串類型,那么使用字符串排序運算;SUM():計算指定列的數(shù)值和,如果指定列類型不是數(shù)值類型,那么計算結果為0;AVG():計算指定列的平均值,如果指定列類型不是數(shù)值類型,那么計算結果為0 ;6.1 COUNT當需要縱向統(tǒng)計時可以使用COUNT。查詢emp表中記錄數(shù):SELECT COUNT(*) AS cnt FROM emp;查詢emp表中有傭金的人數(shù):SELECT COUNT(comm) cnt FROM emp;注意,因

40、為count()函數(shù)中給出的是 comm列,那么只統(tǒng)計 comm列非NULL的行數(shù)。查詢emp表中月薪大于2500的人數(shù):SELECT COUNT(*) FROM empWHERE sal > 2500;統(tǒng)計月薪與傭金之和大于 2500元的人數(shù):SELECT COUNT(*) AS cnt FROM emp WHERE sal+IFNULL(comm,0) > 2500;查詢有傭金的人數(shù),以及有領導的人數(shù):SELECT COUNT(comm), COUNT(mgr) FROM emp;6.2SUM 和 AVG當需要縱向求和時使用 sum()函數(shù)。 查詢所有雇員月薪和:SELECT

41、SUM(sal) FROM emp;查詢所有雇員月薪和,以及所有雇員傭金和:SELECT SUM(sal), SUM(comm) FROM emp;查詢所有雇員月薪+傭金和:SELECT SUM(sal+IFNULL(comm,0) FROM emp;統(tǒng)計所有員工平均工資:SELECT SUM(sal), COUNT(sal) FROM emp;或者SELECT AVG(sal) FROM emp;6.3 MAX 和 MIN查詢最高工資和最低工資:SELECT MAX(sal), MIN(sal) FROM emp;7 分組查詢當需要分組查詢時需要使用GROUP BY子句,例如查詢每個部門的工

42、資和,這說明要使用部分來分組。7.1 分組查詢查詢每個部門的部門編號和每個部門的工資和:SELECT deptno, SUM(sal)FROM empGROUP BY deptno;查詢每個部門的部門編號以及每個部門的人數(shù):SELECT deptno,COUNT(*)FROM empGROUP BY deptno;1500的人數(shù):查詢每個部門的部門編號以及每個部門工資大于SELECT deptno,COUNT(*)FROM emp北京傳智播客教育www.itcast.c nWHERE sal>1500GROUP BY deptno;HAVING子句查詢工資總和大于 9000的部門編號以及

43、工資和:SELECT deptno, SUM(sal)FROM empGROUP BY deptnoHAVING SUM(sal) > 9000;注意,WHERE是對分組前記錄的條件,如果某行記錄沒有滿足WHERE子句的條件,那么這行記錄不會參加分組;而 HAVING是對分組后數(shù)據(jù)的約束。LIMITLIMIT用來限定查詢結果的起始行,以及總行數(shù)。查詢5行記錄,起始行從 0開始SELECT * FROM emp LIMIT 0, 5;注意,起始行從 0開始,即第一行開始!查詢10行記錄,起始行從 3開始SELECT * FROM emp LIMIT 3,

44、 10;分頁查詢如果一頁記錄為10條,希望查看第 3頁記錄應該怎么查呢? 第一頁記錄起始行為 0,共查詢10行; 第二頁記錄起始行為10,一共查詢10行; 第三頁記錄起始行為 20,一共查詢10行;北京傳智播客教育www.itcast.c n完整性約束是為了表的數(shù)據(jù)的正確性!如果數(shù)據(jù)不正確,那么一開始就不能添加到表中。高級軟件人才實作培訓專家!1 主鍵當某一列添加了主鍵約束后,那么這一列的數(shù)據(jù)就不能重復出現(xiàn)。這樣每行記錄中其主鍵列的 值就是這一行的唯一標識。例如學生的學號可以用來做唯一標識,而學生的姓名是不能做唯一標識 的,因為學習有可能同名。主鍵列的值不能為 NULL,也不能重復!指定主鍵約

45、束使用 PRIMARY KEY關鍵字(primary key);創(chuàng)建表:定義列時指定主鍵:CREATE TABLE stu( sidCHAR(6) PRIMARY KEY,sname VARCHAR(20), ageINT,gender VARCHAR(10);創(chuàng)建表:定義列之后獨立指定主鍵:CREATE TABLE stu( sidCHAR(6),sname VARCHAR(20), ageINT,gender VARCHAR(10), PRIMARY KEY(sid);修改表時指定主鍵:ALTER TABLE stuADD PRIMARY KEY(sid);刪除主鍵(只是刪除主鍵約束,而不

46、會刪除主鍵列)ALTER TABLE stu DROP PRIMARY KEY;2主鍵自增長MySQL提供了主鍵自動增長的功能!這樣用戶就不用再為是否有主鍵是否重復而煩惱了。當主鍵設置為自動增長后,在沒有給出主鍵值時,主鍵的值會自動生成,而且是最大主鍵值+1,也就不會出現(xiàn)重復主鍵的可能了。創(chuàng)建表時設置主鍵自增長(主鍵必須是整型才可以自增長):CREATE TABLE stu(sid INT PRIMARY KEY AUTO_INCREMENT,sname VARCHAR(20),age INT,gender VARCHAR(10);修改表時設置主鍵自增長:ALTER TABLE stu CHA

47、NGE sid sid INT AUTO_INCREMENT;修改表時刪除主鍵自增長:ALTER TABLE stu CHANGE sid sid INT;3 非空指定非空約束的列不能沒有值,也就是說在插入記錄時,對添加了非空約束的列一定要給值;在修改記錄時,不能把非空列的值設置為NULL。(int primary key auto_incement);指定非空約束:CREATE TABLE stu(sid INT PRIMARY KEY AUTO_INCREMENT,sname VARCHAR(10) NOT NULL,age INT,gender VARCHAR(10);當為sname字段

48、指定為非空后,在向stu表中插入記錄時,必須給sname字段指定值,否則會報錯:INSERT INTO stu(sid) VALUES(1);插入的記錄中sname沒有指定值,所以會報錯!4 唯一還可以為字段指定唯一約束!當為字段指定唯一約束后,那么字段的值必須是唯一的。這一點 與主鍵相似!例如給 stu表的sname字段指定唯一約束:CREATE TABLE tab_ab(sid INT PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(10) UNIQUE);INSERT INTO sname(sid, sname) VALUES(1001, 'z

49、s');INSERT INTO sname(sid, sname) VALUES(1002, 'zs');當兩次插入相同的名字時,MySQL會報錯!5外鍵主外鍵是構成表與表關聯(lián)的唯一途徑!外鍵是另一張表的主鍵!例如員工表與部門表之間就存在關聯(lián)關系,其中員工表中的部門編號北京傳智播客教育www.itcast.c n高級軟件人才實作培訓專家!www* 直8 st. cn高級軟件人才實作培訓專家!www* 直8 st. cn字段就是外鍵,是相對部門表的外鍵。我們再來看BBS系統(tǒng)中:用戶表(t_user)、分類表(t_section )、帖子表(t_topic )三者之間的 關

50、系。子都有-Baster idt useruidsldname每仝帖子都java2* net3phpt tQDiC的外鍵tidtname14壬個版塊t_secti on 表的 master_i d是相對 t_usert_topic 的是相對 t_ _sec ticm表的外鍵s_id1所有的虜主都親自于t_userj且FEL是什= jwa是咖啡 .Mt怎么讀t_topic表的u_id是相對t_user表的外犍例如在t_section表中sid為1的記錄說明有一個分類叫java,版主是t_user表中uid為1的用戶,即zs!例如在t_topic表中tid為2的記錄是名字為"Java是咖

51、啡”的帖子,它是 java版塊的帖子,它 的作者是ww。外鍵就是用來約束這一列的值必須是另一張表的主鍵值!!!創(chuàng)建t_user表,指定 uid為主鍵列:(unique-獨一無二的 not null) (primary-主要的 key auto_i ncreme nt)CREATE TABLE t_user(uid INT PRIMARY KEY AUTO_INCREMENT,uname VARCHAR(20) UNIQUE NOT NULL);創(chuàng)建t_section表,指定sid為主鍵列,u_id為相對t_user表的uid列的外鍵:CREATE TABLE t_section(sid INT

52、 PRIMARY KEY AUTO_INCREMENT,sname VARCHAR(30),ud INT,Constraint fk_t_user foreign key(ud) referen ces t_user(uid)CONSTRAINT fk_t_user FOREIGN KEY(u_id) REFERENCES t_user(uid);修改t_section表,指定u_id為相對t_user表的uid列的外鍵:ALTER TABLE t_sectionADD CONSTRAINT fk_t_userFOREIGN KEY(ud)REFERENCES t_user(uid);修改t_

53、section表,刪除u_id的外鍵約束:ALTER TABLE t_sectionDROP FOREIGN KEY fk_t_user;6表與表之間的關系一對一:例如t_person表和t_card表,即人和身份證。這種情況需要找出主從關系,即誰 是主表,誰是從表。人可以沒有身份證,但身份證必須要有人才行,所以人是主表,而身 份證是從表。設計從表可以有兩種方案:在t_card表中添加外鍵列(相對 t_user表),并且給外鍵添加唯一約束;給t_card表的主鍵添加外鍵約束(相對 t_user表),即t_card表的主鍵也是外鍵。 一對多(多對一):最為常見的就是一對多! 一對多和多對一,這是

54、從哪個角度去看得出來 的。t_user和t_section的關系,從t_user來看就是一對多,而從t_section的角度來看就是多對一!這種情況都是在多方創(chuàng)建外鍵!多對多:例如t_stu和t_teacher表,即一個學生可以有多個老師,而一個老師也可以有多 個學生。這種情況通常需要創(chuàng)建中間表來處理多對多關系。例如再創(chuàng)建一張表t_stu_tea表,給出兩個外鍵,一個相對t_stu表的外鍵,另一個相對t_teacher表的外鍵。編碼1 查看MySQL編碼char%);SHOW VARIABLES LIKE 'char%'( show variables變量 likeshow v

55、ariables 1 r charx* ;! (Jar iab le _name! Maine北京傳智播客教育www.itcast.c n! utF6! utfS! binary! utfS! utf8! utF8! D:xProgran! charac 七! chapac七1 character_set_database! chaj*acter_set_f ilesystemI charac七芒1'_乞£七_總£51七£1 character_set_seruer! chaj*actei*_s et_s ya ten! charactei'_se

56、ts_(iir因為當初安裝時指定了字符集為UTF8,所以所有的編碼都是UTF&character_set_client :你發(fā)送的數(shù)據(jù)必須與client指定的編碼一致! !服務器會使用該編碼高級軟件人才實作培訓專家!來解讀客戶端發(fā)送過來的數(shù)據(jù);character_set_connection :通過該編碼與 client 致!該編碼不會導致亂碼!當執(zhí)行的是查 詢語句時,客戶端發(fā)送過來的數(shù)據(jù)會先轉換成connection指定的編碼。但只要客戶端發(fā)送過來的數(shù)據(jù)與client指定的編碼一致,那么轉換就不會出現(xiàn)問題;character_set_database :數(shù)據(jù)庫默認編碼,在創(chuàng)建數(shù)據(jù)庫時,如果沒有指定編碼,那么默認使用database編碼;character_set_server : MySQL 服務器默認編碼;character_set_results :響應的編碼,即查詢結果返回給客戶端的編碼。這說明客戶端必須使用result指定的編碼來解碼;2控制臺編碼修改 character_set_client、character_set_results、character_set_connection 為 GBK,就不會出現(xiàn) 舌L碼了。但其實只需要修改character_set_client 禾口

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論