MySQL必須掌握4種語言!

數據分析那些事
23 min readJun 13, 2022

分享MySQL中常用的4種語言,快速入門MySQL。

1、DDL

DDL,data defination language,指的是資料定義語言,其主要作用是建立資料庫,對庫表的結構進行刪除和修改等操作。

進入資料庫

mysql -uroot -p — 使用這種方式,接下來需要輸入密碼。密碼是暗文
mysql -uroot -p123456 — 可以直接將密碼123456放在引數p的後面,不安全

引數解釋:

u:指定使用者

p:指定密碼

全部命令

1. 資料庫操作
show databases; // 顯示所有的資料庫
use school; // 使用school資料庫
create database school; // 建立資料庫
drop database school; // 刪除某個資料庫
2. 表操作
— 建立表
create table user(欄位1,欄位2,…,欄位n);
— 檢視建立表的SQL語句
show create table user;
— 查看錶的結構
desc user;
— 刪除表
drop table user;
— 修改表名
alter table user rename to users;

資料庫操作

show databases; // 顯示所有的資料庫
use school; // 使用school資料庫
create database school; // 建立資料庫
drop database school; // 刪除某個資料庫
mysql> show databases; // 顯示資料庫
+ — — — — — — — — — — +
| Database |
+ — — — — — — — — — — +
| information_schema |
| mysql |
| performance_schema |
| peter |
| school |
| sys |
+ — — — — — — — — — — +
6 rows in set (0.04 sec)
mysql> use school; // 選擇使用資料庫
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

表操作

// 1、建立表
create table user(欄位1,
欄位2,
…,
欄位n
); // 最後的分號不能忘記

// 2、檢視所有的表
show tables;
// 3、查看錶的結構
desc user;
// 4、檢視建立表的SQL語句
show create table user;
// 5、刪除表
drop table user;
// 6、修改表名
alter table user rename to users; # 表名改為users;to可省略

最後的分號不能忘記😢

mysql> use school; // 使用一個數據庫
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables; // 檢視資料庫下的所有表
+ — — — — — — — — — +
| Tables_in_school |
+ — — — — — — — — — +
| course |
| score |
| student |
| teacher |
| total |
+ — — — — — — — — — +
5 rows in set (0.00 sec)

建立表

主鍵primary key 和auto_increment必須連在一起使用

書寫規範:每個欄位的語句最好分行寫,容易檢查

最後的分號不能忘記

# 建立user表:6種欄位+1個主鍵create table user( id int(10) unsigned not null auto_increment comment “user_id”, //將id作為主鍵
name varchar(20) not null comment “user_name”,
email varchar(50) not null comment “user_email”,
age tinyint unsigned not null comment “user_age”,
fee decimal(10,2) not null default 0.00 comment “user_fee”,
createTime timestamp not null comment “user_time”,
primary key(id)
); // 記得分號

查看錶結構

mysql> desc user;
+ — — — — — — + — — — — — — — — — — -+ — — — + — — -+ — — — — — — — — — -+ — — — — — — — — — — — — — — -+
| Field | Type | Null | Key | Default | Extra |
+ — — — — — — + — — — — — — — — — — -+ — — — + — — -+ — — — — — — — — — -+ — — — — — — — — — — — — — — -+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| email | varchar(50) | NO | | NULL | |
| age | tinyint(3) unsigned | NO | | NULL | |
| fee | decimal(10,2) | NO | | 0.00 | |
| createTime | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+ — — — — — — + — — — — — — — — — — -+ — — — + — — -+ — — — — — — — — — -+ — — — — — — — — — — — — — — -+
6 rows in set (0.02 sec)

檢視建立表的SQL語句

show create table user;

欄位操作

關鍵詞是alter,先選中需要操作的表。

modify:修改

change:改變名字

add:新增欄位

預設是末尾

指定位置新增

