Linux學習之路--Mariadb(3)基本使用操作【20】---20180123



一、MariaDB程序


1、MariaDB的程序組成

  • Client

        mysql:CLI交互式客戶端程序

        mysqldump,mysqladmin...

  • Server

        mysqld_safe

        mysqld

        mysqld_multi:多實例

  • 服務器監聽的兩種socket地址:
        ip socket: 監聽在tcp的3306端口,支持遠程通信
        unix sock: 監聽在sock文件上(/tmp/mysql.sock, /var/lib/mysql/mysql.sock),僅支持本機通信
        server: localhost, 127.0.0.1 自動使用unix sock

  • 命令行交互式客戶端程序mysql選項:
        --print-defaults 默認選項
        --verbose 顯示祥細信息
        -uUSERNAME: 用戶名;默認爲root
        -hHOST: 服務器主機; 默認爲localhost
        -pPASSWORD:用戶的密碼;建議使用-p,默認爲空密碼

  • mysql用戶賬號由兩部分組成:
        'USERNAME'@'HOST'
        HOST用於限制此用戶可通過哪些遠程主機連接mysql服務
        支持使用通配符:
        % 匹配任意長度的任意字符
        172.16.0.0/255.255.0.0 或 172.16.%.%
        _ 匹配任意單個字符


2、簡單執行命令

  • 運行mysql命令:默認空密碼登錄
        mysql>use mysql
        mysql>select user();查看當前用戶
        mysql>SELECT User,Host,Password FROM user;

  • 安全初始化
        /usr/local/mysql/bin/mysql_secure_installatoin

  • 登錄系統:mysql –uroot –p

  • 客戶端命令:本地執行
        mysql> help
        每個命令都完整形式和簡寫格式
        mysql> status 或 \s

  • 服務端命令:通過mysql協議發往服務器執行並取回結果
        每個命令都必須命令結束符號;默認爲分號
        SELECT VERSION();


3、關係型數據庫的常見組件

  • 數據庫:databases

  • 表:table

         列:column

         行:row

  • 索引:index

  • 視圖:view

  • 用戶:user

  • 權限:privilege

  • 存儲過程:procedure,無返回值

  • 存儲函數:function,有返回值

  • 觸發器:trigger

  • 事件調度器:event scheduler,任務計劃


二、SQL語言的興起與語法標準


  • 20世紀70年代,IBM開發出SQL,用於DB2

  • 1981年,IBM推出SQL/DS數據庫

  • 業內標準微軟和Sybase的T-SQL,Oracle的PL/SQL

  • SQL作爲關係型數據庫所使用的標準語言,最初是基於IBM的實現在1986年被批准的。1987年,“國際標準化組織(ISO)”把ANSI(美國國家標準化組織) SQL作爲國際標準。這個標準在1992年進行了修訂(SQL-92),1999年再次修訂(SQL-99),目前最新的是SQL-2003

  • Keyword組成clause

  • 多條clause組成語句

  • SELECT *         SELECT子句

  • FROM products    FROM子句

  • WHERE price>400  WHERE子句

  • 這是一組語句,由三個子句構成,SELECT,FROM和WHERE都是關鍵字


1、SQL語句分類

  • DDL: Data Defination Language(數據定義語言)
        CREATE, DROP, ALTER

  • DML: Data Manipulation Language(數據操作語言)
        INSERT, DELETE, UPDATE

  • DCL:Data Control Language(數據控制語言)
        GRANT, REVOKE

  • DQL:Data Query Language(數據查詢語言)
        SELECT


2、SQL語言規範

  • 在數據庫系統中,SQL語句不區分大小寫(建議用大寫)

  • 但字符串常量區分大小寫

  • SQL語句可單行或多行書寫,以“;”結尾

  • 關鍵詞不能跨多行或簡寫

  • 用空格和縮進來提高語句的可讀性

  • 子句通常位於獨立行,便於編輯,提高可讀性

  • 註釋:
        SQL標準:
        /*註釋內容*/ 多行註釋
        -- 註釋內容 單行註釋,注意有空格

  • MySQL註釋:
        #


