1. 程式人生 > >MariaDB/Mysql的用法

MariaDB/Mysql的用法

yum 標識 spatial hello secure 語句 數據類型 示例 行數

要使用MariaDB/Mysql,先要利用yum安裝

[root@localhost ~]# yum install -y mariadb-*    //利用這條命令能把所有關於MariaDB的軟件工具安裝上

若本來Linux(CentOS)已經安裝,可用

[root@localhost ~]# ss -tnl        //查看3306是否被監聽,有就已開啟服務

若沒有開啟則啟動服務

[root@localhost ~]# systemctl start mariadb
[root@localhost ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.56-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>  //已經進入mysql/MariaDB的交互界面


在Mysql/MariaDB的交互界面就可以用MariaDB/Mysql的語句來進行數據庫的操作。

也可以在Bash界面有條件對應使用:

mysql [options] [db_name]來進入Mysql界面;

-p[password]
用於指定連接mysql服務器時,為對應用戶指定身份驗證所需密碼;如果密碼部分省略不寫,執行命令後需要在新行中給出密碼,這種方式相對更安全;

-D db_name
用於指定使用mysql客戶端程序連接到mysql服務器之後,默認使用哪個數據庫;如果不給定該選項,默認為NULL;

-e statement
連接至mysql服務器並將後面的SQL語句交給服務器運行之後返回執行結果並直接退出交互式登錄模式,返回bash命令提示符;

-h host_name
用於指定此次mysql程序所連接的mysql服務器的主機名稱或主機IP地址;默認是localhost(127.0.0.1);

-u user_name
用於指定連接mysql服務器時使用的用戶名;默認的用戶名為:'root'@'localhost'

mysql的用戶名:USERNAME@HOSTNAME

USERNAME表示登錄的用戶名稱;
HOSTNAME表示用戶通過哪個特定的客戶端主機連接到mysql服務器;
如:'root'@'172.16.0.1'用戶
表示只有172.16.0.1主機可以通過root用戶連接至myslq服務器;
HOSTNAME中可以使用通配符:
_:任意單個字符;
%:任意長度的任意字符;
如:'root'@'172.16.%.%'
表示172.16.0.0/16網段中的所有主機都可以使用root用戶連接至mysql服務器;
如:'root'@'172.16._.%'
表示172.16.0.0~172.16.9.255地址的主機都可以使用root用戶連接至mysql服務器;

註意:默認情況下,所有用戶均為空密碼,並且還有匿名用戶存在,因此,為了增強安全性,可以使用mysql_secure_installation命令完成賬戶安全初始化;是的mysql服務器僅能讓root用戶在本地登錄,並且移除匿名用 戶和test數據庫;


進入mysql/MariaDB的交互界面後,可以用mysql命令了;

Mysql命令分為:客戶端命令和服務器端命令

客戶端命令:mysql程序自身完成或執行的命令,在客戶端所在地運行

clear (\c)
停止發送當前正在鍵入的命令或語句並直接返回提示符;
delimiter (\d)
設置語句結束標記;默認的語句結束標記為";";
ego (\G)
將其前面的語句送往mysql服務器運行,並將返回的結果縱線顯示;
go (\g)
無需輸入語句結束標記,直接將其前面的語句送往服務器執行;
exit,quit (\q)
退出mysql程序的交互式模式;
status (\s)
獲取mysql服務器的狀態信息;
use (\u)
將指定的數據庫作為當前正在使用的數據庫;
source (\.)
可以在mysql交互式模式中執行SQL腳本文件;
?或help (\?)
獲取客戶端命令的幫助信息;


服務端命令:mysql客戶端程序通過mysql協議向mysql服務器端發送的SQL語句;每個SQL語句都必須以指定的結束標記結尾,默認是";"

服務器端命令代表的SQL語句,可以分為三類:DDL,DML,DCL



DDL:數據定義語言,主要用於管理數據庫及數據庫的各組件;
例如:數據庫,表,視圖,索引,用戶,存儲過程,存儲函數,觸發器,事件等;
常用的SQL語句:CREATE,DROP,ALTER,SHOW


DML:數據操縱語言,主要用於管理表中的數據,實現數據的增,刪,改,查等操作;
常用的SQL語句:INSERT,DELETE,UPDATE,SELECT

DCL:數據控制語言,主要用於管理數據訪問的授權;
常用的SQL語句:GRANT,REVOKE


獲取指定的SQL語句的幫助信息;

mysql> help SQL_STATEMENT_KEYWORK
MariaDB [(none)]> help SQL_STATEMENT_KEYWORK

所有的SQL語句本身,不區分字符大小寫;建議使用小寫字母書寫SQL語句;


DDL中的數據庫

創建數據庫、修改數據庫的屬性、刪除數據庫


創建數據庫:

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

DATABASE | SCHEMA:
表示要創建的對象的類型為"數據庫"或"方案";
IF NOT EXISTS:
如果指定要創建的數據庫已經存在,則不報錯也不執行創建操作;
db_name:
要創建的數據庫的名稱;
CHARACTER SET [=] charset_name:
為新創建的數據庫指定其默認的字符集;

mysql> show character set
查看mysql服務器所支持的所有字符集及默認排序規則;
COLLATE [=] collation_name:
為新創建的數據庫指定字符集的排序規則;

mysql> show collation
查看mysql服務器上每種字符集所支持的所有的排序規則;


修改數據庫的屬性:

ALTER {DATABASE | SCHEMA} db_name alter_specification ...
alter_specification:
[DEFAULT] CHARACTER SET [=] charset_name
| [DEFAULT] COLLATE [=] collation_name

註意:如果數據庫中已經有表,且表中已經插入數據時,更改數據庫的字符集和排序規則可能會導致已存數據的亂碼;


刪除數據庫:

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name


DDL中的表:

數據類型、創建表、修改表、刪除表


數據類型:
定義數據類型的意義:
1.決定數據的存儲格式;
2.決定數據所能參與的運算;
3.決定數據可以表示的有效範圍;

對於mysql來說,支持的數據類型:
數值型:
精確數值型:
TINYINT(3):8bits,0~255,-128~+127
SMALLINT(5):16bits,0~65535,-32768~+32767
MEDIUMINT(8):24bits,0~16777735
INT(10):32bits,
INTEGER:48bits,
BIGINT:64bits

近似數值型:
REAL
DOUBLE
FLOAT

字符串型:
變長字符型:
VARCHAR(length):字符不區分大小寫;65536個字符;
VARCHAR(30)
qhdlink$ -- 8字節存儲空間;
VARBINARY(length):字符區分大小寫;65536個字符;

定長字符型
CHAR(length):字符不區分大小寫;256個字符;
CHAR(30)
qhdlink -- 30字節空間;
BINARY(length):字符區分大小寫;256個字符;

對象存儲類型:
TEXT:存儲大量的純文本信息;
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT

BLOB:存儲非純文本信息經過流式化處理之後的二進制數據;
TINYBLOB
BLOB
MEDIUMBLOB
LONGBLOB

日期時間型:
DATE:日期型,3字節;
TIME:時間型,3字節;
TIMESTAMP:時間戳類型,4字節;
DATETIME:日期時間型,8字節;
YEAR:年份,YEAR(2),YEAR(4)

內置特殊類型:
集合類型:
SET:集合,插入的數據可以是集合中各個元素的任意組合;
SET('a','b','c','d')
a
aa
aab
abdc

枚舉類型:
ENUM:枚舉,只能存放列舉出來的固定的字符或字符串;
ENUM('F','M')
F
M

數據類型相關的修飾符:
與整數類型相關的:
UNSIGNED,無符號整數;
註意:UNSIGNED修飾符必須緊跟在精確數值類型標識符之後;
AUTO_INCREMENT [=] Value:
整型數據的遞增或遞減;

通用修飾符:
NOT NULL:非空約束;一般是為主鍵做約束;
DEFAULT Value:為字段設置默認值;


創建表:
CREATE TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options]
create_definition:
col_name data_type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string']

