MySQL數據庫從入門到實戰(三)


第一部分:補充
(1)前章補充:
MySQL在啓動時:
一、啓動後臺守護進程(mysqld),並生成工做線程(io 、w、 r)
二、預分配內存結構供MySQL處理數據使用
實例是什麼?
MySQL的後臺進程+線程+預分配的內存結構。
mysql數據庫管理系統:實例+數據組成
(2)mysql啓動方式:
mysql.server---->mysqld_safe---->mysqld
經過網絡鏈接串
mysql -uroot -poldboy123 -h 10.0.0.52
經過套接字文件
mysql -uroot -poldboy123 -S /application/mysql/tmp/mysql.sock
(3)mysql關閉方式:
mysqladmin -uroot -poldboy123 shutdown
/etc/init.d/mysqld stop
(4)mysql鏈接管理mysql命令
-u 用戶名
-p 密碼
-h mysql,IP地址
-S 套接字
-P 端口
-e 非交互式訪問數據庫並執行命令
(5)錯誤日誌(很重要)
默認存放在數據目錄下的"hostname.err",結合日誌分析工具使用
常見的報錯整理:perror命令查看
http://oldboy.blog.51cto.com/2561410/1728380
(6)mysqld 啓動配置選擇順序:
一、預編譯(Cmake)
二、啓動時在命令行直接指定(這種優先級是最高的)
./mysqld_safe --log-error=/var/log/mysql.log --socket=/tmp/mysql.sock --port=3310 &
(7)/etc/my.cnf能夠影響什麼?
mysqld啓動:mysqld,mysqld_safe,
[server]模塊
影響客戶端連接 mysql,mysqladmin,mysqldump
[client]模塊
(2)配置案例
[server]
basedir=/application/mysql
datadir=/application/mysql/data
socket=/tmp/mysql.sock
log-error=/var/log/mysql.log
log_bin=/data/mysql/mysql-bin
binlog_format=row
skip_name_resolve=1
server_id=3306
[client]
socket=/tmp/mysql.sock
——————————————————————————————————
第二部分:mysql實際操做
(1)MySQL用戶管理
————————————————————————————————————
用戶的做用:
(1)登陸
(2)管理數據庫對象(庫、表等對象)
用戶的定義:
(1)用戶名(2)主機域:誰能來訪問Mysql
'10.0.0.200' ---->只容許200地址訪問我mysql
'10.0.0.%' -----》容許這個網段的全部機器都能訪問我
'10.0.0.5%' ----》 容許50-59
'%' ----> 容許全部人
建立用戶:
create user oldboy@'10.0.0.%' identified by '123'; ----建立
select user,host,password from mysql.user; ----查看用戶表
drop user oldboy@'10.0.0.%'; ----刪除用戶
————————————————————————————————————
(2)權限管理
————————————————————————————————————
1.權限的做用
用戶 對象 作什麼
oldboy@'10.0.0.%' 庫、表 增、刪、改、查
2.權限設定
grant 權限 on 對象(範圍) to 用戶 identified by '密碼';
grant all on . to oldboy@'10.0.0.%' identified by '123';
3.對象說明:
對象:在grant語句中是個範圍定義
oldboy.t1 單表級別
oldboy. 單庫級別
.* 全庫級別
4.權限說明:
思考一下若是在test.,設置了select,insert,update,delete
在oldboy.t1設置了select,那麼用戶在t1表的最終權限應該是什麼。
回收權限的時候又該怎麼作?
grant select on test.
to oldboy@'10.0.0.%' identified by '123';
grant all on test.t1 to oldboy@'10.0.0.%' identified by '123';
oldboy用戶最後對test.t1權限爲all
結論:若是,庫級別和表級別都設置了權限,那麼對錶操做時,權限是疊加。
告訴你們的是,對同一個用戶,不要多級別設置權限。
5.最後總結
grant INSERT,SELECT, UPDATE, DELETE, CREATE, DROP on oldboy. to app@'10.0.0.%' identified by '123'; ---設置權限
revoke INSERT,SELECT, UPDATE, DELETE, CREATE, DROP on oldboy.
from app@'10.0.0.%'; ----權限回收
show grants for app@'10.0.0.%';
select user,host,password from mysql.user; ---查看用戶
————————————————————————————————————
(3)mysql忘記密碼
————————————————————————————————————
1.中止數據庫
2.中止受權功能,中止遠程網絡登陸
mysqld_safe --skip-grant-table --skip-networking &
3.更改用戶表中root密碼
update mysql.user set password=PASSWORD('123') where user='root' and host='localhost';
4.重啓數據庫
/etc/init.d/mysqld restart
補充說明:
5.7密碼字段再也不是password了,被替換爲了authentication_strings
update mysql.user set authentication_strings=PASSWORD('123') where user='root' and host='localhost';
——————————————————————————————————————
help幫助-----頗有用
\c
\G
source 恢復備份,執行sql腳本
system 執行操做系統命令
use world
status
例子:mysql> help create database;
———————————————————————————————————————
(3)庫,表,列,行操做 -----DDL:數據庫中對象定義語言(庫、表)
———————————————————————————————————————
庫操做:
create schema zabbix character set utf8; ---建庫
show create database zabbix; ---看庫
drop database zabbix ---刪庫
alter database zabbix charset utf8mb4; ---修改庫屬性
show create database zabbix;
列操做:
create table stu (id int,name varchar(20),age int ,gender int); ---建立一個表
show create table stu; ----查看錶內容信息
desc stu; ---查看錶結構
drop table stu; ---刪除表
alter table stu rename to student; ----給表重命名
一、在表最後加一列
alter table student add addr varchar(20);
二、在表頭部加一列
alter table student add stu_id int first;
三、 在name列後加一列
alter table student add qq int after name;
四、在age後加tel_num,在最後一行加email
alter table student add tel_num int after age,add email varchar(20);
五、刪除某一列
alter table student drop id
六、 修改列名字
alter table student change name stu_name varchar(20);
七、修改列數據類型
alter table student modify gender varchar(20);
8.使用update替代delete,僞刪除。
alter table student_0 add state int default 1; ---最後一列新加一列
update student_0 set state=0 where stu_name='zhang3'; ---修改
select from student_0 where state=1; ---按條件查看
9.補充的:
建立一個表結構與student表相同的空表。
create table student_0 like stundet;
建立一個和t1相同的備份表
create table t1_1 as select
from t1;
——————————————————————————————————————
DCL:數據庫控制語言(權限grant revoke)
——————————————————————————————————————
grant INSERT,SELECT, UPDATE, DELETE, CREATE, DROP on oldboy. to app@'10.0.0.%' identified by '123';
revoke INSERT,SELECT, UPDATE, DELETE, CREATE, DROP on oldboy.
from app@'10.0.0.%';
——————————————————————————————————-————
DML:數據行操做語言(增、刪、改)
——————————————————————————————————————
操做的是什麼?
表中的數據行,常規的「事務」語句
插入數據:
插入一行
insert student values(1,'zhang3',123,20,110,'male','bj','123@qq.com');
insert into student values(1,'zhang3',123,20,110,'male','bj','123@qq.com');
指定列進行插入
insert into student(stu_id,stu_name,qq) values(2,'li4',456);
一次性插入多行數據(多行同時同時插入,效率更高,推薦使用,可是不能):
insert into student values(1,'zhang3',123,20,110,'male','bj','123@qq.com'),(5,'zz',12322,202,1102,'female','bj','12322@qq.com');
插入student數據到student_0
insert into student_0 select from student;
修改數據:
update student set stu_name='wang5' where stu_id=5;
刪除數據
delete from student where stu_name='zhang3';
————————————
truncate table student;
通常是在須要刪除整個大表的時候,爲了加速
例如 drop table oss_base; -----》1000w 行
先:
truncate table oss_base;

