1. 程式人生 > >MySQL/MariaDB基礎知識

MySQL/MariaDB基礎知識

lac condition 數據類型 cati 更改密碼 交互式登錄 ted == 程序包

MySQL/MariaDB基礎知識


數據庫:即數據存儲的倉庫或集合

數據庫的組成:

1. 數據庫

2. 數據表

3. 記錄

4. 字段

5. 索引

6. 查詢

7. 視圖

8. 過濾器


1. 數據庫 : 由一個或多個表組成以文件的形式存儲在磁盤上的物理文件;

2. 數據表 : 一組按行排列的相關數據,由一組數據記錄組成;

3. 記錄 : 表中的一行稱為一個記錄(記錄即行),由若幹個字段組成;

4. 字段 : 表中的一列稱為一個字段,也叫域,每個字段都有相應的描述信息,如數據類型,大小,寬度等;

5. 索引 : 將一個或多個字段抽取出來的一種特殊的數據結構,為了提高數據檢索的效率;

6. 查詢 : 從一個或多個表中獲取需要的記錄的SQL語言;

7. 視圖 : 即虛表,包含已知表中的部分列;

8. 過濾器 : 根據給出的條件輸出指定的數據;

如何安裝MySQL/MariaDB?

1.基於包管理器格式的程序包直接安裝,如:rpm包,deb包等;
CentOS 6中:

]# yum install mysqld-server

CentOS 7中:

]# yum install mariadb-server

2.官方提供的通用二進制程序包;直接解壓縮程序包即可使用;

3.源代碼包編譯安裝;



MySQL/MariaDB的程序環境:

1. 服務器端程序:mysql-server, mariadb-server
1) 服務啟動腳本:
/etc/rc.d/init.d/mysqld
2)常用的二進制文件:
/usr/bin/mysql_install_db
/usr/bin/mysql_secure_installation
/usr/bin/mysqld_multi
/usr/bin/mysqld_safe
3) 數據目錄:
/var/lib/mysql
4)主配置文件:
/etc/my.c
nf

2. 客戶端程序:mysql, mariadb
常用的二進制文件:
/usr/bin/mysql
/usr/bin/mysqladmin
/usr/bin/mysqlbinlog
/usr/bin/mysqldump


如何啟動數據庫服務

CentOS 6中:

]# service mysqld[-service] start "[]"可省略;

CentOS 7中:
]# systemctl start mariadb[-service] "[]"可省略;


mysql相關基本命令:

1.客戶端命令

1)mysql命令 - 基本的交互式命令行客戶端工具;
格式:mysql [options] [db_name]
常用選項:
--database=db_name, -D db_name
指定登錄數據庫後使用哪個數據庫;不寫則為null;

例:]# mysql -D ytc

......

MariaDB [ytc]> //登錄後直接進入了名為ytc的數據庫;

--execute=statement, -e statement
連接至mysql服務器並將後面的SQL語句交給服務器運行之後返回執行結果並直接退出交互式登錄模式,返回bash命令提示符;
--host=host_name, -h host_name
用於指定此次mysql程序所連接的mysql服務器的主機名稱或主機IP地址;默認是localhost(127.0.0.1);
--user=user_name, -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服務器;

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

例:

]# mysql -utest -h172.16.75.1 -p 123456 //表示以test用戶的身份登錄數據庫服務器172.16.75.1,密碼為123456


註意:默認情況下,所有用戶均為空密碼,並且還有匿名用戶存在,因此,為了增強安全性,可以使用mysql_secure_installation命令完成賬戶安全初始化;

mysql服務器僅能讓root用戶在本地登錄,並且移除匿名用戶和test數據庫;


客戶端命令: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語句都必須以指定的結束標記結尾,默認是";"


2) mysqladmin命令:
mysqladmin - client for administering a MySQL server
常用選項:
-u, -h, -p, -P, -D, -S
各選項功能同mysql命令的選項功能


常用子命令:
create db_name:創建數據庫;
drop db_name:刪除數據庫;
flush-hosts:清除服務器緩存中所有信息;
flush-logs:清除日誌,讓日誌滾動;
flush-privileges:刷新授權表;
flush-tables:為表加鎖;

