一千行MySQL學(xué)習(xí)筆記_第1頁(yè)
一千行MySQL學(xué)習(xí)筆記_第2頁(yè)
一千行MySQL學(xué)習(xí)筆記_第3頁(yè)
一千行MySQL學(xué)習(xí)筆記_第4頁(yè)
一千行MySQL學(xué)習(xí)筆記_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、/* 啟動(dòng)MySQL */net start mysql/* 連接與斷開(kāi)服務(wù)器 */mysql -h 地址 -P 端口 -u 用戶名 -p 密碼/* 跳過(guò)權(quán)限驗(yàn)證登錄MySQL */mysqld -skip-grant-tables- 修改root密碼密碼加密函數(shù)password()update mysql.user set password=password(root);SHOW PROCESSLIST - 顯示哪些線程正在運(yùn)行SHOW VARIABLES - /* 數(shù)據(jù)庫(kù)操作 */ - 查看當(dāng)前數(shù)據(jù)庫(kù) select database();- 顯示當(dāng)前時(shí)間、用戶名、數(shù)據(jù)庫(kù)版本 select

2、now(), user(), version();- 創(chuàng)建庫(kù) create database if not exists 數(shù)據(jù)庫(kù)名 數(shù)據(jù)庫(kù)選項(xiàng) 數(shù)據(jù)庫(kù)選項(xiàng): CHARACTER SET charset_name COLLATE collation_name- 查看已有庫(kù) show databases like pattern- 查看當(dāng)前庫(kù)信息 show create database 數(shù)據(jù)庫(kù)名- 修改庫(kù)的選項(xiàng)信息 alter database 庫(kù)名 選項(xiàng)信息- 刪除庫(kù) drop database if exists 數(shù)據(jù)庫(kù)名 同時(shí)刪除該數(shù)據(jù)庫(kù)相關(guān)的目錄及其目錄內(nèi)容/* 表的操作 */ - 創(chuàng)建

3、表 create temporary table if not exists 庫(kù)名.表名 ( 表的結(jié)構(gòu)定義 ) 表選項(xiàng) 每個(gè)字段必須有數(shù)據(jù)類型 最后一個(gè)字段后不能有逗號(hào) temporary 臨時(shí)表,會(huì)話結(jié)束時(shí)表自動(dòng)消失 對(duì)于字段的定義: 字段名 數(shù)據(jù)類型 NOT NULL | NULL DEFAULT default_value AUTO_INCREMENT UNIQUE KEY | PRIMARY KEY COMMENT string- 表選項(xiàng) - 字符集 CHARSET = charset_name 如果表沒(méi)有設(shè)定,則使用數(shù)據(jù)庫(kù)字符集 - 存儲(chǔ)引擎 ENGINE = engine_name

4、 表在管理數(shù)據(jù)時(shí)采用的不同的數(shù)據(jù)結(jié)構(gòu),結(jié)構(gòu)不同會(huì)導(dǎo)致處理方式、提供的特性操作等不同 常見(jiàn)的引擎:InnoDB MyISAM Memory/Heap BDB Merge Example CSV MaxDB Archive 不同的引擎在保存表的結(jié)構(gòu)和數(shù)據(jù)時(shí)采用不同的方式 MyISAM表文件含義:.frm表定義,.MYD表數(shù)據(jù),.MYI表索引 InnoDB表文件含義:.frm表定義,表空間數(shù)據(jù)和日志文件 SHOW ENGINES - 顯示存儲(chǔ)引擎的狀態(tài)信息 SHOW ENGINE 引擎名 LOGS|STATUS - 顯示存儲(chǔ)引擎的日志或狀態(tài)信息 - 數(shù)據(jù)文件目錄 DATA DIRECTORY = 目

5、錄 - 索引文件目錄 INDEX DIRECTORY = 目錄 - 表注釋 COMMENT = string - 分區(qū)選項(xiàng) PARTITION BY . (詳細(xì)見(jiàn)手冊(cè))- 查看所有表 SHOW TABLES LIKE pattern SHOW TABLES FROM 表名- 查看表機(jī)構(gòu) SHOW CREATE TABLE 表名 (信息更詳細(xì)) DESC 表名 / DESCRIBE 表名 / EXPLAIN 表名 / SHOW COLUMNS FROM 表名 LIKE PATTERN SHOW TABLE STATUS FROM db_name LIKE pattern- 修改表 - 修改表本身

