MySQL數據庫從入門到實戰(三)
第一部分:補充
(1)前章補充:
MySQL在啟動時:
1、啟動後臺守護進程(mysqld),並生成工作線程(io 、w、 r)
2、預分配內存結構供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 啟動配置選擇順序:
1、預編譯(Cmake)
2、啟動時在命令行直接指定(這種優先級是最高的)
(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
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; ----給表重命名
1、在表最後加一列
alter table student add addr varchar(20);
2、在表頭部加一列
alter table student add stu_id int first;
3、 在name列後加一列
alter table student add qq int after name;
4、在age後加tel_num,在最後一行加email
alter table student add tel_num int after age,add email varchar(20);
5、刪除某一列
alter table student drop id
6、 修改列名字
alter table student change name stu_name varchar(20);
7、修改列數據類型
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‘,‘[email protected]‘); ---插入一行
insert into student values(1,‘zhang3‘,123,20,110,‘male‘,‘bj‘,‘[email protected]‘);
指定列進行插入
insert into student(stu_id,stu_name,qq) values(2,‘li4‘,456);
一次性插入多行數據(多行同時同時插入,效率更高,推薦使用,但是不能):
insert into student values(1,‘zhang3‘,123,20,110,‘male‘,‘bj‘,‘[email protected]‘),(5,‘zz‘,12322,202,1102,‘female‘,‘bj‘,‘[email protected]‘);
插入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)
——————————————————————————————————
MySQL數據庫從入門到實戰(三)