3、數據庫對象的命名規則

  • 必須以字母開頭

  • 可包括數字和三個特殊字符(# _ $)

  • 不要使用MySQL的保留字

  • 同一database(Schema)下的對象不能同名


4、數據庫操作

  • 創建數據庫:
        CREATE DATABASE|SCHEMA [IF NOT EXISTS] 'DB_NAME';
        CHARACTER SET 'character set name'                  #指定創建數據庫使用字符集
        COLLATE 'collate name'

  • 刪除數據庫
        DROP DATABASE|SCHEMA [IF EXISTS] 'DB_NAME';

  • 查看支持所有字符集

        SHOW CHARACTER SET;

  • 查看支持所有排序規則

        SHOW COLLATION;

  • 獲取命令使用幫助:
        mysql> HELP KEYWORD;

  • 查看數據庫列表:
        mysql> SHOW DATABASES;

MariaDB [(none)]> create database hp521;
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| hp521              |
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

MariaDB [(hellodb]>delete from newstudents;          #比較危險的操作,刪除表中所有內容


5、創建表

  • CREATE TABLE [IF NOT EXISTS] ‘tbl_name’ (col1 type1 修飾符, col2 type2 修飾符, ...)

  • 字段信息
        col type1
        PRIMARY KEY(col1,...)
        INDEX(col1, ...)
        UNIQUE KEY(col1, ...)

  • 表選項:
        ENGINE [=] engine_name
            SHOW ENGINES;查看支持的engine類型
        ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}

  • 獲取幫助:mysql> HELP CREATE TABLE;

MariaDB [hp521]> create table emp ( eid int auto_increment primary key,name char(10) not null unique key,gender char(1) default 'm');
Query OK, 0 rows affected (0.01 sec)
MariaDB [hp521]> show create table emp;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                       |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| emp   | CREATE TABLE `emp` (
  `eid` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(10) NOT NULL,
  `gender` char(1) DEFAULT 'm',
  PRIMARY KEY (`eid`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)


6、表操作

  • 查看所有的引擎

        SHOW ENGINES;

  • 查看錶

        SHOW TABLES [FROM db_name];

  • 查看錶結構

        DESC [db_name.]tb_name;

  • 刪除表

        DROP TABLE [IF EXISTS] tb_name;

  • 查看錶創建命令

        SHOW CREATE TABLE tbl_name;

  • 查看錶狀態

        SHOW TABLE STATUS LIKE 'tbl_name'\G

 

 

三、數據類型


  • 數據類型:
        數據長什麼樣?
        數據需要多少空間來存放?

  • 系統內置數據類型和用戶定義數據類型

  • MySql支持多種列類型:
        數值類型
        日期/時間類型
        字符串(字符)類型

  • 選擇正確的數據類型對於獲得高性能至關重要,三大原則:
        更小的通常更好,儘量使用可正確存儲數據的最小數據類型
        簡單就好,簡單數據類型的操作通常需要更少的CPU週期
        儘量避免NULL,包含爲NULL的列,對MySQL更難優化


1、整型

  • tinyint(m) 1個字節 範圍(-128~127)

  • smallint(m) 2個字節 範圍(-32768~32767)

  • mediumint(m) 3個字節 範圍(-8388608~8388607)

  • int(m) 4個字節 範圍(-2147483648~2147483647)

  • bigint(m) 8個字節 範圍(+-9.22*10的18次方)

  • 取值範圍如果加了unsigned,則最大值翻倍,如tinyint unsigned的取值範圍爲(0~255)

  • int(m)裏的m是表示SELECT查詢結果集中的顯示寬度,並不影響實際的取值範圍

  • MySQL可以爲整型類型指定寬度,例如Int(11),對絕大多數應用這是沒有意義的:它不會限制值的合法範圍,

        只是規定了MySQL的一些交互工具(例如MySQL命令行客戶端)用來顯示字符的個數。對於存儲和計算來說,Int(1)和Int(20)是相同的


2、浮點型(float和double),近似值

  • float(m,d) 單精度浮點型 8位精度(4字節) m總個數,d小數位

  • double(m,d) 雙精度浮點型 16位精度(8字節) m總個數,d小數位

  • 設一個字段定義爲float(6,3),如果插入一個數123.45678,實際數據庫裏存的是123.457,但總個數還以實際爲準,即6位


3、定點數

  • 在數據庫中存放的是精確值,存爲十進制

  • decimal(m,d) 參數m<65 是總個數,d<30且 d<m 是小數位

  • MySQL5.0和更高版本將數字打包保存到一個二進制字符串中(每4個字節存9個數字)。例如,decimal(18,9)小數點兩邊將各存儲9個數字,

        一共使用9個字節:小數點前的數字用4個字節,小數點後的數字用4個字節,小數點本身佔1個字節

  • 浮點類型在存儲同樣範圍的值時,通常比decimal使用更少的空間。float使用4個字節存儲。double佔用8個字節

  • 因爲需要額外的空間和計算開銷,所以應該儘量只在對小數進行精確計算時才使用decimal——例如存儲財務數據。

        但在數據量比較大的時候,可以考慮使用bigint代替decimal


4、字符串(char,varchar,_text)

  • char(n) 固定長度,最多255個字符

  • varchar(n)可變長度,最多65535個字符

  • tinytext 可變長度,最多255個字符

  • text 可變長度,最多65535個字符

  • mediumtext 可變長度,最多2的24次方-1個字符

  • longtext 可變長度,最多2的32次方-1個字符

  • BINARY(M) 固定長度,可存二進制或字符,允許長度爲0-M字節,

  • VARBINARY(M) 可變長度,可存二進制或字符,允許長度爲0-M字節

  • 內建類型:ENUM枚舉, SET集合


5、char和varchar:

  • char(n) 若存入字符數小於n,則以空格補於其後,查詢之時再將空格去掉。所以char類型存儲的字符串末尾不能有空格,varchar不限於此。

  • char(n) 固定長度,char(4)不管是存入幾個字符,都將佔用4個字節,varchar是存入的實際字符數+1個字節(n< n>255),所以varchar(4),存入3個字符將佔用4個字節。

  • char類型的字符串檢索速度要比varchar類型的快


6、varchar和text:

  • varchar可指定n,text不能指定,內部存儲varchar是存入的實際字符數+1個字節(n< n>255),text是實際字符數+2個字節。

  • text類型不能有默認值

  • varchar可直接創建索引,text創建索引要指定前多少個字符。varchar查詢速度快於text


7、二進制數據:BLOB

  • BLOB和text存儲方式不同,TEXT以文本方式存儲,英文存儲區分大小寫,而Blob是以二進制方式存儲,不分大小寫

  • BLOB存儲的數據只能整體讀出

  • TEXT可以指定字符集,BLOB不用指定字符集


8、日期時間類型

  • date 日期 '2008-12-2'

  • time 時間 '12:25:36'

  • datetime 日期時間 '2008-12-2 22:06:44'

  • timestamp 自動存儲記錄修改時間

  • YEAR(2), YEAR(4):年份

  • timestamp字段裏的時間數據會隨其他字段修改的時候自動刷新,這個數據類型的字段可以存放這條記錄最後被修改的時間


9、修飾符

  • 所有類型:
        •NULL 數據列可包含NULL值
        •NOT NULL 數據列不允許包含NULL值
        •DEFAULT 默認值
        •PRIMARY KEY 主鍵
        •UNIQUE KEY 唯一鍵
        •CHARACTER SET name 指定一個字符集

  • 數值型
        •AUTO_INCREMENT 自動遞增,適用於整數類型
        •UNSIGNED 無符號

 

#示例
CREATE TABLE students (id int UNSIGNED NOT NULL PRIMARY KEY,name VARCHAR(20)NOT NULL,age tinyint UNSIGNED);

DESC students;

CREATE TABLE students2 (id int UNSIGNED NOT NULL ,name VARCHAR(20) NOT NULL,age tinyint UNSIGNED,PRIMARY KEY(id,name));


四、表操作及索引

  • DROP TABLE [IF EXISTS] 'tbl_name';

  • ALTER TABLE 'tbl_name'
        字段:
            添加字段:add
            ADD col1 data_type [FIRST|AFTER col_name] 刪除字段:drop
            修改字段:
            alter(默認值), change(字段名), modify(字段屬性)
        索引:
            添加索引:add index
            刪除索引: drop index
        表選項
            修改:

  • 查看錶上的索引:SHOW INDEXES FROM [db_name.]tbl_name;

  • 查看幫助:Help ALTER TABLE


#修改表示例
ALTER TABLE students RENAME s1;

ALTER TABLE s1 ADD phone varchar(11) AFTER name;

ALTER TABLE s1 MODIFY phone int;

ALTER TABLE s1 CHANGE COLUMN phone mobile char(11);

ALTER TABLE s1 DROP COLUMN mobile;

Help ALTER TABLE 查看幫助

ALTER TABLE students ADD gender ENUM('m','f')

ALETR TABLE students CHANGE id sid int UNSIGNED NOT NULL PRIMARY KEY;
ALTER TABLE students ADD UNIQUE KEY(name);

ALTER TABLE students ADD INDEX(age);

DESC students;

SHOW INDEXES FROM students;

ALTER TABLE students DROP age;

MariaDB [hp521]> desc emp;                                          #儘量不要插入
+-------+----------+------+-----+---------+----------------+
| Field | Type     | Null | Key | Default | Extra          |
+-------+----------+------+-----+---------+----------------+
| eid   | int(11)  | NO   | PRI | NULL    | auto_increment |
| name  | char(10) | NO   | UNI | NULL    |                |
+-------+----------+------+-----+---------+----------------+
2 rows in set (0.02 sec)
MariaDB [hp521]> alter table emp add address char(100) not null after eid ;
Query OK, 0 rows affected (0.04 sec)               
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [hp521]> desc emp;
+---------+-----------+------+-----+---------+----------------+
| Field   | Type      | Null | Key | Default | Extra          |
+---------+-----------+------+-----+---------+----------------+
| eid     | int(11)   | NO   | PRI | NULL    | auto_increment |
| address | char(100) | NO   |     | NULL    |                |
| name    | char(10)  | NO   | UNI | NULL    |                |
+---------+-----------+------+-----+---------+----------------+
3 rows in set (0.00 sec)


  • 索引是特殊數據結構;定義在查找時作爲查找條件的字段
        優點:提高查詢速度
        缺點:佔用額外空間,影響插入速度

  • 創建索引必須要有索引名稱

  • 創建索引:
        CREATE INDEX index_name ON tbl_name (index_col_name,...);
        help CREATE INDEX

  • 刪除索引:
        DROP INDEX index_name ON tbl_name;

  • 查看索引:
        SHOW INDEXES FROM [db_name.]tbl_name;



五、語句及賬號授權


1、DML語句

  • DML: INSERT, DELETE, UPDATE
        •INSERT
            INSERT [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} (val1,...),(...),...
        •UPDATE:
            UPDATE tbl_name SET col1=val1, col2=val2, ... [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n];
        •DELETE:
            DELETE FROM tbl_name [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n];
            可先排序再指定刪除的行數
        •TRUNCATE TABLE tbl_name; 清空表


2、DQL語名

  • DQL:SELECT
        •SELECT col1,col2,... FROM tbl_name [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n];
            Limit m,n 跳過m個,要n個

  • 字段表示法:
        *: 所有字段
        as:字段別名,col1 AS alias1


3、DQL語句

  • WHERE clause:
        操作符:
            =, != >, <, >=, <=
            BETWEEN ... AND ...
            LIKE:
                %:任意長度的任意字符
                _:任意單個字符;
            RLIKE:正則表達式模式匹配
            IS NULL ,IS NOT NULL
            IN (val1,val2,…) NOT IN (val1,val2,…)
        條件邏輯操作:
            AND,OR,NOT


#示例
DESC students;

INSERT INTO students VALUES(1,'tom','m'),(2,'alice','f');

INSERT INTO students(id,name) VALUES(3,'jack'),(4,'allen');

SELECT * FROM students WHERE id < 3;

SELECT * FROM students WHERE gender='m';

SELECT * FROM students WHERE gender IS NULL;

SELECT * FROM students WHERE gender IS NOT NULL;

SELECT * FROM students ORDER BY name DESC LIMIT 2;

SELECT * FROM students ORDER BY name DESC LIMIT 1,2;

SELECT * FROM students WHERE id >=2 and id <=4

SELECT * FROM students WHERE BETWEEN 2 AND 4

SELECT * FROM students WHERE name LIKE ‘t%’

SELECT * FROM students WHERE name RLIKE '.*[lo].*';

SELECT id stuid,name as stuname FROM students

 

3、用戶賬號

 

  • 用戶賬號:'user'@'host'
        user: 用戶名
        host: 允許用戶通過哪些主機遠程連接mysqld服務
            IP、網絡地址、主機名、通配符(%和_)

  • 創建用戶:
        CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];

  • 查看當前用戶:
        SELECT user();

  • 查看用戶:
        SELECT User,Host,Password FROM user;

  • 刪除用戶:DROP USER 'username'@'host';
        示例:刪除默認的空用戶
            DROP USER ''@'localhost';

  • 更改口令:
        1)SET PASSWORD FOR 'user'@'host' = PASSWORD(‘password');
        2) UPDATE user SET password=PASSWORD('magedu') WHERE User='root' ;
            注意:上面修改表的命令不會馬上生效,需執行FLUSH PRIVILEGES生效
        3) /usr/local/mysql/bin/mysqladmin -u root –poldpassword password 'newpassword'

