Mysql 學習篇

基本操做

  1. /* Windows服務 */前端

  2. -- 啓動MySQLmysql

  3. net start mysql算法

  4. -- 建立Windows服務sql

  5. sc create mysql binPath= mysqld_bin_path(注意:等號與值之間有空格)數據庫

  6. /* 鏈接與斷開服務器 */編程

  7. mysql -h 地址 -P 端口 -u 用戶名 -p 密碼後端

  8. SHOW PROCESSLIST -- 顯示哪些線程正在運行數組

  9. SHOW VARIABLES -- 顯示系統變量信息安全

數據庫操做

  1. /* 數據庫操做 */ ------------------服務器

  2. -- 查看當前數據庫

  3. SELECT DATABASE();

  4. -- 顯示當前時間、用戶名、數據庫版本

  5. SELECT now(), user(), version();

  6. -- 建立庫

  7. CREATE DATABASE[ IF NOT EXISTS] 數據庫名 數據庫選項

  8. 數據庫選項:

  9. CHARACTER SET charset_name

  10. COLLATE collation_name

  11. -- 查看已有庫

  12. SHOW DATABASES[ LIKE 'PATTERN']

  13. -- 查看當前庫信息

  14. SHOW CREATE DATABASE 數據庫名

  15. -- 修改庫的選項信息

  16. ALTER DATABASE 庫名 選項信息

  17. -- 刪除庫

  18. DROP DATABASE[ IF EXISTS] 數據庫名

  19. 同時刪除該數據庫相關的目錄及其目錄內容

表的操做

  1. -- 建立表

  2. CREATE [TEMPORARY] TABLE[ IF NOT EXISTS] [庫名.]表名 ( 表的結構定義 )[ 表選項]

  3. 每一個字段必須有數據類型

  4. 最後一個字段後不能有逗號

  5. TEMPORARY 臨時表,會話結束時表自動消失

  6. 對於字段的定義:

  7. 字段名 數據類型 [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string']

  8. -- 表選項

  9. -- 字符集

  10. CHARSET = charset_name

  11. 若是表沒有設定,則使用數據庫字符集

  12. -- 存儲引擎

  13. ENGINE = engine_name

  14. 表在管理數據時採用的不一樣的數據結構,結構不一樣會致使處理方式、提供的特性操做等不一樣

  15. 常見的引擎:InnoDB MyISAM Memory/Heap BDB Merge Example CSV MaxDB Archive

  16. 不一樣的引擎在保存表的結構和數據時採用不一樣的方式

  17. MyISAM表文件含義:.frm表定義,.MYD表數據,.MYI表索引

  18. InnoDB表文件含義:.frm表定義,表空間數據和日誌文件

  19. SHOW ENGINES -- 顯示存儲引擎的狀態信息

  20. SHOW ENGINE 引擎名 {LOGS|STATUS} -- 顯示存儲引擎的日誌或狀態信息

  21. -- 自增起始數

  22. AUTO_INCREMENT = 行數

  23. -- 數據文件目錄

  24. DATA DIRECTORY = '目錄'

  25. -- 索引文件目錄

  26. INDEX DIRECTORY = '目錄'

  27. -- 表註釋

  28. COMMENT = 'string'

  29. -- 分區選項

  30. PARTITION BY ... (詳細見手冊)

  31. -- 查看全部表

  32. SHOW TABLES[ LIKE 'pattern']

  33. SHOW TABLES FROM 表名

  34. -- 查看錶機構

  35. SHOW CREATE TABLE 表名 (信息更詳細)

  36. DESC 表名 / DESCRIBE 表名 / EXPLAIN 表名 / SHOW COLUMNS FROM 表名 [LIKE 'PATTERN']

  37. SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern']

  38. -- 修改表

  39. -- 修改表自己的選項

  40. ALTER TABLE 表名 表的選項

  41. eg: ALTER TABLE 表名 ENGINE=MYISAM;

  42. -- 對錶進行重命名

  43. RENAME TABLE 原表名 TO 新表名

  44. RENAME TABLE 原表名 TO 庫名.表名 (可將表移動到另外一個數據庫)

  45. -- RENAME能夠交換兩個表名

  46. -- 修改表的字段機構(13.1.2. ALTER TABLE語法)

  47. ALTER TABLE 表名 操做名

  48. -- 操做名

  49. ADD[ COLUMN] 字段定義 -- 增長字段

  50. AFTER 字段名 -- 表示增長在該字段名後面

  51. FIRST -- 表示增長在第一個

  52. ADD PRIMARY KEY(字段名) -- 建立主鍵

  53. ADD UNIQUE [索引名] (字段名)-- 建立惟一索引

  54. ADD INDEX [索引名] (字段名) -- 建立普通索引

  55. DROP[ COLUMN] 字段名 -- 刪除字段

  56. MODIFY[ COLUMN] 字段名 字段屬性 -- 支持對字段屬性進行修改,不能修改字段名(全部原有屬性也需寫上)

  57. CHANGE[ COLUMN] 原字段名 新字段名 字段屬性 -- 支持對字段名修改

  58. DROP PRIMARY KEY -- 刪除主鍵(刪除主鍵前需刪除其AUTO_INCREMENT屬性)

  59. DROP INDEX 索引名 -- 刪除索引

  60. DROP FOREIGN KEY 外鍵 -- 刪除外鍵

  61. -- 刪除表

  62. DROP TABLE[ IF EXISTS] 表名 ...

  63. -- 清空表數據

  64. TRUNCATE [TABLE] 表名

  65. -- 複製表結構

  66. CREATE TABLE 表名 LIKE 要複製的表名

  67. -- 複製表結構和數據

  68. CREATE TABLE 表名 [AS] SELECT * FROM 要複製的表名

  69. -- 檢查表是否有錯誤

  70. CHECK TABLE tbl_name [, tbl_name] ... [option] ...

  71. -- 優化表

  72. OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...

  73. -- 修復表

  74. REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM]

  75. -- 分析表

  76. ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...

