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.官方提供的通用二進制程序包;直接解壓縮程序包即可使用;
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.cnf
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基礎知識