6、的選項(xiàng) ALTER TABLE 表名 表的選項(xiàng) EG: ALTER TABLE 表名 ENGINE=MYISAM; - 對(duì)表進(jìn)行重命名 RENAME TABLE 原表名 TO 新表名 RENAME TABLE 原表名 TO 庫(kù)名.表名 (可將表移動(dòng)到另一個(gè)數(shù)據(jù)庫(kù)) - RENAME可以交換兩個(gè)表名 - 修改表的字段機(jī)構(gòu) ALTER TABLE 表名 操作名 - 操作名 ADD COLUMN 字段名 - 增加字段 AFTER 字段名 - 表示增加在該字段名后面 FIRST - 表示增加在第一個(gè) ADD PRIMARY KEY(字段名) - 創(chuàng)建主鍵 ADD UNIQUE 索引名 (字段名)- 創(chuàng)

7、建唯一索引 ADD INDEX 索引名 (字段名) - 創(chuàng)建普通索引 ADD DROP COLUMN 字段名 - 刪除字段 MODIFY COLUMN 字段名 字段屬性 - 支持對(duì)字段屬性進(jìn)行修改,不能修改字段名(所有原有屬性也需寫上) CHANGE COLUMN 原字段名 新字段名 字段屬性 - 支持對(duì)字段名修改 DROP PRIMARY KEY - 刪除主鍵(刪除主鍵前需刪除其AUTO_INCREMENT屬性) DROP INDEX 索引名 - 刪除索引 DROP FOREIGN KEY 外鍵 - 刪除外鍵- 刪除表 DROP TABLE IF EXISTS 表名 .- 清空表數(shù)據(jù) TRU

8、NCATE TABLE 表名- 復(fù)制表結(jié)構(gòu) CREATE TABLE 表名 LIKE 要復(fù)制的表名- 復(fù)制表結(jié)構(gòu)和數(shù)據(jù) CREATE TABLE 表名 AS SELECT * FROM 要復(fù)制的表名- 檢查表是否有錯(cuò)誤 CHECK TABLE tbl_name , tbl_name . option .- 優(yōu)化表 OPTIMIZE LOCAL | NO_WRITE_TO_BINLOG TABLE tbl_name , tbl_name .- 修復(fù)表 REPAIR LOCAL | NO_WRITE_TO_BINLOG TABLE tbl_name , tbl_name . QUICK EXTEN

9、DED USE_FRM- 分析表 ANALYZE LOCAL | NO_WRITE_TO_BINLOG TABLE tbl_name , tbl_name ./* 數(shù)據(jù)操作 */ - 增 INSERT INTO 表名 (字段列表) VALUES (值列表), (值列表), . - 如果要插入的值列表包含所有字段并且順序一致,則可以省略字段列表。 - 可同時(shí)插入多條數(shù)據(jù)記錄! REPLACE 與 INSERT 完全一樣,可互換。 INSERT INTO 表名 SET 字段名=值, 字段名=值, .- 查 SELECT 字段列表 FROM 表名 其他子句 - 可來(lái)自多個(gè)表的多個(gè)字段 - 其他子句可

10、以不使用 - 字段列表可以用*代替,表示所有字段- 刪 DELETE FROM 表名 刪除條件子句 沒(méi)有條件子句,則會(huì)刪除全部- 改 UPDATE 表名 SET 字段名=新值, 字段名=新值 更新條件/* 字符集編碼 */ - MySQL、數(shù)據(jù)庫(kù)、表、字段均可設(shè)置編碼- 數(shù)據(jù)編碼與客戶端編碼不需一致SHOW VARIABLES LIKE character_set_% - 查看所有字符集編碼項(xiàng) character_set_client 客戶端向服務(wù)器發(fā)送數(shù)據(jù)時(shí)使用的編碼 character_set_results 服務(wù)器端將結(jié)果返回給客戶端所使用的編碼 character_set_connec

11、tion 連接層編碼SET 變量名 = 變量值 set character_set_client = gbk; set character_set_results = gbk; set character_set_connection = gbk;SET NAMES GBK; - 相當(dāng)于完成以上三個(gè)設(shè)置- 校對(duì)集 校對(duì)集用以排序 SHOW CHARACTER SET LIKE pattern/SHOW CHARSET LIKE pattern 查看所有字符集 SHOW COLLATION LIKE pattern 查看所有校對(duì)集 charset 字符集編碼 設(shè)置字符集編碼 collate 校對(duì)

12、集編碼 設(shè)置校對(duì)集編碼/* 數(shù)據(jù)類型(列類型) */ -1. 數(shù)值類型- a. 整型 - 類型 字節(jié) 范圍(有符號(hào)位) tinyint 1字節(jié) -128 127 無(wú)符號(hào)位:0 255 smallint 2字節(jié) -32768 32767 mediumint 3字節(jié) -8388608 8388607 int 4字節(jié) bigint 8字節(jié) int(M) M表示總位數(shù) - 默認(rèn)存在符號(hào)位,unsigned 屬性修改 - 顯示寬度,如果某個(gè)數(shù)不夠定義字段時(shí)設(shè)置的位數(shù),則前面以0補(bǔ)填,zerofill 屬性修改 例:int(5) 插入一個(gè)數(shù)123,補(bǔ)填后為00123 - 在滿足要求的情況下,越小越好。 -

