
第一章 了解SQL
- 主鍵:表中每一行都應(yīng)該有一列(或幾列)可以唯一標(biāo)識(shí)自己。
- 主鍵可以是一列構(gòu)成,也可以是幾列共同構(gòu)成。
- 唯一 非空 不允許修改
第二章 檢索數(shù)據(jù)
- 關(guān)于通配符:一般而言,除非你確實(shí)需要表中的每一列,否則最好別使用 * 通配符。
- 檢索不同的值:DISTINCT
- 不能部分使用 DISTINCT , DISTINCT 關(guān)鍵字作用于所有的列,不僅僅是跟在其后的那一列。
- DISTINCT 需要放到所有列名的前面,如果寫(xiě)成 SELECT salary, DISTINCT department_id
FROM employees 會(huì)報(bào)錯(cuò)。 - DISTINCT 其實(shí)是對(duì)后面所有列名的組合進(jìn)行去重,你能看到最后的結(jié)果是 74 條,因?yàn)檫@ 74 個(gè)部
門(mén)id不同,都有 salary 這個(gè)屬性值。如果你想要看都有哪些不同的部門(mén)(department_id),只
需要寫(xiě) DISTINCT department_id 即可,后面不需要再加其他的列名了。
- 限制結(jié)果:LIMIT
- 注意:LIMIT 2 OFFSET 3 等價(jià)于 LIMIT 3, 2
- 空值參與運(yùn)算
- 所有運(yùn)算符或列值遇到 null 值,運(yùn)算的結(jié)果都為null
- 這里一定要注意,在 MySQL 里面, 空值不等于空字符串。一個(gè)空字符串的長(zhǎng)度是 0,而一個(gè)空值的 長(zhǎng)度是空。而且,在 MySQL 里面,空值是占用空間的。
- 空運(yùn)算符 和 非空運(yùn)算符
SELECT * FROM `om_fnd_company_user` where phone IS NULL
SELECT * FROM `om_fnd_company_user` where phone IS NOT NULL
第三章 排序
- 排序:如果想在多個(gè)列上進(jìn)行降序排序,必須對(duì) **每一列 **指定 DESC 關(guān)鍵字。
第四章 過(guò)濾數(shù)據(jù)
- 范圍:BETWEEN 5 AND 10 表示閉區(qū)間
SELECT id, name, age FROM student WHERE id BETWEEN 5 AND 10;
- 空值
SELECT id, name, age FROM student WHERE age IS NULL;
- 非空值
SELECT id, name, age FROM student WHERE age IS NOT NULL;
第五章 高級(jí)數(shù)據(jù)過(guò)濾
-
注意:任何時(shí)候具有 AND 和 OR 操作符的 WHERE 子句,都應(yīng)該使用圓括號(hào)將加以區(qū)分。
-
NOT:在 WHERE 子句中,用來(lái)否定其后條件的順序。
SELECT id, name, age FROM student WHERE NOT id = 8;
-
IN 操作符 一般比一組 OR 執(zhí)行的更快。
-
WHERE NOT
SELECT name FROM stu WHERE NOT age < 50;
-
不要過(guò)度使用通配符,不得已了也盡量不要讓模糊查詢位于開(kāi)始處。
-
分組函數(shù)
AVG(), MAX(), MIN(), SUM()
會(huì)忽略 NULL 值。 -
COUNT(*) 與 COUNT(字段)
- COUNT(*) 會(huì)統(tǒng)計(jì)所有列
- COUNT(字段) 會(huì)統(tǒng)計(jì)非 NULL
第六章 多表查詢
要避免笛卡爾積。
對(duì)于數(shù)據(jù)庫(kù)中表記錄的查詢和變更,只要涉及多個(gè)表,都需要在列名前加表的別名(或 表名)進(jìn)行限定。
內(nèi)連接(交集)
合并具有同一列的兩個(gè)以上的表的行, 結(jié)果集中不包含一個(gè)表與另一個(gè)表不匹配的行
基本語(yǔ)法:
SELECT table1.column, table2.column,table3.column
FROM table1
JOIN table2 ON table1 和 table2 的連接條件
JOIN table3 ON table2 和 table3 的連接條件(有疑惑)
舉例1:
SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id
FROM employees e JOIN departments d
ON (e.department_id = d.department_id);
舉例2:
SELECT employee_id, city, department_name
FROM employees e
JOIN departments d
ON d.department_id = e.department_id
JOIN locations l
ON d.location_id = l.location_id;
外連接
兩個(gè)表在連接過(guò)程中除了返回滿足連接條件的行以外還返回左(或右)表中不滿足條件的行 ,這種連接稱為左(或右) 外連接。沒(méi)有匹配的行時(shí), 結(jié)果表中相應(yīng)的列為空(NULL)。
- 如果是左外連接,則連接條件中左邊的表也稱為 主表 ,右邊的表稱為 從表 。
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
LEFT OUTER JOIN departments d # OUTER可以省略
ON (e.department_id = d.department_id) ;
- 如果是右外連接,則連接條件中右邊的表也稱為 主表 ,左邊的表稱為 從表 。
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
RIGHT OUTER JOIN departments d # OUTER可以省略
ON (e.department_id = d.department_id) ;
注意:我們要 控制連接表的數(shù)量 。多表連接就相當(dāng)于嵌套 for 循環(huán)一樣,非常消耗資源,會(huì)讓 SQL 查詢性能下降得很嚴(yán)重(建議不要超過(guò) 3 個(gè)),因此不要連接不必要的表。在許多 DBMS 中,也都會(huì)有最大連接表的限制。
多表連接
UNION
UNION 操作符返回兩個(gè)查詢的結(jié)果集的并集,去除重復(fù)記錄。
SELECT * FROM user WHERE did = 2
UNION
SELECT * FROM user WHERE did = 1
UNION 操作符返回兩個(gè)查詢的結(jié)果集的并集,去除重復(fù)記錄。
UNION ALL
UNION ALL 操作符返回兩個(gè)查詢的結(jié)果集的并集。對(duì)于兩個(gè)結(jié)果集的重復(fù)部分,不去重。
第七章 單行函數(shù)
日期和時(shí)間函數(shù)
獲取日期、時(shí)間
函數(shù) | 用法 |
---|---|
CURDATE() ,CURRENT_DATE() | 返回當(dāng)前日期,只包含 年、月、日 |
CURTIME() , CURRENT_TIME() | 返回當(dāng)前時(shí)間,只包含 時(shí)、分、秒 |
NOW() / SYSDATE() / CURRENT_TIMESTAMP() / LOCALTIME() / LOCALTIMESTAMP() | 返回當(dāng)前系統(tǒng)日期和時(shí)間 |
UTC_DATE() | 返回UTC(世界標(biāo)準(zhǔn)時(shí)間)日期 |
UTC_TIME() | 返回UTC(世界標(biāo)準(zhǔn)時(shí)間)時(shí)間 |
圖文并茂的舉個(gè)栗子:
日期與時(shí)間戳的轉(zhuǎn)換
函數(shù) | 用法 |
---|---|
UNIX_TIMESTAMP() | 以UNIX時(shí)間戳的形式返回當(dāng)前時(shí)間。 |
UNIX_TIMESTAMP(date) | 將時(shí)間date以UNIX時(shí)間戳的形式返回。 |
FROM_UNIXTIME(timestamp) | 將UNIX時(shí)間戳的時(shí)間轉(zhuǎn)換為普通格式的時(shí)間 |
獲取月份、星期、星期數(shù)、天數(shù)等函數(shù)
函數(shù) | 用法 |
---|---|
YEAR(date) / MONTH(date) / DAY(date) | 返回具體的日期值 |
HOUR(time) / MINUTE(time) / SECOND(time) | 返回具體的時(shí)間值 |
MONTHNAME(date) | 返回月份:January,… |
DAYNAME(date) | 返回星期幾:MONDAY,TUESDAY…SUNDAY |
WEEKDAY(date) | 返回周幾,注意,周1是0,周2是1…周日 是6 |
QUARTER(date) | 返回日期對(duì)應(yīng)的季度,范圍為1~4 |
WEEK(date) , WEEKOFYEAR(date) | 返回一年中的第幾周 |
DAYOFYEAR(date) | 返回日期是一年中的第幾天 |
DAYOFMONTH(date) | 返回日期位于所在月份的第幾天 |
DAYOFWEEK(date) | 返回周幾,注意:周日是1,周一是2…周六 是7 |
日期的操作函數(shù)
函數(shù) | 用法 |
---|---|
EXTRACT(type FROM date) | 返回指定日期中特定的部分,type指定返回的值 |
EXTRACT(type FROM date)函數(shù)中type的取值與含義:
舉個(gè)栗子:
時(shí)間和秒鐘的轉(zhuǎn)換函數(shù)
函數(shù) | 說(shuō)明 |
---|---|
TIME_TO_SEC(time) | 將 time 轉(zhuǎn)化為秒并返回結(jié)果值。轉(zhuǎn)化的公式為: 小時(shí)*3600+分鐘 *60+秒 |
SEC_TO_TIME(seconds) | 將 seconds 描述轉(zhuǎn)化為包含小時(shí)、分鐘和秒的時(shí)間 |
計(jì)算日期和時(shí)間的函數(shù)
函數(shù) | 用法 |
---|---|
DATE_ADD(datetime, INTERVAL expr type), ADDDATE(date,INTERVAL expr type) | 返回與給定日期時(shí)間相差I(lǐng)NTERVAL 時(shí)間段的日期時(shí)間 |
DATE_SUB(date,INTERVAL expr type), SUBDATE(date,INTERVAL expr type) | 返回與date相差I(lǐng)NTERVAL時(shí)間間隔 的日期 |
上述函數(shù)中type的取值:
函數(shù) | 說(shuō)明 |
---|---|
ADDTIME(time1,time2) | 返回time1加上time2的時(shí)間。當(dāng)time2為一個(gè)數(shù)字時(shí),代表 的是 秒 ,可以為負(fù)數(shù) |
SUBTIME(time1,time2) | 返回time1減去time2后的時(shí)間。當(dāng)time2為一個(gè)數(shù)字時(shí),代 表的是 秒 ,可以為負(fù)數(shù) |
DATEDIFF(date1,date2) | 返回date1 - date2的日期間隔天數(shù) |
TIMEDIFF(time1, time2) | 返回time1 - time2的時(shí)間間隔 |
FROM_DAYS(N) | 返回從0000年1月1日起,N天以后的日期 |
TO_DAYS(date) | 返回日期date距離0000年1月1日的天數(shù) |
LAST_DAY(date) | 返回date所在月份的最后一天的日期 |
MAKEDATE(year,n) | 針對(duì)給定年份與所在年份中的天數(shù)返回一個(gè)日期 |
MAKETIME(hour,minute,second) | 將給定的小時(shí)、分鐘和秒組合成時(shí)間并返回 |
PERIOD_ADD(time,n) | 返回time加上n后的時(shí)間 |
日期的格式與解析
函數(shù) | 說(shuō)明 |
---|---|
DATE_FORMAT(date,fmt) | 按照字符串fmt格式化日期date值 |
TIME_FORMAT(time,fmt) | 按照字符串fmt格式化時(shí)間time值 |
GET_FORMAT(date_type,format_type) | 返回日期字符串的顯示格式 |
STR_TO_DATE(str, fmt) | 按照字符串fmt對(duì)str進(jìn)行解析,解析為一個(gè)日期 |
上述 非GET_FORMAT
函數(shù)中fmt參數(shù)常用的格式符:
GET_FORMAT函數(shù)中date_type和format_type參數(shù)取值如下:
流程控制函數(shù)
流程處理函數(shù)可以根據(jù)不同的條件,執(zhí)行不同的處理流程,可以在SQL語(yǔ)句中實(shí)現(xiàn)不同的條件選擇。 MySQL中的流程處理函數(shù)主要包括IF()、IFNULL()和CASE()函數(shù)。
函數(shù) | 說(shuō)明 |
---|---|
IF(value,value1,value2) | 如果value的值為T(mén)RUE,返回 value1,否則返回value2 |
IFNULL(value1, value2) | 如果value1不為NULL,返回 value1,否則返回value2 |
CASE WHEN 條件1 THEN 結(jié)果1 WHEN 條件2 THEN 結(jié) 果2 … [ELSE resultn] END | 相當(dāng)于Java的if…else if…else… |
CASE expr WHEN 常量值1 THEN 值1 WHEN 常量值1 THEN 值1 … [ELSE 值n] END | 相當(dāng)于Java的switch…case… |
圖文并茂的舉個(gè)栗子:
//todo
第八章 聚合函數(shù)
AVG()
SUM()
MAX()
MIN()
COUNT()
問(wèn)題:用 count(*),count(1),count(列名) 誰(shuí)好呢?
其實(shí),對(duì)于 MyISAM 引擎的表是沒(méi)有區(qū)別的。這種引擎內(nèi)部有一計(jì)數(shù)器在維護(hù)著行數(shù)。
**但是 **InnoDB 引擎的表用count(*),count(1)直接讀行數(shù),復(fù)雜度是O(n),因?yàn)?InnoDB 真的要去數(shù)一遍。 但好于具體的count(列名)。
問(wèn)題:能不能使用 count(列名) 替換 count(*) ?
不要使用 count(列名)來(lái)替代 count() , count() 是 SQL92 定義的標(biāo)準(zhǔn)統(tǒng)計(jì)行數(shù)的語(yǔ)法,跟數(shù) 據(jù)庫(kù)無(wú)關(guān),跟 NULL 和非 NULL 無(wú)關(guān)。 說(shuō)明:count(*)會(huì)統(tǒng)計(jì)值為 NULL 的行,而 count(列名)不會(huì)統(tǒng)計(jì)此列為 NULL 值的行。
GROUP BY
分組
SELECT AVG(salary)
FROM employees
GROUP BY department_id ;
多列進(jìn)行分組
SELECT department_id dept_id, job_id, SUM(salary)
FROM employees
GROUP BY department_id, job_id ;
除聚合函數(shù)語(yǔ)句外,SELECT 語(yǔ)句中的每一列都必須在 GROUP BY 字句中給出。
HAVING
過(guò)濾分組
SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary) > 10000 ;
注意: 不能在 WHERE 子句中使用聚合函數(shù)。
參考
WHERE 和 HAVING 的對(duì)比
區(qū)別1:WHERE 可以直接使用表中的字段作為篩選條件,但不能使用分組中的計(jì)算函數(shù)作為篩選條 件;HAVING 必須要與 GROUP BY 配合使用,可以把分組計(jì)算的函數(shù)和分組字段作為篩選條件。
這決定了,在需要對(duì)數(shù)據(jù)進(jìn)行分組統(tǒng)計(jì)的時(shí)候,HAVING 可以完成 WHERE 不能完成的任務(wù)。這是因?yàn)椋诓樵冋Z(yǔ)法結(jié)構(gòu)中,WHERE 在 GROUP BY 之前,所以無(wú)法對(duì)分組結(jié)果進(jìn)行篩選。HAVING 在 GROUP BY 之后,可以使用分組字段和分組中的計(jì)算函數(shù),對(duì)分組的結(jié)果集進(jìn)行篩選,這個(gè)功能是 WHERE 無(wú)法完成的。另外,WHERE 排除的記錄不再包括在分組中。
區(qū)別2:如果需要通過(guò)連接從關(guān)聯(lián)表中獲取需要的數(shù)據(jù),WHERE 是先篩選后連接,而 HAVING 是先連 接后篩選。
這一點(diǎn),就決定了在關(guān)聯(lián)查詢中,WHERE 比 HAVING 更高效。因?yàn)?WHERE 可以先篩選, 用一個(gè)篩選后的較小數(shù)據(jù)集和關(guān)聯(lián)表進(jìn)行連接,這樣占用的資源比較少,執(zhí)行效率也比較高。HAVING 則需要先把結(jié)果集準(zhǔn)備好,也就是用未被篩選的數(shù)據(jù)集進(jìn)行關(guān)聯(lián),然后對(duì)這個(gè)大的數(shù)據(jù)集進(jìn)行篩選,這 樣占用的資源就比較多,執(zhí)行效率也較低。
開(kāi)發(fā)中的選擇: WHERE 和 HAVING 也不是互相排斥的,我們可以在一個(gè)查詢里面同時(shí)使用 WHERE 和 HAVING。包含 分組統(tǒng)計(jì)函數(shù)的條件用 HAVING,普通條件用 WHERE。這樣,我們就既利用了 WHERE 條件的高效快速,又發(fā)揮了 HAVING 可以使用包含分組統(tǒng)計(jì)函數(shù)的查詢條件的優(yōu)點(diǎn)。當(dāng)數(shù)據(jù)量特別大的時(shí)候,運(yùn)行效率會(huì)有很大的差別。
插入(特殊)
插入檢索出來(lái)的數(shù)據(jù)
INSERT INTO stu(name, age) SELECT name, age FROM user;
復(fù)制表
CREATE TABLE user AS SELECT * FROM student;
刪除表
1.delete:刪除表的數(shù)據(jù),支持條件過(guò)濾,支持回滾。這個(gè)刪除操作會(huì)記錄在日志中,所以比較慢。delete from table_stu;
2.truncate:刪除表的所有數(shù)據(jù),不支持條件過(guò)濾,也不支持回滾,不記錄日志,效率比delete高。truncate table table_stu;
3.drop:刪除表的數(shù)據(jù)的同時(shí),還刪除表結(jié)構(gòu)。將表所占的空間都釋放掉。他的刪除效率最高。drop table table_stu;
SELECT 的執(zhí)行過(guò)程
查詢的結(jié)構(gòu)
#方式1:
SELECT …,…,…
FROM …,…,…
WHERE 多表的連接條件
AND 不包含組函數(shù)的過(guò)濾條件
GROUP BY …,…
HAVING 包含組函數(shù)的過(guò)濾條件
ORDER BY … ASC/DESC
LIMIT …,…#方式2:
SELECT …,…,…
FROM …
JOIN …
ON 多表的連接條件
JOIN …
ON …
WHERE 不包含組函數(shù)的過(guò)濾條件
AND/OR 不包含組函數(shù)的過(guò)濾條件
GROUP BY …,…
HAVING 包含組函數(shù)的過(guò)濾條件
ORDER BY … ASC/DESC
LIMIT …,…#其中: #(1)from:從哪些表中篩選 #(2)on:關(guān)聯(lián)多表查詢時(shí),去除笛卡爾積 #(3)where:從表中篩選的條件 #(4)group by:分組依據(jù) #(5)having:在統(tǒng)計(jì)結(jié)果中再次篩選 #(6)order by:排序 #(7)limit:分頁(yè)
SELETC 執(zhí)行順序
關(guān)鍵字順序
SELECT … FROM … WHERE … GROUP BY … HAVING … ORDER BY … LIMIT…
語(yǔ)句執(zhí)行順序
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT 的字段 -> DISTINCT -> ORDER BY -> LIMIT
SELECT DISTINCT player_id, player_name, count(*) as num # 順序 5
FROM player JOIN team ON player.team_id = team.team_id # 順序 1
WHERE height > 1.80 # 順序 2
GROUP BY player.team_id # 順序 3
HAVING num > 2 # 順序 4
ORDER BY num DESC # 順序 6
LIMIT 2 # 順序 7
在 SELECT 語(yǔ)句執(zhí)行這些步驟的時(shí)候,每個(gè)步驟都會(huì)產(chǎn)生一個(gè) 虛擬表 ,然后將這個(gè)虛擬表傳入下一個(gè)步 驟中作為輸入。需要注意的是,這些步驟隱含在 SQL 的執(zhí)行過(guò)程中,對(duì)于我們來(lái)說(shuō)是不可見(jiàn)的。
SQL 執(zhí)行原理
SELECT 是先執(zhí)行 FROM 這一步的。在這個(gè)階段,如果是多張表聯(lián)查,還會(huì)經(jīng)歷下面的幾個(gè)步驟:
- 首先先通過(guò) CROSS JOIN 求笛卡爾積,相當(dāng)于得到虛擬表 vt(virtual table)1-1;
- 通過(guò) ON 進(jìn)行篩選,在虛擬表 vt1-1 的基礎(chǔ)上進(jìn)行篩選,得到虛擬表 vt1-2;
- 添加外部行。如果我們使用的是左連接、右鏈接或者全連接,就會(huì)涉及到外部行,也就是在虛擬表
vt1-2 的基礎(chǔ)上增加外部行,得到虛擬表 vt1-3。
當(dāng)然如果我們操作的是兩張以上的表,還會(huì)重復(fù)上面的步驟,直到所有表都被處理完為止。這個(gè)過(guò)程得到是我們的原始數(shù)據(jù)。
- 當(dāng)我們拿到了查詢數(shù)據(jù)表的原始數(shù)據(jù),也就是最終的虛擬表 vt1 ,就可以在此基礎(chǔ)上再進(jìn)行 WHERE 階 段 。在這個(gè)階段中,會(huì)根據(jù) vt1 表的結(jié)果進(jìn)行篩選過(guò)濾,得到虛擬表 vt2 。
- 然后進(jìn)入第三步和第四步,也就是 GROUP 和 HAVING 階段 。在這個(gè)階段中,實(shí)際上是在虛擬表 vt2 的 基礎(chǔ)上進(jìn)行分組和分組過(guò)濾,得到中間的虛擬表 vt3 和 vt4 。
- 當(dāng)我們完成了條件篩選部分之后,就可以篩選表中提取的字段,也就是進(jìn)入到 SELECT 和 DISTINCT 階段 。 首先在 SELECT 階段會(huì)提取想要的字段,然后在 DISTINCT 階段過(guò)濾掉重復(fù)的行,分別得到中間的虛擬 表 vt5-1 和 vt5-2 。
- 當(dāng)我們提取了想要的字段數(shù)據(jù)之后,就可以按照指定的字段進(jìn)行排序,也就是 ORDER BY 階段 ,得到虛擬表 vt6 。 最后在 vt6 的基礎(chǔ)上,取出指定行的記錄,也就是 LIMIT 階段 ,得到最終的結(jié)果,對(duì)應(yīng)的是虛擬表 vt7 。
當(dāng)然我們?cè)趯?xiě) SELECT 語(yǔ)句的時(shí)候,不一定存在所有的關(guān)鍵字,相應(yīng)的階段就會(huì)省略。
同時(shí)因?yàn)?SQL 是一門(mén)類似英語(yǔ)的結(jié)構(gòu)化查詢語(yǔ)言,所以我們?cè)趯?xiě) SELECT 語(yǔ)句的時(shí)候,還要注意相應(yīng)的 關(guān)鍵字順序,所謂底層運(yùn)行的原理,就是我們剛才講到的執(zhí)行順序。
第九章 子查詢
自連接 效率 高于 子查詢
第十章 修改表結(jié)構(gòu)
追加一個(gè)列
ALTER TABLE sys_log ADD `before_params` varchar(2000)
DEFAULT NULL COMMENT '請(qǐng)求前的參數(shù)' AFTER `class_method`;
修改一個(gè)列
ALTER TABLE sys_log MODIFY `before_params` varchar(2000)
DEFAULT NULL COMMENT '請(qǐng)求前的參數(shù)' AFTER `class_method`;
重命名一個(gè)列名
ALTER TABLE uesr CHANGE department_name dept_name varchar(15);
刪除一個(gè)列
ALTER TABLE sys_log DROP 字段名
使用經(jīng)驗(yàn)
創(chuàng)建時(shí)間獲取當(dāng)前時(shí)間
create_time datetime DEFAULT CURRENT_TIMESTAMP() COMMENT '創(chuàng)建時(shí)間'
create_time datetime DEFAULT CURRENT_DATE() COMMENT '創(chuàng)建日期'
更新時(shí)間獲取當(dāng)前時(shí)間
update_time datetime DEFAULT CURRENT_TIMESTAMP()
ON UPDATE CURRENT_TIMESTAMP() COMMENT '更新時(shí)間'
SELECT 出現(xiàn)在其他位置
- 出現(xiàn)在 FROM 后 (可以將子查詢的結(jié)果當(dāng)成是一個(gè)臨時(shí)表)
SELECT e.ename
FROM EMP e
JOIN (SELECT MAX(sal) AS msal, deptno FROM emp GROUP BY deptno) s
ON e.deptno = s.deptno AND e.sal = s.msal;
- 出現(xiàn)在 SELECT 后
- 顯示用戶姓名和其部門(mén)名稱
SELECT e.ename, (SELECT dname FROM dept WHERE deptno = e.deptno) FROM emp e;
— 分隔線 —
Other
SQL語(yǔ)言在功能上主要分為如下3大類:
- DDL(Data Definition Languages、數(shù)據(jù)定義語(yǔ)言),這些語(yǔ)句定義了不同的數(shù)據(jù)庫(kù)、表、視 圖、索引等數(shù)據(jù)庫(kù)對(duì)象,還可以用來(lái)創(chuàng)建、刪除、修改數(shù)據(jù)庫(kù)和數(shù)據(jù)表的結(jié)構(gòu)。
主要語(yǔ)句關(guān)鍵字包括 CREATE 、 DROP 、 ALTER 等。
- DML(Data Manipulation Language、數(shù)據(jù)操作語(yǔ)言),用于添加、刪除、更新和查詢數(shù)據(jù)庫(kù) 記錄,并檢查數(shù)據(jù)完整性。
主要語(yǔ)句關(guān)鍵字包括 INSERT 、 DELETE 、 UPDATE 、 SELECT 等。SELECT是SQL的基礎(chǔ),最為重要。
- DCL(Data Control Language、數(shù)據(jù)控制語(yǔ)言),用于定義數(shù)據(jù)庫(kù)、表、字段、用戶的訪問(wèn)權(quán) 限和安全級(jí)別。
主要語(yǔ)句關(guān)鍵字包括 GRANT 、 REVOKE 、 COMMIT 、 ROLLBACK 、 SAVEPOINT 等。
數(shù)據(jù)導(dǎo)入
在命令行客戶端登錄mysql,使用source指令導(dǎo)入 mysql> source d:\mysqldb.sql
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-473238.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-473238.html
到了這里,關(guān)于MySQL從入門(mén)到快速上手的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!