拿走不謝!1000行MySQL詳細學習筆記~
這份資料非常全面且詳細,覆蓋了MySQL基礎學習的方方面面,非常適合初學者入門!所以一定要好好學習這份資料!
備注:以下完整代碼左右滑動查看~
Windows服務
-- 啟動MySQL
? ?net start mysql
-- 創(chuàng)建Windows服務
? ?sc create mysql binPath= mysqld_bin_path(注意:等號與值之間有空格)
連接與斷開服務器
mysql -h 地址 -P 端口 -u 用戶名 -p 密碼
SHOW PROCESSLIST -- 顯示哪些線程正在運行
SHOW VARIABLES -- 顯示系統(tǒng)變量信息
數(shù)據(jù)庫操作
-- 查看當前數(shù)據(jù)庫
? ?SELECT DATABASE();
-- 顯示當前時間、用戶名、數(shù)據(jù)庫版本
? ?SELECT now(), user(), version();
-- 創(chuàng)建庫
? ?CREATE DATABASE[ IF NOT EXISTS] 數(shù)據(jù)庫名 數(shù)據(jù)庫選項
? ?數(shù)據(jù)庫選項:
? ? ? ?CHARACTER SET charset_name
? ? ? ?COLLATE collation_name
-- 查看已有庫
? ?SHOW DATABASES[ LIKE 'PATTERN']
-- 查看當前庫信息
? ?SHOW CREATE DATABASE 數(shù)據(jù)庫名
-- 修改庫的選項信息
? ?ALTER DATABASE 庫名 選項信息
-- 刪除庫
? ?DROP DATABASE[ IF EXISTS] 數(shù)據(jù)庫名
? ? ? ?同時刪除該數(shù)據(jù)庫相關的目錄及其目錄內(nèi)容
表的操作
-- 創(chuàng)建表
? ?CREATE [TEMPORARY] TABLE[ IF NOT EXISTS] [庫名.]表名 ( 表的結(jié)構(gòu)定義 )[ 表選項]
? ? ? ?每個字段必須有數(shù)據(jù)類型
? ? ? ?最后一個字段后不能有逗號
? ? ? ?TEMPORARY 臨時表,會話結(jié)束時表自動消失
? ? ? ?對于字段的定義:
? ? ? ? ? ?字段名 數(shù)據(jù)類型 [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string']
-- 表選項
? ?-- 字符集
? ? ? ?CHARSET = charset_name
? ? ? ?如果表沒有設定,則使用數(shù)據(jù)庫字符集
? ?-- 存儲引擎
? ? ? ?ENGINE = engine_name
? ? ? ?表在管理數(shù)據(jù)時采用的不同的數(shù)據(jù)結(jié)構(gòu),結(jié)構(gòu)不同會導致處理方式、提供的特性操作等不同
? ? ? ?常見的引擎:InnoDB MyISAM Memory/Heap BDB Merge Example CSV MaxDB Archive
? ? ? ?不同的引擎在保存表的結(jié)構(gòu)和數(shù)據(jù)時采用不同的方式
? ? ? MyISAM表文件含義:.frm表定義,.MYD表數(shù)據(jù),.MYI表索引
? ? ? ?InnoDB表文件含義:.frm表定義,表空間數(shù)據(jù)和日志文件
? ? ? ?SHOW ENGINES -- 顯示存儲引擎的狀態(tài)信息
? ? ? ?SHOW ENGINE 引擎名 {LOGS|STATUS} -- 顯示存儲引擎的日志或狀態(tài)信息
? ?-- 自增起始數(shù)
? ? ? ?AUTO_INCREMENT = 行數(shù)
? ?-- 數(shù)據(jù)文件目錄
? ? ? ?DATA DIRECTORY = '目錄'
? ?-- 索引文件目錄
? ? ? ?INDEX DIRECTORY = '目錄'
? ?-- 表注釋
? ? ? ?COMMENT = 'string'
? ?-- 分區(qū)選項
? ? ? ?PARTITION BY ... (詳細見手冊)
-- 查看所有表
? ?SHOW TABLES[ LIKE 'pattern']
? ?SHOW TABLES FROM 表名
-- 查看表機構(gòu)
? ?SHOW CREATE TABLE 表名 (信息更詳細)
? ?DESC 表名 / DESCRIBE 表名 / EXPLAIN 表名 / SHOW COLUMNS FROM 表名 [LIKE 'PATTERN']
? ?SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern']
-- 修改表
? ?-- 修改表本身的選項
? ? ? ?ALTER TABLE 表名 表的選項
? ? ? ?eg: ALTER TABLE 表名 ENGINE=MYISAM;
? ?-- 對表進行重命名
? ? ? ?RENAME TABLE 原表名 TO 新表名
? ? ? ?RENAME TABLE 原表名 TO 庫名.表名 (可將表移動到另一個數(shù)據(jù)庫)
? ? ? ?-- RENAME可以交換兩個表名
? ?-- 修改表的字段機構(gòu)(13.1.2. ALTER TABLE語法)
? ? ? ?ALTER TABLE 表名 操作名
? ? ? ?-- 操作名
? ? ? ? ? ?ADD[ COLUMN] 字段定義 ? ? ? -- 增加字段
? ? ? ? ? ? ? ?AFTER 字段名 ? ? ? ? ?-- 表示增加在該字段名后面
? ? ? ? ? ? ? ?FIRST ? ? ? ? ? ? ? -- 表示增加在第一個
? ? ? ? ? ?ADD PRIMARY KEY(字段名) ? -- 創(chuàng)建主鍵
? ? ? ? ? ?ADD UNIQUE [索引名] (字段名)-- 創(chuàng)建唯一索引
? ? ? ? ? ?ADD INDEX [索引名] (字段名) -- 創(chuàng)建普通索引
? ? ? ? ? ?DROP[ COLUMN] 字段名 ? ? ?-- 刪除字段
? ? ? ? ? ?MODIFY[ COLUMN] 字段名 字段屬性 ? ? -- 支持對字段屬性進行修改,不能修改字段名(所有原有屬性也需寫上)
? ? ? ? ? ?CHANGE[ COLUMN] 原字段名 新字段名 字段屬性 ? ? ?-- 支持對字段名修改
? ? ? ? ? ?DROP PRIMARY KEY ? ?-- 刪除主鍵(刪除主鍵前需刪除其AUTO_INCREMENT屬性)
? ? ? ? ? ?DROP INDEX 索引名 -- 刪除索引
? ? ? ? ? ?DROP FOREIGN KEY 外鍵 ? ?-- 刪除外鍵
-- 刪除表
? ?DROP TABLE[ IF EXISTS] 表名 ...
-- 清空表數(shù)據(jù)
? ?TRUNCATE [TABLE] 表名
-- 復制表結(jié)構(gòu)
? ?CREATE TABLE 表名 LIKE 要復制的表名
-- 復制表結(jié)構(gòu)和數(shù)據(jù)
? ?CREATE TABLE 表名 [AS] SELECT * FROM 要復制的表名
-- 檢查表是否有錯誤
? ?CHECK TABLE tbl_name [, tbl_name] ... [option] ...
-- 優(yōu)化表
? ?OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
-- 修復表
? ?REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM]
-- 分析表
? ?ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
數(shù)據(jù)操作
-- 增
? ?INSERT [INTO] 表名 [(字段列表)] VALUES (值列表)[, (值列表), ...]
? ? ? ?-- 如果要插入的值列表包含所有字段并且順序一致,則可以省略字段列表。
? ? ? ?-- 可同時插入多條數(shù)據(jù)記錄!
? ? ? ?REPLACE 與 INSERT 完全一樣,可互換。
? ?INSERT [INTO] 表名 SET 字段名=值[, 字段名=值, ...]
-- 查
? ?SELECT 字段列表 FROM 表名[ 其他子句]
? ? ? ?-- 可來自多個表的多個字段
? ? ? ?-- 其他子句可以不使用
? ? ? ?-- 字段列表可以用*代替,表示所有字段
-- 刪
? ?DELETE FROM 表名[ 刪除條件子句]
? ? ? ?沒有條件子句,則會刪除全部
-- 改
? ?UPDATE 表名 SET 字段名=新值[, 字段名=新值] [更新條件]
字符集編碼
-- MySQL、數(shù)據(jù)庫、表、字段均可設置編碼
-- 數(shù)據(jù)編碼與客戶端編碼不需一致
SHOW VARIABLES LIKE 'character_set_%' ? -- 查看所有字符集編碼項
? ?character_set_client ? ? ? ?客戶端向服務器發(fā)送數(shù)據(jù)時使用的編碼
? ?character_set_results ? ? ? 服務器端將結(jié)果返回給客戶端所使用的編碼
? ?character_set_connection ? ?連接層編碼
SET 變量名 = 變量值
? ?SET character_set_client = gbk;
? ?SET character_set_results = gbk;
? ?SET character_set_connection = gbk;
SET NAMES GBK; ?-- 相當于完成以上三個設置
-- 校對集
? ?校對集用以排序
? ?SHOW CHARACTER SET [LIKE 'pattern']/SHOW CHARSET [LIKE 'pattern'] ? 查看所有字符集
? ?SHOW COLLATION [LIKE 'pattern'] ? ? 查看所有校對集
? ?CHARSET 字符集編碼 ? ? 設置字符集編碼
? ?COLLATE 校對集編碼 ? ? 設置校對集編碼
數(shù)據(jù)類型(列類型)
1. 數(shù)值類型
-- a. 整型 ----------
? ?類型 ? ? ? ? 字節(jié) ? ? 范圍(有符號位)
? tinyint ? ? 1字節(jié) ? ?-128 ~ 127 ? ? ?無符號位:0 ~ 255
? ?smallint ? ?2字節(jié) ? ?-32768 ~ 32767
? ?mediumint ? 3字節(jié) ? ?-8388608 ~ 8388607
? ?int ? ? ? ? 4字節(jié)
? ?bigint ? ? ?8字節(jié)
? ?int(M) ?M表示總位數(shù)
? ?- 默認存在符號位,unsigned 屬性修改
? ?- 顯示寬度,如果某個數(shù)不夠定義字段時設置的位數(shù),則前面以0補填,zerofill 屬性修改
? ? ? ?例:int(5) ? 插入一個數(shù)'123',補填后為'00123'
? ?- 在滿足要求的情況下,越小越好。
? ?- 1表示bool值真,0表示bool值假。MySQL沒有布爾類型,通過整型0和1表示。常用tinyint(1)表示布爾型。
-- b. 浮點型 ----------
? ?類型 ? ? ? ? ? ? 字節(jié) ? ? 范圍
? ?float(單精度) ? ? 4字節(jié)
? ?double(雙精度) ? ?8字節(jié)
? ?浮點型既支持符號位 unsigned 屬性,也支持顯示寬度 zerofill 屬性。
? ? ? ?不同于整型,前后均會補填0.
? ?定義浮點型時,需指定總位數(shù)和小數(shù)位數(shù)。
? ? ? ?float(M, D) ? ? double(M, D)
? ? ? M表示總位數(shù),D表示小數(shù)位數(shù)。
? ? ? M和D的大小會決定浮點數(shù)的范圍。不同于整型的固定范圍。
? ? ? M既表示總位數(shù)(不包括小數(shù)點和正負號),也表示顯示寬度(所有顯示符號均包括)。
? ? ? ?支持科學計數(shù)法表示。
? ? ? ?浮點數(shù)表示近似值。
-- c. 定點數(shù) ----------
? ?decimal -- 可變長度
? decimal(M, D) ? M也表示總位數(shù),D表示小數(shù)位數(shù)。
? ?保存一個精確的數(shù)值,不會發(fā)生數(shù)據(jù)的改變,不同于浮點數(shù)的四舍五入。
? ?將浮點數(shù)轉(zhuǎn)換為字符串來保存,每9位數(shù)字保存為4個字節(jié)。
2. 字符串類型
-- a. char, varchar ----------
? ?char ? ?定長字符串,速度快,但浪費空間
? ?varchar 變長字符串,速度慢,但節(jié)省空間
? M表示能存儲的最大長度,此長度是字符數(shù),非字節(jié)數(shù)。
? ?不同的編碼,所占用的空間不同。
? char,最多255個字符,與編碼無關。
? varchar,最多65535字符,與編碼有關。
? ?一條有效記錄最大不能超過65535個字節(jié)。
? ? ? ?utf8 最大為21844個字符,gbk 最大為32766個字符,latin1 最大為65532個字符
? varchar 是變長的,需要利用存儲空間保存 varchar 的長度,如果數(shù)據(jù)小于255個字節(jié),則采用一個字節(jié)來保存長度,反之需要兩個字節(jié)來保存。
? varchar 的最大有效長度由最大行大小和使用的字符集確定。
? ?最大有效長度是65532字節(jié),因為在varchar存字符串時,第一個字節(jié)是空的,不存在任何數(shù)據(jù),然后還需兩個字節(jié)來存放字符串的長度,所以有效長度是64432-1-2=65532字節(jié)。
? ?例:若一個表定義為 CREATE TABLE tb(c1 int, c2 char(30), c3 varchar(N)) charset=utf8; 問N的最大值是多少?答:(65535-1-2-4-30*3)/3
-- b. blob, text ----------
? ?blob 二進制字符串(字節(jié)字符串)
? ? ? ?tinyblob, blob, mediumblob, longblob
? ?text 非二進制字符串(字符字符串)
? ? ? ?tinytext, text, mediumtext, longtext
? text 在定義時,不需要定義長度,也不會計算總長度。
? ?text 類型在定義時,不可給default值
-- c. binary, varbinary ----------
? ?類似于char和varchar,用于保存二進制字符串,也就是保存字節(jié)字符串而非字符字符串。
? ?char, varchar, text 對應 binary, varbinary, blob.
3. 日期時間類型
? ?一般用整型保存時間戳,因為PHP可以很方便的將時間戳進行格式化。
? ?datetime ? ?8字節(jié) ? ?日期及時間 ? ? 1000-01-01 00:00:00 到 9999-12-31 23:59:59
? ?date ? ? ? ?3字節(jié) ? ?日期 ? ? ? ? 1000-01-01 到 9999-12-31
? ?timestamp ? 4字節(jié) ? ?時間戳 ? ? ? ?19700101000000 到 2038-01-19 03:14:07
? ?time ? ? ? ?3字節(jié) ? ?時間 ? ? ? ? -838:59:59 到 838:59:59
? ?year ? ? ? ?1字節(jié) ? ?年份 ? ? ? ? 1901 - 2155
datetime ? ?YYYY-MM-DD hh:mm:ss
timestamp ? YY-MM-DD hh:mm:ss
? ? ? ? ? ?YYYYMMDDhhmmss
? ? ? ? ? ?YYMMDDhhmmss
? ? ? ? ? ?YYYYMMDDhhmmss
? ? ? ? ? ?YYMMDDhhmmss
date ? ? ? ?YYYY-MM-DD
? ? ? ? ? ?YY-MM-DD
? ? ? ? ? ?YYYYMMDD
? ? ? ? ? ?YYMMDD
? ? ? ? ? ?YYYYMMDD
? ? ? ? ? ?YYMMDD
time ? ? ? ?hh:mm:ss
? ? ? ? ? ?hhmmss
? ? ? ? ? ?hhmmss
year ? ? ? ?YYYY
? ? ? ? ? ?YY
? ? ? ? ? ?YYYY
? ? ? ? ? ?YY
4. 枚舉和集合
-- 枚舉(enum) ----------
enum(val1, val2, val3...)
? ?在已知的值中進行單選。最大數(shù)量為65535.
? ?枚舉值在保存時,以2個字節(jié)的整型(smallint)保存。每個枚舉值,按保存的位置順序,從1開始逐一遞增。
? ?表現(xiàn)為字符串類型,存儲卻是整型。
? NULL值的索引是NULL。
? ?空字符串錯誤值的索引值是0。
-- 集合(set) ----------
set(val1, val2, val3...)
? ?create table tab ( gender set('男', '女', '無') );
? ?insert into tab values ('男, 女');
? ?最多可以有64個不同的成員。以bigint存儲,共8個字節(jié)。采取位運算的形式。
? ?當創(chuàng)建表時,SET成員值的尾部空格將自動被刪除。
選擇類型
-- PHP角度
1. 功能滿足
2. 存儲空間盡量小,處理效率更高
3. 考慮兼容問題
-- IP存儲 ----------
1. 只需存儲,可用字符串
2. 如果需計算,查找等,可存儲為4個字節(jié)的無符號int,即unsigned
? ?1) PHP函數(shù)轉(zhuǎn)換
? ? ? ip2long可轉(zhuǎn)換為整型,但會出現(xiàn)攜帶符號問題。需格式化為無符號的整型。
? ? ? ?利用sprintf函數(shù)格式化字符串
? ? ? ?sprintf("%u", ip2long('192.168.3.134'));
? ? ? ?然后用long2ip將整型轉(zhuǎn)回IP字符串
? ?2) MySQL函數(shù)轉(zhuǎn)換(無符號整型,UNSIGNED)
? ? ? ?INET_ATON('127.0.0.1') 將IP轉(zhuǎn)為整型
? ? ? ?INET_NTOA(2130706433) 將整型轉(zhuǎn)為IP
列屬性(列約束)
1. PRIMARY 主鍵
? ?- 能唯一標識記錄的字段,可以作為主鍵。
? ?- 一個表只能有一個主鍵。
? ?- 主鍵具有唯一性。
? ?- 聲明字段時,用 primary key 標識。
? ? ? ?也可以在字段列表之后聲明
? ? ? ? ? ?例:create table tab ( id int, stu varchar(10), primary key (id));
? ?- 主鍵字段的值不能為null。
? ?- 主鍵可以由多個字段共同組成。此時需要在字段列表后聲明的方法。
? ? ? ?例:create table tab ( id int, stu varchar(10), age int, primary key (stu, age));
2. UNIQUE 唯一索引(唯一約束)
? ?使得某字段的值也不能重復。
3. NULL 約束
? null不是數(shù)據(jù)類型,是列的一個屬性。
? ?表示當前列是否可以為null,表示什么都沒有。
? null, 允許為空。默認。
? not null, 不允許為空。
? ?insert into tab values (null, 'val');
? ? ? ?-- 此時表示將第一個字段的值設為null, 取決于該字段是否允許為null
4. DEFAULT 默認值屬性
? ?當前字段的默認值。
? ?insert into tab values (default, 'val'); ? ?-- 此時表示強制使用默認值。
? ?create table tab ( add_time timestamp default current_timestamp );
? ? ? ?-- 表示將當前時間的時間戳設為默認值。
? ? ? ?current_date, current_time
5. AUTO_INCREMENT 自動增長約束
? ?自動增長必須為索引(主鍵或unique)
? ?只能存在一個字段為自動增長。
? ?默認為1開始自動增長。可以通過表屬性 auto_increment = x進行設置,或 alter table tbl auto_increment = x;
6. COMMENT 注釋
? ?例:create table tab ( id int ) 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外鍵關聯(lián)到表t2的id字段。
? ? ? ?-- 每個外鍵都有一個名字,可以通過 constraint 指定
? ?存在外鍵的表,稱之為從表(子表),外鍵指向的表,稱之為主表(父表)。
? ?作用:保持數(shù)據(jù)一致性,完整性,主要目的是控制存儲在外鍵表(從表)中的數(shù)據(jù)。
? MySQL中,可以對InnoDB引擎使用外鍵約束:
? ?語法:
? ?foreign key (外鍵字段) references 主表名 (關聯(lián)字段) [主表記錄刪除時的動作] [主表記錄更新時的動作]
? ?此時需要檢測一個從表的外鍵需要約束為主表的已存在的值。外鍵在沒有關聯(lián)的情況下,可以設置為null.前提是該外鍵列,沒有not null。
? ?可以不指定主表記錄更改或更新時的動作,那么此時主表的操作被拒絕。
? ?如果指定了 on update 或 on delete:在刪除或更新時,有如下幾個操作可以選擇:
? ?1. cascade,級聯(lián)操作。主表數(shù)據(jù)被更新(主鍵值更新),從表也被更新(外鍵值更新)。主表記錄被刪除,從表相關記錄也被刪除。
? ?2. set null,設置為null。主表數(shù)據(jù)被更新(主鍵值更新),從表的外鍵被設置為null。主表記錄被刪除,從表相關記錄外鍵被設置成null。但注意,要求該外鍵列,沒有not null屬性約束。
? ?3. restrict,拒絕父表刪除和更新。
? ?注意,外鍵只被InnoDB存儲引擎所支持。其他引擎是不支持的。
建表規(guī)范
? ?-- Normal Format, NF
? ? ? ?- 每個表保存一個實體信息
? ? ? ?- 每個具有一個ID字段作為主鍵
? ? ? ?- ID主鍵 + 原子表
? ?-- 1NF, 第一范式
? ? ? ?字段不能再分,就滿足第一范式。
? ?-- 2NF, 第二范式
? ? ? ?滿足第一范式的前提下,不能出現(xiàn)部分依賴。
? ? ? ?消除符合主鍵就可以避免部分依賴。增加單列關鍵字。
? ?-- 3NF, 第三范式
? ? ? ?滿足第二范式的前提下,不能出現(xiàn)傳遞依賴。
? ? ? ?某個字段依賴于主鍵,而有其他字段依賴于該字段。這就是傳遞依賴。
? ? ? ?將一個實體信息的數(shù)據(jù)放在一個表內(nèi)實現(xiàn)。
SELECT
SELECT [ALL|DISTINCT] select_expr FROM -> WHERE -> GROUP BY [合計函數(shù)] -> HAVING -> ORDER BY -> LIMIT
a. select_expr
? ?-- 可以用 * 表示所有字段。
? ? ? ?select * from tb;
? ?-- 可以使用表達式(計算公式、函數(shù)調(diào)用、字段也是個表達式)
? ? ? ?select stu, 29+25, now() from tb;
? ?-- 可以為每個列使用別名。適用于簡化列標識,避免多個列標識符重復。
? ? ? ?- 使用 as 關鍵字,也可省略 as.
? ? ? ?select stu+10 as add10 from tb;
b. FROM 子句
? ?用于標識查詢來源。
? ?-- 可以為表起別名。使用as關鍵字。
? ? ? ?SELECT * FROM tb1 AS tt, tb2 AS bb;
? ?-- from子句后,可以同時出現(xiàn)多個表。
? ? ? ?-- 多個表會橫向疊加到一起,而數(shù)據(jù)會形成一個笛卡爾積。
? ? ? ?SELECT * FROM tb1, tb2;
? ?-- 向優(yōu)化符提示如何選擇索引
? ? ? ?USE INDEX、IGNORE INDEX、FORCE INDEX
? ? ? ?SELECT * FROM table1 USE INDEX (key1,key2) WHERE key1=1 AND key2=2 AND key3=3;
? ? ? ?SELECT * FROM table1 IGNORE INDEX (key3) WHERE key1=1 AND key2=2 AND key3=3;
c. WHERE 子句
? ?-- 從from獲得的數(shù)據(jù)源中進行篩選。
? ?-- 整型1表示真,0表示假。
? ?-- 表達式由運算符和運算數(shù)組成。
? ? ? ?-- 運算數(shù):變量(字段)、值、函數(shù)返回值
? ? ? ?-- 運算符:
? ? ? ? ? ?=, <=>, <>, !=, <=, <, >=, >, !, &&, ||,
? ? ? ? ? ?in (not) null, (not) like, (not) in, (not) between and, is (not), and, or, not, xor
? ? ? ? ? ?is/is not 加上ture/false/unknown,檢驗某個值的真假
? ? ? ? ? ?<=>與<>功能相同,<=>可用于null比較
d. GROUP BY 子句, 分組子句
? ?GROUP BY 字段/別名 [排序方式]
? ?分組后會進行排序。升序:ASC,降序:DESC
? ?以下[合計函數(shù)]需配合 GROUP BY 使用:
? ?count 返回不同的非NULL值數(shù)目 ?count(*)、count(字段)
? ?sum 求和
? ?max 求最大值
? ?min 求最小值
? ?avg 求平均值
? group_concat 返回帶有來自一個組的連接的非NULL值的字符串結(jié)果。組內(nèi)字符串連接。
e. HAVING 子句,條件子句
? ?與 where 功能、用法相同,執(zhí)行時機不同。
? where 在開始時執(zhí)行檢測數(shù)據(jù),對原數(shù)據(jù)進行過濾。
? having 對篩選出的結(jié)果再次進行過濾。
? having 字段必須是查詢出來的,where 字段必須是數(shù)據(jù)表存在的。
? where 不可以使用字段的別名,having 可以。因為執(zhí)行WHERE代碼時,可能尚未確定列值。
? where 不可以使用合計函數(shù)。一般需用合計函數(shù)才會用 having
? SQL標準要求HAVING必須引用GROUP BY子句中的列或用于合計函數(shù)中的列。
f. ORDER BY 子句,排序子句
? ?order by 排序字段/別名 排序方式 [,排序字段/別名 排序方式]...
? ?升序:ASC,降序:DESC
? ?支持多個字段的排序。
g. LIMIT 子句,限制結(jié)果數(shù)量子句
? ?僅對處理好的結(jié)果進行數(shù)量限制。將處理好的結(jié)果的看作是一個集合,按照記錄出現(xiàn)的順序,索引從0開始。
? ?limit 起始位置, 獲取條數(shù)
? ?省略第一個參數(shù),表示從索引0開始。limit 獲取條數(shù)
h. DISTINCT, ALL 選項
? ?distinct 去除重復記錄
? ?默認為 all, 全部記錄
UNION
子查詢
連接查詢(join)
導出
INSERT
DELETE
TRUNCATE
備份與還原
視圖
事務(transaction)
鎖表
觸發(fā)器
SQL編程
用戶和權(quán)限管理
表維護
雜項
……
評論
圖片
表情
