9月23日 二進(jìn)制安裝mariadb和數(shù)據(jù)庫(kù)的增刪改查操作

1、centos7中二進(jìn)制安裝mariadb

1、創(chuàng)建用戶和數(shù)據(jù)庫(kù)存放的目錄
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/這個(gè)目錄的名字改為mysql,這是二進(jìn)制安裝的時(shí)候必須要求的,目錄名字必須為mysql
3、創(chuàng)建配置文件
cp /usr/local/mysql/support-files/my-huge.cnf /etc/mysql/my.cnf
vim /etc/mysql/my.cnf  在這個(gè)配置文件中增加三行
datadir = /app/data    ---指定存放數(shù)據(jù)庫(kù)的目錄
innodb_file_per_table = on  ---表示每個(gè)數(shù)據(jù)庫(kù)中的每個(gè)表都有一個(gè)單獨(dú)的文件保存,便于管理
skip_name_resolve = on   ---禁止解析主機(jī)名
注意等號(hào)前后要有空格
4、創(chuàng)建數(shù)據(jù)庫(kù)文件
yum install libaio-0.3.109-13.el7.x86_64
安裝這個(gè)包會(huì)生成/usr/lib64/libaio.so.1這個(gè)庫(kù)文件,沒(méi)有這個(gè)庫(kù)文件無(wú)法執(zhí)行下面的腳本
cd /usr/local/mysql   ---注意一定要進(jìn)入到這個(gè)目錄下去執(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)建這個(gè)日志文件服務(wù)起不來(lái),會(huì)報(bào)錯(cuò)
6、準(zhǔn)備服務(wù)腳本并啟動(dòng)
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變量路徑開(kāi)啟客戶端工具進(jìn)行修改密碼等
vim /etc/profile.d/env.sh 
export PATH=/usr/local/mysql/bin:$PATH
myslq      ---不把變量寫(xiě)到PATH里啟動(dòng)的時(shí)候要進(jìn)入到這個(gè)目錄下或者寫(xiě)全路徑才能啟動(dòng)客戶端工具

2、mysql客戶端工具

命令行交互式客戶端程序:mysql
mysql選項(xiàng):

-uUSERNAME: 用戶名;默認(rèn)為root
-hHOST: 服務(wù)器主機(jī); 默認(rèn)為localhost
-pPASSWORD:用戶的密碼;建議使用-p,默認(rèn)為空密碼
mysql用戶賬號(hào)由兩部分組成:
'USERNAME'@'HOST'
HOST用于限制此用戶可通過(guò)哪些遠(yuǎn)程主機(jī)連接mysql服務(wù)
支持使用通配符:
% 匹配任意長(zhǎng)度的任意字符
172.16.0.0/16 或172.16.%.%
_ 匹配任意單個(gè)字符

修改口令后登錄系統(tǒng):mysql –uroot –p,這樣登錄的時(shí)候就會(huì)讓輸入密碼,也可以mysql –uroot –pmagedu直接在p后面寫(xiě)上口令,但這樣不安全,查歷史都能看到密碼。

3、SQL語(yǔ)句分類(lèi)

SQL語(yǔ)句:
DDL: Data Defination Language  ---數(shù)據(jù)定義語(yǔ)言
CREATE, DROP, ALTER   ---用于創(chuàng)建數(shù)據(jù)庫(kù),創(chuàng)建表
DML: Data Manipulation Language  ---數(shù)據(jù)操作語(yǔ)言
INSERT, DELETE, UPDATE   ---可以在表中添加、刪除、更新數(shù)據(jù)
DCL:Data Control Language   ---數(shù)據(jù)控制語(yǔ)言
GRANT, REVOKE     ---用于授權(quán)和取消授權(quán)
DQL:Data Query Language   ---數(shù)據(jù)查詢語(yǔ)言
SELECT   ---用于查詢表中的數(shù)據(jù)

4、SQL語(yǔ)言規(guī)范

在數(shù)據(jù)庫(kù)系統(tǒng)中,SQL語(yǔ)句不區(qū)分大小寫(xiě)(建議用大寫(xiě))
但字符串常量區(qū)分大小寫(xiě)
SQL語(yǔ)句可單行或多行書(shū)寫(xiě),以“;”結(jié)尾
關(guān)鍵詞不能跨多行或簡(jiǎn)寫(xiě)
用空格和縮進(jìn)來(lái)提高語(yǔ)句的可讀性
子句通常位于獨(dú)立行,便于編輯,提高可讀性
注釋:

SQL標(biāo)準(zhǔn):
/*注釋內(nèi)容
注釋內(nèi)容
注釋內(nèi)容*/       ---多行注釋
-- 注釋內(nèi)容         ----單行注釋,注意有空格
MySQL注釋:
#

5、數(shù)據(jù)類(lèi)型

1、整型
tinyint(m)1個(gè)字節(jié)范圍(-128~127)
smallint(m)2個(gè)字節(jié)范圍(-32768~32767)
mediumint(m)3個(gè)字節(jié)范圍(-8388608~8388607)
int(m)4個(gè)字節(jié)范圍(-2147483648~2147483647)
bigint(m)8個(gè)字節(jié)范圍(+-9.22*10的18次方)
取值范圍如果加了unsigned,則最大值翻倍,如tinyintunsigned的取值范圍為(0~255)
int(m)里的m是表示SELECT查詢結(jié)果集中的顯示寬度,并不影響實(shí)際的取值范圍
2、浮點(diǎn)型(float和double),近似值
float(m,d)單精度浮點(diǎn)型8位精度(4字節(jié)) m總個(gè)數(shù),d小數(shù)位double(m,d)雙精度浮點(diǎn)型16位精度(8字節(jié)) m總個(gè)數(shù),d小數(shù)位
精度越高值越近似
設(shè)一個(gè)字段定義為float(6,3),如果插入一個(gè)數(shù)123.45678,實(shí)際數(shù)據(jù)庫(kù)里存的是123.457,但總個(gè)數(shù)還以實(shí)際為準(zhǔn),即6位
3、定點(diǎn)數(shù)
在數(shù)據(jù)庫(kù)中存放的是精確值,存為十進(jìn)制
decimal(m,d) 參數(shù)m<65 是總個(gè)數(shù),d<30且d<m 是小數(shù)位
MySQL5.0和更高版本將數(shù)字打包保存到一個(gè)二進(jìn)制字符串中(每4個(gè)字節(jié)存9個(gè)數(shù)字)。例如,decimal(18,9)小數(shù)點(diǎn)兩邊將各存儲(chǔ)9個(gè)數(shù)字,一共使用9個(gè)字節(jié):小數(shù)點(diǎn)前的數(shù)字用4個(gè)字節(jié),小數(shù)點(diǎn)后的數(shù)字用4個(gè)字節(jié),小數(shù)點(diǎn)本身占1個(gè)字節(jié)
浮點(diǎn)類(lèi)型在存儲(chǔ)同樣范圍的值時(shí),通常比decimal使用更少的空間。float使用4個(gè)字節(jié)存儲(chǔ)。double占用8個(gè)字節(jié)
因?yàn)樾枰~外的空間和計(jì)算開(kāi)銷(xiāo),所以應(yīng)該盡量只在對(duì)小數(shù)進(jìn)行精確計(jì)算時(shí)才使用decimal——例如存儲(chǔ)財(cái)務(wù)數(shù)據(jù)。但在數(shù)據(jù)量比較大的時(shí)候,可以考慮使用bigint代替decimal
4、字符串(char,varchar,_text)
char(n)固定長(zhǎng)度,最多255個(gè)字符
varchar(n)可變長(zhǎng)度,最多65535個(gè)字符
tinytext可變長(zhǎng)度,最多255個(gè)字符
text可變長(zhǎng)度,最多65535個(gè)字符
mediumtext 可變長(zhǎng)度,最多2的24次方-1個(gè)字符
longtext可變長(zhǎng)度,最多2的32次方-1個(gè)字符
BINARY(M) 固定長(zhǎng)度,可存二進(jìn)制或字符,允許長(zhǎng)度為0-M字節(jié),
VARBINARY(M) 可變長(zhǎng)度,可存二進(jìn)制或字符,允許長(zhǎng)度為0-M字節(jié)
內(nèi)建類(lèi)型:ENUM枚舉, SET集合
char和varchar的區(qū)別
1.char(n) 若存入字符數(shù)小于n,則以空格補(bǔ)于其后,查詢之時(shí)再將空格去掉。所以char類(lèi)型存儲(chǔ)的字符串末尾不能有空格,varchar不限于此。
2.char(n) 固定長(zhǎng)度,char(4)不管是存入幾個(gè)字符,都將占用4個(gè)字節(jié),varchar是存入的實(shí)際字符數(shù)+1個(gè)字節(jié),所以varchar(4),存入3個(gè)字符將占用4個(gè)字節(jié)。
3.char類(lèi)型的字符串檢索速度要比varchar類(lèi)型的快,但varchar節(jié)省空間
varchar和text的區(qū)別
1.varchar可指定n,text不能指定,內(nèi)部存儲(chǔ)varchar是存入的實(shí)際字符數(shù)+1個(gè)字節(jié)(n< 255),text是實(shí)際字符數(shù)+2個(gè)字節(jié)。
2.text類(lèi)型不能有默認(rèn)值
3.varchar可直接創(chuàng)建索引,text創(chuàng)建索引要指定前多少個(gè)字符。varchar查詢速度快于text
5.日期時(shí)間類(lèi)型
date 日期 '2008-12-2'
time 時(shí)間 '12:25:36'
datetime 日期時(shí)間 '2008-12-2 22:06:44'
timestamp 自動(dòng)存儲(chǔ)記錄修改時(shí)間
YEAR(2), YEAR(4):年份
若定義一個(gè)字段為timestamp,這個(gè)字段里的時(shí)間數(shù)據(jù)會(huì)隨其他字段修改的時(shí)候自動(dòng)刷新,這個(gè)數(shù)據(jù)類(lèi)型的字段可以存放這條記錄最后被修改的時(shí)間