// 修改欄位資訊
alter table user modify name varchar(50) not null; # 將欄位name 從20改為50個字元
// 修改欄位名字
alter table user change email user_email varchar(50) not null; # 將email改成user_email
// 末尾新增欄位
alter table user add password char(30) not null comment “user_password”; # 增加password欄位
// 指定位置新增欄位
alter table user add password1 char(30) not null comment “user_password1” after user_name; # 在name後面增加password1欄位
// 刪除欄位
alter table user drop password1; #刪除欄位password1
// 原來的表格資訊
mysql> desc user;
+ — — — — — — + — — — — — — — — — — -+ — — — + — — -+ — — — — — — — — — -+ — — — — — — — — — — — — — — -+
| Field | Type | Null | Key | Default | Extra |
+ — — — — — — + — — — — — — — — — — -+ — — — + — — -+ — — — — — — — — — -+ — — — — — — — — — — — — — — -+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| email | varchar(50) | NO | | NULL | |
| age | tinyint(3) unsigned | NO | | NULL | |
| fee | decimal(10,2) | NO | | 0.00 | |
| createTime | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+ — — — — — — + — — — — — — — — — — -+ — — — + — — -+ — — — — — — — — — -+ — — — — — — — — — — — — — — -+
6 rows in set (0.00 sec)
# 修改欄位資訊
mysql> alter table user modify name varchar(50);
# 修改欄位名字
mysql> alter table user change email user_email varchar(50) not null;
# 新增欄位,末尾
mysql> alter table user add password char(30) not null comment “user_password”;
# 指定位置新增欄位
mysql> alter table user add password1 char(30) not null comment “user_password1” after name;
mysql> desc user;
+ — — — — — — + — — — — — — — — — — -+ — — — + — — -+ — — — — — — — — — -+ — — — — — — — — — — — — — — -+
| Field | Type | Null | Key | Default | Extra |
+ — — — — — — + — — — — — — — — — — -+ — — — + — — -+ — — — — — — — — — -+ — — — — — — — — — — — — — — -+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(50) | YES | | NULL | |
| password1 | char(30) | NO | | NULL | |
| user_email | varchar(50) | NO | | NULL | |
| age | tinyint(3) unsigned | NO | | NULL | |
| fee | decimal(10,2) | NO | | 0.00 | |
| createTime | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| password | char(30) | NO | | NULL | |
+ — — — — — — + — — — — — — — — — — -+ — — — + — — -+ — — — — — — — — — -+ — — — — — — — — — — — — — — -+
8 rows in set (0.00 sec)

2、DML

DML,data manipulation language,指的是資料操作語言。主要是對資料庫中的表記錄進行操作的語言,包含往表中插入資料、表中資料的更新、表的刪除等

表中插入資料

表中資料更新

刪除表

表中插入資料

 — 將欄位名和欄位的值一一對應起來,可以只插入部分欄位
— 省略了id和createtime欄位
mysql> insert into user(
name,
email,
age,
fee,
password)
values(“xiaoming”,
123456@qq.com”,
20,
56.56,
Password(“xiaoming”) // 密碼這裡要用函式Password()
);
— 包含所有欄位資訊
insert into user values(10, “nanan”, “78173828@qq.com”, 38, 89.19, 2019–10–02, Password(“nanan”));

字串欄位必須用引號括起來

密碼需要使用函式Password()

語句末尾加分號

利用只插入部分欄位

可以省去欄位名,此時需要加上id,而且必須填寫所有的欄位資訊,不能只新增部分資料

資料更新

資料更新update使用最多的是where語句,指定某個條件下執行;如果不加where,則所有的欄位都會被更改(慎重)

指定id號

指定欄位的具體值

欄位允許有多個,用逗號隔開

mysql> update user set name=”nangying” where id=6; // 透過id指定
mysql> update user set fee=88.76 where fee=56.90; // 透過欄位名直接指定
mysql> update user set email=”81847919@qq.com”, age=54 where id=7; // 同時修改多個值
mysql> update user set fee=88.88 where id in(2,4,6); // in的用法
mysql> update user set fee=66.66 where id between 2 and 6; // between … and …

刪除

刪除表有兩種情況:

delete:刪除表,插入資料從上一次結束的id號開始繼續插入;刪除的記錄仍存在

truncate:清空表,重新插入資料id從1開始;不佔記憶體空間

delete table user; 
truncate table user;

刪除delete表中的某條記錄

delete from user where id=7; // 刪除記錄
insert into user (name,email,age,fee,password) values(“lisi”,”9837194@qq.com”, 36, 81.17, Password(“lisi”)); // id是從原來的基礎上遞增

關於truncate