drop table oss_base;
————————————
使用update替代delete僞刪除。
alter table student_0 add state int default 1;
update student_0 set state=0 where stu_name='zhang3';
select
from student_0 where state=1;
——————————————————————————————————
DQL: 數據行查詢語言(select show)
——————————————————————————————————
一、where子句使用
用途:將數據按照指定條件,進行過濾處理顯示mysql

1.1 等值過濾
-- CHN 國家,全部城市的名字。
SELECT NAME FROM city WHERE CountryCode='CHN';
1.2 比較過濾(範圍查詢)sql

= < <= <> !=數據庫

-- CHN 國家的,人口數量 > 500w的
SELECT NAME,population
FROM city
WHERE CountryCode='CHN' AND population>5000000;網絡

-- 全世界範圍內,小於100人的城市。
SELECT NAME,Population,countrycode FROM city
WHERE Population<100;app

1.3 傳統鏈接查詢
以上語句怎麼合併?
世界上小於100人口的城市所在的國家名字。socket

SELECT co.name FROM city AS ci ,country AS co
WHERE
ci.population<100
AND co.code=ci.CountryCode;ide

1.4 排序
order by工具

-- 以人口數量,從大到小排列輸出中國(CHN)全部城市信息
SELECT * FROM city WHERE countrycode='chn' ORDER BY population DESC;操作系統

1.5 行限制 -- 行數限制LIMIT 命令行

-- 以人口數量,從大到小排列輸出中國(CHN)人口數量排名前十的
SELECT * FROM city
WHERE countrycode='chn'
ORDER BY population
DESC
LIMIT 10;

-- 11-20名
SELECT * FROM city
WHERE countrycode='chn'
ORDER BY population
DESC
LIMIT 10 ,10;

SELECT * FROM city
WHERE countrycode='chn'
ORDER BY population
DESC
LIMIT 10 OFFSET 10;

limit語法:語法:limit <獲取的行數> [OFFSET <跳過的行數>]或者 limit [<跳過的行數>,] <獲取的行數>

相關文章
相關標籤/搜索