6、修飾符

所有類(lèi)型:
NULL數(shù)據(jù)列可包含NULL值
NOT NULL數(shù)據(jù)列不允許包含NULL值
DEFAULT默認(rèn)值
PRIMARY KEY主鍵
UNIQUE KEY 唯一鍵
CHARACTER SET name指定一個(gè)字符集
數(shù)值型
AUTO_INCREMENT自動(dòng)遞增,適用于整數(shù)類(lèi)型
UNSIGNED無(wú)符號(hào)

7、數(shù)據(jù)庫(kù)和表操作

create database zhangdb;   ---創(chuàng)建數(shù)據(jù)庫(kù)
drop database zhangdb;    ---刪除數(shù)據(jù)庫(kù)
show databases;    ---查看所有數(shù)據(jù)庫(kù)
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)建表并指定主鍵,這個(gè)主鍵有兩列組成,稱為復(fù)合主鍵
show tables;   --查看這個(gè)數(shù)據(jù)庫(kù)里有什么表
desc student;     ---查看表里都有哪些列
drop table student;     ---刪除表
alter table student add phone char(11) after name;  ---在表中增加一個(gè)字段 ,用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;  ---也可以這樣查看,會(huì)把列分成很多行顯示,而不是一行,如果列比較多,屏幕顯示不下,可以用這種方法
mysql> show indexes from student\G;
*************************** 1. row ***************************
       Table: student
  Non_unique: 0
    Key_name: PRIMARY   ---索引名,某一列設(shè)置為主鍵后會(huì)自動(dòng)添加一個(gè)索引,并且索引名和主鍵名相同。唯一鍵也是一樣
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ù)類(lèi)型
ALTER TABLE s1 CHANGE COLUMN phone mobile char(11);  修改字段名phone為 mobile
ALTER TABLE s1 DROP COLUMN mobile;   ---刪除某一列,column可以不寫(xiě)
ALTER TABLE student ADD UNIQUE KEY(name);  ---添加唯一鍵
ALTER TABLE student ADD INDEX(age);  ---添加索引
Help ALTER TABLE 查看幫助

總結(jié):數(shù)據(jù)庫(kù)和表的操作,用的是數(shù)據(jù)的定義語(yǔ)言create、drop、alter,添加或者創(chuàng)建主鍵和唯一鍵時(shí)會(huì)自動(dòng)添加索引。

8、對(duì)表里的數(shù)據(jù)的操作

insert into student (id,name,age,sex,phone)values(1,'zhang',31,'m',136);  ---給表中添加數(shù)據(jù),注意列的值如果為字母要用單引號(hào)引起來(lái),否則識(shí)別不了,數(shù)字可以不引
insert into student (id,name,age)values(2,'li',23);   ---可以挑選著進(jìn)行添加數(shù)據(jù),不添加數(shù)據(jù)的列在可以為空值的前提下
select * from student;  ---查看表中的所有列
insert into student values(3,'wang',012,30,'m'),(4,'zhao',010,32,'m');   ---可以賦值多行,中間用逗號(hào)隔開(kāi)
create table emp select * from student;   ---相當(dāng)于復(fù)制整個(gè)表,復(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ù)的操作語(yǔ)言,insert、delete、update。

9、查看表

