1. 程式人生 > >MySQL的sql語句分類彙總

MySQL的sql語句分類彙總

第一類語句:與資料庫相關的語句

1.建立資料庫

CREATE DATABASE [IF NOT EXISTS] db_name [create_specification] ...
  create_specification:
      [DEFAULT] CHARACTER SET [=] charset_name
    | [DEFAULT] COLLATE [=] collation_name

  說明:
   IF NOT EXISTS:判斷當前系統中是否有要建立的這個資料庫,如果有的話,不再執行建立,而且不會報錯
   CHARACTER SET:指定當前資料庫所採用字元型別(utf8)
   COLLATE:指定排序規則
  例子:
   CREATE DATABASE IF NOT EXISTS jobs DEFAULT CHARACTER SET utf8

2.刪除資料庫

  DROP DATABASE [IF EXISTS] db_name
  IF EXISTS:判斷當前系統中是否有要刪除的這個資料庫,如果有執行刪除操作,如果沒有不再執行刪除操作,而且不會報錯
  例子:DROP DATABASE IF EXISTS test;

3.修改資料庫

這裡往往僅僅是修改資料庫中的字符集型別和排序規則(不能修改修改資料庫名)

ALTER DATABASE [db_name] alter_specification ...

  alter_specification:
      [DEFAULT] CHARACTER SET [=] charset_name
    | [DEFAULT] COLLATE [=] collation_name

  例子:修改test1的字符集為utf8
  ALTER DATABASE test1 DEFAULT CHARACTER SET utf8;

修改資料庫名稱:
先對要修改名稱的資料庫做備份,然後新建一個數據庫,庫名就是新的名字,然後將備份的資料還原到這個新庫中

4.更新資料字典

ALTER DATABASE db_name UPGRADE DATA DIRECTORY NAME

第二類語句:與表相關的語句

1.新建表

方法一:直接建立一張新表

 CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
      (create_definition,...)
      [table_options]
      [partition_options]

  TEMPORARY:該選項表示所建立的是一張臨時表,表是在記憶體中
  create_definition:
     col_name column_definition
   | PRIMARY KEY (col_name1, col_name1...)
   | {INDEX|KEY} [index_name] [index_type] (index_col_name,...) [index_option] ...
   | [CONSTRAINT UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...) [index_option] ...
   | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...) [index_option] ...
   | [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) reference_definition
   | CHECK (expr)
  
    table_option:  
     AUTO_INCREMENT [=] value <<< 指定主鍵從幾開始自增    
   | ENGINE [=] engine_name <<< 指定表所使用的儲存引擎
   | [DEFAULT] CHARACTER SET [=] charset_name <<< 指定當前表的字符集(不指定會繼承)
   | CHECKSUM [=] {0 | 1} <<< 指定是否對插入的資料做校驗(可以保證資料一致,但是會帶來額外的系統開銷)
   | [DEFAULT] COLLATE [=] collation_name <<< 指定當前表的排序規則(不指定會繼承)
   | COMMENT [=] 'string' <<< 指定當前表的描述說明資訊
   | DELAY_KEY_WRITE [=] {0 | 1} <<< 延遲鍵寫入,推遲重建索引的間隔
   | MAX_ROWS [=] value
   | MIN_ROWS [=] value
   | UNION [=] (tbl_name[,tbl_name]...) <<< 做表聯合
   | TABLESPACE tablespace_name [STORAGE {DISK|MEMORY|DEFAULT}] <<< 定義表空間
   | ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT} <<< 定義表格式
 
   例子:建立一張表,id為主鍵、name長度為30,age為整型
    CREATE TABLE tb1 (id int PRIMARY KEY, name char(30), age int(3))
    CREATE TABLE tb2 (id int, name char(30), age int(3), PRIMARY KEY(id))

   例子:建立一張表,id和name構成聯合主鍵、name長度為30,age為整型
    CREATE TABLE tb2 (id int, name char(30), age int(3), PRIMARY KEY(id,name))

 

方法二:根據現有表建立新表,而且新表中的資料也是來自於現有表

   CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
      [(create_definition,...)]
      [table_options]
      [partition_options]
      [IGNORE | REPLACE]
      [AS] query_expression
例子: CREATE TABLE new_tb AS SELECT * FROM old_tb;
注意:這種操作在系統看來是不安全的,如果要使用這種方法建立表需要修改配置檔案將
gtid-mode = on改為off
enforce-gtid-consistency= 1改為0

方法三:根據現有表建立新表,但是僅僅有表結構

 CREATE TABLE [IF NOT EXISTS] tbl_name LIKE old_tbl_name 

   例子:基於mysql.user表的表結構建立新表
   CREATE TABLE tb01 LIKE mysql.user;

2.刪除表

刪除表簡單實用DROP命令即可,但要注意做好指定。

  DROP TABLE [IF EXISTS] tbl_name [, tbl_name]... [CASCADE]

  說明:
   CASCADE:級聯刪除

3.修改表結構(欄位、屬性、限制、約束、索引、鍵…)

格式:

 ALTER TABLE tbl_name
      [alter_specification [, alter_specification] ...]
      [partition_options]