13、 1表示bool值真,0表示bool值假。MySQL沒(méi)有布爾類型,通過(guò)整型0和1表示。常用tinyint(1)表示布爾型。- b. 浮點(diǎn)型 - 類型 字節(jié) 范圍 float(單精度) 4字節(jié) double(雙精度) 8字節(jié) 浮點(diǎn)型既支持符號(hào)位 unsigned 屬性,也支持顯示寬度 zerofill 屬性。 不同于整型,前后均會(huì)補(bǔ)填0. 定義浮點(diǎn)型時(shí),需指定總位數(shù)和小數(shù)位數(shù)。 float(M, D) double(M, D) M表示總位數(shù),D表示小數(shù)位數(shù)。 M和D的大小會(huì)決定浮點(diǎn)數(shù)的范圍。不同于整型的固定范圍。 M既表示總位數(shù)(不包括小數(shù)點(diǎn)和正負(fù)號(hào)),也表示顯示寬度(所有顯示符號(hào)均包括)。 支

14、持科學(xué)計(jì)數(shù)法表示。 浮點(diǎn)數(shù)表示近似值。- c. 定點(diǎn)數(shù) - decimal - 可變長(zhǎng)度 decimal(M, D) M也表示總位數(shù),D表示小數(shù)位數(shù)。 保存一個(gè)精確的數(shù)值,不會(huì)發(fā)生數(shù)據(jù)的改變,不同于浮點(diǎn)數(shù)的四舍五入。 將浮點(diǎn)數(shù)轉(zhuǎn)換為字符串來(lái)保存,每9位數(shù)字保存為4個(gè)字節(jié)。2. 字符串類型- a. char, varchar - char 定長(zhǎng)字符串,速度快,但浪費(fèi)空間 varchar 變長(zhǎng)字符串,速度慢,但節(jié)省空間 M表示能存儲(chǔ)的最大長(zhǎng)度,此長(zhǎng)度是字符數(shù),非字節(jié)數(shù)。 不同的編碼,所占用的空間不同。 char,最多255個(gè)字符,與編碼無(wú)關(guān)。 varchar,最多65535字符,與編碼有關(guān)。 一條

15、有效記錄最大不能超過(guò)65535個(gè)字節(jié)。 utf8 最大為21844個(gè)字符,gbk 最大為32766個(gè)字符,latin1 最大為65532個(gè)字符 varchar 是變長(zhǎng)的,需要利用存儲(chǔ)空間保存 varchar 的長(zhǎng)度,如果數(shù)據(jù)小于255個(gè)字節(jié),則采用一個(gè)字節(jié)來(lái)保存長(zhǎng)度,反之需要兩個(gè)字節(jié)來(lái)保存。 varchar 的最大有效長(zhǎng)度由最大行大小和使用的字符集確定。 最大有效長(zhǎng)度是65532字節(jié),因?yàn)樵趘archar存字符串時(shí),第一個(gè)字節(jié)是空的,不存在任何數(shù)據(jù),然后還需兩個(gè)字節(jié)來(lái)存放字符串的長(zhǎng)度,所以有效長(zhǎng)度是64432-1-2=65532字節(jié)。 例:若一個(gè)表定義為 CREATE TABLE tb(c1

16、int, c2 char(30), c3 varchar(N) charset=utf8; 問(wèn)N的最大值是多少? 答:(65535-1-2-4-30*3)/3- b. blob, text - blob 二進(jìn)制字符串(字節(jié)字符串) tinyblob, blob, mediumblob, longblob text 非二進(jìn)制字符串(字符字符串) tinytext, text, mediumtext, longtext text 在定義時(shí),不需要定義長(zhǎng)度,也不會(huì)計(jì)算總長(zhǎng)度。 text 類型在定義時(shí),不可給default值- c. binary, varbinary - 類似于char和varcha

17、r,用于保存二進(jìn)制字符串,也就是保存字節(jié)字符串而非字符字符串。 char, varchar, text 對(duì)應(yīng) binary, varbinary, blob.3. 日期時(shí)間類型 一般用整型保存時(shí)間戳,因?yàn)镻HP可以很方便的將時(shí)間戳進(jìn)行格式化。 datetime 8字節(jié) 日期及時(shí)間 1000-01-01 00:00:00 到 9999-12-31 23:59:59 date 3字節(jié) 日期 1000-01-01 到 9999-12-31 timestamp 4字節(jié) 時(shí)間戳 19700101000000 到 2038-01-19 03:14:07 time 3字節(jié) 時(shí)間 -838:59:59 到 8

