File Services之mariadb数据库基础

什么是DML?常用SQL举例,每个命令至少1个例子,最多不超过3个例子

DML:Data Manipulation,数据操纵语言,主要用管理表中的数据,实现数据的增、删、改、查;INSERT, DELETE, UPDATE, SELECT,是mysql数据库服务器端的命令。

服务器端的命令除了DML,还有DDL,Data Definition,数据定义语言,主要用于管理数据库组件,例如表、索引、视图、用户、存储过程CREATE、ALTER、DROP

DDL命令:(数据库管理)

  1. 创建:
    CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name;
    [DEFAULT] CHARACTER SET [=] charset_name #设定数据库使用的字符集
    [DEFAULT] COLLATE [=] collation_name #设定排序规则
    查看支持的所有字符集:SHOW CHARACTER SET
    查看支持的所有排序规则:SHOW COLLATION

     例:
         MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS testdb ;
         Query OK, 1 row affected, 1 warning (0.00 sec)
         CREATE DATABASE IF NOT EXISTS testdb2 CHARACTER SET 'utf8';
         Query OK, 1 row affected (0.04 sec)
    
  2. 修改:
    ALTER {DATABASE | SCHEMA } {db_name}
    [DEFAULT] CHARACHTER SET [=] charset_name
    [DEFAULT] COLLATE [=] collation_name

     例:
     MariaDB [(none)]> ALTER DATABASE testdb CHARACTER SET 'gb2312';
     Query OK, 1 row affected (0.00 sec)
     MariaDB [(none)]> ALTER DATABASE testdb COLLATE 'binary';
     Query OK, 1 row affected (0.00 sec)
    
  3. 删除:
    DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
    注意:mariadb数据库没有回收站,在生产环境中删除操作很危险;

     MariaDB [(none)]> DROP DATABASE IF EXISTS testdb;
    
  4. 查看:
    SHOW DATABASES LIKE 'pattern';

     LIKE 'pattern':通配模式
     %:任意长度字符
     _:任意单个字符
     
     例:
     MariaDB [(none)]> SHOW DATABASES LIKE '%db';
     +----------------+
     | Database (%db) |
     +----------------+
     | testdb         |
     +----------------+
     1 row in set (0.01 sec)
     MariaDB [(none)]> SHOW DATABASES LIKE '_estdb';
     +-------------------+
     | Database (_estdb) |
     +-------------------+
     | testdb            |
     +-------------------+
     1 row in set (0.01 sec)
    

(表管理)

  1. 创建:
    CREATE TABLE [IF NOT EXISTS] tb1_name (create_defination) [tabke_options]

     create_defination:
         字段:col_name  data_type
         键:
             PRIMARY KEY (col1, col2, ...)
             UNIQUE KEY  (col1, col2,...)
             FOREIGN KEY (column)
         索引:
             KEY|INDEX  [index_name]  (col1, col2,...)
                         
     table_options:
             ENGINE [=] engine_name
                     
     查看数据库支持的所有存储引擎类型:
             mysql> SHOW  ENGINES;
     查看数据库表状态:
             mysql> SHOW  STATUS\G;
    

    例:

             MariaDB [testdb]> USE students;
             Database changed
             MariaDB [students]> CREATE TABLE tbl1 (id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(60) NOT NULL);
     Query OK, 0 rows affected (0.07 sec)
     
            MariaDB [students]> SHOW TABLE STATUS LIKE 'tbl2'\G
     *************************** 1. row ***************************
                Name: tbl2
              Engine: InnoDB
             Version: 10
          Row_format: Compact
                Rows: 0
      Avg_row_length: 0
         Data_length: 16384
     Max_data_length: 0
        Index_length: 0
           Data_free: 0
      Auto_increment: 1
         Create_time: 2018-07-22 14:16:11
         Update_time: NULL
          Check_time: NULL
           Collation: latin1_swedish_ci
            Checksum: NULL
      Create_options: 
             Comment: 
     1 row in set (0.01 sec)
    
  2. 添加、修改:
    ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name [alter_specification [, alter_specification] ...]

     alter_specification:
         字段:
             添加:ADD  [COLUMN]  col_name  data_type  [FIRST | AFTER col_name ]
             删除:DROP  [COLUMN] col_name 
             修改:
                 HANGE [COLUMN] old_col_name new_col_name column_definition  [FIRST|AFTER col_name]  
                 MODIFY [COLUMN] col_name column_definition  [FIRST | AFTER col_name]
         键:
             添加:ADD  {PRIMARY|UNIQUE|FOREIGN}  KEY (col1, col2,...)
             删除:
                 主键:DROP PRIMARY KEY
                 外键:DROP FOREIGN KEY fk_symbol
             索引:
                 添加:ADD {INDEX|KEY} [index_name]  (col1, col2,...)
                 删除:DROP {INDEX|KEY}  index_name
             表选项:
                 ENGINE [=] engine_name
                     
             查看表上的索引的信息:
                 mysql> SHOW INDEXES FROM tbl_name;
    