①修改欄位的定義

  1. 刪除欄位
   DROP col_name

   例子:刪除age欄位
   ALTER TABLE tb1 DROP age;
  1. 新增欄位
   ADD col_name column_definition [FIRST | AFTER col_name]

   例子:
    # 在age欄位後新增一個新的欄位school
    ALTER TABLE tb1 ADD school CHAR(10) AFTER age;

    # 在最前面插入欄位job
    ALTER TABLE tb1 ADD job CHAR(20) NOT NULL FIRST;

    # 在末尾新增一個新欄位phone
    ALTER TABLE tb1 ADD phone int(10);
  1. 修改欄位名稱
   CHANGE old_col_name new_col_name column_definition [FIRST|AFTER col_name]

  例子: ALTER TABLE tb1 CHANGE job jobs char(30) not null;
  1. 修改欄位的約束和屬性,調整欄位位置
   MODIFY col_name column_definition [FIRST | AFTER col_name]

   例子:ALTER TABLE tb1 MODIFY name varchar(50) NOT NULL DEFAULT 'zx';
注意無法修改欄位名稱
		ALTER TABLE tb1 MODIFY name varchar(50) AFTER age;
  1. 新增刪除索引
   ADD index [索引型別] (欄位1,欄位2...) [options]

   例子:將索引新增(刪除)到 name欄位上
   ALTER TABLE tb1 ADD(DROP) INDEX (name);

   查看錶中的索引
   SHOW INDEXES FROM tb1;

   注意:索引不是越多越好

①修改欄位約束

#主鍵約束
 | ADD [CONSTRAINT [symbol]] PRIMARY KEY
           [index_type] (index_col_name,...) [index_option] ...
#唯一約束
   | ADD [CONSTRAINT [symbol]]
           UNIQUE [INDEX|KEY] [index_name]
           [index_type] (index_col_name,...) [index_option] ...
#唯一約束要建立在索引上,也就是對某欄位設定唯一約束時,該欄位要是索引。

關於主鍵(刪除、禁用、啟用)
   DROP PRIMARY KEY  #刪除主鍵
   {DISABLE|ENABLE} KEYS #禁用和啟用主鍵

4.修改表名

#方法1:
  ALTER TABLE 表名 RENAME [TO|AS] 新表名
  ALTER TABLE user10 RENAME TO user11;
方法2:
  RENAME TABLE 表名 TO 新表名; 這裡面的TO不可以省略
  RENAME TABLE user11 TO user10;

5.指定表中的內容按照哪個欄位進行排序

注意:如果表中有索引或者主鍵,那麼無法按照指定的欄位排序
ORDER BY col_name [, col_name] ...

6.修改表所使用的字符集型別

CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]

7.向表中插入資料

INSERT INTO tb1(name,id,age) VALUES('dong',1,23);

修改表中的資料

將name為zx的年齡修改為25
UPDATE tb01 set age=25 WHERE name='zx';

第三類語句:簡單的查詢語句

簡單查詢格式

SELECT 欄位名... FROM 表名 [條件] [選項]
例子:查詢t09中的全部資料
> SELECT * FROM t09;

例子:查詢t09中的id
> SELECT id FROM t09;

例子:檢視所有id大於5的記錄
 > SELECT * FROM t09 WHERE id>5

例子:檢視所有id大於5的記錄的中的name欄位
 > SELECT name FROM t09 WHERE id>5

條件查詢、組合條件查詢

條件表達方式 釋義
=、<、>、>= 、<= 等於、小於、大於、大於等於、小於等於
!=、<> 不等於
is null 為空
is not null 不為空
between…and… 在…和…之間
like … 結合萬用字元
RLIKE 結合正則

組合條件查詢關鍵字:and、or、not

排序、限制輸出記錄的條數

order by 欄位 [desc|asc]   根據指定欄位進行降序或升序排列
limit num:僅僅顯示num條記錄
limit m,n:意思是跳過m個記錄向後取n條資料

示例

案例:將年齡在20-25的使用者名稱和使用者id顯示出來
  mysql> select name,stuid,age from students where age>=20 and age<=25;
  mysql> select name,stuid,age from students where age between 20 and 25;

 案例:將年齡在小於20,或者大於25的使用者名稱和使用者id顯示出來
  select stuid,name,age from students where age<20 or age>25;

 案例:顯示使用者名稱是以S為開頭的使用者名稱和年齡
  mysql> select name,age from students where name like 'S%';

 案例:顯示使用者名稱是以Y為開頭,且年齡是19的使用者
  mysql> select name,age from students where name like 'Y%' and age=19;

 案例:顯示使用者名稱是以Y為開頭,且年齡小於20的使用者
  mysql> select name,age from students where name like 'Y%' and age<20;

 案例:顯示所有使用者的使用者名稱和年齡
  mysql> select name,age from students;

 案例:顯示所有使用者的使用者名稱和年齡,要求按照年齡排序(從大到小排)
  mysql> select name,age from students order by age desc;

 案例:顯示所有使用者的使用者名稱和年齡,要求僅僅顯示年齡最大的三個使用者
  mysql> select name,age from students order by age desc limit 3;

 案例:統計students表有多少行
  mysql> select count(*) from students;

 案例:顯示年齡最大的使用者的年齡
  mysql> select max(age) from students;

大致彙總,如有不當之處歡迎指正。

------做運維之前很矯情的小年輕-----