当前位置:网站首页>MySQL必須掌握4種語言!

MySQL必須掌握4種語言!

2022-06-26 02:15:00 俊紅的數據分析之路

本篇文章主要給大家介紹的是MySQL中常用的4種語言:

97c117d575afe210d7120d26a4c76119.png

一、DDL

DDL,data defination language,指的是數據定義語言,其主要作用是創建數據庫,對庫錶的結構進行删除和修改等操作。

進入數據庫

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

參數解釋:

  • u:指定用戶

  • p:指定密碼

    c41fb8f9272a636f20d504aff37c23a4.png

全部命令

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)  
                 );    // 記得分號
a09ca8a301dd3b902b068b5a321ae0fc.png

查看錶結構

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;
b9aa57179eee8645cc9530f690ca3454.png

字段操作

關鍵詞是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)

二、DML

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

  • 錶中插入數據

  • 錶中數據更新

  • 删除錶

錶中插入數據

-- 將字段名和字段的值一一對應起來,可以只插入部分字段
-- 省略了id和createtime字段
mysql> insert into user(
            name, 
            email, 
            age, 
            fee, 
            password) 
values("xiaoming", 
           "[email protected]", 
           20, 
           56.56, 
           Password("xiaoming")     // 密碼這裏要用函數Password()
      );
-- 包含所有字段信息
insert into user values(10, "nanan", "[email protected]", 38, 89.19, 2019-10-02, Password("nanan"));
  • 字符串字段必須用引號括起來

  • 密碼需要使用函數Password()

  • 語句末尾加分號

  • 利用只插入部分字段

  • 可以省去字段名,此時需要加上id,而且必須填寫所有的字段信息,不能只添加部分數據

cf70e168b964691090e8754b1061a8f5.png

數據更新

數據更新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="[email protected]", 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","[email protected]", 36, 81.17, Password("lisi"));  // id是從原來的基礎上遞增
b42bc828aa90db46006f4eefc752fa9d.png6d628efb7f7f31ba3d569232084a5f96.png

關於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", "[email protected]", 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     | [email protected] |       27 | *C3BC3E91915DCAE22014892F9827D | 28.87 |
+----+-----------+-----------------+----------+--------------------------------+-------+
1 row in set (0.00 sec)

三、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登錄

26a58ea0770f9efba6287a1ff3c26eae.png

登錄查看賬戶

MySQL數據庫的服務端口號是3306,通過在mysql數據庫的user錶中查看登錄數據庫用戶信息:

mysql> show databases;  # 查看所有的數據庫
mysql> use mysql;   # 選擇mysql數據庫
mysql> show tables;   # 查錶數據庫中的所有錶
mysql> select user, host from user;   # 查看這個錶中的user和host信息
0cc6d7086c4348ec18ab65c6bd947190.png

删除用戶

需要注意的是删除了某個用戶之後必須進行權限的刷新:

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)
4870fac794650a5b273eefb88415ae64.png

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

06a845e7953c787aec7d22627d0ab7d2.png

密碼問題

1、修改密碼

同樣需要進入mysql數據庫的user錶中

mysql>update user set password=PASSWORD("admin")  where user="root";   # 將root賬戶的密碼改為admin

mysql> flush privileges;   # 更新操作
Query OK, 0 rows affected (0.00 sec)

2、忘記密碼

  • 如果忘記了密碼,需要進入配置文件中

[email protected]:~$ vim /etc/mysql/mysql.conf.d/mysqld.cnf
  • 找到下圖中的skip-grant-tables,將前面的#去掉,就是取消注釋:取消權限認證,後臺開啟新的進程免密進入MySQL

    486c171939ecc89a134cfc4d95f638a1.png

  • 重啟MySQL服務:systemctl restart mysql

  • 通過MySQL直接進入:

54edb9f16c0e716efe75f6eb1732292f.png
  • 然後按照上面的步驟重新設置密碼即可

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

四、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;   # 括號可以不用
a95c8aafec8b479d44e6b7891acff851.png

連接查詢

連接查詢的關鍵字是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來錶示
d7c1451b6a35d3591a470e215d5fe16e.png559c2bbf6e1018b71553efb1c85e866c.png025430dae954f90af3174201c2cf8335.png

模糊查詢

模糊查詢的關鍵字是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;  # 年齡的降序
b3c24dd2aa60ee7dd483392496ff5d5e.png

聚合函數

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內容
- END -
原网站

版权声明
本文为[俊紅的數據分析之路]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/177/202206260037335795.html