table_options:
ENGINE [=] engine_name | AUTO_INCREMENT [=] value

顯示表的結構:
mysql> desc stu_info;

顯示創建表的SQL語句:
mysql> show create table stu_info;


修改表:

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

增加表的字段:
ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name ]

示例:
mysql> alter table stu_info add Stel_num varchar(20) not null after SAge;

修改表的字段屬性
CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]
MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]

示例:
mysql> alter table stu_info change column Stel_num SMobile char(11) not null after Gender;
mysql> alter table stu_info modify SAge tinyint unsigned after Gender;

刪除表的字段:
DROP [COLUMN] col_name


刪除表:

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




DDL中的視圖:

創建視圖、刪除視圖

創建視圖:
CREATE VIEW view_name [(column_list)] AS SELECT clause;

刪除視圖:
DROP VIEW [IF EXISTS] view_name [, view_name] ... [RESTRICT | CASCADE]

DDL中的索引

索引類型、創建索引、查看索引、刪除索引、


索引的類型:
聚集索引、非聚集索引:
聚集索引:索引和數據存放在一起,找到索引即找到數據;
非聚集索引:索引和數據不存放在一起,索引通過索引指針指向數據所在位置;

稠密索引、稀疏索引:是否索引了每一條數據記錄;
稠密索引:每條數據記錄都有一條索引與之對應;
稀疏索引:並不是每條數據記錄都有一條索引與之對應,而是一條索引對應某個或某些數據塊;

主鍵索引、輔助索引:
BTree:Balance Tree,B- Tree,BTree,B+Tree
左前綴索引:

註意:在使用BTree索引進行檢索時,給出的PATTERN的最左側字符不要出現通配符,否則,無法使用索引進行檢索;只能全文遍歷;

Hash索引:

R Tree:Spacial,空間索引;
FULLTEXT:全文索引;

覆蓋索引:索引中的內容就是要檢索的內容,通過檢索索引內容即可立即找到數據,並直接返回檢索結果;


創建索引:
1.在創建表時,通過指定主鍵或唯一鍵,可以自動創建索引;
2.如果在創建表時,沒有指定主鍵或唯一鍵,則可以在表成功創建之後添加索引;

CREATE [ONLINE|OFFLINE] [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [index_type] ON tbl_name (index_col_name,...) [index_option] ...

示例:
MariaDB [hellodb]> create index name_index on students(Name);

查看索引:
SHOW {INDEX | INDEXES | KEYS} {FROM | IN} tbl_name [{FROM | IN} db_name] [WHERE expr]


刪除索引:
DROP [ONLINE|OFFLINE] INDEX index_name ON tbl_name







DML中的INSERT/REPLACE、

DML中的DELETE

DML中的UPDATE

DML中的SELECE




MariaDB/Mysql的用法