MariaDB [(none)]>CREATE user L@‘192.168.27.%' identified by 'centos';

MariaDB [(none)]>show processlist;                       #查看目前鏈接用戶狀態信息


4、授權

  • 權限級別:管理權限、數據庫、表、字段、存儲例程
        •Help GRANT
        •GRANT priv_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.routine_name:指定庫的存儲過程和函數

  • 示例:
        GRANT SELECT,DELETE on testdb.* TO ‘testuser’@‘%’IDENTIFIED BY 'testpass';

  • 查看指定用戶獲得的授權:
        Help SHOW GRANTS
        SHOW GRANTS FOR 'user'@'host';
        SHOW GRANTS FOR CURRENT_USER[()];

  • 回收授權:
        REVOKE priv_type, ... ON db_name.tb_name FROM 'user'@'host'
        示例:
        REVOKE DELETE ON testdb.* FROM 'testuser'@'%'

  • 注意:MariaDB服務進程啓動時會讀取mysql庫中所有授權表至內存
        (1) GRANT或REVOKE等執行權限操作會保存於系統表中,MariaDB的服務進程通常會自動重讀授權表,使之生效
        (2) 對於不能夠或不能及時重讀授權表的命令,可手動讓MariaDB的服務進程重讀授權表:mysql> FLUSH PRIVILEGES;