DQL:SELECT數(shù)據(jù)的查詢語(yǔ)言
SELECT col1,col2,... FROM tbl_name[WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n];
Limit m,n跳過(guò)m個(gè),要n個(gè)
字段表示法:
*: 所有字段
as:字段別名,col1 AS alias1
WHERE clause:
操作符:
>, <, >=, <=, ==, !=
BETWEEN ... AND ...
LIKE:
%:任意長(zhǎng)度的任意字符
_:任意單個(gè)字符;
RLIKE:正則表達(dá)式模式匹配
IS NULL ,IS NOT NULL
IN (val1,val2,…)
條件邏輯操作:
and,or,not

示例

select id as 員工編號(hào),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;    ---年齡倒序排序跳過(guò)1個(gè)顯示2個(gè)
select * from student where name like "l%";    ---表示以l打頭的,通配符寫(xiě)法
select * from student where name rlike "^l.*";   ---正則表達(dá)式寫(xiě)法
setect * from student where name like "l_" =select * from student where name rlike "^l.$";   --表示以l打頭后面跟一個(gè)字符
select * from student where phone is null;    ---顯示電話號(hào)碼為空的行
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、用戶賬號(hào)管理

用戶賬號(hào):'user'@'host'
user: 用戶名
host: 允許用戶通過(guò)哪些主機(jī)遠(yuǎn)程連接mysqld服務(wù)
IP、網(wǎng)絡(luò)地址、主機(jī)名、通配符(%和_)
創(chuàng)建用戶:
CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];
查看當(dāng)前用戶:
SELECT user();
查看用戶:
SELECT User,Host,Password FROM user
刪除用戶:DROP USER 'username'@'host';
示例:刪除默認(rèn)的空用戶
DROP USER ''@'localhost';
更改口令:
SET PASSWORD FOR 'user'@'host' = PASSWORD('password');
注意:上面修改表的命令不會(huì)馬上生效,需執(zhí)行FLUSH PRIVILEGES生效
示例

create user 'tom'@'172.18.%.%' identified by 'magedu';  
創(chuàng)建一個(gè)用戶賬號(hào)并設(shè)置密碼,允許遠(yuǎn)程的172.18網(wǎng)段的主機(jī),以用戶名tom連接到我的mysql服務(wù)器,注意mysql里的用戶名和系統(tǒng)里的用戶名沒(méi)有關(guān)系,也就是說(shuō)tom這個(gè)用戶名在系統(tǒng)里可以沒(méi)有這個(gè)名字,這個(gè)是數(shù)據(jù)庫(kù)用的用戶名。
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)限
*.*: 所有庫(kù)的所表
db_name.*: 指定庫(kù)的所有表
db_name.tb_name: 指定庫(kù)的指定表
db_name.routine_name:指定庫(kù)的存儲(chǔ)過(guò)程和函數(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)的同時(shí)創(chuàng)建賬號(hào)
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)修改某個(gè)字段
Help SHOW GRANTS   ---查看幫助。怎么查用戶的獲得的授權(quán)
對(duì)于不能夠或不能及時(shí)重讀授權(quán)表的命令,可手動(dòng)讓MariaDB的服務(wù)進(jìn)程重讀授權(quán)表:mysql> FLUSH PRIVILEGES
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、什么是數(shù)據(jù)庫(kù):(數(shù)據(jù)庫(kù)軟件) 1).什么是"數(shù)據(jù)庫(kù)": 從字面上理解就是一個(gè)"存儲(chǔ)數(shù)據(jù)的倉(cāng)庫(kù)",它本身是一個(gè)軟...
    七點(diǎn)的太陽(yáng)丶夕陽(yáng)閱讀 643評(píng)論 0 2
  • 計(jì)算機(jī)誕生后,數(shù)據(jù)開(kāi)始在計(jì)算機(jī)中存儲(chǔ)并計(jì)算,并設(shè)計(jì)出了數(shù)據(jù)庫(kù)系統(tǒng),數(shù)據(jù)庫(kù)系統(tǒng)解決的問(wèn)題:持久化存儲(chǔ),優(yōu)化讀寫(xiě),保證...
    LittlePy閱讀 845評(píng)論 0 0
  • MySQL數(shù)據(jù)庫(kù)對(duì)象與應(yīng)用 2.1-MySQL數(shù)據(jù)類(lèi)型 庫(kù)建立好之后基本不動(dòng),和我們接觸最頻繁的是表. 建表就是聲...
    極客圈閱讀 2,257評(píng)論 0 8
  • 為什么宿舍里的那個(gè)奇葩做什么事都不能小聲唯一小聲的就是上廁所,因?yàn)樗?,不沖水!不沖水!不沖水!
    啦啦啦_847d閱讀 182評(píng)論 0 0
  • 你的幸福是什么!
    醉夏閱讀 74評(píng)論 0 0

友情鏈接更多精彩內(nèi)容