# 刪除資料
mysql> truncate table user;
Query OK, 0 rows affected (0.05 sec)
mysql> select * from user;
Empty set (0.00 sec)
# 重新插入資料
mysql> insert into user (user_name, user_email, user_age, password, fee) values (“peter”, “123456a@163.com”, 27, password(“101010”), 28.87);
Query OK, 1 row affected, 2 warnings (0.01 sec)
mysql> select * from user;
+ — — + — — — — — -+ — — — — — — — — -+ — — — — — + — — — — — — — — — — — — — — — — + — — — -+
| id | user_name | user_email | user_age | password | fee |
+ — — + — — — — — -+ — — — — — — — — -+ — — — — — + — — — — — — — — — — — — — — — — + — — — -+
| 1 | peter | 123456a@163.com | 27 | *C3BC3E91915DCAE22014892F9827D | 28.87 |
+ — — + — — — — — -+ — — — — — — — — -+ — — — — — + — — — — — — — — — — — — — — — — + — — — -+
1 row in set (0.00 sec)

3、DCL

data control language,DCL,指的是資料控制語言,主要是對資料庫中的登入和使用者的許可權進行控制的語言,包含

使用者登入MySQL資料庫

修改使用者密碼及忘記密碼如何解決

建立普通使用者及授權

撤銷許可權revoke

檢視許可權及刪除使用者

全部命令

1. 檢視資料庫中的使用者及資訊
mysql -uroot -p
show databases;
use mysql;
show tables;
select user, host, passord from user; # 所有的使用者都在user表中
2. 建立新使用者、授權、撤銷許可權和刪除
— 建立
create user “test”@”192.168.2.10" identified by”password”; # 指定使用者test、ip和密碼password
flush privileges; # 重新整理許可權
mysql -utest -h192.168.2.10 -p # 用test使用者登入
— 授權
grant select, insert, delete on shop.* to “test”@”192.168.2.10"; # shop 是資料庫,test是資料庫中的表
flush privileges; # 重新整理許可權
systemctl restart mysql; # 重啟mysql
— 建立使用者的同時進行授權
grant select, insert, delete on shop.* to “test”@”192.168.2.10" identified by”password”;
— 檢視許可權
show grants for “test”@”192.168.2.10"\G # \G引數是為了輸出好看
— 撤銷許可權
revoke delete on shop.* to “test”@”192.168.2.10"; # 撤銷shop資料庫中test使用者的delete許可權
flush privileges; # 重新整理許可權
systemctl restart mysql; # 重啟mysql
— 刪除使用者
drop user “test”@”192.168.2.10";
— 謹慎操作
grant all privileges on *.* to “test”@”192.168.2.10" # 將所有的許可權給所有資料庫
3. 修改使用者密碼
— 已知使用者原密碼,能夠進行登入
mysql -uroot -p
show databases;
use mysql;
show tables;
select user, host, password from user; # 所有的使用者都在user表中
update user set password=PASSWORD(“123456admin”) where user=”test”; # 將test使用者的密碼改成123456admin
flush privileges;
— 忘記原來的密碼:藉助跳躍許可權表,重啟守護程序
mysql skip-grant-tables # 跳躍許可權表
mysql # 重新進入mysql
show databases;use mysql;show tables;
select user, host, password from user; # 所有的使用者都在user表中
update user set password=PASSWORD(“123456admin”) where user=”test”; # 將test使用者的密碼改成123456admin
flush privileges;
4. 檢視mysql服務
— window
直接去任務管理器
— linux
netstat -an # 找到3306埠

關於root賬戶

預設情況下,MySQL資料庫是指允許root賬戶登入並且在本機上登入的。

-uroot表示root賬戶

-p表示需要密碼

沒有-h表示預設是本機localhost或者127.0.0.1登入

登入檢視賬戶

MySQL資料庫的服務埠號是3306,透過在mysql資料庫的user表中檢視登入資料庫使用者資訊:

mysql> show databases; # 檢視所有的資料庫
mysql> use mysql; # 選擇mysql資料庫
mysql> show tables; # 查表資料庫中的所有表
mysql> select user, host from user; # 檢視這個表中的user和host資訊

刪除使用者

需要注意的是刪除了某個使用者之後必須進行許可權的重新整理:

mysql> delete from user where host=”%”; # 刪除host為%的使用者
Query OK, 1 row affected (0.01 sec)
mysql> flush privileges; # 重新整理許可權
Query OK, 0 rows affected (0.00 sec)

注意:當在實際的開發專案中,專案和資料庫伺服器不在同一個地方,可以指定ip連線進行訪問

mysql> update user set host=”192.168.1.10" where user=”root”;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select user,host from user;mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

當退出mysql重新進入,需要指定IP地址,就是上面設定的IP:

密碼問題

1、修改密碼