18、38:59:59 year 1字節(jié) 年份 1901 - 2155 datetime “YYYY-MM-DD hh:mm:ss”timestamp “YY-MM-DD hh:mm:ss” “YYYYMMDDhhmmss” “YYMMDDhhmmss” YYYYMMDDhhmmss YYMMDDhhmmssdate “YYYY-MM-DD” “YY-MM-DD” “YYYYMMDD” “YYMMDD” YYYYMMDD YYMMDDtime “hh:mm:ss” “hhmmss” hhmmssyear “YYYY” “YY” YYYY YY4. 枚舉和集合- 枚舉(enum) -enum(val1

19、, val2, val3.) 在已知的值中進(jìn)行單選。最大數(shù)量為65535. 枚舉值在保存時(shí),以2個(gè)字節(jié)的整型(smallint)保存。每個(gè)枚舉值,按保存的位置順序,從1開(kāi)始逐一遞增。 表現(xiàn)為字符串類型,存儲(chǔ)卻是整型。 NULL值的索引是NULL。 空字符串錯(cuò)誤值的索引值是0。- 集合(set) -set(val1, val2, val3.) create table tab ( gender set(男, 女, 無(wú)) ); insert into tab values (男, 女); 最多可以有64個(gè)不同的成員。以bigint存儲(chǔ),共8個(gè)字節(jié)。采取位運(yùn)算的形式。 當(dāng)創(chuàng)建表時(shí),SET成員值的尾部

20、空格將自動(dòng)被刪除。/* 選擇類型 */- PHP角度1. 功能滿足2. 存儲(chǔ)空間盡量小,處理效率更高3. 考慮兼容問(wèn)題- IP存儲(chǔ) -1. 只需存儲(chǔ),可用字符串2. 如果需計(jì)算,查找等,可存儲(chǔ)為4個(gè)字節(jié)的無(wú)符號(hào)int,即unsigned 1) PHP函數(shù)轉(zhuǎn)換 ip2long可轉(zhuǎn)換為整型,但會(huì)出現(xiàn)攜帶符號(hào)問(wèn)題。需格式化為無(wú)符號(hào)的整型。 利用sprintf函數(shù)格式化字符串 sprintf(%u, ip2long(34); 然后用long2ip將整型轉(zhuǎn)回IP字符串 2) MySQL函數(shù)轉(zhuǎn)換(無(wú)符號(hào)整型,UNSIGNED) INET_ATON() 將IP轉(zhuǎn)為整型

21、 INET_NTOA(2130706433) 將整型轉(zhuǎn)為IP /* 列屬性(列約束) */ -1. 主鍵 - 能唯一標(biāo)識(shí)記錄的字段,可以作為主鍵。 - 一個(gè)表只能有一個(gè)主鍵。 - 主鍵具有唯一性。 - 聲明字段時(shí),用 primary key 標(biāo)識(shí)。 也可以在字段列表之后聲明 例:create table tab ( id int, stu varchar(10), primary key (id); - 主鍵字段的值不能為null。 - 主鍵可以由多個(gè)字段共同組成。此時(shí)需要在字段列表后聲明的方法。 例:create table tab ( id int, stu varchar(10), ag

22、e int, primary key (stu, age);2. unique 唯一索引(唯一約束) 使得某字段的值也不能重復(fù)。 3. null 約束 null不是數(shù)據(jù)類型,是列的一個(gè)屬性。 表示當(dāng)前列是否可以為null,表示什么都沒(méi)有。 null, 允許為空。默認(rèn)。 not null, 不允許為空。 insert into tab values (null, val); - 此時(shí)表示將第一個(gè)字段的值設(shè)為null, 取決于該字段是否允許為null 4. default 默認(rèn)值屬性 當(dāng)前字段的默認(rèn)值。 insert into tab values (default, val); - 此時(shí)表示強(qiáng)制

23、使用默認(rèn)值。 create table tab ( add_time timestamp default current_timestamp ); - 表示將當(dāng)前時(shí)間的時(shí)間戳設(shè)為默認(rèn)值。 current_date, current_time5. auto_increment 自動(dòng)增長(zhǎng)約束 自動(dòng)增長(zhǎng)必須為索引(主鍵或unique) 只能存在一個(gè)字段為自動(dòng)增長(zhǎng)。 默認(rèn)為1開(kāi)始自動(dòng)增長(zhǎng)??梢酝ㄟ^(guò)表屬性 auto_increment = x進(jìn)行設(shè)置,或 alter table tbl auto_increment = x;6. comment 注釋 例:create table tab ( id in

24、t ) comment 注釋內(nèi)容;7. foreign key 外鍵約束 用于限制主表與從表數(shù)據(jù)完整性。 alter table t1 add constraint t1_t2_fk foreign key (t1_id) references t2(id); - 將表t1的t1_id外鍵關(guān)聯(lián)到表t2的id字段。 - 每個(gè)外鍵都有一個(gè)名字,可以通過(guò) constraint 指定 存在外鍵的表,稱之為從表(子表),外鍵指向的表,稱之為主表(父表)。 作用:保持?jǐn)?shù)據(jù)一致性,完整性,主要目的是控制存儲(chǔ)在外鍵表(從表)中的數(shù)據(jù)。 MySQL中,可以對(duì)InnoDB引擎使用外鍵約束: 語(yǔ)法: foreign