password new-password:為指定的用戶設置新密碼;
start-slave:在msyql的集群服務中的從節點啟動用於實施復制功能的線程;
stop-slave:在msyql的集群服務中的從節點關閉用於實施復制功能的線程;
shutdown:停止服務;


例:

~]# mysqladmin -uytc password 123456 給名為ytc的用戶設置密碼
~]# mysqladmin -uytc -p password '111111'
Enter password: [輸入原來的密碼] 給名為ytc的用戶更改密碼
~]# mysqladmin create students 創建名為students的數據庫

~]# mysqladmin drop students 刪除名為students的數據庫

。。。。。。


2.服務器端命令

1)mysqld_safe命令:

用於啟動mysql服務,定義mysql的工作特性;

工作特性:

]# mysql

mysql> show global variables; 查看特性

格式:/usr/bin/mysqld_safe [OPTIONS]
註意:所有給出的 OPTION(--option)都是一次性生效;如果期望配置參數永久有效,需要將此類配置參數及參數值直接定義在配置文件中(/etc/my.cnf)即可;


2) mysqld_multi命令

mysqld_multi設計用於管理多個sqmyld進程,這些進程監聽不同Unix套接字上的連接文件和TCP / IP端口。它可以啟動或停止服務器,或報告其當前狀態。



3)DDL:數據定義語言

1. create:
格式:

創建數據庫:

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

CHARACTER:字符集

mysql> show character set; 查看字符集

Collate: 核對

mysql> show collation; 查看核對排序類型

例:

[root@localhost ~]# mysql -p
Enter password:

。。。。。。。

mysql> create database students character set = 'utf8';

Query OK, 1 row affected (0.04 sec) 創建名為students的數據庫,默認字符集為‘utf8’;


創建數據表:

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


col_name: 字段名

data_type: 數據類型

[NOT NULL | NULL] 該字段的值是否為空

[AUTO_INCREMENT] 整型數據的遞增或遞減

[UNIQUE [KEY] | [PRIMARY] KEY] 定義唯一鍵和主鍵

COMMENT 'string' 評論‘字符串’


例:

MariaDB [(none)]> use ytc;
MariaDB [ytc]> create table stu_info (SID tinyint unsigned not null auto_increment primary key,SName varchar(50) not null,SAge tinyint unsigned,Gender enum('F','M'));
Query OK, 0 rows affected (0.00 sec) 創建stu_info表


MariaDB [ytc]> select * from stu_info; 查看表內容


MariaDB [ytc]> desc stu_info; 查看表結構


2. drop:刪除數據庫:
格式:

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

mysql> drop database students;
Query OK, 0 rows affected (0.02 sec)
刪除名為students的數據庫

3.alter:

格式:

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

例:

mysql> alter database students character set = 'latin7';
Query OK, 1 row affected (0.01 sec) 修改students數據庫的字符集為‘latin7

mysql> show character set; 查看字符集


4. show:

格式:

SHOW {DATABASES | SCHEMAS}[LIKE 'pattern' | WHERE expr]

mysql> show databases like 'ytc';
+----------------+
| Database (ytc) |
+----------------+
| ytc |
+----------------+
查看名字ytc的數據庫


例:

mysql> show databases like 'y%';
+---------------+
| Database (y%) |
+---------------+
| ytc |
| ytc123 |
+---------------+
2 rows in set (0.00 sec)
查看名字中以“y”開頭的數據庫



4)DML:數據管理語言

1.select 查看表內容

格式:

SELECT select_expr [, select_expr ...] [FROM table_references] [WHERE where_condition]


1)顯示整張表:
SELECT * FROM tbl_name;

例:

MariaDB [hellodb]> select * from students; 顯示students整張表


2)投影:顯示指定的或符合要求的列;
SELECT col_name AS con_alias[,col_name AS con_alias,...] FROM tbl_name;


例:

MariaDB [hellodb]> select StuID,Name from students; 顯示表中StuID,Name兩列

3)選擇:顯示符合要求或匹配條件的列並將列改用別名顯示;
SELECT col_name AS con_alias[,col_name AS con_alias,...] FROM tbl_name WHERE condition;


例:

