




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、高級實作培訓!lllll可大量數(shù)據;方便檢索;保持數(shù)據的一致性、完整性; 安全,可共享;通過組合分析,可產生新數(shù)據。1.2數(shù)據庫的發(fā)展歷程lllll沒有數(shù)據庫,使用磁盤文件層次結構模型數(shù)據庫;網狀結構模型數(shù)據庫;數(shù)據;結構模型數(shù)據庫:使用二維表格來-對象模型數(shù)據庫;數(shù)據;MySQL 就是型數(shù)據庫!1.3常見數(shù)據庫lllllOracle(神喻):甲骨文(最高?。?;DB2:;SQL Server:微軟;Sybase:;MySQL:甲骨文;1.4lll理解數(shù)據庫RDBMS = 管理員(manager)+倉庫(database)database = N 個 table table: 表結構:定義表的列
2、名和列類型! 表:一行一行的!我們現(xiàn)在所說的數(shù)據庫泛指“system)”,即“數(shù)據庫服務器”。型數(shù)據庫管理系統(tǒng)(RDBMS - Relational database management傳智播客教育高級實作培訓!當我們安裝了數(shù)據庫服務器后,就可以在數(shù)據庫服務器中創(chuàng)建數(shù)據庫,每個數(shù)據庫中還可以包含多張表。數(shù)據庫表就是一個多行多列的表格。在創(chuàng)建表時,需要指定表的列數(shù),以及列名稱,列類型等。而不用指定表格的行數(shù),行數(shù)是沒有上限的。下面是 tab_表的結構:當把表格創(chuàng)建好了之后,就可以向表格中添加數(shù)據了。向表格添加數(shù)據是以行為的!下面是 s_表的:大家要學會區(qū)分什么是表結構,什么是表。傳智播客教育s
3、_ids_names_ages_sexS_1001zhangSan23maleS_1002liSi32femaleS_1003wangWu44male高級實作培訓!1.5應用程序與數(shù)據庫應用程序使用數(shù)據庫完成對數(shù)據的!2安裝 MySQL 數(shù)據庫2.1安裝 MySQL參考:MySQL 安裝圖解.doc2.2MySQL 目錄結構MySQL 的數(shù)據目錄為 data,data 目錄通常在 C:Documents and SettingsAll UsersApplicationDataMySQLMySQL Server 5.1data 位置。在 data 下的每個目錄都代表一個數(shù)據庫。MySQL 的安裝
4、目錄下:llbin 目錄中都是可執(zhí)行文件;my.ini 文件是 MySQL 的配置文件;3基本命令3.1啟動和關閉 mysql 服務器ll啟動:net start mysql; 關閉:net stop mysql;在啟動 mysql 服務后,打開 windows 任務管理器,會有一個名為 mysqld.exe 的進程運行,所以mysqld.exe 才是 MySQL 服務器程序。傳智播客教育高級實作培訓!3.2客戶端登錄mysql在啟動 MySQL 服務器后,我們需要使用管理員用戶登錄 MySQL 服務器,然后來對服務器進行操作。登錄 MySQL 需要使用 MySQL 的客戶端程序:mysql.
5、exel登錄:mysql -u root -p 123 -h localhost;-u:后面的 root 是用戶名,這里使用的是超級管理員 root;-p:后面的 123 是,這是在安裝 MySQL已經指定的;-h:后面給出的 localhost 是服務器主機名,它是可以省略的,例如:mysql -u root -p 123;:quit 或 exit;l在登錄是客戶端程序。后,打開 windows 任務管理器,會有一個名為 mysql.exe 的進程運行,所以 mysql.exeSQL 語句1SQL 概述1.1什么是 SQLSQL(Structured Query Language)是“結構化
6、語言”,它是對型數(shù)據庫的操作語言。它可以應用到所有型數(shù)據庫中,例如:MySQL、Oracle、SQL Server 等。SQ 標準(ANSI/ISO)有:lllSQL-92:1992 年發(fā)布的 SQL 語言標準;SQL:1999:1999 年發(fā)布的 SQL 語言SQL:2003:2003 年發(fā)布的 SQL 語言;這些標準就與 JDK 的版本一樣,在新的版本中總要有一些語法的變化。不同時期的數(shù)據庫對不同標準做了實現(xiàn)。雖然 SQL 可以用在所有型數(shù)據庫中,但很多數(shù)據庫還都有標準之后的一些語法,我們可以稱之為“方言”。例如 MySQL 中的 LIMIT 語句就是 MySQL 獨有的方言,其它數(shù)據庫都
7、不支持!當然,Oracle 或 SQL Server 都有的方言。1.2語法要求lllSQL 語句可以單行或多行書寫,以分號結尾;可以用空格和縮進來來增強語句的可讀性; 關鍵字不區(qū)別大小寫,建議使用大寫;2lDDL(Data Definition Language):數(shù)據定義語言,用來定義數(shù)據庫對象:庫、表、列等;傳智播客教育高級實作培訓!lllDML(Data Manipulation Language):數(shù)據操作語言,用來定義數(shù)據庫(數(shù)據);DCL(Data Control Language):數(shù)據 DQL(Data Query Language):數(shù)據語言,用來定義語言,用來權限和安全級
8、別;(數(shù)據)。3DDL3.1基本操作ll查看所有數(shù)據庫名稱:SHOW DATABASES;切換數(shù)據庫:USE mydb1,切換到 mydb1 數(shù)據庫;3.2操作數(shù)據庫l創(chuàng)建數(shù)據庫:CREATE DATABASE IF NOT EXISTS mydb1;創(chuàng)建數(shù)據庫,例如:CREATE DATABASE mydb1,創(chuàng)建一個名為 mydb1 的數(shù)據庫。如果這個數(shù)據已,那么會報錯。例如 CREATE DATABASE IF NOT EXISTS mydb1,在名為 mydb1 的數(shù)據庫不經時創(chuàng)建該庫,這樣可以避免報錯。l刪除數(shù)據庫:DROP DATABASE IF EXISTS mydb1;刪除數(shù)據
9、庫,例如:DROP DATABASE mydb1,刪除名為 mydb1 的數(shù)據庫。如果這個數(shù)據庫不存在,那么會報錯。DROP DATABASE IF EXISTS mydb1,就算 mydb1 不,也的報錯。l修改數(shù)據庫編碼:ALTER DATABASE mydb1 CHARACTER SET utf8修改數(shù)據庫 mydb1 的編碼為 utf8。注意,在 MySQL 中所有的 UTF-8 編碼都不能使用中間的“-”,即 UTF-8 要書寫為 UTF8。3.3數(shù)據類型MySQL 與 Java 一樣,也有數(shù)據類型。MySQL 中數(shù)據類型主要應用在列上。常用類型:llllllllllint:整型do
10、uble:浮點型,例如 double(5,2)表示最多 5 位,其中必須有 2 位小數(shù),即最大值為 999.99;decimal:泛型型,在表單錢方面使用該類型,因為char:固定長度字符串類型; varchar:可變長度字符串類型;text:字符串類型; blob:字節(jié)類型;date:日期類型,格式為:yyyy-MM-dd; time:時間類型,格式為:hh:mm:ss timestamp:時間戳類型;出現(xiàn)精度缺失問題;傳智播客教育高級實作培訓!3.4 操作表l 創(chuàng)建表:CREATE TABLE 表名(列名列名.列類型, 列類型,);例如:再例如:lllll1.查看當前數(shù)據庫中所有表名稱:S
11、HOW TABLES;查看指定表的創(chuàng)建語句:SHOW CREATE TABLE emp,查看 emp 表的創(chuàng)建語句; 查看表結構:DESC emp,查看 emp 表結構;刪除表: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);高級實作培訓!4DML4.1數(shù)據語法:INSERT INTO 表名(列名 1,列名 2, ) VALUES(值 1, 值 2)語法:INSERT INTO 表名 VALUES(值 1,值 2,)因為沒有指定要的列,表示按創(chuàng)建表時列的順序所有列的值:注意:所有字符串數(shù)據必須使用單!4.2修改數(shù)據語法:UPDATE 表名SET 列名 1=值 1, 列名n=值 n WHERE條件4.3刪除數(shù)據語法:DELETE FROM表名 WHERE 條件語法
14、:TRUNCATE TABLE 表名雖然 TRUNCATE 和 DELETE 都可以刪除表的所有TRUNCATE 高!,但有原理不同。DELETE的效率沒有TRUNCATE 其實屬性 DDL 語句,因為它是先 DROP TABLE,再 CREATE TABLE。而且 TRUNCATE 刪除的是無法的,但 DELETE 刪除的是可以的(是事務的知識!)。傳智播客教育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);高級實作培訓!5DCL5.1創(chuàng)建用戶語法:CREATE USER 用戶名地址 IDENTIFIED BY ;5.2給用戶語法:GRANT 權限 1, , 權限 n ON 數(shù)據庫.* TO 用戶名5.3撤銷語法:REVOKE 權限 1, , 權限 n ON數(shù)據庫
17、.* FORM用戶名5.4查看用戶權限語法:SHOW GRANTS FOR 用戶名5.5刪除用戶語法:DROP USER 用戶名5.6修改用戶語法: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;高級實作培訓!語法(DQL)數(shù)據DQL 就
19、是數(shù)據給客戶端。語法:語言,數(shù)據庫執(zhí)行 DQL 語句對數(shù)據進行改變,而是讓數(shù)據庫發(fā)送結果集SELECT selection_list /*要的列名稱*/FROM table_list /*要的表名稱*/WHERE condition /*行條件*/GROUP BY grou_columns /*對結果分組*/ HAVING condition /*分組后的行條件*/ ORDER BY sorting_columns /*對結果分組*/ LIMIT offset_start, row_count /*結果限定*/創(chuàng)建名:l學生表: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)學生學號snamevarchar(50)學生ageint學生gendervarchar(50)學生高級實作培訓!l部分表:dept傳智播客教育CREATE TABLE dept(字段名稱字段類型說明deptnoint部分編碼dnamevarchar(50)部分名稱locvarchar(50)部分所在地點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員工編號enamevarchar(50)員工jobvarchar(50)員工工作mgrint領導編號hiredatedate入職日期saldecimal(7,2)月薪commdecimal(7,2)獎金deptnoint部分編號高級實作培訓!1基礎1.1所有列SELECT * FROM stu;1.2指定列SELECT sid
27、, sname, age FROM stu;2條件2.1條件條件lllllll就是在時給出 WHERE 子句,在 WHERE 子句中可以使用如下運算符及關鍵字:=、!=、=; 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非男的學生SELECT *FROM stuWHERE gender!=male;或者SELECT *FR
28、OM stuWHERE gendermale;或者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 字母的學生需要使用模糊了。模糊需要使用關鍵字 LIKE。3.1姓名由 5 個字母的學生SELECT *FROM stuWHERE sname LIKE ;模糊必須使用 LIKE 關鍵字。其中“_”匹配任意一個字母,5 個“_”
29、表示 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 *FROM stuWHERE sname LIKE _i%;3.5姓名中包含“a”字母的學生SELECT *傳智播客教育高級實作培訓!FROM stuWHERE sname LIKE %a%;4字段4.1去除重復去除重復(兩行或兩行以上中系列的上的數(shù)據都相同),
30、例如 emp 表中 sal 字段就相同的。當只emp 表的 sal 字段時,那么會出現(xiàn)重復,那么想去除重復,需要使用 DISTINCT:SELECT DISTINCT sal FROM emp;4.2查看雇員的月薪與傭金之和因為 sal 和 comm 兩列的類型都是數(shù)值類型,所以可以做加運算。如果 sal 或 comm 中有一個字段不是數(shù)值類型,那么會出錯。SELECT *,sal+comm FROM emp;comm 列有很多的值為 NULL,因為任何東西與 NULL 相加結果還是 NULL,所以結算結果可能會出現(xiàn) NULL。下面使用了把 NULL 轉換成數(shù)值 0 的函數(shù) IFNULL:SE
31、LECT *,sal+IFNULL(comm,0) FROM emp;4.3給列名添加別名在上面為 total:中出現(xiàn)列名為 sal+IFNULL(comm,0),這很不美觀,現(xiàn)在我們給這一列給出一個別名,SELECT *, sal+IFNULL(comm,0) AS total FROM emp;給列起別名時,是可以省略 AS 關鍵字的:SELECT *,sal+IFNULL(comm,0) total FROM emp;5排序5.1所有學生,按升序排序SELECT *FROM stuORDER BY sage ASC;或者SELECT *FROM stu ORDER BY sage;傳智播
32、客教育高級實作培訓!5.2所有學生,按降序排序SELECT *FROM stuORDER BY age DESC;5.3所有雇員,按月薪降序排序,如果月薪相同時,按編號升序排序SELECT * FROM empORDER BY sal DESC,empno ASC;6聚合函數(shù)聚合函數(shù)是用來做縱向運算的函數(shù):lllllCOUNT():統(tǒng)計指定列不為 NULL 的行數(shù);MAX():計算指定列的最大值,如果指定列是字符串類型,那么使用字符串排序運算; MIN():計算指定列的最小值,如果指定列是字符串類型,那么使用字符串排序運算; SUM():計算指定列的數(shù)值和,如果指定列類型不是數(shù)值類型,那么計算
33、結果為 0; AVG():計算指定列的平均值,如果指定列類型不是數(shù)值類型,那么計算結果為 0;6.1COUNT當需要縱向統(tǒng)計時可以使用 COUNT()。lemp 表中數(shù):SELECT COUNT(*) AS cnt FROM emp;lemp 表中有傭金的人數(shù):SELECT COUNT(comm) cnt FROM emp;注意,因為 count()函數(shù)中給出的是 comm 列,那么只統(tǒng)計 comm 列非 NULL 的行數(shù)。lemp 表中月薪大于 2500 的人數(shù):SELECT COUNT(*) FROM empWHERE sal 2500;l統(tǒng)計月薪與傭金之和大于 2500 元的人數(shù):SEL
34、ECT COUNT(*) AS cnt FROM emp WHERE sal+IFNULL(comm,0) 2500;l有傭金的人數(shù),以及有領導的人數(shù):SELECT COUNT(comm), COUNT(mgr) FROM emp;傳智播客教育高級實作培訓!6.2SUM 和AVG當需要縱向求和時使用 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)計所有員工平均工資:SELECT SUM(sal), COUNT(sal) FROM emp;或者SELECT AVG(sal) FROM emp;6.3MAX 和MINl最高工資和最低工資:SELECT MAX(sal), MIN(sal) FROM emp;7分組當需要分組來分組。時需要使用 GROUP BY 子句,例如每個部門的工資和,這說明要使用部分7.1分組l每個部門的部門編號和每個部門的工資和:SELECT deptno, SUM(sal)FROM emp GROUP BY deptno;l每個部門的部門編號以及每個部門的人數(shù):SELECT deptno,COUNT(*)FROM
36、 emp GROUP BY deptno;l每個部門的部門編號以及每個部門工資大于 1500 的人數(shù):SELECT deptno,COUNT(*)FROM emp傳智播客教育高級實作培訓!WHERE sal1500GROUP BY deptno;7.2HAVING 子句l工資總和大于 9000 的部門編號以及工資和:SELECT deptno, SUM(sal)FROM emp GROUP BY deptnoHAVING SUM(sal) 9000;注意,WHERE 是對分組前的條件,如果某行沒有滿足 WHERE 子句的條件,那么這行參加分組;而 HAVING 是對分組后數(shù)據的約束。8LIMI
37、TLIMIT 用來限定結果的起始行,以及總行數(shù)。8.15 行,起始行從 0 開始SELECT * FROM emp LIMIT 0, 5;注意,起始行從 0 開始,即第一行開始!8.210 行,起始行從 3 開始SELECT * FROM emp LIMIT 3, 10;8.3分頁如果一頁為 10 條,希望查看第 3 頁應該怎么查呢?lll第一頁第二頁第三頁起始行為 0,一共起始行為 10,一共起始行為 20,一共10 行;10 行;10 行;完整性約束完整性約束是為了表的數(shù)據的正確性!如果數(shù)據不正確,那么一開始就不能添加到表中。傳智播客教育高級實作培訓!1主鍵當某一列添加了主鍵約束后,那么這
38、一列的數(shù)據就不能重復出現(xiàn)。這樣每行中其主鍵列的值就是這一行的唯一標識。例如學生的學號可以用來做唯一標識,而學生的姓名是不能做唯一標識的,因為學習有可能同名。主鍵列的值不能為 NULL,也不能重復! 指定主鍵約束使用 PRIMARY KEY 關鍵字l創(chuàng)建表:定義列時指定主鍵: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修改表時指定主鍵:ALTER TABLE stuADD PRIMARY KEY(sid);l刪除主鍵(只是刪除主鍵約束,而刪除主鍵列):ALTER TABLE stu DROP PRIMARY KEY;2主鍵自增長MySQL 提供了主鍵自動增長的功能!這樣用戶就不用再為是否有主鍵是否重復而煩惱了。當主鍵設置為自動增長后,在沒有給出主鍵值時,主鍵的值會自動生成,而且是最大主鍵值+1,也就不會出現(xiàn)重復主鍵的可能了。l創(chuàng)建表時設置主鍵自增長(主鍵必須是整型才可以自增長):CREATE TABLE stu(sid INT PRIMARY KE
40、Y AUTO_INCREMENT,snameage genderVARCHAR(20),INT, VARCHAR(10)傳智播客教育高級實作培訓!);l修改表時設置主鍵自增長:ALTER TABLE stu CHANGE sid sid INT AUTO_INCREMENT;l修改表時刪除主鍵自增長:ALTER TABLE stu CHANGE sid sid INT;3非空指定非空約束的列不能沒有值,也就是說在時,對添加了非空約束的列一定要給值;在修改時,不能把非空列的值設置為 NULL。l指定非空約束:CREATE TABLE stu(sid INT PRIMARY KEY AUTO_IN
41、CREMENT, sname VARCHAR(10) NOT NULL,ageINT,genderVARCHAR(10);當為 sname 字段指定為非空后,在向 stu 表中報錯:INSERT INTO stu(sid) VALUES(1);時,必須給 sname 字段指定值,否則會的中 sname 沒有指定值,所以會報錯!4唯一還可以為字段指定唯一約束!當為字段指定唯一約束后,那么字段的值必須是唯一的。這一點與主鍵相似!例如給 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);當兩次相同的名字時,MySQL 會報錯!5外鍵主外鍵是表與表關聯(lián)的唯一途徑!外鍵是另一張表的主鍵!例如員工表與部門表之間就關聯(lián),其中員工表中的部門編號傳智播客教育高級實作培訓!字段就是外鍵,是相對部門表的外鍵。我們再來看 BBS 系統(tǒng)中:用戶表(t_user)、。表(t_section)、帖子表(t_topic)三者之間的例如在t_section 表中 sid 為
43、1 的即 zs!例如在 t_topic 表中 tid 為 2 的的作者是 ww。說明有一個叫 java,版主是 t_user 表中 uid 為 1 的用戶,是名字為“Java 是咖啡”的帖子,它是 java 版塊的帖子,它外鍵就是用來約束這一列的值必須是另一張表的主鍵值!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 為相對 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 為相對 t_user 表的 uid 列的外鍵:ALTER TABLE t_sectionADD CONSTRAINT fk_t_user傳智播客教育高級實作培訓!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一對一:例如 t_表和 t_card 表,即人和。這種情況需要找出主從,即誰是主表,誰是從表。人可以沒有,但必須要有行,所以人是主表,而身份證是從表。設計從表可以有兩種方案:在 t_card 表中添加外鍵列(相對 t_user 表),并且給外鍵添加唯一約束;給 t_card 表的主鍵添加外鍵約束(相對 t_user 表),即 t_card 表的主鍵也是外鍵。l一對多(多對一):最為常見的就是一對多!一對多和多對一,這是從哪個角度
46、去看得出來的。t_user 和 t_section 的,從 t_user 來看就是一對多,而從 t_section 的角度來看就是多對一!這種情況都是在多方創(chuàng)建外鍵!多對多:例如 t_stu 和 t_teacher 表,即一個學生可以有多個l,而一個也可以有多個學生。這種情況通常需要創(chuàng)建中間表來處理多對多。例如再創(chuàng)建一張表 t_stu_tea 表,給出兩個外鍵,一個相對 t_stu 表的外鍵,另一個相對 t_teacher 表的外鍵。編碼1查看 MySQL 編碼SHOW VARIABLES LIKE char%;因為當初安裝時指定了字符集為 UTF8,所以所有的編碼都是 UTF8。lchara
47、cter_set_:你發(fā)送的數(shù)據必須與來解讀客戶端發(fā)送過來的數(shù)據; character_set_connection:通過該編碼與傳智播客教育指定的編碼一致!服務器會使用該編碼l一致!該編碼導致亂碼!當執(zhí)行的是查高級實作培訓!詢語句時,客戶端發(fā)送過來的數(shù)據會先轉換成 connection 指定的編碼。但只要客戶端發(fā)送過來的數(shù)據與指定的編碼一致,那么轉換就出現(xiàn)問題;lcharacter_set_database:數(shù)據庫默認編碼,在創(chuàng)建數(shù)據庫時,如果沒有指定編碼,那么默認使用 database 編碼;character_set_server:MySQL 服務器默認編碼;llcharacter_se
48、t_results:響應的編碼,即用 result 指定的編碼來解碼;結果返回給客戶端的編碼。這說明客戶端必須使2臺編碼修改 character_set_、character_set_results、character_set_connection 為 GBK,就出現(xiàn)亂碼了。但其實只需要修改 character_set_和 character_set_results。臺的編碼只能是 GBK,而不能修改為 UTF8,這就出現(xiàn)一個問題??蛻舳税l(fā)送的數(shù)據是 GBK,而 character_set_為 UTF8,這就說明客戶端數(shù)據到了服務器端后一定會出現(xiàn)亂碼。既然不能修改臺的編碼,那么只能修改 cha
49、racter_set_為 GBK 了。服務器發(fā)送給客戶端的數(shù)據編碼為 character_set_result,它如果是 UTF8,那么臺使用 GBK解碼也一定會出現(xiàn)亂碼。因為無法修改臺編碼,所以只能把 character_set_result 修改為 GBK。ll修改 character_set_變量:set character_set_=gbk;修改 character_set_results 變量:set character_set_results=gbk;設置編碼只對當前連接有效,這說明每次登錄 MySQL 提示符后都要去修改這兩個編碼,但可以通過修改配置文件來處理這一問題:配置文件路徑:D:Program FilesMySQLMySQL Server 5.1 my.ini3MySQL 工具使用 MySQL 工具是出現(xiàn)亂碼的,因為它們會每次連接時都修改 character_set_、出character_set_results、character
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鄉(xiāng)村合作社與農戶聯(lián)合開發(fā)農業(yè)技術項目協(xié)議
- 通信技術與信號處理練習題
- 技術標準制定合作協(xié)議
- 數(shù)學課本九章算術教案
- 教育資源分布報告表
- 西廂記的愛情悲劇征文
- 中學生國學經典故事解讀
- 農業(yè)旅游開發(fā)實施方案
- 數(shù)據安全與隱私保護服務協(xié)議約定事項
- 業(yè)務往來預付款協(xié)議書
- 法律服務方案(投標)
- 轉移的危險廢物性狀清單
- 高中英語-新外研版必修一unit5-The-Monarchs-Journey-公開課reading課件
- 建設項目用地預審與選址意見課件講解
- 四年級公共安全教育全冊教案(海峽教育出版社)
- 工程結構通用規(guī)范
- 《構成基礎》PPT課件(190頁PPT)
- 四年級道德與法治從中國制造到中國創(chuàng)造
- HONEYWELLDCS操作手冊
- 2021-2022新教科版四年級科學下冊全一冊全部課件(共24課)
- 3 棄渣場施工方案
評論
0/150
提交評論