同樣需要進入mysql資料庫的user表中

mysql>update user set password=PASSWORD(“admin”) where user=”root”; # 將root賬戶的密碼改為adminmysql> flush privileges; # 更新操作
Query OK, 0 rows affected (0.00 sec)

2、忘記密碼

如果忘記了密碼,需要進入配置檔案中

ubuntu@peter:~$ vim /etc/mysql/mysql.conf.d/mysqld.cnf

找到下圖中的skip-grant-tables,將前面的#去掉,就是取消註釋:取消許可權認證,後臺開啟新的程序免密進入MySQL

重啟MySQL服務:systemctl restart mysql

透過MySQL直接進入:

然後按照上面的步驟重新設定密碼即可

mysql> show databases;
mysql> use mysql;
mysql> select user, password from user;
# 接下來重新設定密碼即可

4、DQL

DQL(data query language),指的是資料查詢語言,主要的作用是對資料庫中的資料進行查詢的操作,也是最常見和最重要的功能。

查詢的方法也是多種多樣:聯合查詢、分組查詢、內連查詢、子查詢等,還可以限制查詢的條數等,下面介紹幾種常見的查詢

格式:

select 
column1,
column2,… # 需要查詢的欄位
from table_name # 表名
where 條件

簡單查詢

select 
name,
age
from user
where id=4;
where id in(1,3,5,7);
where name = “xiaoming”;

過濾查詢

過濾查詢的關鍵字是distinct,去掉欄位中的重複值

 — 過濾重複欄位
select distinct(password) from user; # password是重複項
select distinct password from user; # 括號可以不用

連線查詢

連線查詢的關鍵字是concat

直接使用系統預設的連線方式,將原來的欄位透過下劃線進行連線
使用concat…as…,as後面自己指定連線的新欄位名
帶上連線符號的查詢concat_ws(“+”, 列名1,列名2);其中”+”就是指定連線符

select concat(name, email) from user; # 結果中顯示concat(name_email)
select concat(name, email) as nameEmail from user; # 將新的欄位名用nameEmail來表示

模糊查詢

模糊查詢的關鍵字是like,中文翻譯成像:

mysql> select user_name from student where user_name like “peter”; # 像peter
mysql> select user_name from student where user_name like “%e”; # %表示任意,表示名字以e結尾
mysql> select user_name from student where user_name like “%e%”; # 表示名字中含有e

排序查詢

對錶中的記錄進行升序asc或者降序desc的排列,預設的是升序asc,同時需要使用order by關鍵字:

升序:asc,預設情況

降序:desc

select * from student order by user_age asc; # 年齡的升序
select * from student order by user_age desc; # 年齡的降序

聚合函式

select count(*) from student; # 總記錄
select sum(列名) from student; # 總和
select avg(列名) from student; # 平均值
select max/min(列名) from student; # 最大/小值

限制查詢結果

限制查詢的條數使用的是limit關鍵字

直接使用limit

使用limit … offset …:指定從哪裡開始顯示,顯示多少行

簡寫:limit 5, 4:表示從第5行開始,顯示4行資料

select name, age from user limit 5; — 只顯示5行資料
select name, age from user limit 5 offset 4; — 從第4(offset)行開始顯示5(limit)行資料
select name, age from user limit 4, 5 ; — 效果同上:逗號之前是offset的內容,逗號之後是limit內容

文章來源於尤而小屋 ,作者尤而小屋

文章連結:https://mp.weixin.qq.com/s/NjTSTKPnJC5fsVBkXLSPyg

立即試用FineBI免費版:

https://intl.finebi.com/zh-tw/trial?utm_source=Medium_Banner

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

我是「數據分析那些事」。常年分享數據分析乾貨,不定期分享好用的職場技能工具。各位也可以關注我的Facebook,按讚我的臉書並私訊「10」,送你十週入門數據分析電子書唷!期待你與我互動起來~

文章推薦

《 Python 進階 》中文版(附下載)

Excel圖表配色原理

統計學上的四種錯誤

為何大公司高薪挖人,也很難挖走這家科技公司的員工?

--

--

數據分析那些事

這是一個專注於數據分析職場的內容部落格,聚焦一批數據分析愛好者,在這裡,我會分享數據分析相關知識點推送、(工具/書籍)等推薦、職場心得、熱點資訊剖析以及資源大盤點,希望同樣熱愛數據的我們一同進步! 臉書會有更多互動喔:https://www.facebook.com/shujvfenxi/