MariaDB [hellodb]> select StuID as a,Name as b from students; 將StuID,Name分別以別名a,b顯示


WHERE子句用於指明選擇時依據的條件:
col_name 操作符 value

操作符:
1) 比較操作符:>, <, >=, <=, ==, !=
2) 邏輯操作符:and, or, not
3) 特殊操作符:
BETWEEN...AND...
LIKE "PATTERN",其中"PATTERN"中可以適當添加通配符,如:%或_;
RLIKE "PATTERN",使用正則表達式對字符串進行模式匹配;在使用RLIKE進行數據檢索時,索引不生效,檢索效率低,速度慢,不推薦使用;
IS NULL或IS NOT NULL:判斷指定字段是否為空;

例:
MariaDB [hellodb]> select * from students where Age>20;

//查看年齡大於20的學生信息

MariaDB [hellodb]> select * from students where SAge >= 20 and SAge <=30;

MariaDB [hellodb]> select * from students where Age between 20 and 30;

//查看年齡大於20小於30的學生信息

MariaDB [hellodb]> select * from students where Gender = "M";

//查看性別為男的學生信息

MariaDB [hellodb]> select * from students where Name like 'H%';

//查看名字以H開頭的學生信息

MariaDB [hellodb]> select * from students where Name like '%g';

//查看名字以g結尾的學生信息

MariaDB [hellodb]> select * from students where Name rlike '^S';

//查看名字以S開頭的學生信息

MariaDB [hellodb]> select * from students where Name rlike 'n$';
//查看名字以n結尾的學生信息

MariaDB [hellodb]> select * from students where ClassID is not null;
//查看ClassID不為空的學生信息


4)排序:
SELECT col_name AS con_alias[,col_name AS con_alias,...] FROM tbl_name WHERE condition [ORDER BY {col_name | expr | position} [ASC | DESC], ...]

例:
MariaDB [hellodb]> select * from students order by Age ;

MariaDB [hellodb]> select * from students order by Age asc ;

MariaDB [hellodb]> select * from students order by Age ASC;

//以年齡大小升序排序


例:

MariaDB [hellodb]> select * from students order by Age desc ;

MariaDB [hellodb]> select * from students order by Age DESC;

//以年齡從大小降序排序


2.修改表數據內容:
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...

[WHERE where_condition] [ORDER BY ...] [LIMIT row_count]

例:
MariaDB [hellodb]> update students set Name='Obama' where StuID=5;
MariaDB [hellodb]> update students set Age=SAge+1;
MariaDB [hellodb]> update students set Age=Age+100 where StuID in (1,3,5,7);


註意:修改數據時,一定要考慮清楚是否要添加where條件子句;如果不寫where子句,默認修改全表;


3. insert/replace插入內容

INSERT [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),...
Or:
INSERT [INTO] tbl_name SET col_name={expr | DEFAULT}, ...

例:
INSERT [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),...
Or:
INSERT [INTO] tbl_name SET col_name={expr | DEFAULT}, ...

例:
MariaDB [hellodb]> insert into students values (1,'tom','M',25),(2,'jerry','F',28);
MariaDB [hellodb]> insert into students (SName) values ('Alice'),('James');
MariaDB [hellodb]> insert into students set SName='zhangsan',Gender='M',SAge=20;

註意:
1.如果向表中插入的value是字符串,則value必須使用引號引用;
2.如果向表中插入的value是數字,則value一定不能用引號引用;



4. delete刪除表內容

DELETE FROM tbl_name [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]


例:

MariaDB [hellodb]> delete from students where StuID > 3;



5) DCL:數據控制語言,主要用於管理數據訪問的授權;
1.grant

格式:

GRANT priv_type [(column_list)][, priv_type [(column_list)]] ... ON [object_type] priv_level TO user_specification [, user_specification] ...


MariaDB [hellodb]> grant select,insert,update on *.* to 'myuser'@'172.16.%.%' identified by '123456';


2.revoke:授權回收:
格式:

REVOKE priv_type [(column_list)][, priv_type [(column_list)]] ... ON [object_type] priv_level FROM user [, user] ...


例:

MariaDB [hellodb]> revoke insert on *.* from 'myuser'@'172.16.%.%';










MySQL/MariaDB基礎知識