mysql

2020-10-25 15:00:54

mysql

基本操作

啟動mysql服務

  • /usr/local/MySQL/bin/mysql -u root -p

資料庫語句中不區分大小寫,不過關鍵字最好大寫。

單行註釋

  • – 或#(–後加空格,#後不用加空格)

多行註釋

  • /註釋/

語句分類

DDL(運算元據庫、表)

  • 運算元據庫CRUD

    • C(Create):建立

      • create database db(資料庫名);
      • 檢測有無重複資料庫若沒有則建立:create database if not exists db(資料庫名);
      • 指定字元集建立:create database db(資料庫名) character set gbk(字元集);
    • R(Retrieve):查詢

      • 查詢所有資料庫的名稱:SHOW databases;
      • 檢視某個資料庫的字元集:show create database db(資料庫名稱);【查詢某個資料庫建立語句】
    • U(Update):修改

      • 修改資料庫字元集:alter database db(資料庫名稱) character set utf8(字元集名稱);
    • D(Delete):刪除

      • drop database db(資料庫名稱);
      • 如果存在則刪除:drop database if exists db(資料庫名稱);
    • 使用資料庫

      • 查詢當前正咋使用的資料庫名稱:select database();
      • 使用資料庫:use db(資料庫名稱);
  • 操作表

    • C(Create):建立

      • create table tab(表名)(
        list1(列名) int(資料型別),
        list2 int,

        listn int
        );
      • create table tab1(表名)like tab2(b表名);
    • 資料型別

      • int

        • age int
      • double

        • score double(5.2)[表示最大5位,小數點後保留2位]
      • date:日期,只包含年月日的日期,yyyy-MM-dd

      • datetime:日期,包含年月日時分秒,yyyy-MM-dd HH:mm:ss

      • timestamp:時間錯型別,包含年月日時分秒,yyyy-MM-dd HH:mm:ss

        • 如果不給這個欄位賦值,或賦值為null,自動使用系統時間賦值。
      • varchar:字串

        • name varchar(20):姓名最大20個字元
    • R(Retrieve):查詢

      • 查詢某個資料庫中所有表的名稱:show tables;
      • 查詢表結構:desc tab(表名);
    • U(Update):修改

      • 修改表名

        • alter table tab(表名) rename to tab2(新的表名);
      • 修改表的字元集

        • alter table tab(表名) character set utf8(字元集);
      • 新增一列

        • alter table tab(表名) add list(列名)int(資料型別);
      • 修改列名稱 型別

        • alter table tab(表名) change list1(列名) list2 (列名) int(資料型別);
        • 只改型別:alter table tab(表名) modify list(列名) int;
      • 刪除列

        • alter table tab(表名) drop list(列名) ;
    • D(Delete):刪除

      • drop table if exists tab(表名);

DML(增刪改表中的資料)

  • 新增資料

    • insert into tab(表名) (list1(列名),list2,list3,…listn) values (value1(值),value2,value3,…valuen)
    • 如果表名後,不定義列名,則預設給所有列新增值:insert into tab(表名) values (value1(值),value2,value3,…valuen)
    • 除了數位型別,其他型別需要使用引號(單雙都可)引起來
  • 刪除資料

    • delete from tab(表名)[where 條件]
    • 如果不加條件,會將表中資料全部刪除(有多少條就會執行多少次操作,效率較低)
    • 刪除表,然後建立一個一樣的空表:truncate table tab(表名)(刪除全表資料操作,效率更高)
  • 修改資料

    • update tab(表名) set list1(列名) = value1(值名),list2 = value2,…listn = valuen[where 條件];
    • 如果不加條件,會將表中記錄全部修改

DQL(查詢表中的資料)

  • 查詢表中的記錄

    • select field(欄位列表) from tab(表名列表)where(條件列表) group by field(分組欄位) having cond(分組之後的條件) order by sort (排序) limit page(分頁)

    • select field(欄位列表)

    • from tab(表名列表)

    • where(條件列表)

      • 運運算元

        • 、<、<=、>=、=、<>

          • <>在 SQL 中表示不等於,在 mysql 中也可以使用!= 沒有==
        • BETWEEN…AND

          • 在一個範圍之內,如:between 100 and 200 相當於條件在 100 到 200 之間,包頭又包尾
        • IN(集合)

          • 集合表示多個值,使用逗號分隔
        • LIKE ‘張%’

          • 預留位置:_:單個任意字元
          • 預留位置:%:任意預留位置
        • IS NULL

          • 查詢某一列為 NULL 的值,注:不能寫=NULL
        • IS NOT NULL

          • 查詢某一列不為 NULL 的值,注:不能寫!=NULL
      • 邏輯運運算元

        • and 或 &&

          • 與,SQL 中建議使用前者,後者並不通用。
        • or 或 ||

        • not 或 !

    • group by field(分組欄位)

    • having cond(分組之後的條件)

    • order by sort (排序)

    • limit page(分頁)

  • 如果不查詢表中所有的列,儘量避免使用 SELECT *,因為它會進行全表掃描,不能有效利用索引,增大了資料庫伺服器的負擔,以及它與應用程式使用者端之間的網路IO開銷。

  • 基礎查詢

    • 多欄位查詢

      • select field1(欄位名),field2,…fieldn from tab(表名)
    • 去除重複

      • select distinct field1(欄位名),field2,…fieldn from tab(表名)
    • 計算列

      • 一般可以使用四則運算計算一些列的值
      • null參與的運算,結果均為null:ifnull(field(需要判斷是否為null的欄位名),value(如果該欄位為null的替換值))
    • 別名

      • field(欄位名或表示式)as name(別名)
      • 也可省略as:field(欄位名或表示式)name(別名)

DCL(授權)

  • grant授予
  • revoke收回