1. 程式人生 > >MariaDB之SQL語句基礎

MariaDB之SQL語句基礎

code character collation base edi ali 創建數據庫 指定表 engine

數據庫組件:

  數據庫:database
  表: table
  索引:index
  視圖:view
  用戶:user
  權限:privileges
  存儲過程:procedure
  存儲函數:function
  觸發器:trigger
  事件調度器:event scheduler

DDL:Data Defination Language,數據定義語言

CREATE, DROP, ALTER

DML: Data Manipulation Language,數據操作語言

INSERT, DELETE, UPDATE, SELECT

DCL: Data Control Language,數據控制語言

GRANT, REVOKE

數據類型:  

   字符:
     定長字符:CHAR(#)不區分大小寫, CHARBINARY(#)區分大小寫      變長字符: VARCHAR(#)不區分大小寫, VARCHARBINARY(#)區分大小寫
  
     內建類型:ENUM, SET          
     對象存儲:
       TEXT:不區分字符大小寫,最大可達到4G
       BLOB: 區分字符大小寫
   數值型
         精確數值型
             整型: 
int   tinyint:1byte   smallint: 2bytes mediumint:3bytes int: 4bytes bigint: 8bytes 十進制: decimal 近似數值型 單精度浮點型 float 雙精度浮點型 double
   日期時間型:
         日期: DATA
         時間: TIME
         日期時間:DATETIME
         時間戳: TIMESTAMP
         年份: YEAR(
2), YEAR(4)
   修飾符:
      所有類型使用:
          NOT NULL
          DEFAULT
          PRIMARY KEY
          UNIQUE KEY
      數值型使用:
          UNSIGNED
          AUTO_INCREMENT

DDL: CREATE、DROP、ALTER

  數據庫:  

  創建數據庫:CREATE DATABASE|SCHMA [IF NOT EXISTS]DB_NAME;
    # CREATE DATABASE test CHARACTER SET = utf8;   刪除數據庫:DROP DATABASE
|SCHEMA [IF EXISTX] DB_NAME;  
        # DROP DATABASE [IF EXISTS] test;     設置字符集:  CHARACTER SET [=]
character set name     設置排序規則: COLLATE collate name     查看支持的所有字符集: SHOW CHARACTER SET;     查看支持的所有排序規則:SHOW COLLATIONS;
  
    獲取命令使用幫助:
      msyql> HELP KEYWORD;
    查看數據庫:SHOW DATABASES;
    查看數據庫創建命令: SHOW CREATE DATABASE test \G

  表: 

創建表:CREATE TABLE [IF NOT EXISTS] ‘tb_name‘ (col type1,col type2...) 
  表選項:
    設置存儲引擎:   ENGINE [=] engine_name
    指明行格式: ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSE|REDUNANT|COMPACT}     查看存儲引擎: SHOW ENGINES;   獲取幫助:    mysql> HELP CREATE TABLE   查看表創建命令:SHOW CREATE TABLE table_name;或 SHOW CREATE TABLE table_name \G   查看表狀態:  SHOW TABLE STATUS LIKE ‘table_name‘\G
  # CREATE TABLE students (id int(10) UNSIGNED NOT NULL PRIMARY KEY,name VARCHAR(20) NOT NULL,age TINYINT(3) UNSIGNED);
  # CREATE TABLE students2 (id int(10) UNSIGNED NOT NULL,name VARCHAR(20) NOT NULL,age TINYINT(3) UNSIGNED,PRIMARY KEY(id,name));
    # 描述表結構: DESC student; 刪除表: DROP TABLE [IF EXISTS] ‘tbl_name‘;
    # DROP TABLE [IF EXISTS] students; 修改表:ALTER TABLE ‘tbl_name‘
    字段:
      添加字段: add
        Add col1 data_type [FIRST|AFTER col_name]
          # ALTER TABLE ‘user‘ ADD gender ENUM(‘m‘,‘f‘);
      刪除字段:drop
          # ALTER TABLE students DROP gender;
      修改字段:
        修改字段名稱:change  
          # ALTER TABLE students CHANGE id sid int UNSIGNED NOT NULL;
        修改字段屬性定義: modify
          # ALTER TABLE students MODIFY sid tinyint UNSIGNED NOT NULL;
        修改字段默認值: alter
          # ALTER TABLE students ALTER gender SET DEFAULT ‘m‘;
    索引:實際應用中不建議修改索引
      添加索引:add
        # ALTER TABLE students ADD UNIQUE KEY(name);  
        # ALTER TABLE students ADD INDEX(age);
      刪除索引:drop
        # ALTER TABLE students DROP age;
      
    表選項:

  索引:特殊數據結構,定義在查找時作為查找條件的字段

