1麸恍、centos7中二進制安裝mariadb
1碧查、創(chuàng)建用戶和數(shù)據(jù)庫存放的目錄
useradd -r -m -d /app/data -s /sbin/nologin mysql
2窥摄、解壓文件到相關(guān)目錄下
tar xvf mariadb-10.2.8-linux-x86_64.tar.gz -C /usr/local
ln -s mariadb-10.2.8-linux-x86_64/ mysql ---也可以不創(chuàng)建軟鏈接文件夭咬,但要把mariadb-10.2.8-linux-x86_64/這個目錄的名字改為mysql恭取,這是二進制安裝的時候必須要求的盹牧,目錄名字必須為mysql
3钞瀑、創(chuàng)建配置文件
cp /usr/local/mysql/support-files/my-huge.cnf /etc/mysql/my.cnf
vim /etc/mysql/my.cnf 在這個配置文件中增加三行
datadir = /app/data ---指定存放數(shù)據(jù)庫的目錄
innodb_file_per_table = on ---表示每個數(shù)據(jù)庫中的每個表都有一個單獨的文件保存沈撞,便于管理
skip_name_resolve = on ---禁止解析主機名
注意等號前后要有空格
4、創(chuàng)建數(shù)據(jù)庫文件
yum install libaio-0.3.109-13.el7.x86_64
安裝這個包會生成/usr/lib64/libaio.so.1這個庫文件雕什,沒有這個庫文件無法執(zhí)行下面的腳本
cd /usr/local/mysql ---注意一定要進入到這個目錄下去執(zhí)行下面的腳本
./scripts/mysql_install_db --datadir=/app/data --user=mysql
5缠俺、創(chuàng)建日志文件
mkdir /var/log/mariadb
touch /var/log/mariadb/mariadb.log
chown mysql /var/log/mariadb/mariadb.log
如果不創(chuàng)建這個日志文件服務(wù)起不來,會報錯
6贷岸、準備服務(wù)腳本并啟動
cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig --list mysqld
service mysqld start
7壹士、修改PATH變量路徑開啟客戶端工具進行修改密碼等
vim /etc/profile.d/env.sh
export PATH=/usr/local/mysql/bin:$PATH
myslq ---不把變量寫到PATH里啟動的時候要進入到這個目錄下或者寫全路徑才能啟動客戶端工具
2、mysql客戶端工具
命令行交互式客戶端程序:mysql
mysql選項:
-uUSERNAME: 用戶名偿警;默認為root
-hHOST: 服務(wù)器主機; 默認為localhost
-pPASSWORD:用戶的密碼;建議使用-p,默認為空密碼
mysql用戶賬號由兩部分組成:
'USERNAME'@'HOST'
HOST用于限制此用戶可通過哪些遠程主機連接mysql服務(wù)
支持使用通配符:
% 匹配任意長度的任意字符
172.16.0.0/16 或172.16.%.%
_ 匹配任意單個字符
修改口令后登錄系統(tǒng):mysql –uroot –p躏救,這樣登錄的時候就會讓輸入密碼,也可以mysql –uroot –pmagedu直接在p后面寫上口令户敬,但這樣不安全落剪,查歷史都能看到密碼。
3尿庐、SQL語句分類
SQL語句:
DDL: Data Defination Language ---數(shù)據(jù)定義語言
CREATE, DROP, ALTER ---用于創(chuàng)建數(shù)據(jù)庫忠怖,創(chuàng)建表
DML: Data Manipulation Language ---數(shù)據(jù)操作語言
INSERT, DELETE, UPDATE ---可以在表中添加、刪除抄瑟、更新數(shù)據(jù)
DCL:Data Control Language ---數(shù)據(jù)控制語言
GRANT, REVOKE ---用于授權(quán)和取消授權(quán)
DQL:Data Query Language ---數(shù)據(jù)查詢語言
SELECT ---用于查詢表中的數(shù)據(jù)
4凡泣、SQL語言規(guī)范
在數(shù)據(jù)庫系統(tǒng)中,SQL語句不區(qū)分大小寫(建議用大寫)
但字符串常量區(qū)分大小寫
SQL語句可單行或多行書寫皮假,以“;”結(jié)尾
關(guān)鍵詞不能跨多行或簡寫
用空格和縮進來提高語句的可讀性
子句通常位于獨立行澎怒,便于編輯,提高可讀性
注釋:
SQL標準:
/*注釋內(nèi)容
注釋內(nèi)容
注釋內(nèi)容*/ ---多行注釋
-- 注釋內(nèi)容 ----單行注釋侠畔,注意有空格
MySQL注釋:
#
5毛萌、數(shù)據(jù)類型
1、整型
tinyint(m)1個字節(jié)范圍(-128~127)
smallint(m)2個字節(jié)范圍(-32768~32767)
mediumint(m)3個字節(jié)范圍(-8388608~8388607)
int(m)4個字節(jié)范圍(-2147483648~2147483647)
bigint(m)8個字節(jié)范圍(+-9.22*10的18次方)
取值范圍如果加了unsigned褪测,則最大值翻倍猴誊,如tinyintunsigned的取值范圍為(0~255)
int(m)里的m是表示SELECT查詢結(jié)果集中的顯示寬度潦刃,并不影響實際的取值范圍
2、浮點型(float和double)懈叹,近似值
float(m,d)單精度浮點型8位精度(4字節(jié)) m總個數(shù)乖杠,d小數(shù)位double(m,d)雙精度浮點型16位精度(8字節(jié)) m總個數(shù),d小數(shù)位
精度越高值越近似
設(shè)一個字段定義為float(6,3)澄成,如果插入一個數(shù)123.45678,實際數(shù)據(jù)庫里存的是123.457胧洒,但總個數(shù)還以實際為準,即6位
3墨状、定點數(shù)
在數(shù)據(jù)庫中存放的是精確值,存為十進制
decimal(m,d) 參數(shù)m<65 是總個數(shù)卫漫,d<30且d<m 是小數(shù)位
MySQL5.0和更高版本將數(shù)字打包保存到一個二進制字符串中(每4個字節(jié)存9個數(shù)字)。例如歉胶,decimal(18,9)小數(shù)點兩邊將各存儲9個數(shù)字汛兜,一共使用9個字節(jié):小數(shù)點前的數(shù)字用4個字節(jié),小數(shù)點后的數(shù)字用4個字節(jié)通今,小數(shù)點本身占1個字節(jié)
浮點類型在存儲同樣范圍的值時粥谬,通常比decimal使用更少的空間。float使用4個字節(jié)存儲辫塌。double占用8個字節(jié)
因為需要額外的空間和計算開銷漏策,所以應(yīng)該盡量只在對小數(shù)進行精確計算時才使用decimal——例如存儲財務(wù)數(shù)據(jù)。但在數(shù)據(jù)量比較大的時候臼氨,可以考慮使用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字節(jié)只酥,
VARBINARY(M) 可變長度,可存二進制或字符呀狼,允許長度為0-M字節(jié)
內(nèi)建類型:ENUM枚舉, SET集合
char和varchar的區(qū)別
1.char(n) 若存入字符數(shù)小于n裂允,則以空格補于其后,查詢之時再將空格去掉哥艇。所以char類型存儲的字符串末尾不能有空格绝编,varchar不限于此。
2.char(n) 固定長度,char(4)不管是存入幾個字符十饥,都將占用4個字節(jié)怎棱,varchar是存入的實際字符數(shù)+1個字節(jié),所以varchar(4),存入3個字符將占用4個字節(jié)绷跑。
3.char類型的字符串檢索速度要比varchar類型的快,但varchar節(jié)省空間
varchar和text的區(qū)別
1.varchar可指定n凡资,text不能指定砸捏,內(nèi)部存儲varchar是存入的實際字符數(shù)+1個字節(jié)(n< 255),text是實際字符數(shù)+2個字節(jié)隙赁。
2.text類型不能有默認值
3.varchar可直接創(chuàng)建索引垦藏,text創(chuàng)建索引要指定前多少個字符。varchar查詢速度快于text
5.日期時間類型
date 日期 '2008-12-2'
time 時間 '12:25:36'
datetime 日期時間 '2008-12-2 22:06:44'
timestamp 自動存儲記錄修改時間
YEAR(2), YEAR(4):年份
若定義一個字段為timestamp伞访,這個字段里的時間數(shù)據(jù)會隨其他字段修改的時候自動刷新掂骏,這個數(shù)據(jù)類型的字段可以存放這條記錄最后被修改的時間
6、修飾符
所有類型:
NULL數(shù)據(jù)列可包含NULL值
NOT NULL數(shù)據(jù)列不允許包含NULL值
DEFAULT默認值
PRIMARY KEY主鍵
UNIQUE KEY 唯一鍵
CHARACTER SET name指定一個字符集
數(shù)值型
AUTO_INCREMENT自動遞增厚掷,適用于整數(shù)類型
UNSIGNED無符號
7弟灼、數(shù)據(jù)庫和表操作
create database zhangdb; ---創(chuàng)建數(shù)據(jù)庫
drop database zhangdb; ---刪除數(shù)據(jù)庫
show databases; ---查看所有數(shù)據(jù)庫
create table student (id tinyint unsigned primary key,name varchar(20) not null,age tinyint unsigned,sex char(1) default "m"); ---創(chuàng)建表
create table student2 (id tinyint unsigned not null,name varchar(20) not null,age tinyint unsigned,sex char(1) default "m",primary key(id,name)); ---創(chuàng)建表并指定主鍵,這個主鍵有兩列組成冒黑,稱為復(fù)合主鍵
show tables; --查看這個數(shù)據(jù)庫里有什么表
desc student; ---查看表里都有哪些列
drop table student; ---刪除表
alter table student add phone char(11) after name; ---在表中增加一個字段 田绑,用first在某一列前插入
alter table student drop beizhu; ---刪除表中某一列
show table status like 'student'\G; --查看表的狀態(tài)
create index ageindex on student(age); ---創(chuàng)建索引
show indexes from student; ---查看索引
show indexes from student \G; ---也可以這樣查看,會把列分成很多行顯示抡爹,而不是一行掩驱,如果列比較多,屏幕顯示不下冬竟,可以用這種方法
mysql> show indexes from student\G;
*************************** 1. row ***************************
Table: student
Non_unique: 0
Key_name: PRIMARY ---索引名欧穴,某一列設(shè)置為主鍵后會自動添加一個索引,并且索引名和主鍵名相同泵殴。唯一鍵也是一樣
Seq_in_index: 1
Column_name: id ---列名
Collation: A
Cardinality: 4
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
1 row in set (0.00 sec)
ERROR:
No query specified
drop index ageindex on student; ----刪除索引
修改表的一些示例
ALTER TABLE students RENAME s1; ---修改表名
ALTER TABLE s1 MODIFY phone int; ---修改表的數(shù)據(jù)類型
ALTER TABLE s1 CHANGE COLUMN phone mobile char(11); 修改字段名phone為 mobile
ALTER TABLE s1 DROP COLUMN mobile; ---刪除某一列涮帘,column可以不寫
ALTER TABLE student ADD UNIQUE KEY(name); ---添加唯一鍵
ALTER TABLE student ADD INDEX(age); ---添加索引
Help ALTER TABLE 查看幫助
總結(jié):數(shù)據(jù)庫和表的操作,用的是數(shù)據(jù)的定義語言create袋狞、drop焚辅、alter,添加或者創(chuàng)建主鍵和唯一鍵時會自動添加索引苟鸯。
8同蜻、對表里的數(shù)據(jù)的操作
insert into student (id,name,age,sex,phone)values(1,'zhang',31,'m',136); ---給表中添加數(shù)據(jù),注意列的值如果為字母要用單引號引起來早处,否則識別不了湾蔓,數(shù)字可以不引
insert into student (id,name,age)values(2,'li',23); ---可以挑選著進行添加數(shù)據(jù),不添加數(shù)據(jù)的列在可以為空值的前提下
select * from student; ---查看表中的所有列
insert into student values(3,'wang',012,30,'m'),(4,'zhao',010,32,'m'); ---可以賦值多行砌梆,中間用逗號隔開
create table emp select * from student; ---相當于復(fù)制整個表默责,復(fù)制后兩張表的結(jié)構(gòu)和數(shù)據(jù)都相同
delete from emp; ---清空表中的數(shù)據(jù)贬循,記錄日志
truncate table emp; ---清空表中的數(shù)據(jù),但不記錄日志桃序,速度快
insert into emp select * from student; ---復(fù)制表中的數(shù)據(jù)杖虾,要求兩張表的結(jié)構(gòu)要相同
update emp set age=50 where id=3; ---修改表中的數(shù)據(jù)
update emp set age=19,sex='s' where id=4;
delete from emp where id=4; ---刪除中的數(shù)據(jù)
總結(jié):用的是數(shù)據(jù)的操作語言,insert媒熊、delete奇适、update。
9芦鳍、查看表
DQL:SELECT數(shù)據(jù)的查詢語言
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
WHERE clause:
操作符:
>, <, >=, <=, ==, !=
BETWEEN ... AND ...
LIKE:
%:任意長度的任意字符
_:任意單個字符柠衅;
RLIKE:正則表達式模式匹配
IS NULL 皮仁,IS NOT NULL
IN (val1,val2,…)
條件邏輯操作:
and,or菲宴,not
示例
select id as 員工編號,name as 姓名 from student; ---以別名的形式顯示這兩列
select * from student where age between 18 and 20;
select * from student where age>=18 and age<=20;
顯示年齡在18-20歲之間的
select * from student where age between 18 and 30 order by age; ---顯示18-30歲之間并且按年齡排序
select * from student where age between 18 and 30 order by age desc; ---按年齡倒序排序
select * from student where age between 18 and 30 order by age desc limit 1,2; ---年齡倒序排序跳過1個顯示2個
select * from student where name like "l%"; ---表示以l打頭的贷祈,通配符寫法
select * from student where name rlike "^l.*"; ---正則表達式寫法
setect * from student where name like "l_" =select * from student where name rlike "^l.$"; --表示以l打頭后面跟一個字符
select * from student where phone is null; ---顯示電話號碼為空的行
select * from student where name in ("zhang","wang"); ---顯示名字那一列為zhang和wang的行
select s.id,e.name from student as s,emp as e where s.id=e.id and s.name rlike '.*[no].*'; ---顯示兩張表的內(nèi)容
10、用戶賬號管理
用戶賬號:'user'@'host'
user: 用戶名
host: 允許用戶通過哪些主機遠程連接mysqld服務(wù)
IP喝峦、網(wǎng)絡(luò)地址付燥、主機名、通配符(%和_)
創(chuàng)建用戶:
CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];
查看當前用戶:
SELECT user();
查看用戶:
SELECT User,Host,Password FROM user
刪除用戶:DROP USER 'username'@'host';
示例:刪除默認的空用戶
DROP USER ''@'localhost';
更改口令:
SET PASSWORD FOR 'user'@'host' = PASSWORD('password');
注意:上面修改表的命令不會馬上生效愈犹,需執(zhí)行FLUSH PRIVILEGES生效
示例
create user 'tom'@'172.18.%.%' identified by 'magedu';
創(chuàng)建一個用戶賬號并設(shè)置密碼键科,允許遠程的172.18網(wǎng)段的主機,以用戶名tom連接到我的mysql服務(wù)器漩怎,注意mysql里的用戶名和系統(tǒng)里的用戶名沒有關(guān)系勋颖,也就是說tom這個用戶名在系統(tǒng)里可以沒有這個名字,這個是數(shù)據(jù)庫用的用戶名勋锤。
mysql -utom -pmagedu -h172.18.21.107
drop user 'nihao'@'172.18.21.106'; ---刪除用戶名
set password for 'tom'@'172.18.%.%'=password('centos'); ---修改密碼
11饭玲、授權(quán)
grant select,insert on zhangdb.* to 'tom'@'172.18.%.%';
授權(quán)tom用戶只能查看和修改表
grant all on zhangdb.* to 'tom'@172.18.%.%;
授權(quán)tom用戶所有的權(quán)限
*.*: 所有庫的所表
db_name.*: 指定庫的所有表
db_name.tb_name: 指定庫的指定表
db_name.routine_name:指定庫的存儲過程和函數(shù)
revoke insert on zhangdb.* from 'tom'@'172.18.%.%'; --收回授權(quán)
grant all on zhangdb.* to 'wang'@'172.18.21.106' identified by "magedu"; ----授權(quán)的同時創(chuàng)建賬號
show grants for wang@'172.18.21.106'; ---查看用戶獲得的授權(quán)
grant update(name) on zhangdb.students to test@'172.18.%.%' identified by 'centos'; ---只授權(quán)修改某個字段
Help SHOW GRANTS ---查看幫助。怎么查用戶的獲得的授權(quán)
對于不能夠或不能及時重讀授權(quán)表的命令叁执,可手動讓MariaDB的服務(wù)進程重讀授權(quán)表:mysql> FLUSH PRIVILEGES