六、簡單操作

1、查看目前軟件使用版本信息

MariaDB [(none)]> \s
--------------
mysql  Ver 15.1 Distrib 5.5.59-MariaDB, for Linux (x86_64) using readline 5.1
Connection id:          21
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server:                 MariaDB
Server version:         5.5.59-MariaDB Source distribution
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /app/mysql/mysql.sock
Uptime:                 7 hours 34 min 42 sec
Threads: 2  Questions: 128  Slow queries: 0  Opens: 4  Flush tables: 2  Open tables: 28  Queries per second avg: 0.004
--------------

MariaDB [(none)]> SELECT version();
+-----------------+
| version()       |
+-----------------+
| 10.2.13-MariaDB |
+-----------------+
1 row in set (0.00 sec)


2、數據庫中執行shell命令

MariaDB [(none)]> \! pwd
/root

MariaDB [(none)]> \! ls /app/
mysql  website  website2  website3


3、修改mysql提示符

  • --prompt=format_str

    The prompt command reconfigures the default mysql> prompt. The string for defining the prompt can  contain the following special sequences.(prompt命令重新配置默認的mysql>提示符。用於定義提示符的字符串可以包含以下特殊序列。)


       │    選項    │    說明    |

       │\ c│計數器對於您發出的每個聲明都會遞增

       │\ D│全部日期

       │\ d│默認數據庫

       │\ h│服務器主機

       │\ l│當前分隔符(5.1.12新增)

       │\ m│當前時間的分鐘

       │\ n│換行符

       │\ O│以三個字母的格式顯示當月(1月,2月,...)

       │\ o│數字格式的當前月份

       │\ P│am / pm

       │\ p│當前的TCP / IP端口或套接字文件

       │\ R│目前時間,在24小時軍事時間(0-23)

       │\ r│當前時間,標準12小時時間(1-12)

       │\ S│分號

       │\ s│當前時間的秒數

       │\ t│製表符

       │\ U│完整的用戶名@主機名帳戶名

       │\ u│你的用戶名

       │\ v│服務器版本

       │\ w│以三個字母的格式(星期一,二,...)

       │\ Y│本年度,四位數字

       │\ y│本年度,兩位數字

       │\ _│一個空格

       │\  │空格(空格跟在反斜槓後面)

       │\' │單引號

       │\“│雙引號

       │\\ │文字“\”反斜槓字符

       │\ x│x,對於以上未列出的任何“x”


  • 示例

        使用環境變量。您可以將MYSQL_PS1環境變量設置爲提示字符串。
            例如:shell> export MYSQL_PS1 ="(\u@\h) [\d]>"

        使用命令行選項。您可以在命令行上將--prompt選項設置爲mysql。對於
            例如:shell> mysql --prompt ="(\u@\h) [\d]>"
                (用戶@主機)[數據庫]>

        使用選項文件。您可以在任何MariaDB選項的[mysql]組中設置提示選項文件,例如/etc/my.cnf或主目錄中的.my.cnf文件。

            例如:[MySQL的]

                  prompt=(\\u@\\h)[\\d]>\\_

        在這個例子中,請注意反斜槓加倍。如果使用選項文件中的提示選項設置提示,建議在使用特殊提示選項時加倍反斜槓。可選提示選項集和選項文件中識別的一組特殊轉義序列有一些重疊。如果使用單個反斜槓,重疊可能會導致問題。例如,\ s被解釋爲一個空格而不是當前的秒數值。以下示例顯示瞭如何在選項文件中定義提示以包含HH:MM:SS>格式的當前時間:

                 [MySQL的]
                 prompt ="\\r:\\m:\\s>"

        交互式設置提示。您可以使用提示符(或\ R)命令交互式地更改提示。例如:+

                 mysql> prompt (\u@\h) [\d]>\_
                 PROMPT set to ´(\u@\h) [\d]>\_´
                 (user@host)[database]>
                 (user@host) [database]> prompt
                 Returning to default PROMPT of mysql>
                 mysql>