25、 key (外鍵字段) references 主表名 (關(guān)聯(lián)字段) 主表記錄刪除時(shí)的動(dòng)作 主表記錄更新時(shí)的動(dòng)作 此時(shí)需要檢測(cè)一個(gè)從表的外鍵需要約束為主表的已存在的值。外鍵在沒(méi)有關(guān)聯(lián)的情況下,可以設(shè)置為null.前提是該外鍵列,沒(méi)有not null。 可以不指定主表記錄更改或更新時(shí)的動(dòng)作,那么此時(shí)主表的操作被拒絕。 如果指定了 on update 或 on delete:在刪除或更新時(shí),有如下幾個(gè)操作可以選擇: 1. cascade,級(jí)聯(lián)操作。主表數(shù)據(jù)被更新(主鍵值更新),從表也被更新(外鍵值更新)。主表記錄被刪除,從表相關(guān)記錄也被刪除。 2. set null,設(shè)置為null。主表數(shù)據(jù)被更新(

26、主鍵值更新),從表的外鍵被設(shè)置為null。主表記錄被刪除,從表相關(guān)記錄外鍵被設(shè)置成null。但注意,要求該外鍵列,沒(méi)有not null屬性約束。 3. restrict,拒絕父表刪除和更新。 注意,外鍵只被InnoDB存儲(chǔ)引擎所支持。其他引擎是不支持的。/* 建表規(guī)范 */ - - Normal Format, NF - 每個(gè)表保存一個(gè)實(shí)體信息 - 每個(gè)具有一個(gè)ID字段作為主鍵 - ID主鍵 + 原子表 - 1NF, 第一范式 字段不能再分,就滿足第一范式。 - 2NF, 第二范式 滿足第一范式的前提下,不能出現(xiàn)部分依賴。 消除符合主鍵就可以避免部分依賴。增加單列關(guān)鍵字。 - 3NF, 第三范

27、式 滿足第二范式的前提下,不能出現(xiàn)傳遞依賴。 某個(gè)字段依賴于主鍵,而有其他字段依賴于該字段。這就是傳遞依賴。 將一個(gè)實(shí)體信息的數(shù)據(jù)放在一個(gè)表內(nèi)實(shí)現(xiàn)。/* select */ -select all|distinct select_expr from - where - group by 合計(jì)函數(shù) - having - order by - limita. select_expr - 可以用 * 表示所有字段。 select * from tb; - 可以使用表達(dá)式(計(jì)算公式、函數(shù)調(diào)用、字段也是個(gè)表達(dá)式) select stu, 29+25, now() from tb; - 可以為每個(gè)列使用別

28、名。適用于簡(jiǎn)化列標(biāo)識(shí),避免多個(gè)列標(biāo)識(shí)符重復(fù)。 - 使用 as 關(guān)鍵字,也可省略 as. select stu+10 as add10 from tb;b. from 子句 用于標(biāo)識(shí)查詢來(lái)源。 - 可以為表起別名。使用as關(guān)鍵字。 select * from tb1 as tt, tb2 as bb; - from子句后,可以同時(shí)出現(xiàn)多個(gè)表。 - 多個(gè)表會(huì)橫向疊加到一起,而數(shù)據(jù)會(huì)形成一個(gè)笛卡爾積。 select * from tb1, tb2;c. where 子句 - 從from獲得的數(shù)據(jù)源中進(jìn)行篩選。 - 整型1表示真,0表示假。 - 表達(dá)式由運(yùn)算符和運(yùn)算數(shù)組成。 - 運(yùn)算數(shù):變量(字段)、

