亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

一千行的MySQL學習筆記匯總

2024-07-24 13:06:23
字體:
來源:轉載
供稿:網友

本文詳細匯總了MySQL學習中的各類技巧,分享給大家供大家參考。

具體如下:
 

  1. /* 啟動MySQL */ 
  2. net start mysql 
  3.   
  4. /* 連接與斷開服務器 */ 
  5. mysql -h 地址 -P 端口 -u 用戶名 -p 密碼 
  6.   
  7. /* 跳過權限驗證登錄MySQL */ 
  8. mysqld --skip-grant-tables 
  9. -- 修改root密碼 
  10. 密碼加密函數password() 
  11. update mysql.user set password=password('root'); 
  12.   
  13. SHOW PROCESSLIST -- 顯示哪些線程正在運行 
  14. SHOW VARIABLES --  
  15.   
  16. /* 數據庫操作 */ ------------------ 
  17. -- 查看當前數據庫 
  18.   select database(); 
  19. -- 顯示當前時間、用戶名、數據庫版本 
  20.   select now(), user(), version(); 
  21. -- 創建庫 
  22.   create database[ if not exists] 數據庫名 數據庫選項 
  23.   數據庫選項: 
  24.     CHARACTER SET charset_name 
  25.     COLLATE collation_name 
  26. -- 查看已有庫 
  27.   show databases[ like 'pattern'
  28. -- 查看當前庫信息 
  29.   show create database 數據庫名 
  30. -- 修改庫的選項信息 
  31.   alter database 庫名 選項信息 
  32. -- 刪除庫 
  33.   drop database[ if exists] 數據庫名 
  34.     同時刪除該數據庫相關的目錄及其目錄內容 
  35.   
  36. /* 表的操作 */ ------------------ 
  37. -- 創建表 
  38.   create [temporarytable[ if not exists] [庫名.]表名 ( 表的結構定義 )[ 表選項] 
  39.     每個字段必須有數據類型 
  40.     最后一個字段后不能有逗號 
  41.     temporary 臨時表,會話結束時表自動消失 
  42.     對于字段的定義: 
  43.       字段名 數據類型 [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARYKEY] [COMMENT 'string'
  44. -- 表選項 
  45.   -- 字符集 
  46.     CHARSET = charset_name 
  47.     如果表沒有設定,則使用數據庫字符集 
  48.   -- 存儲引擎 
  49.     ENGINE = engine_name   
  50.     表在管理數據時采用的不同的數據結構,結構不同會導致處理方式、提供的特性操作等不同 
  51.     常見的引擎:InnoDB MyISAM Memory/Heap BDB Merge Example CSV MaxDB Archive 
  52.     不同的引擎在保存表的結構和數據時采用不同的方式 
  53.     MyISAM表文件含義:.frm表定義,.MYD表數據,.MYI表索引 
  54.     InnoDB表文件含義:.frm表定義,表空間數據和日志文件 
  55.     SHOW ENGINES -- 顯示存儲引擎的狀態信息 
  56.     SHOW ENGINE 引擎名 {LOGS|STATUS} -- 顯示存儲引擎的日志或狀態信息 
  57.   -- 數據文件目錄 
  58.     DATA DIRECTORY = '目錄' 
  59.   -- 索引文件目錄 
  60.     INDEX DIRECTORY = '目錄' 
  61.   -- 表注釋 
  62.     COMMENT = 'string' 
  63.   -- 分區選項 
  64.     PARTITION BY ... (詳細見手冊) 
  65. -- 查看所有表 
  66.   SHOW TABLES[ LIKE 'pattern'
  67.   SHOW TABLES FROM 表名 
  68. -- 查看表機構 
  69.   SHOW CREATE TABLE 表名  (信息更詳細) 
  70.   DESC 表名 / DESCRIBE 表名 / EXPLAIN 表名 / SHOW COLUMNS FROM 表名 [LIKE 'PATTERN'
  71.   SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern'
  72. -- 修改表 
  73.   -- 修改表本身的選項 
  74.     ALTER TABLE 表名 表的選項 
  75.     EG:  ALTER TABLE 表名 ENGINE=MYISAM; 
  76.   -- 對表進行重命名 
  77.     RENAME TABLE 原表名 TO 新表名 
  78.     RENAME TABLE 原表名 TO 庫名.表名  (可將表移動到另一個數據庫) 
  79.     -- RENAME可以交換兩個表名 
  80.   -- 修改表的字段機構 
  81.     ALTER TABLE 表名 操作名 
  82.     -- 操作名 
  83.       ADDCOLUMN] 字段名    -- 增加字段 
  84.         AFTER 字段名      -- 表示增加在該字段名后面 
  85.         FIRST        -- 表示增加在第一個 
  86.       ADD PRIMARY KEY(字段名)  -- 創建主鍵 
  87.       ADD UNIQUE [索引名] (字段名)-- 創建唯一索引 
  88.       ADD INDEX [索引名] (字段名)  -- 創建普通索引 
  89.       ADD 
  90.       DROPCOLUMN] 字段名    -- 刪除字段 
  91.       MODIFYCOLUMN] 字段名 字段屬性    -- 支持對字段屬性進行修改,不能修改字段名(所有原有屬性也需寫上) 
  92.       CHANGE[ COLUMN] 原字段名 新字段名 字段屬性    -- 支持對字段名修改 
  93.       DROP PRIMARY KEY  -- 刪除主鍵(刪除主鍵前需刪除其AUTO_INCREMENT屬性) 
  94.       DROP INDEX 索引名  -- 刪除索引 
  95.       DROP FOREIGN KEY 外鍵  -- 刪除外鍵 
  96.   
  97. -- 刪除表 
  98.   DROP TABLE[ IF EXISTS] 表名 ... 
  99. -- 清空表數據 
  100.   TRUNCATE [TABLE] 表名 
  101. -- 復制表結構 
  102.   CREATE TABLE 表名 LIKE 要復制的表名 
  103. -- 復制表結構和數據 
  104.   CREATE TABLE 表名 [ASSELECT * FROM 要復制的表名 
  105. -- 檢查表是否有錯誤 
  106.   CHECK TABLE tbl_name [, tbl_name] ... [option] ... 
  107. -- 優化表 
  108.   OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... 
  109. -- 修復表 
  110.   REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM] 
  111. -- 分析表 
  112.   ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... 
  113.   
  114.   
  115.   
  116. /* 數據操作 */ ------------------ 
  117. -- 增 
  118.   INSERT [INTO] 表名 [(字段列表)] VALUES (值列表)[, (值列表), ...] 
  119.     -- 如果要插入的值列表包含所有字段并且順序一致,則可以省略字段列表。 
  120.     -- 可同時插入多條數據記錄! 
  121.     REPLACE 與 INSERT 完全一樣,可互換。 
  122.   INSERT [INTO] 表名 SET 字段名=值[, 字段名=值, ...] 
  123. -- 查 
  124.   SELECT 字段列表 FROM 表名[ 其他子句] 
  125.     -- 可來自多個表的多個字段 
  126.     -- 其他子句可以不使用 
  127.     -- 字段列表可以用*代替,表示所有字段 
  128. -- 刪 
  129.   DELETE FROM 表名[ 刪除條件子句] 
  130.     沒有條件子句,則會刪除全部 
  131. -- 改 
  132.   UPDATE 表名 SET 字段名=新值[, 字段名=新值] [更新條件] 
  133.   
  134. /* 字符集編碼 */ ------------------ 
  135. -- MySQL、數據庫、表、字段均可設置編碼 
  136. -- 數據編碼與客戶端編碼不需一致 
  137. SHOW VARIABLES LIKE 'character_set_%'  -- 查看所有字符集編碼項 
  138.   character_set_client    客戶端向服務器發送數據時使用的編碼 
  139.   character_set_results    服務器端將結果返回給客戶端所使用的編碼 
  140.   character_set_connection  連接層編碼 
  141. SET 變量名 = 變量值 
  142.   set character_set_client = gbk; 
  143.   set character_set_results = gbk; 
  144.   set character_set_connection = gbk; 
  145. SET NAMES GBK;  -- 相當于完成以上三個設置 
  146. -- 校對集 
  147.   校對集用以排序 
  148.   SHOW CHARACTER SET [LIKE 'pattern']/SHOW CHARSET [LIKE 'pattern']  查看所有字符集 
  149.   SHOW COLLATION [LIKE 'pattern']    查看所有校對集 
  150.   charset 字符集編碼    設置字符集編碼 
  151.   collate 校對集編碼    設置校對集編碼 



 

數據類型(列類型)

1. 數值類型
 

  1. -- a. 整型 ---------- 
  2.   類型      字節    范圍(有符號位) 
  3.   tinyint    1字節  -128 ~ 127    無符號位:0 ~ 255 
  4.   smallint  2字節  -32768 ~ 32767 
  5.   mediumint  3字節  -8388608 ~ 8388607 
  6.   int      4字節 
  7.   bigint    8字節 
  8.   
  9.   int(M)  M表示總位數 
  10.   - 默認存在符號位,unsigned 屬性修改 
  11.   - 顯示寬度,如果某個數不夠定義字段時設置的位數,則前面以0補填,zerofill 屬性修改 
  12.     例:int(5)  插入一個數'123',補填后為'00123' 
  13.   - 在滿足要求的情況下,越小越好。 
  14.   - 1表示bool值真,0表示bool值假。MySQL沒有布爾類型,通過整型0和1表示。常用tinyint(1)表示布爾型。 
  15.   
  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.     M和D的大小會決定浮點數的范圍。不同于整型的固定范圍。 
  26.     M既表示總位數(不包括小數點和正負號),也表示顯示寬度(所有顯示符號均包括)。 
  27.     支持科學計數法表示。 
  28.     浮點數表示近似值。 
  29.   
  30. -- c. 定點數 ---------- 
  31.   decimal  -- 可變長度 
  32.   decimal(M, D)  M也表示總位數,D表示小數位數。 
  33.   保存一個精確的數值,不會發生數據的改變,不同于浮點數的四舍五入。 
  34.   將浮點數轉換為字符串來保存,每9位數字保存為4個字節。 



2. 字符串類型

  1. -- a. char, varchar ---------- 
  2.   char  定長字符串,速度快,但浪費空間 
  3.   varchar  變長字符串,速度慢,但節省空間 
  4.   M表示能存儲的最大長度,此長度是字符數,非字節數。 
  5.   不同的編碼,所占用的空間不同。 
  6.   char,最多255個字符,與編碼無關。 
  7.   varchar,最多65535字符,與編碼有關。 
  8.   一條有效記錄最大不能超過65535個字節。 
  9.     utf8 最大為21844個字符,gbk 最大為32766個字符,latin1 最大為65532個字符 
  10.   varchar 是變長的,需要利用存儲空間保存 varchar 的長度,如果數據小于255個字節,則采用一個字節來保存長度,反之需要兩個字節來保存。 
  11.   varchar 的最大有效長度由最大行大小和使用的字符集確定。 
  12.   最大有效長度是65532字節,因為在varchar存字符串時,第一個字節是空的,不存在任何數據,然后還需兩個字節來存放字符串的長度,所以有效長度是64432-1-2=65532字節。 
  13.   例:若一個表定義為 CREATE TABLE tb(c1 int, c2 char(30), c3 varchar(N)) charset=utf8; 問N的最大值是多少? 答:(65535-1-2-4-30*3)/3 
  14.   
  15. -- b. blob, text ---------- 
  16.   blob 二進制字符串(字節字符串) 
  17.     tinyblob, blob, mediumblob, longblob 
  18.   text 非二進制字符串(字符字符串) 
  19.     tinytext, text, mediumtext, longtext 
  20.   text 在定義時,不需要定義長度,也不會計算總長度。 
  21.   text 類型在定義時,不可給default值 
  22.   
  23. -- c. binary, varbinary ---------- 
  24.   類似于charvarchar,用于保存二進制字符串,也就是保存字節字符串而非字符字符串。 
  25.   charvarchar, text 對應 binary, varbinary, blob. 



3. 日期時間類型
    一般用整型保存時間戳,因為PHP可以很方便的將時間戳進行格式化。
    datetime    8字節    日期及時間        1000-01-01 00:00:00 到 9999-12-31 23:59:59
    date        3字節    日期            1000-01-01 到 9999-12-31
    timestamp    4字節    時間戳        19700101000000 到 2038-01-19 03:14:07
    time        3字節    時間            -838:59:59 到 838:59:59
    year        1字節    年份            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...)
    在已知的值中進行單選。最大數量為65535.
    枚舉值在保存時,以2個字節的整型(smallint)保存。每個枚舉值,按保存的位置順序,從1開始逐一遞增。
    表現為字符串類型,存儲卻是整型。
    NULL值的索引是NULL。
    空字符串錯誤值的索引值是0。
-- 集合(set) ----------
set(val1, val2, val3...)
    create table tab ( gender set('男', '女', '無') );
    insert into tab values ('男, 女');
    最多可以有64個不同的成員。以bigint存儲,共8個字節。采取位運算的形式。
    當創建表時,SET成員值的尾部空格將自動被刪除。
選擇類型
-- PHP角度
1. 功能滿足
2. 存儲空間盡量小,處理效率更高
3. 考慮兼容問題
-- IP存儲 ----------
1. 只需存儲,可用字符串
2. 如果需計算,查找等,可存儲為4個字節的無符號int,即unsigned
    1) PHP函數轉換
        ip2long可轉換為整型,但會出現攜帶符號問題。需格式化為無符號的整型。
        利用sprintf函數格式化字符串
        sprintf("%u", ip2long('192.168.3.134'));
        然后用long2ip將整型轉回IP字符串
    2) MySQL函數轉換(無符號整型,UNSIGNED)
        INET_ATON('127.0.0.1') 將IP轉為整型
        INET_NTOA(2130706433) 將整型轉為IP
      