數據操做

  1. /* 數據操做 */ ------------------

  2. --

  3. INSERT [INTO] 表名 [(字段列表)] VALUES (值列表)[, (值列表), ...]

  4. -- 若是要插入的值列表包含全部字段而且順序一致,則能夠省略字段列表。

  5. -- 可同時插入多條數據記錄!

  6. REPLACE INSERT 徹底同樣,可互換。

  7. INSERT [INTO] 表名 SET 字段名=值[, 字段名=值, ...]

  8. --

  9. SELECT 字段列表 FROM 表名[ 其餘子句]

  10. -- 可來自多個表的多個字段

  11. -- 其餘子句能夠不使用

  12. -- 字段列表能夠用*代替,表示全部字段

  13. --

  14. DELETE FROM 表名[ 刪除條件子句]

  15. 沒有條件子句,則會刪除所有

  16. --

  17. UPDATE 表名 SET 字段名=新值[, 字段名=新值] [更新條件]

字符集編碼

  1. /* 字符集編碼 */ ------------------

  2. -- MySQL、數據庫、表、字段都可設置編碼

  3. -- 數據編碼與客戶端編碼不需一致

  4. SHOW VARIABLES LIKE 'character_set_%' -- 查看全部字符集編碼項

  5. character_set_client 客戶端向服務器發送數據時使用的編碼

  6. character_set_results 服務器端將結果返回給客戶端所使用的編碼

  7. character_set_connection 鏈接層編碼

  8. SET 變量名 = 變量值

  9. SET character_set_client = gbk;

  10. SET character_set_results = gbk;

  11. SET character_set_connection = gbk;

  12. SET NAMES GBK; -- 至關於完成以上三個設置

  13. -- 校對集

  14. 校對集用以排序

  15. SHOW CHARACTER SET [LIKE 'pattern']/SHOW CHARSET [LIKE 'pattern'] 查看全部字符集

  16. SHOW COLLATION [LIKE 'pattern'] 查看全部校對集

  17. CHARSET 字符集編碼 設置字符集編碼

  18. COLLATE 校對集編碼 設置校對集編碼