29、值、函數(shù)返回值 - 運(yùn)算符: =, , , !=, =, =, , !, &, |, in (not) null, (not) like, (not) in, (not) between and, is (not), and, or, not, xor is/is not 加上ture/false/unknown,檢驗(yàn)?zāi)硞€(gè)值的真假 與功能相同,可用于null比較d. group by 子句, 分組子句 group by 字段/別名 排序方式 分組后會(huì)進(jìn)行排序。升序:ASC,降序:DESC 以下合計(jì)函數(shù)需配合 group by 使用: count 返回不同的非NULL值數(shù)目 count(*)、c

30、ount(字段) sum 求和 max 求最大值 min 求最小值 avg 求平均值 group_concat 返回帶有來(lái)自一個(gè)組的連接的非NULL值的字符串結(jié)果。組內(nèi)字符串連接。e. having 子句,條件子句 與 where 功能、用法相同,執(zhí)行時(shí)機(jī)不同。 where 在開(kāi)始時(shí)執(zhí)行檢測(cè)數(shù)據(jù),對(duì)原數(shù)據(jù)進(jìn)行過(guò)濾。 having 對(duì)篩選出的結(jié)果再次進(jìn)行過(guò)濾。 having 字段必須是查詢出來(lái)的,where 字段必須是數(shù)據(jù)表存在的。 where 不可以使用字段的別名,having 可以。因?yàn)閳?zhí)行WHERE代碼時(shí),可能尚未確定列值。 where 不可以使用合計(jì)函數(shù)。一般需用合計(jì)函數(shù)才會(huì)用 havi

31、ng SQL標(biāo)準(zhǔn)要求HAVING必須引用GROUP BY子句中的列或用于合計(jì)函數(shù)中的列。f. order by 子句,排序子句 order by 排序字段/別名 排序方式 ,排序字段/別名 排序方式. 升序:ASC,降序:DESC 支持多個(gè)字段的排序。g. limit 子句,限制結(jié)果數(shù)量子句 僅對(duì)處理好的結(jié)果進(jìn)行數(shù)量限制。將處理好的結(jié)果的看作是一個(gè)集合,按照記錄出現(xiàn)的順序,索引從0開(kāi)始。 limit 起始位置, 獲取條數(shù) 省略第一個(gè)參數(shù),表示從索引0開(kāi)始。limit 獲取條數(shù)h. distinct, all 選項(xiàng) distinct 去除重復(fù)記錄 默認(rèn)為 all, 全部記錄/* UNION */

32、 - 將多個(gè)select查詢的結(jié)果組合成一個(gè)結(jié)果集合。 SELECT . UNION ALL|DISTINCT SELECT . 默認(rèn) DISTINCT 方式,即所有返回的行都是唯一的 建議,對(duì)每個(gè)SELECT查詢加上小括號(hào)包裹。 ORDER BY 排序時(shí),需加上 LIMIT 進(jìn)行結(jié)合。 需要各select查詢的字段數(shù)量一樣。 每個(gè)select查詢的字段列表(數(shù)量、類型)應(yīng)一致,因?yàn)榻Y(jié)果中的字段名以第一條select語(yǔ)句為準(zhǔn)。/* 子查詢 */ - - 子查詢需用括號(hào)包裹。- from型 from后要求是一個(gè)表,必須給子查詢結(jié)果取個(gè)別名。 - 簡(jiǎn)化每個(gè)查詢內(nèi)的條件。 - from型需將結(jié)果生成

33、一個(gè)臨時(shí)表格,可用以原表的鎖定的釋放。 - 子查詢返回一個(gè)表,表型子查詢。 select * from (select * from tb where id0) as subfrom where id1;- where型 - 子查詢返回一個(gè)值,標(biāo)量子查詢。 - 不需要給子查詢?nèi)e名。 - where子查詢內(nèi)的表,不能直接用以更新。 select * from tb where money = (select max(money) from tb); - 列子查詢 如果子查詢結(jié)果返回的是一列。 使用 in 或 not in 完成查詢 exists 和 not exists 條件 如果子查詢返回?cái)?shù)

34、據(jù),則返回1或0。常用于判斷條件。 select column1 from t1 where exists (select * from t2); - 行子查詢 查詢條件是一個(gè)行。 select * from t1 where (id, gender) in (select id, gender from t2); 行構(gòu)造符:(col1, col2, .) 或 ROW(col1, col2, .) 行構(gòu)造符通常用于與對(duì)能返回兩個(gè)或兩個(gè)以上列的子查詢進(jìn)行比較。 - 特殊運(yùn)算符 != all() 相當(dāng)于 not in = some() 相當(dāng)于 in。any 是 some 的別名 != some()