列屬性(列約束)
1. 主鍵
    - 能唯一標識記錄的字段,可以作為主鍵。
    - 一個表只能有一個主鍵。
    - 主鍵具有唯一性。
    - 聲明字段時,用 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不是數據類型,是列的一個屬性。
    表示當前列是否可以為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 '注釋內容';
7. foreign key 外鍵約束
    用于限制主表與從表數據完整性。
    alter table t1 add constraint `t1_t2_fk` foreign key (t1_id) references t2(id);
        -- 將表t1的t1_id外鍵關聯到表t2的id字段。
        -- 每個外鍵都有一個名字,可以通過 constraint 指定
    存在外鍵的表,稱之為從表(子表),外鍵指向的表,稱之為主表(父表)。
    作用:保持數據一致性,完整性,主要目的是控制存儲在外鍵表(從表)中的數據。
    MySQL中,可以對InnoDB引擎使用外鍵約束:
    語法:
    foreign key (外鍵字段) references 主表名 (關聯字段) [主表記錄刪除時的動作] [主表記錄更新時的動作]
    此時需要檢測一個從表的外鍵需要約束為主表的已存在的值。外鍵在沒有關聯的情況下,可以設置為null.前提是該外鍵列,沒有not null。
    可以不指定主表記錄更改或更新時的動作,那么此時主表的操作被拒絕。
    如果指定了 on update 或 on delete:在刪除或更新時,有如下幾個操作可以選擇:
    1. cascade,級聯操作。主表數據被更新(主鍵值更新),從表也被更新(外鍵值更新)。主表記錄被刪除,從表相關記錄也被刪除。
    2. set null,設置為null。主表數據被更新(主鍵值更新),從表的外鍵被設置為null。主表記錄被刪除,從表相關記錄外鍵被設置成null。但注意,要求該外鍵列,沒有not null屬性約束。
    3. restrict,拒絕父表刪除和更新。
    注意,外鍵只被InnoDB存儲引擎所支持。其他引擎是不支持的。

  1. -- Normal Format, NF 
  2.     - 每個表保存一個實體信息 
  3.     - 每個具有一個ID字段作為主鍵 
  4.     - ID主鍵 + 原子表 
  5.   -- 1NF, 第一范式 
  6.     字段不能再分,就滿足第一范式。 
  7.   -- 2NF, 第二范式 
  8.     滿足第一范式的前提下,不能出現部分依賴。 
  9.     消除符合主鍵就可以避免部分依賴。增加單列關鍵字。 
  10.   -- 3NF, 第三范式 
  11.     滿足第二范式的前提下,不能出現傳遞依賴。 
  12.     某個字段依賴于主鍵,而有其他字段依賴于該字段。這就是傳遞依賴。 
  13.     將一個實體信息的數據放在一個表內實現。 
  14.   
  15.   
  16. /* select */ ------------------ 
  17.   
  18. select [all|distinct] select_expr from -> where -> group by [合計函數] -> having -> order by -> limit 
  19.   
  20. a. select_expr 
  21.   -- 可以用 * 表示所有字段。 
  22.     select * from tb; 
  23.   -- 可以使用表達式(計算公式、函數調用、字段也是個表達式) 
  24.     select stu, 29+25, now() from tb; 
  25.   -- 可以為每個列使用別名。適用于簡化列標識,避免多個列標識符重復。 
  26.     - 使用 as 關鍵字,也可省略 as
  27.     select stu+10 as add10 from tb; 
  28.   
  29. b. from 子句 
  30.   用于標識查詢來源。 
  31.   -- 可以為表起別名。使用as關鍵字。 
  32.     select * from tb1 as tt, tb2 as bb; 
  33.   -- from子句后,可以同時出現多個表。 
  34.     -- 多個表會橫向疊加到一起,而數據會形成一個笛卡爾積。 
  35.     select * from tb1, tb2; 
  36.   
  37. c. where 子句 
  38.   -- 從from獲得的數據源中進行篩選。 
  39.   -- 整型1表示真,0表示假。 
  40.   -- 表達式由運算符和運算數組成。 
  41.     -- 運算數:變量(字段)、值、函數返回值 
  42.     -- 運算符: 
  43.       =, <=>, <>, !=, <=, <, >=, >, !, &&, ||,  
  44.       in (notnull, (notlike, (notin, (notbetween andis (not), andornot, xor 
  45.       is/is not 加上ture/false/unknown,檢驗某個值的真假 
  46.       <=>與<>功能相同,<=>可用于null比較 
  47.   
  48. d. group by 子句, 分組子句 
  49.   group by 字段/別名 [排序方式] 
  50.   分組后會進行排序。升序:ASC,降序:DESC 
  51.     
  52.   以下[合計函數]需配合 group by 使用: 
  53.   count 返回不同的非NULL值數目  count(*)、count(字段) 
  54.   sum 求和 
  55.   max 求最大值 
  56.   min 求最小值 
  57.   avg 求平均值 
  58.   group_concat 返回帶有來自一個組的連接的非NULL值的字符串結果。組內字符串連接。 
  59.   
  60. e. having 子句,條件子句 
  61.   與 where 功能、用法相同,執行時機不同。 
  62.   where 在開始時執行檢測數據,對原數據進行過濾。 
  63.   having 對篩選出的結果再次進行過濾。 
  64.   having 字段必須是查詢出來的,where 字段必須是數據表存在的。 
  65.   where 不可以使用字段的別名,having 可以。因為執行WHERE代碼時,可能尚未確定列值。 
  66.   where 不可以使用合計函數。一般需用合計函數才會用 having 
  67.   SQL標準要求HAVING必須引用GROUP BY子句中的列或用于合計函數中的列。 
  68.   
  69. f. order by 子句,排序子句 
  70.   order by 排序字段/別名 排序方式 [,排序字段/別名 排序方式]... 
  71.   升序:ASC,降序:DESC 
  72.   支持多個字段的排序。 
  73.   
  74. g. limit 子句,限制結果數量子句 
  75.   僅對處理好的結果進行數量限制。將處理好的結果的看作是一個集合,按照記錄出現的順序,索引從0開始。 
  76.   limit 起始位置, 獲取條數 
  77.   省略第一個參數,表示從索引0開始。limit 獲取條數 
  78.   
  79. h. distinctall 選項 
  80.   distinct 去除重復記錄 
  81.   默認為 all, 全部記錄 
  82.   
  83.   
  84. /* UNION */ ------------------ 
  85.   將多個select查詢的結果組合成一個結果集合。 
  86.   SELECT ... UNION [ALL|DISTINCTSELECT ... 
  87.   默認 DISTINCT 方式,即所有返回的行都是唯一的 
  88.   建議,對每個SELECT查詢加上小括號包裹。 
  89.   ORDER BY 排序時,需加上 LIMIT 進行結合。 
  90.   需要各select查詢的字段數量一樣。 
  91.   每個select查詢的字段列表(數量、類型)應一致,因為結果中的字段名以第一條select語句為準。 
  92.   
  93.   
  94. /* 子查詢 */ ------------------ 
  95.   - 子查詢需用括號包裹。 
  96. -- from型 
  97.   from后要求是一個表,必須給子查詢結果取個別名。 
  98.   - 簡化每個查詢內的條件。 
  99.   - from型需將結果生成一個臨時表格,可用以原表的鎖定的釋放。 
  100.   - 子查詢返回一個表,表型子查詢。 
  101.   select * from (select * from tb where id>0) as subfrom where id>1; 
  102. -- where型 
  103.   - 子查詢返回一個值,標量子查詢。 
  104.   - 不需要給子查詢取別名。 
  105.   - where子查詢內的表,不能直接用以更新。 
  106.   select * from tb where money = (select max(money) from tb); 
  107.   -- 列子查詢 
  108.     如果子查詢結果返回的是一列。 
  109.     使用 in 或 not in 完成查詢 
  110.     exists 和 not exists 條件 
  111.       如果子查詢返回數據,則返回1或0。常用于判斷條件。 
  112.       select column1 from t1 where exists (select * from t2); 
  113.   -- 行子查詢 
  114.     查詢條件是一個行。 
  115.     select * from t1 where (id, gender) in (select id, gender from t2); 
  116.     行構造符:(col1, col2, ...) 或 ROW(col1, col2, ...) 
  117.     行構造符通常用于與對能返回兩個或兩個以上列的子查詢進行比較。 
  118.   
  119.   -- 特殊運算符 
  120.   != all()  相當于 not in 
  121.   = some()  相當于 inany 是 some 的別名 
  122.   != some()  不等同于 not in,不等于其中某一個。 
  123.   allsome 可以配合其他運算符一起使用。 
  124.   
  125.   
  126. /* 連接查詢(join) */ ------------------ 
  127.   將多個表的字段進行連接,可以指定連接條件。 
  128. -- 內連接(inner join) 
  129.   - 默認就是內連接,可省略inner。 
  130.   - 只有數據存在時才能發送連接。即連接結果不能出現空行。 
  131.   on 表示連接條件。其條件表達式與where類似。也可以省略條件(表示條件永遠為真) 
  132.   也可用where表示連接條件。 
  133.   還有 using, 但需字段名相同。 using(字段名) 
  134.   
  135.   -- 交叉連接 cross join 
  136.     即,沒有條件的內連接。 
  137.     select * from tb1 cross join tb2; 
  138. -- 外連接(outer join) 
  139.   - 如果數據不存在,也會出現在連接結果中。 
  140.   -- 左外連接 left join 
  141.     如果數據不存在,左表記錄會出現,而右表為null填充 
  142.   -- 右外連接 right join 
  143.     如果數據不存在,右表記錄會出現,而左表為null填充 
  144. -- 自然連接(natural join) 
  145.   自動判斷連接條件完成連接。 
  146.   相當于省略了using,會自動查找相同字段名。 
  147.   natural join 
  148.   natural left join 
  149.   natural right join 
  150.   
  151. 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; 
  152.   
  153. /* 導入導出 */ ------------------ 
  154. select * into outfile 文件地址 [控制格式] from 表名;  -- 導出表數據 
  155. load data [local] infile 文件地址 [replace|ignoreinto table 表名 [控制格式];  -- 導入數據 
  156.   生成的數據默認的分隔符是制表符 
  157.   local未指定,則數據文件必須在服務器上 
  158.   replace 和 ignore 關鍵詞控制對現有的唯一鍵記錄的重復的處理 
  159. -- 控制格式 
  160. fields  控制字段格式 
  161. 默認:fields terminated by '/t' enclosed by '' escaped by '//' 
  162.   terminated by 'string'  -- 終止 
  163.   enclosed by 'char'    -- 包裹 
  164.   escaped by 'char'    -- 轉義 
  165.   -- 示例: 
  166.     SELECT a,b,a+b INTO OUTFILE '/tmp/result.text' 
  167.     FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
  168.     LINES TERMINATED BY '/n' 
  169.     FROM test_table; 
  170. lines  控制行格式 
  171. 默認:lines terminated by '/n' 
  172.   terminated by 'string'  -- 終止 
  173.     
  174. /* insert */ ------------------ 
  175. select語句獲得的數據可以用insert插入。 
  176.   
  177. 可以省略對列的指定,要求 values () 括號內,提供給了按照列順序出現的所有字段的值。 
  178.   或者使用set語法。 
  179.   insert into tbl_name set field=value,...; 
  180.   
  181. 可以一次性使用多個值,采用(), (), ();的形式。 
  182.   insert into tbl_name values (), (), (); 
  183.   
  184. 可以在列值指定時,使用表達式。 
  185.   insert into tbl_name values (field_value, 10+10, now()); 
  186. 可以使用一個特殊值 default,表示該列使用默認值。 
  187.   insert into tbl_name values (field_value, default); 
  188.   
  189. 可以通過一個查詢的結果,作為需要插入的值。 
  190.   insert into tbl_name select ...; 
  191.   
  192. 可以指定在插入的值出現主鍵(或唯一索引)沖突時,更新其他非主鍵列的信息。 
  193.   insert into tbl_name values/set/select on duplicate key update 字段=值, …; 
  194.   
  195. /* delete */ ------------------ 
  196. DELETE FROM tbl_name [WHERE where_definition] [ORDER BY ...] [LIMIT row_count] 



按照條件刪除
指定刪除的最多記錄數。Limit
可以通過排序條件刪除。order by + limit
支持多表刪除,使用類似連接語法。
delete from 需要刪除數據多表1,表2 using 表連接操作 條件。
/* truncate */ ------------------
TRUNCATE [TABLE] tbl_name
清空數據
刪除重建表
區別:
1,truncate 是刪除表再創建,delete 是逐條刪除
2,truncate 重置auto_increment的值。而delete不會
3,truncate 不知道刪除了幾條,而delete知道。
4,當被用于帶分區的表時,truncate 會保留分區
備份與還原
備份,將數據的結構與表內數據保存起來。
利用 mysqldump 指令完成。
-- 導出
1. 導出一張表
  mysqldump -u用戶名 -p密碼 庫名 表名 > 文件名(D:/a.sql)
2. 導出多張表
  mysqldump -u用戶名 -p密碼 庫名 表1 表2 表3 > 文件名(D:/a.sql)
3. 導出所有表
  mysqldump -u用戶名 -p密碼 庫名 > 文件名(D:/a.sql)
4. 導出一個庫
  mysqldump -u用戶名 -p密碼 -B 庫名 > 文件名(D:/a.sql)
可以-w攜帶備份條件
-- 導入
1. 在登錄mysql的情況下:
  source  備份文件
2. 在不登錄的情況下
  mysql -u用戶名 -p密碼 庫名 < 備份文件
視圖
什么是視圖:
    視圖是一個虛擬表,其內容由查詢定義。同真實的表一樣,視圖包含一系列帶有名稱的列和行數據。但是,視圖并不在數據庫中以存儲的數據值集形式存在。行和列數據來自由定義視圖的查詢所引用的表,并且在引用視圖時動態生成。
    視圖具有表結構文件,但不存在數據文件。
    對其中所引用的基礎表來說,視圖的作用類似于篩選。定義視圖的篩選可以來自當前或其它數據庫的一個或多個表,或者其它視圖。通過視圖進行查詢沒有任何限制,通過它們進行數據修改時的限制也很少。
    視圖是存儲在數據庫中的查詢的sql語句,它主要出于兩種原因:安全原因,視圖可以隱藏一些數據,如:社會保險基金表,可以用視圖只顯示姓名,地址,而不顯示社會保險號和工資數等,另一原因是可使復雜的查詢易于理解和使用。
-- 創建視圖
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement
    - 視圖名必須唯一,同時不能與表重名。
    - 視圖可以使用select語句查詢到的列名,也可以自己指定相應的列名。
    - 可以指定視圖執行的算法,通過ALGORITHM指定。
    - column_list如果存在,則數目必須等于SELECT語句檢索的列數
-- 查看結構
    SHOW CREATE VIEW view_name
-- 刪除視圖
    - 刪除視圖后,數據依然存在。
    - 可同時刪除多個視圖。
    DROP VIEW [IF EXISTS] view_name ...
-- 修改視圖結構
    - 一般不修改視圖,因為不是所有的更新視圖都會映射到表上。
    ALTER VIEW view_name [(column_list)] AS select_statement
-- 視圖作用
    1. 簡化業務邏輯
    2. 對客戶端隱藏真實的表結構
-- 視圖算法(ALGORITHM)
    MERGE        合并
        將視圖的查詢語句,與外部查詢需要先合并再執行!
    TEMPTABLE    臨時表
        將視圖執行完畢后,形成臨時表,再做外層查詢!
    UNDEFINED    未定義(默認),指的是MySQL自主去選擇相應的算法。
事務(transaction)
事務是指邏輯上的一組操作,組成這組操作的各個單元,要不全成功要不全失敗。
    - 支持連續SQL的集體成功或集體撤銷。
    - 事務是數據庫在數據晚自習方面的一個功能。
    - 需要利用 InnoDB 或 BDB 存儲引擎,對自動提交的特性支持完成。
    - InnoDB被稱為事務安全型引擎。
-- 事務開啟
    START TRANSACTION; 或者 BEGIN;
    開啟事務后,所有被執行的SQL語句均被認作當前事務內的SQL語句。
-- 事務提交
    COMMIT;
-- 事務回滾
    ROLLBACK;
    如果部分操作發生問題,映射到事務開啟前。
-- 事務的特性
    1. 原子性(Atomicity)
        事務是一個不可分割的工作單位,事務中的操作要么都發生,要么都不發生。
    2. 一致性(Consistency)
        事務前后數據的完整性必須保持一致。
        - 事務開始和結束時,外部數據一致
        - 在整個事務過程中,操作是連續的
    3. 隔離性(Isolation)
        多個用戶并發訪問數據庫時,一個用戶的事務不能被其它用戶的事物所干擾,多個并發事務之間的數據要相互隔離。
    4. 持久性(Durability)
        一個事務一旦被提交,它對數據庫中的數據改變就是永久性的。
-- 事務的實現
    1. 要求是事務支持的表類型
    2. 執行一組相關的操作前開啟事務
    3. 整組操作完成后,都成功,則提交;如果存在失敗,選擇回滾,則會回到事務開始的備份點。
-- 事務的原理
    利用InnoDB的自動提交(autocommit)特性完成。
    普通的MySQL執行語句后,當前的數據提交操作均可被其他客戶端可見。
    而事務是暫時關閉“自動提交”機制,需要commit提交持久化數據操作。
注意:
    1. 數據定義語言(DDL)語句不能被回滾,比如創建或取消數據庫的語句,和創建、取消或更改表或存儲的子程序的語句。
    2. 事務不能被嵌套
-- 保存點
    SAVEPOINT 保存點名稱 -- 設置一個事務保存點
    ROLLBACK TO SAVEPOINT 保存點名稱 -- 回滾到保存點
    RELEASE SAVEPOINT 保存點名稱 -- 刪除保存點
-- InnoDB自動提交特性設置
    SET autocommit = 0|1;    0表示關閉自動提交,1表示開啟自動提交。
    - 如果關閉了,那普通操作的結果對其他客戶端也不可見,需要commit提交后才能持久化數據操作。
    - 也可以關閉自動提交來開啟事務。但與START TRANSACTION不同的是,
        SET autocommit是永久改變服務器的設置,直到下次再次修改該設置。(針對當前連接)
        而START TRANSACTION記錄開啟前的狀態,而一旦事務提交或回滾后就需要再次開啟事務。(針對當前事務)

/* 鎖表 */
表鎖定只用于防止其它客戶端進行不正當地讀取和寫入
MyISAM 支持表鎖,InnoDB 支持行鎖
-- 鎖定
    LOCK TABLES tbl_name [AS alias]
-- 解鎖
    UNLOCK TABLES
觸發器
    觸發程序是與表有關的命名數據庫對象,當該表出現特定事件時,將激活該對象
    監聽:記錄的增加、修改、刪除。
-- 創建觸發器
CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt
    參數:
    trigger_time是觸發程序的動作時間。它可以是 before 或 after,以指明觸發程序是在激活它的語句之前或之后觸發。
    trigger_event指明了激活觸發程序的語句的類型
        INSERT:將新行插入表時激活觸發程序
        UPDATE:更改某一行時激活觸發程序
        DELETE:從表中刪除某一行時激活觸發程序
    tbl_name:監聽的表,必須是永久性的表,不能將觸發程序與TEMPORARY表或視圖關聯起來。
    trigger_stmt:當觸發程序激活時執行的語句。執行多個語句,可使用BEGIN...END復合語句結構
-- 刪除
DROP TRIGGER [schema_name.]trigger_name
可以使用old和new代替舊的和新的數據
    更新操作,更新前是old,更新后是new.
    刪除操作,只有old.
    增加操作,只有new.
注意:
    1. 對于具有相同觸發程序動作時間和事件的給定表,不能有兩個觸發程序。

-- 字符連接函數
concat(str1[, str2,...])
-- 分支語句
if 條件 then
    執行語句
elseif 條件 then
    執行語句
else
    執行語句
end if;
-- 修改最外層語句結束符
delimiter 自定義結束符號
    SQL語句
自定義結束符號
delimiter ;        -- 修改回原來的分號
-- 語句塊包裹
begin
    語句塊
end
-- 特殊的執行
1. 只要添加記錄,就會觸發程序。
2. Insert into on duplicate key update 語法會觸發:
    如果沒有重復記錄,會觸發 before insert, after insert;
    如果有重復記錄并更新,會觸發 before insert, before update, after update;
    如果有重復記錄但是沒有發生更新,則觸發 before insert, before update
3. Replace 語法 如果有記錄,則執行 before insert, before delete, after delete, after insert

/* SQL編程 */ ------------------
--// 局部變量 ----------
-- 變量聲明
    declare var_name[,...] type [default value]
    這個語句被用來聲明局部變量。要給變量提供一個默認值,請包含一個default子句。值可以被指定為一個表達式,不需要為一個常數。如果沒有default子句,初始值為null。
-- 賦值
    使用 set 和 select into 語句為變量賦值。
    - 注意:在函數內是可以使用全局變量(用戶自定義的變量)

--// 全局變量 ----------
-- 定義、賦值
set 語句可以定義并為變量賦值。
set @var = value;
也可以使用select into語句為變量初始化并賦值。這樣要求select語句只能返回一行,但是可以是多個字段,就意味著同時為多個變量進行賦值,變量的數量需要與查詢的列數一致。
還可以把賦值語句看作一個表達式,通過select執行完成。此時為了避免=被當作關系運算符看待,使用:=代替。(set語句可以使用= 和 :=)。
select @var:=20;
select @v1:=id, @v2=name from t1 limit 1;
select * from tbl_name where @var:=30;
select into 可以將表中查詢獲得的數據賦給變量。
    -| select max(height) into @max_height from tb;
-- 自定義變量名
為了避免select語句中,用戶自定義的變量與系統標識符(通常是字段名)沖突,用戶自定義變量在變量名前使用@作為開始符號。
@var=10;
    - 變量被定義后,在整個會話周期都有效(登錄到退出)

--// 控制結構 ----------
-- if語句
if search_condition then
    statement_list   
[elseif search_condition then
    statement_list]
...
[else
    statement_list]
end if;
-- case語句
CASE value WHEN [compare-value] THEN result
[WHEN [compare-value] THEN result ...]
[ELSE result]
END

-- while循環
[begin_label:] while search_condition do
    statement_list
end while [end_label];
- 如果需要在循環內提前終止 while循環,則需要使用標簽;標簽需要成對出現。
    -- 退出循環
        退出整個循環 leave
        退出當前循環 iterate
        通過退出的標簽決定退出哪個循環

--// 內置函數 ----------
-- 數值函數
abs(x)            -- 絕對值 abs(-10.9) = 10
format(x, d)    -- 格式化千分位數值 format(1234567.456, 2) = 1,234,567.46
ceil(x)            -- 向上取整 ceil(10.1) = 11
floor(x)        -- 向下取整 floor (10.1) = 10
round(x)        -- 四舍五入去整
mod(m, n)        -- m%n m mod n 求余 10%3=1
pi()            -- 獲得圓周率
pow(m, n)        -- m^n
sqrt(x)            -- 算術平方根
rand()            -- 隨機數
truncate(x, d)    -- 截取d位小數
-- 時間日期函數
now(), current_timestamp();     -- 當前日期時間
current_date();                    -- 當前日期
current_time();                    -- 當前時間
date('yyyy-mm-dd hh:ii:ss');    -- 獲取日期部分
time('yyyy-mm-dd hh:ii:ss');    -- 獲取時間部分
date_format('yyyy-mm-dd hh:ii:ss', '%d %y %a %d %m %b %j');    -- 格式化時間
unix_timestamp();                -- 獲得unix時間戳
from_unixtime();                -- 從時間戳獲得時間
-- 字符串函數
length(string)            -- string長度,字節
char_length(string)        -- string的字符個數
substring(str, position [,length])        -- 從str的position開始,取length個字符
replace(str ,search_str ,replace_str)    -- 在str中用replace_str替換search_str
instr(string ,substring)    -- 返回substring首次在string中出現的位置
concat(string [,...])    -- 連接字串
charset(str)            -- 返回字串字符集
lcase(string)            -- 轉換成小寫
left(string, length)    -- 從string2中的左邊起取length個字符
load_file(file_name)    -- 從文件讀取內容
locate(substring, string [,start_position])    -- 同instr,但可指定開始位置
lpad(string, length, pad)    -- 重復用pad加在string開頭,直到字串長度為length
ltrim(string)            -- 去除前端空格
repeat(string, count)    -- 重復count次
rpad(string, length, pad)    --在str后用pad補充,直到長度為length
rtrim(string)            -- 去除后端空格
strcmp(string1 ,string2)    -- 逐字符比較兩字串大小
-- 流程函數
case when [condition] then result [when [condition] then result ...] [else result] end   多分支
if(expr1,expr2,expr3)  雙分支。
-- 聚合函數
count()
sum();
max();
min();
avg();
group_concat()
-- 其他常用函數
md5();
default();

--// 存儲函數,自定義函數 ----------
-- 新建
    CREATE FUNCTION function_name (參數列表) RETURNS 返回值類型
        函數體
    - 函數名,應該合法的標識符,并且不應該與已有的關鍵字沖突。
    - 一個函數應該屬于某個數據庫,可以使用db_name.funciton_name的形式執行當前函數所屬數據庫,否則為當前數據庫。
    - 參數部分,由"參數名"和"參數類型"組成。多個參數用逗號隔開。
    - 函數體由多條可用的mysql語句,流程控制,變量聲明等語句構成。
    - 多條語句應該使用 begin...end 語句塊包含。
    - 一定要有 return 返回值語句。
-- 刪除
    DROP FUNCTION [IF EXISTS] function_name;
-- 查看
    SHOW FUNCTION STATUS LIKE 'partten'
    SHOW CREATE FUNCTION function_name;
-- 修改
    ALTER FUNCTION function_name 函數選項

--// 存儲過程,自定義功能 ----------
-- 定義
存儲存儲過程 是一段代碼(過程),存儲在數據庫中的sql組成。
一個存儲過程通常用于完成一段業務邏輯,例如報名,交班費,訂單入庫等。
而一個函數通常專注與某個功能,視為其他程序服務的,需要在其他語句中調用函數才可以,而存儲過程不能被其他調用,是自己執行 通過call執行。
-- 創建
CREATE PROCEDURE sp_name (參數列表)
    過程體
參數列表:不同于函數的參數列表,需要指明參數類型
IN,表示輸入型
OUT,表示輸出型
INOUT,表示混合型
注意,沒有返回值。

/* 存儲過程 */ ------------------
存儲過程是一段可執行性代碼的集合。相比函數,更偏向于業務邏輯。
調用:CALL 過程名
-- 注意
- 沒有返回值。
- 只能單獨調用,不可夾雜在其他語句中
-- 參數
IN|OUT|INOUT 參數名 數據類型
IN        輸入:在調用過程中,將數據輸入到過程體內部的參數
OUT        輸出:在調用過程中,將過程體處理完的結果返回到客戶端
INOUT    輸入輸出:既可輸入,也可輸出
-- 語法
CREATE PROCEDURE 過程名 (參數列表)
BEGIN
    過程體
END
用戶和權限管理
用戶信息表:mysql.user
-- 刷新權限
FLUSH PRIVILEGES
-- 增加用戶
CREATE USER 用戶名 IDENTIFIED BY [PASSWORD] 密碼(字符串)
    - 必須擁有mysql數據庫的全局CREATE USER權限,或擁有INSERT權限。
    - 只能創建用戶,不能賦予權限。
    - 用戶名,注意引號:如 'user_name'@'192.168.1.1'
    - 密碼也需引號,純數字密碼也要加引號
    - 要在純文本中指定密碼,需忽略PASSWORD關鍵詞。要把密碼指定為由PASSWORD()函數返回的混編值,需包含關鍵字PASSWORD
-- 重命名用戶
RENAME USER old_user TO new_user
-- 設置密碼
SET PASSWORD = PASSWORD('密碼')    -- 為當前用戶設置密碼
SET PASSWORD FOR 用戶名 = PASSWORD('密碼')    -- 為指定用戶設置密碼
-- 刪除用戶
DROP USER 用戶名
-- 分配權限/添加用戶
GRANT 權限列表 ON 表名 TO 用戶名 [IDENTIFIED BY [PASSWORD] 'password']
    - all privileges 表示所有權限
    - *.* 表示所有庫的所有表
    - 庫名.表名 表示某庫下面的某表
-- 查看權限
SHOW GRANTS FOR 用戶名
    -- 查看當前用戶權限
    SHOW GRANTS; 或 SHOW GRANTS FOR CURRENT_USER; 或 SHOW GRANTS FOR CURRENT_USER();
-- 撤消權限
REVOKE 權限列表 ON 表名 FROM 用戶名
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 用戶名    -- 撤銷所有權限
-- 權限層級
-- 要使用GRANT或REVOKE,您必須擁有GRANT OPTION權限,并且您必須用于您正在授予或撤銷的權限。
全局層級:全局權限適用于一個給定服務器中的所有數據庫,mysql.user
    GRANT ALL ON *.*和 REVOKE ALL ON *.*只授予和撤銷全局權限。
數據庫層級:數據庫權限適用于一個給定數據庫中的所有目標,mysql.db, mysql.host
    GRANT ALL ON db_name.*和REVOKE ALL ON db_name.*只授予和撤銷數據庫權限。
表層級:表權限適用于一個給定表中的所有列,mysql.talbes_priv
    GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤銷表權限。
列層級:列權限適用于一個給定表中的單一列,mysql.columns_priv
    當使用REVOKE時,您必須指定與被授權列相同的列。
-- 權限列表
ALL [PRIVILEGES]    -- 設置除GRANT OPTION之外的所有簡單權限
ALTER    -- 允許使用ALTER TABLE
ALTER ROUTINE    -- 更改或取消已存儲的子程序
CREATE    -- 允許使用CREATE TABLE
CREATE ROUTINE    -- 創建已存儲的子程序
CREATE TEMPORARY TABLES        -- 允許使用CREATE TEMPORARY TABLE
CREATE USER        -- 允許使用CREATE USER, DROP USER, RENAME USER和REVOKE ALL PRIVILEGES。
CREATE VIEW        -- 允許使用CREATE VIEW
DELETE    -- 允許使用DELETE
DROP    -- 允許使用DROP TABLE
EXECUTE        -- 允許用戶運行已存儲的子程序
FILE    -- 允許使用SELECT...INTO OUTFILE和LOAD DATA INFILE
INDEX     -- 允許使用CREATE INDEX和DROP INDEX
INSERT    -- 允許使用INSERT
LOCK TABLES        -- 允許對您擁有SELECT權限的表使用LOCK TABLES
PROCESS     -- 允許使用SHOW FULL PROCESSLIST
REFERENCES    -- 未被實施
RELOAD    -- 允許使用FLUSH
REPLICATION CLIENT    -- 允許用戶詢問從屬服務器或主服務器的地址
REPLICATION SLAVE    -- 用于復制型從屬服務器(從主服務器中讀取二進制日志事件)
SELECT    -- 允許使用SELECT
SHOW DATABASES    -- 顯示所有數據庫
SHOW VIEW    -- 允許使用SHOW CREATE VIEW
SHUTDOWN    -- 允許使用mysqladmin shutdown
SUPER    -- 允許使用CHANGE MASTER, KILL, PURGE MASTER LOGS和SET GLOBAL語句,mysqladmin debug命令;允許您連接(一次),即使已達到max_connections。
UPDATE    -- 允許使用UPDATE
USAGE    -- “無權限”的同義詞
GRANT OPTION    -- 允許授予權限
表維護
-- 分析和存儲表的關鍵字分布
ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE 表名 ...
-- 檢查一個或多個表是否有錯誤
CHECK TABLE tbl_name [, tbl_name] ... [option] ...
option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
-- 整理數據文件的碎片
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
雜項
1. 可用反引號(`)為標識符(庫名、表名、字段名、索引、別名)包裹,以避免與關鍵字重名!中文也可以作為標識符!
2. 每個庫目錄存在一個保存當前數據庫的選項文件db.opt。
3. 注釋:
    單行注釋 # 注釋內容
    多行注釋 /* 注釋內容 */
    單行注釋 -- 注釋內容        (標準SQL注釋風格,要求雙破折號后加一空格符(空格、TAB、換行等))
4. 模式通配符:
    _    任意單個字符
    %    任意多個字符,甚至包括零字符
    單引號需要進行轉義 /'
5. CMD命令行內的語句結束符可以為 ";", "/G", "/g",僅影響顯示結果。其他地方還是用分號結束。delimiter 可修改當前對話的語句結束符。
6. SQL對大小寫不敏感
7. 清除已有語句:/c
希望本文所述對大家的MySQL數據庫程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品视频在线播放| 亚洲视频一区二区三区| 欧美性猛交xxxx偷拍洗澡| 裸体女人亚洲精品一区| 日韩大陆毛片av| 欧美大尺度在线观看| 成人午夜黄色影院| 精品国产网站地址| 亚洲第一网站男人都懂| 日韩亚洲综合在线| 日韩精品极品在线观看播放免费视频| 成人写真福利网| 国产精品稀缺呦系列在线| 日本一欧美一欧美一亚洲视频| 在线成人一区二区| 精品国偷自产在线| 91精品在线国产| 日韩中文字幕欧美| 国产69精品99久久久久久宅男| 国产精品自拍网| 精品电影在线观看| 国产欧美一区二区白浆黑人| 中文字幕精品国产| 国产精品视频网址| 亚洲精品97久久| 成人精品福利视频| 国产不卡视频在线| 午夜精品久久久久久久久久久久| 欧美电影在线观看高清| 欧美精品videosex极品1| 欧美精品videos另类日本| 国产精品夫妻激情| 欧美色另类天堂2015| 亚洲激情视频网站| 中文字幕日韩av电影| 欧美xxxx做受欧美.88| 日韩成人在线视频观看| 亚洲精品v欧美精品v日韩精品| 久久久国产精品视频| 欧美日韩在线免费| 日韩中文字幕在线免费观看| 成人福利视频在线观看| 日韩av网址在线| 亚洲欧美日韩综合| 日韩精品久久久久久久玫瑰园| 亚洲最大的成人网| 国语自产偷拍精品视频偷| 深夜福利国产精品| 亚洲国产精品中文| 亚洲第一免费网站| 亚洲国产天堂久久综合网| 国产91色在线|免| 国产性色av一区二区| 国产ts一区二区| 欧美黑人性生活视频| 国产欧美在线观看| 久久影院中文字幕| 青青青国产精品一区二区| 精品一区电影国产| 成人精品视频久久久久| 狠狠爱在线视频一区| 国产丝袜一区二区三区免费视频| 国产做受69高潮| 在线视频一区二区| 综合欧美国产视频二区| 久久亚洲国产精品成人av秋霞| 久久精品这里热有精品| 国产精品a久久久久久| 国产精品1区2区在线观看| 久久久久一本一区二区青青蜜月| 欧美午夜女人视频在线| 亚洲人在线视频| 国产精品一二三在线| 精品av在线播放| 亚洲成人xxx| 国产有码在线一区二区视频| 国产精品无av码在线观看| 91精品国产色综合久久不卡98口| 国产成人精品一区二区三区| 中文字幕欧美视频在线| 亚洲国产精品成人av| 欧美在线视频免费| 国产欧美日韩专区发布| 亚洲欧美另类人妖| 成人看片人aa| 日韩av片免费在线观看| 国产一区二区三区视频在线观看| 欧美激情免费视频| 国产日产亚洲精品| 欧美极品少妇xxxxx| 91美女片黄在线观| 国产精品色婷婷视频| 91久久久久久| 日韩美女激情视频| xvideos亚洲人网站| 国产欧美日韩免费| 在线播放精品一区二区三区| 久久夜精品香蕉| 国产99久久精品一区二区永久免费| 91久久久亚洲精品| 日韩国产中文字幕| 91精品免费看| 久久久人成影片一区二区三区| 97超级碰在线看视频免费在线看| 欧美性猛交xxxx乱大交3| 91国产精品91| 国产精品羞羞答答| 中文字幕一区电影| 久久精品最新地址| 亚洲黄色在线看| 91免费国产视频| 中文在线资源观看视频网站免费不卡| 国产精品久久激情| 欧美日韩国产123| 国产大片精品免费永久看nba| 欧美电影在线观看| 日韩在线中文字幕| 国产精品日韩在线观看| 裸体女人亚洲精品一区| 亚洲男人7777| 91av视频导航| 在线电影av不卡网址| 中文欧美日本在线资源| 国产精品久久久久久影视| 中文字幕欧美日韩va免费视频| 永久免费毛片在线播放不卡| 91国产在线精品| 日韩av三级在线观看| 国产精品国产福利国产秒拍| 久久精品视频在线| 成人h视频在线| 国产97在线播放| 亚洲直播在线一区| 亚洲欧美在线一区| 久久夜精品va视频免费观看| 国产69久久精品成人| 日韩av不卡在线| 国内精品久久久久影院 日本资源| 国产欧美精品久久久| 91免费的视频在线播放| 欧美激情在线观看| 欧美精品18videos性欧| 亚洲第一区中文99精品| 色悠悠久久88| 久久国产天堂福利天堂| 欧美激情视频一区| 亚州欧美日韩中文视频| 成人在线视频福利| 欧美有码在线视频| 日韩欧美在线观看| 国产成人欧美在线观看| 日本老师69xxx| 午夜精品99久久免费| 日韩中文字幕在线视频播放| 亚洲美女性视频| 蜜月aⅴ免费一区二区三区| 亚洲欧美综合图区| 国产成人一区三区| 欧美高清在线观看| 精品福利樱桃av导航| 欧美亚洲免费电影| 亚洲亚裔videos黑人hd| 日韩最新中文字幕电影免费看| 91在线播放国产|