[root@centos7mini~]#vim /etc/my.cnf.d/mysql-clients.cnf 
#
# These groups are read by MariaDB command-line tools
# Use it for options that affect only one utility
#
[mysql]
prompt=(\\u@\\h) [\\d]>\\_


4、查看user表中用戶信息

MariaDB [(none)]> select user,host,password from mysql.user;  
+--------+----------------+-------------------------------------------+
| user   | host           | password                                  |
+--------+----------------+-------------------------------------------+
| root   | localhost      |                                           |
| root   | centos6-server |                                           |
| root   | 127.0.0.1      |                                           |
| root   | ::1            |                                           |
|        | localhost      |                                           |
|        | centos6-server |                                           |
| syslog | 192.168.1.102  | *128977E278358FF80A246B5046F51043A2B1FCED |
| syslog | 192.168.1.%    | *128977E278358FF80A246B5046F51043A2B1FCED |
+--------+----------------+-------------------------------------------+
8 rows in set (0.00 sec)


5、在數據庫中修改root口令


MariaDB [(none)]> \! passwd

Changing password for user root.

New password:


6、查詢安裝程序的路徑


[root@centos7mini~]#mysql -e 'show variables like "basedir";'

+---------------+------------------+
| Variable_name | Value            |
+---------------+------------------+
| basedir       | /usr/local/mysql |
+---------------+------------------+