35、 不等同于 not in,不等于其中某一個(gè)。 all, some 可以配合其他運(yùn)算符一起使用。/* 連接查詢(join) */ - 將多個(gè)表的字段進(jìn)行連接,可以指定連接條件。- 內(nèi)連接(inner join) - 默認(rèn)就是內(nèi)連接,可省略inner。 - 只有數(shù)據(jù)存在時(shí)才能發(fā)送連接。即連接結(jié)果不能出現(xiàn)空行。 on 表示連接條件。其條件表達(dá)式與where類似。也可以省略條件(表示條件永遠(yuǎn)為真) 也可用where表示連接條件。 還有 using, 但需字段名相同。 using(字段名) - 交叉連接 cross join 即,沒(méi)有條件的內(nèi)連接。 select * from tb1 cross joi

36、n tb2;- 外連接(outer join) - 如果數(shù)據(jù)不存在,也會(huì)出現(xiàn)在連接結(jié)果中。 - 左外連接 left join 如果數(shù)據(jù)不存在,左表記錄會(huì)出現(xiàn),而右表為null填充 - 右外連接 right join 如果數(shù)據(jù)不存在,右表記錄會(huì)出現(xiàn),而左表為null填充- 自然連接(natural join) 自動(dòng)判斷連接條件完成連接。 相當(dāng)于省略了using,會(huì)自動(dòng)查找相同字段名。 natural join natural left join natural right joinselect info.id, , info.stu_num, extra_info.hobby,

37、 extra_info.sex from info, extra_info where info.stu_num = extra_info.stu_id;/* 導(dǎo)入導(dǎo)出 */ -select * into outfile 文件地址 控制格式 from 表名; - 導(dǎo)出表數(shù)據(jù)load data local infile 文件地址 replace|ignore into table 表名 控制格式; - 導(dǎo)入數(shù)據(jù) 生成的數(shù)據(jù)默認(rèn)的分隔符是制表符 local未指定,則數(shù)據(jù)文件必須在服務(wù)器上 replace 和 ignore 關(guān)鍵詞控制對(duì)現(xiàn)有的唯一鍵記錄的重復(fù)的處理- 控制格式fields 控制字段格

38、式默認(rèn):fields terminated by t enclosed by escaped by terminated by string - 終止 enclosed by char - 包裹 escaped by char - 轉(zhuǎn)義 - 示例: SELECT a,b,a+b INTO OUTFILE /tmp/result.text FIELDS TERMINATED BY , OPTIONALLY ENCLOSED BY LINES TERMINATED BY n FROM test_table;lines 控制行格式默認(rèn):lines terminated by n terminated

39、 by string - 終止 /* insert */ -select語(yǔ)句獲得的數(shù)據(jù)可以用insert插入??梢允÷詫?duì)列的指定,要求 values () 括號(hào)內(nèi),提供給了按照列順序出現(xiàn)的所有字段的值。 或者使用set語(yǔ)法。 insert into tbl_name set field=value,.;可以一次性使用多個(gè)值,采用(), (), ();的形式。 insert into tbl_name values (), (), ();可以在列值指定時(shí),使用表達(dá)式。 insert into tbl_name values (field_value, 10+10, now();可以使用一個(gè)特殊值

40、 default,表示該列使用默認(rèn)值。 insert into tbl_name values (field_value, default);可以通過(guò)一個(gè)查詢的結(jié)果,作為需要插入的值。 insert into tbl_name select .;可以指定在插入的值出現(xiàn)主鍵(或唯一索引)沖突時(shí),更新其他非主鍵列的信息。 insert into tbl_name values/set/select on duplicate key update 字段=值, ;/* delete */ -DELETE FROM tbl_nameWHERE where_definition ORDER BY .LIM

41、IT row_count按照條件刪除指定刪除的最多記錄數(shù)。Limit可以通過(guò)排序條件刪除。order by + limit支持多表刪除,使用類似連接語(yǔ)法。delete from 需要?jiǎng)h除數(shù)據(jù)多表1,表2 using 表連接操作 條件。/* truncate */ -TRUNCATE TABLE tbl_name清空數(shù)據(jù)刪除重建表區(qū)別:1,truncate 是刪除表再創(chuàng)建,delete 是逐條刪除2,truncate 重置auto_increment的值。而delete不會(huì)3,truncate 不知道刪除了幾條,而delete知道。4,當(dāng)被用于帶分區(qū)的表時(shí),truncate 會(huì)保留分區(qū)/* 備份

42、與還原 */ -備份,將數(shù)據(jù)的結(jié)構(gòu)與表內(nèi)數(shù)據(jù)保存起來(lái)。利用 mysqldump 指令完成。- 導(dǎo)出1. 導(dǎo)出一張表mysqldump -u用戶名 -p密碼 庫(kù)名 表名 文件名(D:/a.sql)2. 導(dǎo)出多張表mysqldump -u用戶名 -p密碼 庫(kù)名 表1 表2 表3 文件名(D:/a.sql)3. 導(dǎo)出所有表mysqldump -u用戶名 -p密碼 庫(kù)名 文件名(D:/a.sql)4. 導(dǎo)出一個(gè)庫(kù) mysqldump -u用戶名 -p密碼 -B 庫(kù)名 文件名(D:/a.sql)可以-w攜帶備份條件- 導(dǎo)入1. 在登錄mysql的情況下:source 備份文件2. 在不登錄的情況下mys