數據類型(列類型)

  1. /* 數據類型(列類型) */ ------------------

  2. 1. 數值類型

  3. -- a. 整型 ----------

  4. 類型 字節 範圍(有符號位)

  5. tinyint 1字節 -128 ~ 127 無符號位:0 ~ 255

  6. smallint 2字節 -32768 ~ 32767

  7. mediumint 3字節 -8388608 ~ 8388607

  8. int 4字節

  9. bigint 8字節

  10. int(M) M表示總位數

  11. - 默認存在符號位,unsigned 屬性修改

  12. - 顯示寬度,若是某個數不夠定義字段時設置的位數,則前面以0補填,zerofill 屬性修改

  13. 例:int(5) 插入一個數'123',補填後爲'00123'

  14. - 在知足要求的狀況下,越小越好。

  15. - 1表示bool值真,0表示bool值假。MySQL沒有布爾類型,經過整型01表示。經常使用tinyint(1)表示布爾型。

  16. -- b. 浮點型 ----------

  17. 類型 字節 範圍

  18. float(單精度) 4字節

  19. double(雙精度) 8字節

  20. 浮點型既支持符號位 unsigned 屬性,也支持顯示寬度 zerofill 屬性。

  21. 不一樣於整型,先後均會補填0.

  22. 定義浮點型時,需指定總位數和小數位數。

  23. float(M, D) double(M, D)

  24. M表示總位數,D表示小數位數。

  25. MD的大小會決定浮點數的範圍。不一樣於整型的固定範圍。

  26. M既表示總位數(不包括小數點和正負號),也表示顯示寬度(全部顯示符號均包括)。

  27. 支持科學計數法表示。

  28. 浮點數表示近似值。

  29. -- c. 定點數 ----------

  30. decimal -- 可變長度

  31. decimal(M, D) M也表示總位數,D表示小數位數。

  32. 保存一個精確的數值,不會發生數據的改變,不一樣於浮點數的四捨五入。

  33. 將浮點數轉換爲字符串來保存,每9位數字保存爲4個字節。

  34. 2. 字符串類型

  35. -- a. char, varchar ----------

  36. char 定長字符串,速度快,但浪費空間

  37. varchar 變長字符串,速度慢,但節省空間

  38. M表示能存儲的最大長度,此長度是字符數,非字節數。

  39. 不一樣的編碼,所佔用的空間不一樣。

  40. char,最多255個字符,與編碼無關。

  41. varchar,最多65535字符,與編碼有關。

  42. 一條有效記錄最大不能超過65535個字節。

  43. utf8 最大爲21844個字符,gbk 最大爲32766個字符,latin1 最大爲65532個字符

  44. varchar 是變長的,須要利用存儲空間保存 varchar 的長度,若是數據小於255個字節,則採用一個字節來保存長度,反之須要兩個字節來保存。

  45. varchar 的最大有效長度由最大行大小和使用的字符集肯定。

  46. 最大有效長度是65532字節,由於在varchar存字符串時,第一個字節是空的,不存在任何數據,而後還需兩個字節來存放字符串的長度,因此有效長度是64432-1-2=65532字節。

  47. 例:若一個表定義爲 CREATE TABLE tb(c1 int, c2 char(30), c3 varchar(N)) charset=utf8; N的最大值是多少? 答:(65535-1-2-4-30*3)/3

  48. -- b. blob, text ----------

  49. blob 二進制字符串(字節字符串)

  50. tinyblob, blob, mediumblob, longblob

  51. text 非二進制字符串(字符字符串)

  52. tinytext, text, mediumtext, longtext

  53. text 在定義時,不須要定義長度,也不會計算總長度。

  54. text 類型在定義時,不可給default

  55. -- c. binary, varbinary ----------

  56. 相似於charvarchar,用於保存二進制字符串,也就是保存字節字符串而非字符字符串。

  57. char, varchar, text 對應 binary, varbinary, blob.

  58. 3. 日期時間類型

  59. 通常用整型保存時間戳,由於PHP能夠很方便的將時間戳進行格式化。

  60. datetime 8字節 日期及時間 1000-01-01 00:00:00 9999-12-31 23:59:59

  61. date 3字節 日期 1000-01-01 9999-12-31

  62. timestamp 4字節 時間戳 19700101000000 2038-01-19 03:14:07

  63. time 3字節 時間 -838:59:59 838:59:59

  64. year 1字節 年份 1901 - 2155

  65. datetime YYYY-MM-DD hh:mm:ss

  66. timestamp YY-MM-DD hh:mm:ss

  67. YYYYMMDDhhmmss

  68. YYMMDDhhmmss

  69. YYYYMMDDhhmmss

  70. YYMMDDhhmmss

  71. date YYYY-MM-DD

  72. YY-MM-DD

  73. YYYYMMDD

  74. YYMMDD

  75. YYYYMMDD

  76. YYMMDD

  77. time hh:mm:ss

  78. hhmmss

  79. hhmmss

  80. year YYYY

  81. YY

  82. YYYY

  83. YY

  84. 4. 枚舉和集合

  85. -- 枚舉(enum) ----------

  86. enum(val1, val2, val3...)

  87. 在已知的值中進行單選。最大數量爲65535.

  88. 枚舉值在保存時,以2個字節的整型(smallint)保存。每一個枚舉值,按保存的位置順序,從1開始逐一遞增。

  89. 表現爲字符串類型,存儲倒是整型。

  90. NULL值的索引是NULL

  91. 空字符串錯誤值的索引值是0

  92. -- 集合(set ----------

  93. set(val1, val2, val3...)

  94. create table tab ( gender set('男', '女', '無') );

  95. insert into tab values ('男, 女');

  96. 最多能夠有64個不一樣的成員。以bigint存儲,共8個字節。採起位運算的形式。

  97. 當建立表時,SET成員值的尾部空格將自動被刪除。

列屬性(列約束)

  1. /* 列屬性(列約束) */ ------------------

  2. 1. PRIMARY 主鍵

  3. - 能惟一標識記錄的字段,能夠做爲主鍵。

  4. - 一個表只能有一個主鍵。

  5. - 主鍵具備惟一性。

  6. - 聲明字段時,用 primary key 標識。

  7. 也能夠在字段列表以後聲明

  8. 例:create table tab ( id int, stu varchar(10), primary key (id));

  9. - 主鍵字段的值不能爲null

  10. - 主鍵能夠由多個字段共同組成。此時須要在字段列表後聲明的方法。

  11. 例:create table tab ( id int, stu varchar(10), age int, primary key (stu, age));

  12. 2. UNIQUE 惟一索引(惟一約束)

  13. 使得某字段的值也不能重複。

  14. 3. NULL 約束

  15. null不是數據類型,是列的一個屬性。

  16. 表示當前列是否能夠爲null,表示什麼都沒有。

  17. null, 容許爲空。默認。

  18. not null, 不容許爲空。

  19. insert into tab values (null, 'val');

  20. -- 此時表示將第一個字段的值設爲null, 取決於該字段是否容許爲null

  21. 4. DEFAULT 默認值屬性

  22. 當前字段的默認值。

  23. insert into tab values (default, 'val'); -- 此時表示強制使用默認值。

  24. create table tab ( add_time timestamp default current_timestamp );

  25. -- 表示將當前時間的時間戳設爲默認值。

  26. current_date, current_time

  27. 5. AUTO_INCREMENT 自動增加約束

  28. 自動增加必須爲索引(主鍵或unique

  29. 只能存在一個字段爲自動增加。

  30. 默認爲1開始自動增加。能夠經過表屬性 auto_increment = x進行設置,或 alter table tbl auto_increment = x;

  31. 6. COMMENT 註釋

  32. 例:create table tab ( id int ) comment '註釋內容';

  33. 7. FOREIGN KEY 外鍵約束

  34. 用於限制主表與從表數據完整性。

  35. alter table t1 add constraint `t1_t2_fk` foreign key (t1_id) references t2(id);

  36. -- 將表t1t1_id外鍵關聯到表t2id字段。

  37. -- 每一個外鍵都有一個名字,能夠經過 constraint 指定

  38. 存在外鍵的表,稱之爲從表(子表),外鍵指向的表,稱之爲主表(父表)。

  39. 做用:保持數據一致性,完整性,主要目的是控制存儲在外鍵表(從表)中的數據。

  40. MySQL中,能夠對InnoDB引擎使用外鍵約束:

  41. 語法:

  42. foreign key (外鍵字段) references 主表名 (關聯字段) [主表記錄刪除時的動做] [主表記錄更新時的動做]

  43. 此時須要檢測一個從表的外鍵須要約束爲主表的已存在的值。外鍵在沒有關聯的狀況下,能夠設置爲null.前提是該外鍵列,沒有not null

  44. 能夠不指定主表記錄更改或更新時的動做,那麼此時主表的操做被拒絕。

  45. 若是指定了 on update on delete:在刪除或更新時,有以下幾個操做能夠選擇:

  46. 1. cascade,級聯操做。主表數據被更新(主鍵值更新),從表也被更新(外鍵值更新)。主表記錄被刪除,從表相關記錄也被刪除。

  47. 2. set null,設置爲null。主表數據被更新(主鍵值更新),從表的外鍵被設置爲null。主表記錄被刪除,從表相關記錄外鍵被設置成null。但注意,要求該外鍵列,沒有not null屬性約束。

  48. 3. restrict,拒絕父表刪除和更新。

  49. 注意,外鍵只被InnoDB存儲引擎所支持。其餘引擎是不支持的。

建表規範

  1. /* 建表規範 */ ------------------

  2. -- Normal Format, NF

  3. - 每一個表保存一個實體信息

  4. - 每一個具備一個ID字段做爲主鍵

  5. - ID主鍵 + 原子表

  6. -- 1NF, 第一範式

  7. 字段不能再分,就知足第一範式。

  8. -- 2NF, 第二範式

  9. 知足第一範式的前提下,不能出現部分依賴。

  10. 消除符合主鍵就能夠避免部分依賴。增長單列關鍵字。

  11. -- 3NF, 第三範式

  12. 知足第二範式的前提下,不能出現傳遞依賴。

  13. 某個字段依賴於主鍵,而有其餘字段依賴於該字段。這就是傳遞依賴。

  14. 將一個實體信息的數據放在一個表內實現。

SELECT

  1. /* SELECT */ ------------------

  2. SELECT [ALL|DISTINCT] select_expr FROM -> WHERE -> GROUP BY [合計函數] -> HAVING -> ORDER BY -> LIMIT

  3. a. select_expr

  4. -- 能夠用 * 表示全部字段。

  5. select * from tb;

  6. -- 可使用表達式(計算公式、函數調用、字段也是個表達式)

  7. select stu, 29+25, now() from tb;

  8. -- 能夠爲每一個列使用別名。適用於簡化列標識,避免多個列標識符重複。

  9. - 使用 as 關鍵字,也可省略 as.

  10. select stu+10 as add10 from tb;

  11. b. FROM 子句

  12. 用於標識查詢來源。

  13. -- 能夠爲表起別名。使用as關鍵字。

  14. SELECT * FROM tb1 AS tt, tb2 AS bb;

  15. -- from子句後,能夠同時出現多個表。

  16. -- 多個表會橫向疊加到一塊兒,而數據會造成一個笛卡爾積。

  17. SELECT * FROM tb1, tb2;

  18. -- 向優化符提示如何選擇索引

  19. USE INDEXIGNORE INDEXFORCE INDEX

  20. SELECT * FROM table1 USE INDEX (key1,key2) WHERE key1=1 AND key2=2 AND key3=3;

  21. SELECT * FROM table1 IGNORE INDEX (key3) WHERE key1=1 AND key2=2 AND key3=3;

  22. c. WHERE 子句

  23. -- from得到的數據源中進行篩選。

  24. -- 整型1表示真,0表示假。

  25. -- 表達式由運算符和運算數組成。

  26. -- 運算數:變量(字段)、值、函數返回值

  27. -- 運算符:

  28. =, <=>, <>, !=, <=, <, >=, >, !, &&, ||,

  29. in (not) null, (not) like, (not) in, (not) between and, is (not), and, or, not, xor

  30. is/is not 加上ture/false/unknown,檢驗某個值的真假

  31. <=>與<>功能相同,<=>可用於null比較

  32. d. GROUP BY 子句, 分組子句

  33. GROUP BY 字段/別名 [排序方式]

  34. 分組後會進行排序。升序:ASC,降序:DESC

  35. 如下[合計函數]需配合 GROUP BY 使用:

  36. count 返回不一樣的非NULL值數目 count(*)、count(字段)

  37. sum 求和

  38. max 求最大值

  39. min 求最小值

  40. avg 求平均值

  41. group_concat 返回帶有來自一個組的鏈接的非NULL值的字符串結果。組內字符串鏈接。

  42. e. HAVING 子句,條件子句

  43. where 功能、用法相同,執行時機不一樣。

  44. where 在開始時執行檢測數據,對原數據進行過濾。

  45. having 對篩選出的結果再次進行過濾。

  46. having 字段必須是查詢出來的,where 字段必須是數據表存在的。

  47. where 不可使用字段的別名,having 能夠。由於執行WHERE代碼時,可能還沒有肯定列值。

  48. where 不可使用合計函數。通常需用合計函數纔會用 having

  49. SQL標準要求HAVING必須引用GROUP BY子句中的列或用於合計函數中的列。

  50. f. ORDER BY 子句,排序子句

  51. order by 排序字段/別名 排序方式 [,排序字段/別名 排序方式]...

  52. 升序:ASC,降序:DESC

  53. 支持多個字段的排序。

  54. g. LIMIT 子句,限制結果數量子句

  55. 僅對處理好的結果進行數量限制。將處理好的結果的看做是一個集合,按照記錄出現的順序,索引從0開始。

  56. limit 起始位置, 獲取條數

  57. 省略第一個參數,表示從索引0開始。limit 獲取條數

  58. h. DISTINCT, ALL 選項

  59. distinct 去除重複記錄

  60. 默認爲 all, 所有記錄

UNION

  1. /* UNION */ ------------------

  2. 將多個select查詢的結果組合成一個結果集合。

  3. SELECT ... UNION [ALL|DISTINCT] SELECT ...

  4. 默認 DISTINCT 方式,即全部返回的行都是惟一的

  5. 建議,對每一個SELECT查詢加上小括號包裹。

  6. ORDER BY 排序時,需加上 LIMIT 進行結合。

  7. 須要各select查詢的字段數量同樣。

  8. 每一個select查詢的字段列表(數量、類型)應一致,由於結果中的字段名以第一條select語句爲準。

子查詢

  1. /* 子查詢 */ ------------------

  2. - 子查詢需用括號包裹。

  3. -- from

  4. from後要求是一個表,必須給子查詢結果取個別名。

  5. - 簡化每一個查詢內的條件。

  6. - from型需將結果生成一個臨時表格,可用以原表的鎖定的釋放。

  7. - 子查詢返回一個表,表型子查詢。

  8. select * from (select * from tb where id>0) as subfrom where id>1;

  9. -- where

  10. - 子查詢返回一個值,標量子查詢。

  11. - 不須要給子查詢取別名。

  12. - where子查詢內的表,不能直接用以更新。

  13. select * from tb where money = (select max(money) from tb);

  14. -- 列子查詢

  15. 若是子查詢結果返回的是一列。

  16. 使用 in not in 完成查詢

  17. exists not exists 條件

  18. 若是子查詢返回數據,則返回10。經常使用於判斷條件。

  19. select column1 from t1 where exists (select * from t2);

  20. -- 行子查詢

  21. 查詢條件是一個行。

  22. select * from t1 where (id, gender) in (select id, gender from t2);

  23. 行構造符:(col1, col2, ...) ROW(col1, col2, ...)

  24. 行構造符一般用於與對能返回兩個或兩個以上列的子查詢進行比較。

  25. -- 特殊運算符

  26. != all() 至關於 not in

  27. = some() 至關於 inany some 的別名

  28. != some() 不等同於 not in,不等於其中某一個。

  29. all, some 能夠配合其餘運算符一塊兒使用。

鏈接查詢(join)

  1. /* 鏈接查詢(join) */ ------------------

  2. 將多個表的字段進行鏈接,能夠指定鏈接條件。

  3. -- 內鏈接(inner join)

  4. - 默認就是內鏈接,可省略inner

  5. - 只有數據存在時才能發送鏈接。即鏈接結果不能出現空行。

  6. on 表示鏈接條件。其條件表達式與where相似。也能夠省略條件(表示條件永遠爲真)

  7. 也可用where表示鏈接條件。

  8. 還有 using, 但需字段名相同。 using(字段名)

  9. -- 交叉鏈接 cross join

  10. 即,沒有條件的內鏈接。

  11. select * from tb1 cross join tb2;

  12. -- 外鏈接(outer join)

  13. - 若是數據不存在,也會出如今鏈接結果中。

  14. -- 左外鏈接 left join

  15. 若是數據不存在,左表記錄會出現,而右表爲null填充

  16. -- 右外鏈接 right join

  17. 若是數據不存在,右表記錄會出現,而左表爲null填充

  18. -- 天然鏈接(natural join)

  19. 自動判斷鏈接條件完成鏈接。

  20. 至關於省略了using,會自動查找相同字段名。

  21. natural join

  22. natural left join

  23. natural right join

  24. select info.id, info.name, info.stu_num, extra_info.hobby, extra_info.sex from info, extra_info where info.stu_num = extra_info.stu_id;

TRUNCATE

  1. /* TRUNCATE */ ------------------

  2. TRUNCATE [TABLE] tbl_name

  3. 清空數據

  4. 刪除重建表

  5. 區別:

  6. 1truncate 是刪除表再建立,delete 是逐條刪除

  7. 2truncate 重置auto_increment的值。而delete不會

  8. 3truncate 不知道刪除了幾條,而delete知道。

  9. 4,當被用於帶分區的表時,truncate 會保留分區

備份與還原

  1. /* 備份與還原 */ ------------------

  2. 備份,將數據的結構與表內數據保存起來。

  3. 利用 mysqldump 指令完成。

  4. -- 導出

  5. mysqldump [options] db_name [tables]

  6. mysqldump [options] ---database DB1 [DB2 DB3...]

  7. mysqldump [options] --all--database

  8. 1. 導出一張表

  9.   mysqldump -u用戶名 -p密碼 庫名 表名 > 文件名(D:/a.sql)

  10. 2. 導出多張表

  11.   mysqldump -u用戶名 -p密碼 庫名 1 2 3 > 文件名(D:/a.sql)

  12. 3. 導出全部表

  13.   mysqldump -u用戶名 -p密碼 庫名 > 文件名(D:/a.sql)

  14. 4. 導出一個庫

  15.   mysqldump -u用戶名 -p密碼 --lock-all-tables --database 庫名 > 文件名(D:/a.sql)

  16. 能夠-w攜帶WHERE條件

  17. -- 導入

  18. 1. 在登陸mysql的狀況下:

  19.   source 備份文件

  20. 2. 在不登陸的狀況下

  21.   mysql -u用戶名 -p密碼 庫名 < 備份文件

視圖

  1. 什麼是視圖:

  2. 視圖是一個虛擬表,其內容由查詢定義。同真實的表同樣,視圖包含一系列帶有名稱的列和行數據。可是,視圖並不在數據庫中以存儲的數據值集形式存在。行和列數據來自由定義視圖的查詢所引用的表,而且在引用視圖時動態生成。

  3. 視圖具備表結構文件,但不存在數據文件。

  4. 對其中所引用的基礎表來講,視圖的做用相似於篩選。定義視圖的篩選能夠來自當前或其它數據庫的一個或多個表,或者其它視圖。經過視圖進行查詢沒有任何限制,經過它們進行數據修改時的限制也不多。

  5. 視圖是存儲在數據庫中的查詢的sql語句,它主要出於兩種緣由:安全緣由,視圖能夠隱藏一些數據,如:社會保險基金錶,能夠用視圖只顯示姓名,地址,而不顯示社會保險號和工資數等,另外一緣由是可以使複雜的查詢易於理解和使用。

  6. -- 建立視圖

  7. CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement

  8. - 視圖名必須惟一,同時不能與表重名。

  9. - 視圖可使用select語句查詢到的列名,也能夠本身指定相應的列名。

  10. - 能夠指定視圖執行的算法,經過ALGORITHM指定。

  11. - column_list若是存在,則數目必須等於SELECT語句檢索的列數

  12. -- 查看結構

  13. SHOW CREATE VIEW view_name

  14. -- 刪除視圖

  15. - 刪除視圖後,數據依然存在。

  16. - 可同時刪除多個視圖。

  17. DROP VIEW [IF EXISTS] view_name ...

  18. -- 修改視圖結構

  19. - 通常不修改視圖,由於不是全部的更新視圖都會映射到表上。

  20. ALTER VIEW view_name [(column_list)] AS select_statement

  21. -- 視圖做用

  22. 1. 簡化業務邏輯

  23. 2. 對客戶端隱藏真實的表結構

  24. -- 視圖算法(ALGORITHM)

  25. MERGE 合併

  26. 將視圖的查詢語句,與外部查詢須要先合併再執行!

  27. TEMPTABLE 臨時表

  28. 將視圖執行完畢後,造成臨時表,再作外層查詢!

  29. UNDEFINED 未定義(默認),指的是MySQL自主去選擇相應的算法。

事務(transaction)

  1. 事務是指邏輯上的一組操做,組成這組操做的各個單元,要不全成功要不全失敗。

  2. - 支持連續SQL的集體成功或集體撤銷。

  3. - 事務是數據庫在數據晚自習方面的一個功能。

  4. - 須要利用 InnoDB BDB 存儲引擎,對自動提交的特性支持完成。

  5. - InnoDB被稱爲事務安全型引擎。

  6. -- 事務開啓

  7. START TRANSACTION; 或者 BEGIN;

  8. 開啓事務後,全部被執行的SQL語句均被認做當前事務內的SQL語句。

  9. -- 事務提交

  10. COMMIT;

  11. -- 事務回滾

  12. ROLLBACK;

  13. 若是部分操做發生問題,映射到事務開啓前。

  14. -- 事務的特性

  15. 1. 原子性(Atomicity

  16. 事務是一個不可分割的工做單位,事務中的操做要麼都發生,要麼都不發生。

  17. 2. 一致性(Consistency

  18. 事務先後數據的完整性必須保持一致。

  19. - 事務開始和結束時,外部數據一致

  20. - 在整個事務過程當中,操做是連續的

  21. 3. 隔離性(Isolation

  22. 多個用戶併發訪問數據庫時,一個用戶的事務不能被其它用戶的事物所幹擾,多個併發事務之間的數據要相互隔離。

  23. 4. 持久性(Durability

  24. 一個事務一旦被提交,它對數據庫中的數據改變就是永久性的。

  25. -- 事務的實現

  26. 1. 要求是事務支持的表類型

  27. 2. 執行一組相關的操做前開啓事務

  28. 3. 整組操做完成後,都成功,則提交;若是存在失敗,選擇回滾,則會回到事務開始的備份點。

  29. -- 事務的原理

  30. 利用InnoDB的自動提交(autocommit)特性完成。

  31. 普通的MySQL執行語句後,當前的數據提交操做都可被其餘客戶端可見。

  32. 而事務是暫時關閉「自動提交」機制,須要commit提交持久化數據操做。

  33. -- 注意

  34. 1. 數據定義語言(DDL)語句不能被回滾,好比建立或取消數據庫的語句,和建立、取消或更改表或存儲的子程序的語句。

  35. 2. 事務不能被嵌套

  36. -- 保存點

  37. SAVEPOINT 保存點名稱 -- 設置一個事務保存點

  38. ROLLBACK TO SAVEPOINT 保存點名稱 -- 回滾到保存點

  39. RELEASE SAVEPOINT 保存點名稱 -- 刪除保存點

  40. -- InnoDB自動提交特性設置

  41. SET autocommit = 0|1; 0表示關閉自動提交,1表示開啓自動提交。

  42. - 若是關閉了,那普通操做的結果對其餘客戶端也不可見,須要commit提交後才能持久化數據操做。

  43. - 也能夠關閉自動提交來開啓事務。但與START TRANSACTION不一樣的是,

  44. SET autocommit是永久改變服務器的設置,直到下次再次修改該設置。(針對當前鏈接)

  45. START TRANSACTION記錄開啓前的狀態,而一旦事務提交或回滾後就須要再次開啓事務。(針對當前事務)

鎖表

  1. /* 鎖表 */

  2. 表鎖定只用於防止其它客戶端進行不正當地讀取和寫入

  3. MyISAM 支持表鎖,InnoDB 支持行鎖

  4. -- 鎖定

  5. LOCK TABLES tbl_name [AS alias]

  6. -- 解鎖

  7. UNLOCK TABLES

觸發器

  1. /* 觸發器 */ ------------------

  2. 觸發程序是與表有關的命名數據庫對象,當該表出現特定事件時,將激活該對象

  3. 監聽:記錄的增長、修改、刪除。

  4. -- 建立觸發器

  5. CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt

  6. 參數:

  7. trigger_time是觸發程序的動做時間。它能夠是 before after,以指明觸發程序是在激活它的語句以前或以後觸發。

  8. trigger_event指明瞭激活觸發程序的語句的類型

  9. INSERT:將新行插入表時激活觸發程序

  10. UPDATE:更改某一行時激活觸發程序

  11. DELETE:從表中刪除某一行時激活觸發程序

  12. tbl_name:監聽的表,必須是永久性的表,不能將觸發程序與TEMPORARY表或視圖關聯起來。

  13. trigger_stmt:當觸發程序激活時執行的語句。執行多個語句,可以使用BEGIN...END複合語句結構

  14. -- 刪除

  15. DROP TRIGGER [schema_name.]trigger_name

  16. 可使用oldnew代替舊的和新的數據

  17. 更新操做,更新前是old,更新後是new.

  18. 刪除操做,只有old.

  19. 增長操做,只有new.

  20. -- 注意

  21. 1. 對於具備相同觸發程序動做時間和事件的給定表,不能有兩個觸發程序。

  22. -- 字符鏈接函數

  23. concat(str1,str2,...])

  24. concat_ws(separator,str1,str2,...)

  25. -- 分支語句

  26. if 條件 then

  27. 執行語句

  28. elseif 條件 then

  29. 執行語句

  30. else

  31. 執行語句

  32. end if;

  33. -- 修改最外層語句結束符

  34. delimiter 自定義結束符號

  35. SQL語句

  36. 自定義結束符號

  37. delimiter ; -- 修改回原來的分號

  38. -- 語句塊包裹

  39. begin

  40. 語句塊

  41. end

  42. -- 特殊的執行

  43. 1. 只要添加記錄,就會觸發程序。

  44. 2. Insert into on duplicate key update 語法會觸發:

  45. 若是沒有重複記錄,會觸發 before insert, after insert;

  46. 若是有重複記錄並更新,會觸發 before insert, before update, after update;

  47. 若是有重複記錄可是沒有發生更新,則觸發 before insert, before update

  48. 3. Replace 語法 若是有記錄,則執行 before insert, before delete, after delete, after insert

SQL編程

  1. /* SQL編程 */ ------------------

  2. --// 局部變量 ----------

  3. -- 變量聲明

  4. declare var_name[,...] type [default value]

  5. 這個語句被用來聲明局部變量。要給變量提供一個默認值,請包含一個default子句。值能夠被指定爲一個表達式,不須要爲一個常數。若是沒有default子句,初始值爲null

  6. -- 賦值

  7. 使用 set select into 語句爲變量賦值。

  8. - 注意:在函數內是可使用全局變量(用戶自定義的變量)

  9. --// 全局變量 ----------

  10. -- 定義、賦值

  11. set 語句能夠定義併爲變量賦值。

  12. set @var = value;

  13. 也可使用select into語句爲變量初始化並賦值。這樣要求select語句只能返回一行,可是能夠是多個字段,就意味着同時爲多個變量進行賦值,變量的數量須要與查詢的列數一致。

  14. 還能夠把賦值語句看做一個表達式,經過select執行完成。此時爲了不=被看成關係運算符看待,使用:=代替。(set語句可使用= :=)。

  15. select @var:=20;

  16. select @v1:=id, @v2=name from t1 limit 1;

  17. select * from tbl_name where @var:=30;

  18. select into 能夠將表中查詢得到的數據賦給變量。

  19. -| select max(height) into @max_height from tb;

  20. -- 自定義變量名

  21. 爲了不select語句中,用戶自定義的變量與系統標識符(一般是字段名)衝突,用戶自定義變量在變量名前使用@做爲開始符號。

  22. @var=10;

  23. - 變量被定義後,在整個會話週期都有效(登陸到退出)

  24. --// 控制結構 ----------

  25. -- if語句

  26. if search_condition then

  27. statement_list

  28. [elseif search_condition then

  29. statement_list]

  30. ...

  31. [else

  32. statement_list]

  33. end if;

  34. -- case語句

  35. CASE value WHEN [compare-value] THEN result

  36. [WHEN [compare-value] THEN result ...]

  37. [ELSE result]

  38. END

  39. -- while循環

  40. [begin_label:] while search_condition do

  41. statement_list

  42. end while [end_label];

  43. - 若是須要在循環內提早終止 while循環,則須要使用標籤;標籤須要成對出現。

  44. -- 退出循環

  45. 退出整個循環 leave

  46. 退出當前循環 iterate

  47. 經過退出的標籤決定退出哪一個循環

  48. --// 內置函數 ----------

  49. -- 數值函數

  50. abs(x) -- 絕對值 abs(-10.9) = 10

  51. format(x, d) -- 格式化千分位數值 format(1234567.456, 2) = 1,234,567.46

  52. ceil(x) -- 向上取整 ceil(10.1) = 11

  53. floor(x) -- 向下取整 floor (10.1) = 10

  54. round(x) -- 四捨五入去整

  55. mod(m, n) -- m%n m mod n 求餘 10%3=1

  56. pi() -- 得到圓周率

  57. pow(m, n) -- m^n

  58. sqrt(x) -- 算術平方根

  59. rand() -- 隨機數

  60. truncate(x, d) -- 截取d位小數

  61. -- 時間日期函數

  62. now(), current_timestamp(); -- 當前日期時間

  63. current_date(); -- 當前日期

  64. current_time(); -- 當前時間

  65. date('yyyy-mm-dd hh:ii:ss'); -- 獲取日期部分

  66. time('yyyy-mm-dd hh:ii:ss'); -- 獲取時間部分

  67. date_format('yyyy-mm-dd hh:ii:ss', '%d %y %a %d %m %b %j'); -- 格式化時間

  68. unix_timestamp(); -- 得到unix時間戳

  69. from_unixtime(); -- 從時間戳得到時間

  70. -- 字符串函數

  71. length(string) -- string長度,字節

  72. char_length(string) -- string的字符個數

  73. substring(str, position [,length]) -- strposition開始,取length個字符

  74. replace(str ,search_str ,replace_str) -- str中用replace_str替換search_str

  75. instr(string ,substring) -- 返回substring首次在string中出現的位置

  76. concat(string [,...]) -- 鏈接字串

  77. charset(str) -- 返回字串字符集

  78. lcase(string) -- 轉換成小寫

  79. left(string, length) -- string2中的左邊起取length個字符

  80. load_file(file_name) -- 從文件讀取內容

  81. locate(substring, string [,start_position]) -- instr,但可指定開始位置

  82. lpad(string, length, pad) -- 重複用pad加在string開頭,直到字串長度爲length

  83. ltrim(string) -- 去除前端空格

  84. repeat(string, count) -- 重複count

  85. rpad(string, length, pad) --在str後用pad補充,直到長度爲length

  86. rtrim(string) -- 去除後端空格

  87. strcmp(string1 ,string2) -- 逐字符比較兩字串大小

  88. -- 流程函數

  89. case when [condition] then result [when [condition] then result ...] [else result] end 多分支

  90. if(expr1,expr2,expr3) 雙分支。

  91. -- 聚合函數

  92. count()

  93. sum();

  94. max();

  95. min();

  96. avg();

  97. group_concat()

  98. -- 其餘經常使用函數

  99. md5();

  100. default();

  101. --// 存儲函數,自定義函數 ----------

  102. -- 新建

  103. CREATE FUNCTION function_name (參數列表) RETURNS 返回值類型

  104. 函數體

  105. - 函數名,應該合法的標識符,而且不該該與已有的關鍵字衝突。

  106. - 一個函數應該屬於某個數據庫,可使用db_name.funciton_name的形式執行當前函數所屬數據庫,不然爲當前數據庫。

  107. - 參數部分,由"參數名""參數類型"組成。多個參數用逗號隔開。

  108. - 函數體由多條可用的mysql語句,流程控制,變量聲明等語句構成。

  109. - 多條語句應該使用 begin...end 語句塊包含。

  110. - 必定要有 return 返回值語句。

  111. -- 刪除

  112. DROP FUNCTION [IF EXISTS] function_name;

  113. -- 查看

  114. SHOW FUNCTION STATUS LIKE 'partten'

  115. SHOW CREATE FUNCTION function_name;

  116. -- 修改

  117. ALTER FUNCTION function_name 函數選項

  118. --// 存儲過程,自定義功能 ----------

  119. -- 定義

  120. 存儲存儲過程 是一段代碼(過程),存儲在數據庫中的sql組成。

  121. 一個存儲過程一般用於完成一段業務邏輯,例如報名,交班費,訂單入庫等。

  122. 而一個函數一般專一與某個功能,視爲其餘程序服務的,須要在其餘語句中調用函數才能夠,而存儲過程不能被其餘調用,是本身執行 經過call執行。

  123. -- 建立

  124. CREATE PROCEDURE sp_name (參數列表)

  125. 過程體

  126. 參數列表:不一樣於函數的參數列表,須要指明參數類型

  127. IN,表示輸入型

  128. OUT,表示輸出型

  129. INOUT,表示混合型

  130. 注意,沒有返回值。

存儲過程

  1. /* 存儲過程 */ ------------------

  2. 存儲過程是一段可執行性代碼的集合。相比函數,更偏向於業務邏輯。

  3. 調用:CALL 過程名

  4. -- 注意

  5. - 沒有返回值。

  6. - 只能單獨調用,不可夾雜在其餘語句中

  7. -- 參數

  8. IN|OUT|INOUT 參數名 數據類型

  9. IN 輸入:在調用過程當中,將數據輸入到過程體內部的參數

  10. OUT 輸出:在調用過程當中,將過程體處理完的結果返回到客戶端

  11. INOUT 輸入輸出:既可輸入,也可輸出

  12. -- 語法

  13. CREATE PROCEDURE 過程名 (參數列表)

  14. BEGIN

  15. 過程體

  16. END

用戶和權限管理

  1. /* 用戶和權限管理 */ ------------------

  2. -- root密碼重置

  3. 1. 中止MySQL服務

  4. 2. [Linux] /usr/local/mysql/bin/safe_mysqld --skip-grant-tables &

  5. [Windows] mysqld --skip-grant-tables

  6. 3. use mysql;

  7. 4. UPDATE `user` SET PASSWORD=PASSWORD("密碼") WHERE `user` = "root";

  8. 5. FLUSH PRIVILEGES;

  9. 用戶信息表:mysql.user

  10. -- 刷新權限

  11. FLUSH PRIVILEGES;

  12. -- 增長用戶

  13. CREATE USER 用戶名 IDENTIFIED BY [PASSWORD] 密碼(字符串)

  14. - 必須擁有mysql數據庫的全局CREATE USER權限,或擁有INSERT權限。

  15. - 只能建立用戶,不能賦予權限。

  16. - 用戶名,注意引號:如 'user_name'@'192.168.1.1'

  17. - 密碼也需引號,純數字密碼也要加引號

  18. - 要在純文本中指定密碼,需忽略PASSWORD關鍵詞。要把密碼指定爲由PASSWORD()函數返回的混編值,需包含關鍵字PASSWORD

  19. -- 重命名用戶

  20. RENAME USER old_user TO new_user

  21. -- 設置密碼

  22. SET PASSWORD = PASSWORD('密碼') -- 爲當前用戶設置密碼

  23. SET PASSWORD FOR 用戶名 = PASSWORD('密碼') -- 爲指定用戶設置密碼

  24. -- 刪除用戶

  25. DROP USER 用戶名

  26. -- 分配權限/添加用戶

  27. GRANT 權限列表 ON 表名 TO 用戶名 [IDENTIFIED BY [PASSWORD] 'password']

  28. - all privileges 表示全部權限

  29. - *.* 表示全部庫的全部表

  30. - 庫名.表名 表示某庫下面的某表

  31. GRANT ALL PRIVILEGES ON `pms`.* TO 'pms'@'%' IDENTIFIED BY 'pms0817';

  32. -- 查看權限

  33. SHOW GRANTS FOR 用戶名

  34. -- 查看當前用戶權限

  35. SHOW GRANTS; SHOW GRANTS FOR CURRENT_USER; SHOW GRANTS FOR CURRENT_USER();

  36. -- 撤消權限

  37. REVOKE 權限列表 ON 表名 FROM 用戶名

  38. REVOKE ALL PRIVILEGES, GRANT OPTION FROM 用戶名 -- 撤銷全部權限

  39. -- 權限層級

  40. -- 要使用GRANTREVOKE,您必須擁有GRANT OPTION權限,而且您必須用於您正在授予或撤銷的權限。

  41. 全局層級:全局權限適用於一個給定服務器中的全部數據庫,mysql.user

  42. GRANT ALL ON *.*和 REVOKE ALL ON *.*只授予和撤銷全局權限。

  43. 數據庫層級:數據庫權限適用於一個給定數據庫中的全部目標,mysql.db, mysql.host

  44. GRANT ALL ON db_name.*和REVOKE ALL ON db_name.*只授予和撤銷數據庫權限。

  45. 表層級:表權限適用於一個給定表中的全部列,mysql.talbes_priv

  46. GRANT ALL ON db_name.tbl_nameREVOKE ALL ON db_name.tbl_name只授予和撤銷表權限。

  47. 列層級:列權限適用於一個給定表中的單一列,mysql.columns_priv

  48. 當使用REVOKE時,您必須指定與被受權列相同的列。

  49. -- 權限列表

  50. ALL [PRIVILEGES] -- 設置除GRANT OPTION以外的全部簡單權限

  51. ALTER -- 容許使用ALTER TABLE

  52. ALTER ROUTINE -- 更改或取消已存儲的子程序

  53. CREATE -- 容許使用CREATE TABLE

  54. CREATE ROUTINE -- 建立已存儲的子程序

  55. CREATE TEMPORARY TABLES -- 容許使用CREATE TEMPORARY TABLE

  56. CREATE USER -- 容許使用CREATE USER, DROP USER, RENAME USERREVOKE ALL PRIVILEGES

  57. CREATE VIEW -- 容許使用CREATE VIEW

  58. DELETE -- 容許使用DELETE

  59. DROP -- 容許使用DROP TABLE

  60. EXECUTE -- 容許用戶運行已存儲的子程序

  61. FILE -- 容許使用SELECT...INTO OUTFILELOAD DATA INFILE

  62. INDEX -- 容許使用CREATE INDEXDROP INDEX

  63. INSERT -- 容許使用INSERT

  64. LOCK TABLES -- 容許對您擁有SELECT權限的表使用LOCK TABLES

  65. PROCESS -- 容許使用SHOW FULL PROCESSLIST

  66. REFERENCES -- 未被實施

  67. RELOAD -- 容許使用FLUSH

  68. REPLICATION CLIENT -- 容許用戶詢問從屬服務器或主服務器的地址

  69. REPLICATION SLAVE -- 用於複製型從屬服務器(從主服務器中讀取二進制日誌事件)

  70. SELECT -- 容許使用SELECT

  71. SHOW DATABASES -- 顯示全部數據庫

  72. SHOW VIEW -- 容許使用SHOW CREATE VIEW

  73. SHUTDOWN -- 容許使用mysqladmin shutdown

  74. SUPER -- 容許使用CHANGE MASTER, KILL, PURGE MASTER LOGSSET GLOBAL語句,mysqladmin debug命令;容許您鏈接(一次),即便已達到max_connections

  75. UPDATE -- 容許使用UPDATE

  76. USAGE -- 「無權限」的同義詞

  77. GRANT OPTION -- 容許授予權限

表維護

  1. /* 表維護 */

  2. -- 分析和存儲表的關鍵字分佈

  3. ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE 表名 ...

  4. -- 檢查一個或多個表是否有錯誤

  5. CHECK TABLE tbl_name [, tbl_name] ... [option] ...

  6. option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}

  7. -- 整理數據文件的碎片

  8. OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...

雜項

  1. /* 雜項 */ ------------------

  2. 1. 可用反引號(`)爲標識符(庫名、表名、字段名、索引、別名)包裹,以免與關鍵字重名!中文也能夠做爲標識符!

  3. 2. 每一個庫目錄存在一個保存當前數據庫的選項文件db.opt。

  4. 3. 註釋:

  5. 單行註釋 # 註釋內容

  6. 多行註釋 /* 註釋內容 */

  7. 單行註釋 -- 註釋內容 (標準SQL註釋風格,要求雙破折號後加一空格符(空格、TAB、換行等))

  8. 4. 模式通配符:

  9. _ 任意單個字符

  10. % 任意多個字符,甚至包括零字符

  11. 單引號須要進行轉義 \'

  12. 5. CMD命令行內的語句結束符能夠爲 ";", "\G", "\g",僅影響顯示結果。其餘地方仍是用分號結束。delimiter 可修改當前對話的語句結束符。

  13. 6. SQL對大小寫不敏感

  14. 7. 清除已有語句:\c

相關文章
相關標籤/搜索