注意:如果是yum 及 二進制安裝,實現多實例可以不用指定--basedir,但如果是源碼編譯,實現多實例,必須制定 --basedir= 的路徑


7、yum安裝高版本mariadb

  • 官網找到高版本yum源地址

  • 添加base倉庫

[root@centos6-mini~]#vim /etc/yum.repos.d/mariadb.repo

[mariadb]
name = MariaDB
baseurl = 
http://yum.mariadb.org/10.2/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

[root@centos6-mini~]#yum info MariaDB-server  
[root@centos6-mini~]#service mysql start

MariaDB [(none)]> \s
--------------
mysql  Ver 15.1 Distrib 10.2.13-MariaDB, for Linux (x86_64) using readline 5.1
Connection id:          9
Current database:
Current user:           Server:                 MariaDB
Server version:         10.2.13-MariaDB MariaDB Server

 

 

8、修改多實例數據庫登陸口令


 

#第一種修改方法
[root@centos7mini~]#mysqladmin -uroot -S /mysqldb/3307/socket/mysql.sock password 'centos'


#第二種修改方法
MariaDB [(none)]> update mysql.user set password=password("centos") where user='root';
Query OK, 4 rows affected (0.01 sec)
Rows matched: 4  Changed: 4  Warnings: 0
MariaDB [(none)]> select user,password,host from mysql.user;
+------+-------------------------------------------+--------------+
| user | password                                  | host         |
+------+-------------------------------------------+--------------+
| root | *128977E278358FF80A246B5046F51043A2B1FCED | localhost    |
+------+-------------------------------------------+--------------+