...

    示例:
    MariaDB [students]> DESC tbl1;
    +-------+---------------------+------+-----+---------+----------------+
    | Field | Type                | Null | Key | Default | Extra          |
    +-------+---------------------+------+-----+---------+----------------+
    | id    | tinyint(3) unsigned | NO   | PRI | NULL    | auto_increment |
    | name  | varchar(60)         | NO   |     | NULL    |                |
    +-------+---------------------+------+-----+---------+----------------+
    2 rows in set (0.00 sec)
    #添加新的gender字段
    MariaDB [students]> ALTER TABLE tbl1 ADD gender ENUM('F','M') after id;
    Query OK, 0 rows affected (0.09 sec)               
    Records: 0  Duplicates: 0  Warnings: 0
    
    MariaDB [students]> DESC tbl1;
    +--------+---------------------+------+-----+---------+----------------+
    | Field  | Type                | Null | Key | Default | Extra          |
    +--------+---------------------+------+-----+---------+----------------+
    | id     | tinyint(3) unsigned | NO   | PRI | NULL    | auto_increment |
    | gender | enum('F','M')       | YES  |     | NULL    |                |
    | name   | varchar(60)         | NO   |     | NULL    |                |
    +--------+---------------------+------+-----+---------+----------------+
    3 rows in set (0.01 sec)
    
    #删除主键
    MariaDB [students]> ALTER TABLE tbl1 DROP PRIMARY KEY;
    Query OK, 0 rows affected (0.06 sec)               
    Records: 0  Duplicates: 0  Warnings: 0
    
    MariaDB [students]> DESC tbl1;
    +--------+---------------------+------+-----+---------+----------------+
    | Field  | Type                | Null | Key | Default | Extra          |
    +--------+---------------------+------+-----+---------+----------------+
    | id     | tinyint(3) unsigned | NO   | PRI | NULL    | auto_increment |
    | gender | enum('F','M')       | YES  | UNI | NULL    |                |
    | name   | varchar(60)         | NO   |     | NULL    |                |
    +--------+---------------------+------+-----+---------+----------------+
    3 rows in set (0.01 sec)
    #添加主键
    MariaDB [students]> ALTER TABLE tbl1 ADD PRIMARY KEY(gender);
    Query OK, 0 rows affected (0.08 sec)               
    Records: 0  Duplicates: 0  Warnings: 0
    
    MariaDB [students]> DESC tbl1;
    +--------+---------------------+------+-----+---------+----------------+
    | Field  | Type                | Null | Key | Default | Extra          |
    +--------+---------------------+------+-----+---------+----------------+
    | id     | tinyint(3) unsigned | NO   | UNI | NULL    | auto_increment |
    | gender | enum('F','M')       | NO   | PRI | F       |                |
    | name   | varchar(60)         | NO   |     | NULL    |                |
    +--------+---------------------+------+-----+---------+----------------+
    3 rows in set (0.01 sec)
    #创建索引
    MariaDB [students]> ALTER TABLE tbl1 ADD INDEX(id);
    Query OK, 0 rows affected (0.06 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    #查看索引
    MariaDB [students]> DESC tbl1;
    MariaDB [students]> SHOW INDEXES FROM tbl1;
    #s删除索引
    MariaDB [students]> ALTER TABLE tbl1 DROP INDEXES id;
  1. 删除:
    DROP TABLE [IF EXISTS] tbl_name [, tbl_name] ...
    注意:危险操作;
  1. 另外两种创建方式:
    [1]. 复制表结构MariaDB [testdb]> CREATE TABLE tbl4 LIKE mysql.user; Query OK, 0 rows affected (0.02 sec)
    [2]. 复制表数据
    MariaDB [testdb]> CREATE TABLE tbl5 SELECT Host,User,Password FROM mysql.user; Query OK, 5 rows affected (0.06 sec) Records: 5 Duplicates: 0 Warnings: 0

     MariaDB [testdb]> SELECT * FROM tbl5;
     +-------------+--------+-------------------------------------------+
     | Host        | User   | Password                                  |
     +-------------+--------+-------------------------------------------+
     | localhost   | root   | *89367322F7FE6F2C97B8BF805585800F2E90EB76 |
     | 127.0.0.1   | root   | *89367322F7FE6F2C97B8BF805585800F2E90EB76 |
     | ::1         | root   | *89367322F7FE6F2C97B8BF805585800F2E90EB76 |
     | %           | wpuser | *C9B2DB1CA193280B971CA3602D5174A5D637D2BF |
     | 192.168.%.% | myuser | *85E26B8AB29FEE8453201A3511DAE24A24059109 |
     +-------------+--------+-------------------------------------------+
    
  2. 索引管理:
    索引是特殊的数据结构;
    索引:要有索引名称;

         创建:
         CREATE  [UNIQUE|FULLTEXT|SPATIAL] INDEX  index_name  [BTREE|HASH]  ON tbl_name (col1, col2,,...)
         UNIQUE:创建多键索引;
         
         删除:
         DROP  INDEX index_name ON tbl_name
    

DDL:INSERT, DELETE, UPDATE, SELECT

  1. INSERT INTO:
    INSERT [INTO] tbl_name [(col1,...)] {VALUES|VALUE} (val1, ...),(...),...
    注意:
    字符型:引号;
    数值型:不能用引号;

     示例:
         MariaDB [students]> SELECT * FROM tbl1;
         Empty set (0.01 sec)
         
         MariaDB [students]> INSERT INTO tbl1(name,gender) VALUES('GUO JING','M'),('Ding Dian','F');
         Query OK, 2 rows affected (0.02 sec)
         Records: 2  Duplicates: 0  Warnings: 0
         
         MariaDB [students]> SELECT * FROM tbl1;
         +----+--------+-----------+
         | id | gender | name      |
         +----+--------+-----------+
         |  2 | F      | Ding Dian |
         |  1 | M      | GUO JING  |
         +----+--------+-----------+
         2 rows in set (0.00 sec)
         #替换表中数据
         MariaDB [students]> REPLACE INTO tbl1 VALUE(3,'F','DONGFANGBUBAI');
         Query OK, 2 rows affected (0.01 sec)
    
  2. SELECT:
    (1) SELECT * FROM tbl_name;
    (2) SELECT col1, col2, ... FROM tbl_name;
    显示时,字段可以显示为别名; col_name AS col_alias
    (3) SELECT col1, ... FROM tbl_name WHERE clause;
    WHERE clause:用于指明挑选条件;
    col_name 操作符 value:
    age > 30;
    操作符(1) :
    >, <, >=, <=, ==, !=
    组合条件:
    and 、 or 、not
    操作符(2) :
    BETWEEN ... AND ...
    LIKE 'PATTERN'
    通配符:
    %:任意长度的任意字符;
    _:任意单个字符;
    RLIKE 'PATTERN': 正则表达式对字符串做模式匹配;
    IS NULL
    IS NOT NULL
    (4) SELECT col1, ... FROM tbl_name [WHERE clause] ORDER BY col_name, col_name2, ... [ASC|DESC];
    ASC: 升序;
    DESC: 降序;

    示例:
        MariaDB [students]> SELECT * FROM tbl1;
        +----+--------+---------------+---------+
        | id | gender | name          | age     |
        +----+--------+---------------+---------+
        |  1 | M      | Guo Jing      | NULL    |
        |  2 | M      | Ding Dian     | NULL    |
        |  3 | F      | DONGFANGBUBAI | 1001-01 |
        |  4 | F      | DING DANG     | NULL    |
        +----+--------+---------------+---------+
        MariaDB [students]> SELECT id,name FROM tbl1;
        +----+---------------+
        | id | name          |
        +----+---------------+
        |  1 | Guo Jing      |
        |  2 | Ding Dian     |
        |  3 | DONGFANGBUBAI |
        |  4 | DING DANG     |
        +----+---------------+
        4 rows in set (0.01 sec)
        MariaDB [students]> SELECT id,gender,name FROM tbl1 WHERE gender='M';
        +----+--------+-----------+
        | id | gender | name      |
        +----+--------+-----------+
        |  1 | M      | Guo Jing  |
        |  2 | M      | Ding Dian |
        +----+--------+-----------+
  1. DELETE:
    DELETE FROM tbl_name [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
    (1) DELETE FROM tbl_name WHERE where_condition
    (2) DELETE FROM tbl_name [ORDER BY ...] [LIMIT row_count]
注意:不加WHERE 会将删除整个表
    示例:
        MariaDB [students]> SELECT * FROM tbl1;
        +----+--------+---------------+---------+
        | id | gender | name          | age     |
        +----+--------+---------------+---------+
        |  1 | M      | Guo Jing      | NULL    |
        |  2 | M      | Ding Dian     | NULL    |
        |  3 | F      | DONGFANGBUBAI | 1001-01 |
        |  4 | F      | DING DANG     | NULL    |
        +----+--------+---------------+---------+
        4 rows in set (0.00 sec)
        
        MariaDB [students]> DELETE FROM tbl1 WHERE id=3;
        Query OK, 1 row affected (0.01 sec)
        
        MariaDB [students]> SELECT * FROM tbl1;
        +----+--------+-----------+------+
        | id | gender | name      | age  |
        +----+--------+-----------+------+
        |  1 | M      | Guo Jing  | NULL |
        |  2 | M      | Ding Dian | NULL |
        |  4 | F      | DING DANG | NULL |
        +----+--------+-----------+------+
        3 rows in set (0.00 sec)
  1. UPDATE:
    UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1=value1 [, col_name2=value2] ... [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]

         示例:
         MariaDB [students]> UPDATE tbl1 SET age=33 WHERE id=2;
         Query OK, 1 row affected (0.03 sec)
         Rows matched: 1  Changed: 1  Warnings: 0
         
         MariaDB [students]> SELECT * FROM tbl1;
         +----+--------+-----------+------+
         | id | gender | name      | age  |
         +----+--------+-----------+------+
         |  1 | M      | Guo Jing  | NULL |
         |  2 | M      | Ding Dian | 33   |
         |  4 | F      | DING DANG | NULL |
         +----+--------+-----------+------+
    

用户账号及权限管理:

  1. 用户账号:'username'@'host'
  • host:此用户访问当前mysql服务器时,允许其通过哪些主机远程创建连接;
  1. 表示方式:IP,网络地址、主机名、通配符(%和_);
  • 禁止检查主机名:my.cnf
    [mysqld] skip_name_resolve = ON
  1. 创建用户账号:
    CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];
  2. 删除用户账号:
    DROP USER ’user‘@’host' [, user@host] ...
  3. 授权:
  • 权限级别:管理权限、数据库、表、字段、存储例程;
    GRANT priv_type,... ON [object_type] db_name.tbl_name TO 'user'@'host' [IDENTIFIED BY 'password'];

          priv_type: ALL  [PRIVILEGES]
          db_name.tbl_name:
                  *.*:所有库的所有表;
                  db_name.*:指定库的所有表;
                  db_name.tbl_name:指定库的特定表;
                  db_name.routine_name:指定库上的存储过程或存储函数;
                  [object_type]
                          TABLE
                          FUNCTION
                          PROCEDURE
    
  1. 查看指定用户所获得的授权:
    SHOW GRANTS FOR 'user'@'host'
    SHOW GRANTS FOR CURRENT_USER;

  2. 回收权限:
    REVOKE priv_type, ... ON db_name.tbl_name FROM 'user'@'host';

  • 注意:MariaDB服务进程启动时,会读取mysql库的所有授权表至内存中;
    (1) GRANT或REVOKE命令等执行的权限操作会保存于表中,MariaDB此时一般会自动重读授权表,权限修改会立即生效;
    (2) 其它方式实现的权限修改,要想生效,必须手动运行FLUSH PRIVILEGES命令方可;
  1. 加固mysql服务器,在安装完成后,运行mysql_secure_installation命令;

你可能感兴趣的:(File Services之mariadb数据库基础)