43、ql -u用戶名 -p密碼 庫(kù)名 備份文件/* 視圖 */ -什么是視圖: 視圖是一個(gè)虛擬表,其內(nèi)容由查詢定義。同真實(shí)的表一樣,視圖包含一系列帶有名稱的列和行數(shù)據(jù)。但是,視圖并不在數(shù)據(jù)庫(kù)中以存儲(chǔ)的數(shù)據(jù)值集形式存在。行和列數(shù)據(jù)來(lái)自由定義視圖的查詢所引用的表,并且在引用視圖時(shí)動(dòng)態(tài)生成。 視圖具有表結(jié)構(gòu)文件,但不存在數(shù)據(jù)文件。 對(duì)其中所引用的基礎(chǔ)表來(lái)說(shuō),視圖的作用類似于篩選。定義視圖的篩選可以來(lái)自當(dāng)前或其它數(shù)據(jù)庫(kù)的一個(gè)或多個(gè)表,或者其它視圖。通過(guò)視圖進(jìn)行查詢沒(méi)有任何限制,通過(guò)它們進(jìn)行數(shù)據(jù)修改時(shí)的限制也很少。 視圖是存儲(chǔ)在數(shù)據(jù)庫(kù)中的查詢的sql語(yǔ)句,它主要出于兩種原因:安全原因,視圖可以隱藏一些數(shù)據(jù),

44、如:社會(huì)保險(xiǎn)基金表,可以用視圖只顯示姓名,地址,而不顯示社會(huì)保險(xiǎn)號(hào)和工資數(shù)等,另一原因是可使復(fù)雜的查詢易于理解和使用。- 創(chuàng)建視圖CREATE OR REPLACE ALGORITHM = UNDEFINED | MERGE | TEMPTABLE VIEW view_name (column_list) AS select_statement - 視圖名必須唯一,同時(shí)不能與表重名。 - 視圖可以使用select語(yǔ)句查詢到的列名,也可以自己指定相應(yīng)的列名。 - 可以指定視圖執(zhí)行的算法,通過(guò)ALGORITHM指定。 - column_list如果存在,則數(shù)目必須等于SELECT語(yǔ)句檢索的列數(shù)-

45、查看結(jié)構(gòu) SHOW CREATE VIEW view_name - 刪除視圖 - 刪除視圖后,數(shù)據(jù)依然存在。 - 可同時(shí)刪除多個(gè)視圖。 DROP VIEW IF EXISTS view_name .- 修改視圖結(jié)構(gòu) - 一般不修改視圖,因?yàn)椴皇撬械母乱晥D都會(huì)映射到表上。 ALTER VIEW view_name (column_list)AS select_statement- 視圖作用 1. 簡(jiǎn)化業(yè)務(wù)邏輯 2. 對(duì)客戶端隱藏真實(shí)的表結(jié)構(gòu)- 視圖算法(ALGORITHM) MERGE 合并 將視圖的查詢語(yǔ)句,與外部查詢需要先合并再執(zhí)行! TEMPTABLE 臨時(shí)表 將視圖執(zhí)行完畢后,形成臨時(shí)表,再做外層查詢! UNDEFINED 未定義(默認(rèn)),指的是MySQL自主去選擇相應(yīng)的算法。/* 事務(wù)(transaction) */ -事務(wù)是指邏輯上的一組操作,組成這組操作的各個(gè)單元,要不全成功要不全失敗。 - 支持連續(xù)SQL的集體成功或集體撤銷。 - 事務(wù)是數(shù)據(jù)庫(kù)在數(shù)據(jù)晚自習(xí)方面的一個(gè)功能。 - 需要利用 InnoDB 或 BDB 存儲(chǔ)引擎,對(duì)自動(dòng)提交的特性支持完成。 - InnoDB被稱為事務(wù)安全型引擎。- 事務(wù)開(kāi)啟 START TRANSACTION; 或者 BEGIN; 開(kāi)啟事務(wù)后

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論