MariaDB [(none)]> flush privileges;                #注意,修改表格,一定要刷新
Query OK, 0 rows affected (0.01 sec)

 

9、刪除匿名用戶

MariaDB [(none)]> drop user ''@localhost ;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> drop user ''@'centos6-mini';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;                 #注意,修改表格,一定要刷新
Query OK, 0 rows affected (0.01 sec)

 

 

 

10、查看默認使用的字符集

#yum安裝的信息
MariaDB [(none)]> show variables like '%character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |        #客戶端
| character_set_connection | utf8                       |        #連接
| character_set_database   | latin1                     |        #數據庫
| character_set_filesystem | binary                     |        #文件系統
| character_set_results    | utf8                       |        #結果
| character_set_server     | latin1                     |        #服務器
| character_set_system     | utf8                       |        #系統
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

#源碼編譯安裝的信息
MariaDB [(none)]> show variables like '%character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /app/mysql/share/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)


11、破解數據庫口令

#第一步,進入主配置文件,加入關鍵字
[root@centos7mini~]#vim /etc/my.cnf
[mysqld]
skip_grant_tables
[root@centos7mini~]#systemctl restart mariadb

#第二步,進入數據庫進行口令修改
MariaDB [(none)]> updata mysql.user set password=password("centos") where host='localhost';
#注意,生產環境中,一定要注意where,如果沒帶,對整個表修改,是非常危險的。

#第三步,修改主配置文件,去掉加入的關鍵字

 

12、查看目前鏈接用戶的情況

MariaDB [(none)]> show processlist;

 

13、自己家目錄下 .mysql_history

[root@Centos6-server~]#cat .mysql_history 
#數據庫內用戶使用過的命令


14、用戶登錄賬號密碼免輸入

[root@centos7mini~]#vim /etc/my.cnf.d/clinent.cnf
[clinent]
user=root
password=centos


15、導入數據庫

[root@centos6-mini~]#mysql -uroot -pcentos < hellodb_InnoDB.sql


16、查看錶結構

 

MariaDB [hellodb]> desc students;
+-----------+---------------------+------+-----+---------+----------------+
| Field     | Type                | Null | Key | Default | Extra          |
+-----------+---------------------+------+-----+---------+----------------+
| StuID     | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
| Name      | varchar(50)         | NO   |     | NULL    |                |
| Age       | tinyint(3) unsigned | NO   |     | NULL    |                |
| Gender    | enum('F','M')       | NO   |     | NULL    |                |
| ClassID   | tinyint(3) unsigned | YES  |     | NULL    |                |
| TeacherID | int(10) unsigned    | YES  |     | NULL    |                |
+-----------+---------------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

MariaDB [hellodb]> desc coc;
+----------+----------------------+------+-----+---------+----------------+
| Field    | Type                 | Null | Key | Default | Extra          |
+----------+----------------------+------+-----+---------+----------------+
| ID       | int(10) unsigned     | NO   | PRI | NULL    | auto_increment |
| ClassID  | tinyint(3) unsigned  | NO   |     | NULL    |                |
| CourseID | smallint(5) unsigned | YES  |     | NULL    |                |
+----------+----------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)


17、查看數據庫創建時使用的命令

MariaDB [hp521]> show create database hp521;
+----------+------------------------------------------------------------------+
| Database | Create Database                                                  |
+----------+------------------------------------------------------------------+
| hp521    | CREATE DATABASE `hp521` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+------------------------------------------------------------------+
1 row in set (0.00 sec)

 