創建索引: CREATE INDEX index_name ON tbl_name(index_col_name,...);
刪除索引: DROP INDEX index_name ON tbl_name;
查看表上的索引:SHOW INDEXES FROM [db_name.]tbl_name;
        # SHOW INDEXES FROM test.students;

DML: INSERT、DELETE、SELECT、UPDATE

  INSERT INTO: 

  INSERT [INTO] tbl_name [(col1,col2,...)] { VALUES | VALUE } (VAL1,...),(...)...
   # INSERT INTO students VALUES(1,‘alen‘,‘m‘),(2,‘張三‘,‘f‘);

  SELECT:

  SELECT col1,col2,... FROM tbl_name [WHERE clause][ORDER BY col_name][LIMIT [m,]n]
    字段表示法:
      *:所有字段
      as: 字段別名,col1 AS alias1;

  DELETE:

  DELETE FROM tbl_name [WHERE clause] [ORDER BY col_name [DESC]] [LIMIT [m,]n];

  UPDATE:

  UPDATE tbl_name SET col1=new_val1, col2=new_val2,..[WHERE clause] [ORDER BY col_name [DESC]] [limit [m,]n];

DCL: GRANT、REVOKE

用戶賬號及權限管理:

  用戶賬號:‘user‘@‘host‘   

    user:用戶名
    host: 此用戶訪問mysqld服務時允許通過哪些主機遠程創建連接
      IP、網絡地址、主機名、通配符(%和_)
    禁止檢查主機名:
      my.cnf--> skip_name_resolve = yes

  創建用戶賬號: 

  CREATE USER username@host [IDENTIFIED BY password]
        #  CREATE USER wpuser@% IDENTIFIED BY wppassword;
        #  SELECT User,Host,Password FORM user;

  刪除用戶: 

  DROP USER username@host;
    # DROP USER ‘wpuser‘@‘host‘;

  授權:

    授權級別: 管理權限、數據庫、表、字段、存儲例程   

   GRANT pri_type,... ON [object_type] db_name.tb_name TO user@host [IDENTIFIED BY password] [WITH GRANT OPTION];
      priv_type: ALL [PRIVILEGES]       db_name.tb_name;
*.*: 指定庫的所有表;
         db_name.*:指定庫的所有表; db_name.tb_name: 指定庫的指定表; db_name.routeine_name:指定庫的存儲例程;

  查看指定用戶獲得的授權:  

   SHOW GRANTS FOR root@localhost;
         # SHOW GRANTS FOR wpuser@%;
         # SHOW GRANTS FOR CURRENT_USER;

  回收授權: 

   REVOKE priv_type,... ON db_name.tb_name FROM user@host;
      # USE mysql;
      # REVOKE DELETE ON test.* FROM ‘wpuser‘@‘%‘;
      # SHOW GRANTS FOR ‘wpuser‘@‘%‘;

  Note: MariaDB服務器進程啟動時會讀取mysql庫中的所有授權表至內存中;
    1. GRANT或REVOKE等執行權限操作會保存於表中,MariaDB的服務進程會自動重讀授權表;
    2.對於不能夠或不能及時重讀授權表的命令,可手動讓MariaDB的服務進程重讀授權表
      # FLUSH PRIVILEGES

  

MariaDB之SQL語句基礎