18、查看數據庫中每個表的結構信息

MariaDB [hp521]> show table status from mysql\G
*************************** 30. row ***************************
           Name: user
         Engine: MyISAM
        Version: 10
     Row_format: Dynamic
           Rows: 3
 Avg_row_length: 117
    Data_length: 580
Max_data_length: 281474976710655
   Index_length: 4096
      Data_free: 228
 Auto_increment: NULL
    Create_time: 2018-02-06 01:47:58
    Update_time: 2018-02-06 02:02:46
     Check_time: NULL
      Collation: utf8_bin
       Checksum: NULL
 Create_options: 
        Comment: Users and global privileges
30 rows in set (0.00 sec)


19、數據庫存儲區別

[root@centos6-mini~]#ll /var/lib/mysql/hellodb/
-rw-rw---- 1 mysql mysql  1277 Feb  6 04:18 classes.frm             #表的結構
-rw-rw---- 1 mysql mysql 98304 Feb  6 04:18 classes.ibd             #表的數據
[root@centos6-mini~]#ll /var/lib/mysql/
-rw-rw---- 1 mysql mysql 12582912 Feb  6 04:49 ibdata1              #innodb所有數據庫的真實數據,默認是全部放到一起的,可以分開

[root@centos6-mini~]#ll /var/lib/mysql/mysql
-rw------- 1 mysql mysql   2110 Feb  6 01:47 columns_priv.frm       #表的結構
-rw------- 1 mysql mysql      0 Feb  6 01:47 columns_priv.MYD       #表的數據
-rw------- 1 mysql mysql   4096 Feb  6 01:47 columns_priv.MYI       #表的索引


20、把INNODB引擎數據分開

[root@centos6-mini~]#vim /etc/my.cnf
[mysqld]
innodb_file_per_table 

[root@Centos6-serverdata]#service mysqld restart 

MariaDB [(none)]> show variables like "%file%";
+---------------------------------------+--------------------------------------------+
| Variable_name                         | Value                                      |
+---------------------------------------+--------------------------------------------+
| innodb_file_per_table                 | ON


21、數據庫中help命令

 

 

#需要查詢要使用的命令用法,例如
MariaDB [hp521]> help create
Many help items for your request exist.
To make a more specific request, please type 'help <item>',
where <item> is one of the following
topics:
   CREATE DATABASE
   CREATE EVENT
   CREATE FUNCTION
   CREATE FUNCTION UDF
   CREATE INDEX
   CREATE PROCEDURE
   CREATE SERVER
   CREATE TABLE
   CREATE TABLESPACE
   CREATE TRIGGER
   CREATE USER
   CREATE VIEW
   SHOW
   SHOW CREATE DATABASE
   SHOW CREATE EVENT
   SHOW CREATE FUNCTION
   SHOW CREATE PROCEDURE
   SHOW CREATE TABLE
   SPATIAL

MariaDB [hp521]> help create table

 

 


22、查詢表的創建格式信息

MariaDB [hp521]> show table status like 'emp'\G
*************************** 1. row ***************************
           Name: emp
         Engine: InnoDB           
        Version: 10
     Row_format: Compact                 #緊湊格式
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 16384
      Data_free: 0
 Auto_increment: 1
    Create_time: 2018-02-06 14:42:26
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options: 
        Comment: 
1 row in set (0.01 sec)


23、數據庫別名簡單實用

MariaDB [hellodb]> select course as 祕籍 from courses;        
+----------------+
| 祕籍           |
+----------------+
| Hamo Gong      |
| Kuihua Baodian |
| Jinshe Jianfa  |
| Taiji Quan     |
| Daiyu Zanghua  |
| Weituo Zhang   |
| Dagou Bangfa   |
+----------------+
7 rows in set (0.00 sec)


24、根據已有表格式創建新的表

MariaDB [hp521]> create table newstudents select * from students;
#這麼創建會丟失主鍵及自動遞增等設置,相當於複製表

MariaDB [hp521]>insert into newstudents select * from students;  
#直接在新表中複製其他表中的所有內容,前提是兩個表結構是一致的


25、清除表中所有內容

<strong>MariaDB [hp521]>truncate table newstudents;
#極度危險的操作,對錶內數據量極大的清除操作</strong>


 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章