主頁 > 資料庫 > Mysql基礎篇(一)之DDL、DML、DQL、DCL

Mysql基礎篇(一)之DDL、DML、DQL、DCL

2023-07-04 09:17:10 資料庫

一. SQL陳述句分類

SQL陳述句,根據其功能,主要分為四類:DDL、DML、DQL、DCL,

分類 全稱 說明
DDL Data Definition Language 資料定義語言,用來定義資料物件(資料庫,表,欄位)
DML Data Manipulation Language 資料操作語言,用來對資料庫表中的資料進行增刪改
DQL Data Query Language 資料查詢語言,用來查詢資料庫中表的記錄
DCL Data Control Language 資料控制語言,用來創建資料庫用戶、控制資料庫的訪問權限

二. DDL

Data Definition Language,資料定義語言,用來定義資料庫物件(資料庫,表,欄位),

1.資料庫操作

(1). 查詢所有資料庫

show databases;

(2). 查詢當前資料庫

select database();

(3). 創建資料庫

create database [ if not exists ] 資料庫名 [ default charset 字符集 ] [ collate 排序 規則 ] ;

案例1: 創建一個yun3k資料庫,使用資料庫默認的字符集,

create database yun3k;

案例2:在同一個資料庫服務器中,不能創建兩個名稱相同的資料庫,否則會報錯,

案例3:可以通過if not exists 引數來解決這個問題,資料庫不存在,則創建該資料庫,如果存在,則不創建,

create database if not exists yun3k;

案例4:創建一個yun3k_com資料庫并指定字符集

create database yun3k_com default charset utf8mb4;

(4). 洗掉資料庫

drop database [ if exists ] 資料庫名 ;

案例1:如果洗掉一個不存在的資料庫,將會報錯,此時,可以加上引數 if exists,如果資料庫存在,再執行洗掉,否則不執行洗掉,

(5). 切換資料庫

use 資料庫名;

案例1:我們要操作某一個資料庫下的表時,就需要通過該指令,切換到對應的資料庫下,否則是不能操作的,比如,切換到yun3k資料庫,

use yun3k;

2. 表操作

(1). 查詢當前資料庫所有表

show tables;

(2). 查詢指定表結構

查看指定表的欄位,欄位的型別、是否可以為NULL,是否存在默認值等資訊

desc 表明名;

案例1:查詢mysql資料庫下的component欄位

desc component;

(3). 查詢指定表的建表陳述句

查看建表陳述句,而有部分引數我們在創建表的時候,并未指定也會查詢到,因為這部分是資料庫的默認值,如:存盤引擎、字符集等,

show create table 表名;

案例1:查詢mysql資料庫下的component建表陳述句

show create table component;

(4). 創建表結構

CREATE TABLE 表名( 
	欄位1  欄位1型別 [ COMMENT 欄位1注釋 ], 
	欄位2  欄位2型別 [COMMENT 欄位2注釋 ], 
	欄位3  欄位3型別 [COMMENT 欄位3注釋 ], 
	...... 
	欄位n  欄位n型別 [COMMENT 欄位n注釋 ] 
) [ COMMENT 表注釋 ] ;

注意:[...]內為可選引數,最后一個欄位后面沒有逗號

案例1:在yun3k資料庫下創建一張表yun3k_user,對應的結構如下,那么建表陳述句為:

id name age gender
1 楊過 23
2 小龍女 28
3 黃蓉 45
create table yun3k_user( 
	id int comment '編號', 
	name varchar(50) comment '姓名', 
	age int comment '年齡', 
	gender varchar(1) comment '性別' 
) comment '用戶表';

(5). 資料型別

Mysql中的資料型別有很多,主要分為三類:樹值型別、字串型別、日期時間型別,

  1. 數值型別
型別 大小 有符號(SIGNED)范圍 無符號(UNSIGNED)范圍 描述
TINYINT 1 byte (-128, 127) (0, 255) 小整數值
SMALLINT 2 bytes (-32768, 32767) (0, 65536) 大整數值
MEDIUMINT 3 bytes (-8388608, 8388607) (0, 16777215) 大整數值
INT/INTEGER 4 bytes (-2147483648, 2147483647) (0, 4294967295) 大整數值
BIGINT 8 bytes (-2^63, 2^63 - 1) (0, 2^64 - 1) 極大整數值
FLOAT 4 bytes (-3.402823466 E+38, 3.402823466351 E+38) 0和(1.175494351 E-38, 3.402823466 E + 38) 單精度浮點數值
DOUBLE 8 bytes (-1.7976931348623157 E+308, 1.7976931348623157 E+308) 0和(2.2250738585072014 E-308, 1.7976931348623157 E+308) 雙精度浮點數值
DECIMAL 依賴于M(精度)和D(標度)的值 依賴于M(精度)和D(標度)的值 小數值(精確定點數)

案例1:年齡欄位,不會出現負數,而且人的年齡不會太大

age tintyint unsigned

案例2:分數,總分100分,最多出現一位小數

score double(4, 1)
  1. 字串型別
型別 大小 描述
CHAR 0 - 255 bytes 定長字串(需要指定長度)
VARCHAR 0 - 65535 bytes 變長字串(需要指定長度)
TINYBLOB 0 -255 bytes 不超過255個字符的二進制資料
TINYTEXT 0 - 255 bytes 短文本字串
BLOB 0 - 65535 bytes 二進制形式的長文本資料
TEXT 0 - 65535 bytes 長文本資料
MEDIUMBLOB 0 - 16777215 bytes 二進制形式的中等長度文本
MEDIUMTEXT 0 - 16777215 bytes 中等長度文本資料
LONGBLOB 0 - 4294967295 bytes 二進制形式的極大文本資料
LONGTEXT 0 - 4294967295 bytes 極大文本資料

注:char與varchar都可以描述字串,char是定長字串,指定長度多少,就占用多少個字符,和欄位值的長度無關,而varchar是變長字串,指定的長度為最大占用長度,相對來說,char的性能會更高些

案例1:用戶名 username長度不定,最長不會超過50

username varchar(20)

案例2:性別 gender存盤值,不是男,就是女

gender char(1)

案例3:手機號 phone固定長度為11

phone char(11)
  1. 日期時間型別
型別 大小 范圍 格式 描述
DATE 3 1000-01-01 至 9999-12-31 YYYY-MM-DD 日期值
TIME 3 -838:59:59 至 838:59:59 HH:MM:SS 時間值或持續時間
YEAR 1 1901 至 2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00 至 9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和時間值
TIMESTAMP 4 1970-01-01 00:00:01 至 2038-01-19 03:14:07 YYYY-MM-DD HH:MM:SS 混合日期和時間值,時間戳

案例1:生日欄位 birthday

birthday date

案例2:創建時間 createtime

createtime datetime

(6). 表操作案例

  1. 員工資訊表

設計一張員工資訊表,要求如下:

  1. 編號(純數字)

  2. 員工工號(字串型別,長度不超過10位)

  3. 員工姓名(字串型別,長度不超過10位)

  4. 性別(男/女,存盤一個漢字)

  5. 年齡(正常人年齡,不可能存盤負數)

  6. 身份證號(二代身份證號均為18位,身份證中有X這樣的字符)

  7. 入職時間(取值年月日即可)

create table yun3k_emp( 
	id int comment '編號', workno varchar(10) comment '工號', 
	name varchar(10) comment '姓名', 
	gender char(1) comment '性別', 
	age tinyint unsigned comment '年齡', 
	idcard char(18) comment '身份證號', 
	entrydate date comment '入職時間' 
) comment '員工表';

(7). 修改表

  1. 添加欄位
ALTER TABLE 表名 ADD 欄位名 型別 (長度) [ COMMENT 注釋 ] [ 約束 ];

案例1:為yun3k_emp表增加一個新的欄位”昵稱”為nickname,型別為varchar(20),

ALTER TABLE yun3k_emp ADD nickname varchar(20) COMMENT '昵稱';

  1. 修改資料型別
ALTER TABLE 表名 MODIFY 欄位名 新資料型別 (長度);

案例1:將yun3k_emp表的nickname欄位型別改為varchar(100),

ALTER TABLE yun3k_emp MODIFY nickname varchar(100);

  1. 修改欄位名和欄位型別
ALTER TABLE 表名 CHANGE 舊欄位名 新欄位名 型別 (長度) [ COMMENT 注釋 ] [ 約束 ];

案例1:將yun3k_emp表的nickname欄位修改為username,型別為varchar(30),

ALTER TABLE yun3k_emp CHANGE nickname username varchar(30) COMMENT '昵稱';

  1. 洗掉欄位
ALTER TABLE 表名 DROP 欄位名;

案例1:將yun3k_emp表的欄位username洗掉

ALTER TABLE yun3k_emp DROP username;

  1. 修改表名
ALTER TABLE 表名 RENAME TO 新表名;

案例1:將yun3k_emp表的表名修改為yun3k_employee,

ALTER TABLE yun3k_emp RENAME TO yun3k_employee;

(8). 洗掉表

  1. 洗掉表
DROP TABLE [ IF EXISTS ] 表名;

注:可選項 IF EXISTS 代表,只有表名存在時才會洗掉該表,表名不存在,則不執行洗掉操作(如果不加該引數項,洗掉一張不存在的表,執行將會報錯),

案例1:如果yun3k_user表存在,則洗掉yun3k_user表,

DROP TABLE IF EXISTS yun3k_user;

  1. 洗掉指定表,并重新創建表
TRUNCATE TABLE 表名;

注:在洗掉表的時候,表中的全部資料也都會被洗掉,

案例1:洗掉并重新創建yun3k_employee,

TRUNCATE TABLE yun3k_employee;

三. DML

DML英文全稱是Data Manipulation Language(資料庫操作語言),用來對資料庫中表的記錄進行增、刪、改操作,

  • 添加資料(INSERT)

  • 修改資料(UPDATE)

  • 洗掉資料(DELETE)

1. 添加資料

(1). 給指定欄位添加資料

INSERT INTO 表名 (欄位名1, 欄位名2, ...) VALUES (值1, 值2, ...);

案例1:給yun3k_employee表所有的欄位添加資料,

insert into yun3k_employee(id,workno,name,gender,age,idcard,entrydate) values(1,'1','yun3k','男',10,'123456789012345678','2000-01-01');

(2). 給全部欄位添加資料

INSERT INTO 表名 VALUES (值1, 值2, ...);

案例1:給yun3k_employee表所有的欄位添加資料,

insert into yun3k_employee values(2,'2','yun3k_com','男',20,'123456789012345679','2020-01-01');

(3). 批量添加資料

INSERT INTO 表名 (欄位名1, 欄位名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值 1, 值2, ...);
INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);

案例1:批量插入資料到yun3k_employee表中

insert into yun3k_employee
 values(3,'3','楊過','男',38,'123456789018845670','2005-01-01'),(4,'4','小龍女','女',40,'123477789018845670','2015-01-01');

注:

  • 插入資料時,指定的欄位順序需要與值的順序是一一對應的,

  • 字串和日期型資料應該包含在引號中,

  • 插入的資料大小,應該在欄位的規定范圍內,

2. 修改資料

UPDATE 表名 SET 欄位名1 = 值1 , 欄位名2 = 值2 , .... [ WHERE 條件 ];

案例1:修改yun3k_employee表中id為1的資料,將name修改為yun3k_net,

update yun3k_employee set name = 'yun3k_net' where id = 1;

案例2:修改yun3k_employee表中id為1的資料,將name修改為黃蓉,gender修改為女,

update yun3k_employee set name = '黃蓉', gender = '女' where id = 1;

案例3:將所有的員工入職日期entrydate修改為2009-01-01,

update yun3k_employee set entrydate = '2009-01-01';

注:修改陳述句的條件可以有,也可以沒有,如果沒有條件,則會修改整張表的所有資料,

3. 洗掉資料

DELETE FROM 表名 [ WHERE 條件 ];

案例1:洗掉yun3k_employee表中gender為女的員工,

delete from yun3k_employee where gender = '女';

案例2:洗掉yun3k_employee表中的所有員工,

delete from yun3k_employee;

注:

  • DELETE 陳述句的條件可以有,也可以沒有,如果沒有條件,則會洗掉整張表的所有資料

  • DELETE 陳述句不能洗掉某一個欄位的值(可以使用UPDATE,將該欄位值置為NULL即可),

四. DQL

DQL英文全稱是Data Query Language(資料查詢語言),資料查詢語言是用來查詢資料庫中表的記錄

運行以下sql,準備資料:

drop table if exists yun3k_employee;
create table yun3k_emp( 
	id int comment '編號', workno varchar(10) comment '工號', 
	name varchar(10) comment '姓名', 
	gender char(1) comment '性別', 
	age tinyint unsigned comment '年齡', 
	idcard char(18) comment '身份證號', 
	workaddress varchar(50) comment '作業地址', 
	entrydate date comment '入職時間' 
)comment '員工表';
INSERT INTO yun3k_emp (id, workno, name, gender, age, idcard, workaddress, entrydate) VALUES (1, '00001', '柳巖666', '女', 20, '123456789012345678', '北京', '2000-01-01'); 
INSERT INTO yun3k_emp (id, workno, name, gender, age, idcard, workaddress, entrydate) VALUES (2, '00002', '張無忌', '男', 18, '123456789012345670', '北京', '2005-09-01');
INSERT INTO yun3k_emp (id, workno, name, gender, age, idcard, workaddress, entrydate) VALUES (3, '00003', '韋一笑', '男', 38, '123456789712345670', '上海', '2005-08-01'); 
INSERT INTO yun3k_emp (id, workno, name, gender, age, idcard, workaddress, entrydate) VALUES (4, '00004', '趙敏', '女', 18, '123456757123845670', '北京', '2009-12-01'); 
INSERT INTO yun3k_emp (id, workno, name, gender, age, idcard, workaddress, entrydate) VALUES (5, '00005', '小昭', '女', 16, '123456769012345678', '上海', '2007-07-01'); 
INSERT INTO yun3k_emp (id, workno, name, gender, age, idcard, workaddress, entrydate) VALUES (6, '00006', '楊逍', '男', 28, '12345678931234567X', '北京', '2006-01-01'); 
INSERT INTO yun3k_emp (id, workno, name, gender, age, idcard, workaddress, entrydate) VALUES (7, '00007', '范瑤', '男', 40, '123456789212345670', '北京', '2005-05-01'); 
INSERT INTO yun3k_emp (id, workno, name, gender, age, idcard, workaddress, entrydate) VALUES (8, '00008', '黛綺絲', '女', 38, '123456157123645670', '天津', '2015-05-01'); 
INSERT INTO yun3k_emp (id, workno, name, gender, age, idcard, workaddress, entrydate) VALUES (9, '00009', '范涼涼', '女', 45, '123156789012345678', '北京', '2010-04-01'); 
INSERT INTO yun3k_emp (id, workno, name, gender, age, idcard, workaddress, entrydate) VALUES (10, '00010', '陳友諒', '男', 53, '123456789012345670', '上海', '2011-01-01'); 
INSERT INTO yun3k_emp (id, workno, name, gender, age, idcard, workaddress, entrydate) VALUES (11, '00011', '張士誠', '男', 55, '123567897123465670', '江蘇', '2015-05-01'); 
INSERT INTO yun3k_emp (id, workno, name, gender, age, idcard, workaddress, entrydate) VALUES (12, '00012', '常遇春', '男', 32, '123446757152345670', '北京', '2004-02-01'); 
INSERT INTO yun3k_emp (id, workno, name, gender, age, idcard, workaddress, entrydate) VALUES (13, '00013', '張三豐', '男', 88, '123656789012345678', '江蘇', '2020-11-01'); 
INSERT INTO yun3k_emp (id, workno, name, gender, age, idcard, workaddress, entrydate) VALUES (14, '00014', '滅絕', '女', 65, '123456719012345670', '西安', '2019-05-01'); 
INSERT INTO yun3k_emp (id, workno, name, gender, age, idcard, workaddress, entrydate) VALUES (15, '00015', '胡青牛', '男', 70, '12345674971234567X', '西安', '2018-04-01'); 
INSERT INTO yun3k_emp (id, workno, name, gender, age, idcard, workaddress, entrydate) VALUES (16, '00016', '周芷若', '女', 18, null, '北京', '2012-06-01');

1. 查詢分類

DQL 查詢陳述句,語法結構如下:

SELECT
	欄位串列 
FROM
	表名串列 
WHERE
	條件串列 
GROUP BY 
	分組欄位串列 
HAVING
	分組后條件串列 
ORDER BY 
	排序欄位串列 
LIMIT
	分頁引數
  • 基本查詢(不帶任何條件)

  • 條件查詢(WHERE)

  • 聚合函式(count、max、min、avg、sum)

  • 分組查詢(group by)

  • 排序查詢(order by)

  • 分頁查詢(limit)

2. 基礎查詢

(1). 查詢多個欄位

SELECT 欄位1, 欄位2, 欄位3 ... FROM 表名;
SELECT * FROM 表名;

注: 號代表查詢所有欄位,在實際開發中盡量少用(不直觀、影響效率),*

案例1:查詢yun3k_emp指定欄位 name,workno,age并回傳

select name,workno,age from yun3k_emp;

案例2:查詢回傳所有欄位

select id ,workno,name,gender,age,idcard,workaddress,entrydate from yun3k_emp;
select * from yun3k_emp;

(2). 欄位設定別名

SELECT 欄位1 [ AS 別名1 ] , 欄位2 [ AS 別名2 ] ... FROM 表名;
SELECT 欄位1 [ 別名1 ] , 欄位2 [ 別名2 ] ... FROM 表名;

案例1:查詢所有員工的作業地址,起別名

select workaddress as '作業地址' from yun3k_emp;
-- as可以省略 
select workaddress '作業地址' from yun3k_emp;

(3). 去除重復記錄

SELECT DISTINCT 欄位串列 FROM 表名;

案例1:查詢公司員工的上班地址有哪些(不要重復)

select distinct workaddress '作業地址' from yun3k_emp;

3. 條件查詢

(1). 語法

SELECT 欄位串列 FROM 表名 WHERE 條件串列;

(2). 條件

比較運算子 功能
> 大于
>= 大于等于
< 小于
<= 小于等于
= 等于
<> 或 != 不等于
BETWEEN ... AND ... 在某個范圍之內(含最小、最大值)
IN(...) 在in之后的串列中的值,多選一
LIKE 占位符 模糊匹配(_匹配單個字符,%匹配任意個字符)
IS NULL 是NULL
邏輯運算子 功能
AND 或 && 并且(多個條件同時成立)
OR 或 || 或者(多個條件任意一個成立)
NOT 或 ! 非,不是

案例1:查詢年齡等于88的員工

select * from yun3k_emp where age = 88;

案例2:查詢年齡小于20的員工資訊

select * from yun3k_emp where age < 20;

案例3:查詢年齡小于等于20的員工資訊

select * from yun3k_emp where age <= 20;

案例4:查詢沒有身份證號的員工資訊

select * from yun3k_emp where idcard is null;

案例5:查詢有身份證號的員工資訊

select * from yun3k_emp where idcard is not null;

案例6:查詢年齡不等于88的員工資訊

select * from yun3k_emp where age != 88;
select * from yun3k_emp where age <> 88;

案例7:查詢年齡在15歲(包含)到20歲(包含)之間的員工資訊

select * from yun3k_emp where age >= 15 && age <= 20;
select * from yun3k_emp where age >= 15 and age <= 20;
select * from yun3k_emp where age between 15 and 20;

案例8:查詢性別為 女 且年齡 小于 5歲的員工資訊

select * from yun3k_emp where gender = '女' and age < 25;

案例9:查詢年齡等于18或20或40的員工資訊

select * from yun3k_emp where age = 18 or age = 20 or age =40;
select * from yun3k_emp where age in(18,20,40);

案例10:查詢姓名為兩個字的員工資訊

select * from yun3k_emp where name like '__';

案例11:查詢身份證號最后一位是X的員工資訊

select * from yun3k_emp where idcard like '%X';
select * from yun3k_emp where idcard like '_________________X';

4. 聚合函式

(1). 語法

SELECT 聚合函式(欄位串列) FROM 表名;

注:NULL值是不參與所有聚合函式運算的

(2). 常見的聚合函式

函式 功能
count 統計數量
max 最大值
min 最小值
avg 平均值
sum 求和

案例1:統計該企業員工數量

select count(*) from yun3k_emp; -- 統計的是總記錄數
select count(idcard) from yun3k_emp; -- 統計的是idcard欄位不為null的記錄數

注:對于count聚合函式,統計符合條件的總記錄數,還可以通過count(數字/字串)進行統計查詢,比如:

select count(1) from yun3k_emp;

案例2:統計該企業員工的平均年齡

select avg(age) from yun3k_emp;

案例3:統計該企業員工的最大年齡

select max(age) from yun3k_emp;

案例4:統計該企業員工的最小年齡

select min(age) from yun3k_emp;

案例5:統計西安地區員工的年齡之和

select sum(age) from yun3k_emp where workaddress = '西安';

5. 分組查詢

(1). 語法

SELECT 欄位串列 FROM 表名 [ WHERE 條件 ] GROUP BY 分組欄位名 [ HAVING 分組 后過濾條件 ];

(2). where和having區別

  • 執行時機不同:where是分組之前進行過濾,不滿足where條件,不參與分組;而having是分組之后對結果進行過濾,

  • 判斷條件不同:were不能對聚合函式進行判斷,而having可以,

注:

  • 分組之后,查詢的欄位一般為聚合函式和分組欄位,查詢其他欄位無任何意義

  • 執行順序:where > 聚合函式 > having

  • 支持多欄位分組,具體語法為:group by columnA, columnB

案例1:根據性別分組,統計男性員工和女性員工的數量

select gender, count(*) from yun3k_emp group by gender;

案例2:根據性別分組,統計男性員工和女性員工的平均年齡

select gender, avg(age) from yun3k_emp group by gender;

案例3:查詢年齡小于45的員工,并根據作業地址分組,獲取員工數量大于等于3的作業地址

select workaddress, count(*) address_count from yun3k_emp where age < 45 group by workaddress having address_count >= 3;

案例4:統計各個作業地址上班的男性及女性員工的數量

select workaddress, gender, count(*) '數量' from yun3k_emp group by gender , workaddress;

6. 排序查詢

(1). 語法

SELECT 欄位串列 FROM 表名 ORDER BY 欄位1 排序方式1 , 欄位2 排序方式2;

(2). 排序方式

  • ASC:升序(默認值)

  • DESC:降序

注:

  • 如果是升序,可以不指定排序方式ASC;

  • 如果是多欄位排序,當第一個欄位值相同時,才會根據第二個欄位進行排序

案例1:根據年齡對公司的員工進行升序排序

select * from yun3k_emp order by age asc;
select * from yun3k_emp order by age;

案例2:根據入職時間,對員工進行降序排序

select * from yun3k_emp order by entrydate desc;

案例3:根據年齡對公司的員工進行升序排序,年齡相同,再按照入職時間進行降序排序

select * from yun3k_emp order by age asc, entrydate desc;

7. 分頁查詢

(1). 語法

SELECT 欄位串列 FROM 表名 LIMIT 起始索引, 查詢記錄數;

注:

  • 起始索引從0開始,起始索引 = (查詢頁碼 - 1) 每頁顯示記錄數,*

  • 分頁查詢是資料庫的方言,不同的資料庫有不同的實作,Mysql中是LIMIT,

  • 如果查詢的是第一頁資料,起始索引可以省略,直接簡寫為 limit 10,

案例1:查詢第1頁員工資料,每頁展示10條記錄

select * from yun3k_emp limit 0,10;
select * from yun3k_emp limit 10;

案例2:查詢第2頁員工資料,每頁展示10條記錄((頁碼 - 1) 頁展示記錄數)*

select * from yun3k_emp limit 10,10;

8. 綜合案例

(1). 查詢年齡為20,21,22,23歲的員工資訊,

select * from yun3k_emp where gender = '女' and age in(20,21,22,23);

(2).查詢性別為男,并且年齡在20-40歲(含)以內的姓名為三個字的員工,

select * from yun3k_emp where gender = '男' and (age between 20 and 40) and name like '___';

(3).統計員工表中,年齡小于60歲的,男性員工和女性員工的人數

select gender, count(*) from yun3k_emp where age < 60 group by gender;

(4).查詢所有年齡小于等于35歲員工的姓名和年齡,并對查詢結果按年齡升序排序,如果年齡相同按入職時間將序排序

select name, age from yun3k_emp where age <= 35 order by age asc , entrydate desc;

(5). 查詢性別為男,且年齡為20-40歲(含)以內的前5個員工資訊,對查詢的結果按年齡升序排序,年齡相同按入職時間升序排序,

select * from yun3k_emp where gender = '男' and age between 20 and 40 order by age asc , entrydate asc limit 5;

9. 執行順序

驗證:

查詢年齡大于15的員工姓名、年齡,并根據年齡進行升序排序,

select name, age from yun3k_emp where age > 15 order by age asc;

在查詢時,我們給yun3k_emp表起一個別名 e,然后在select及where中使用該別名,

select e.name, e.age from yun3k_emp e where e.age > 15 order by age asc;

執行上述SQL陳述句后,我們看到依然可以正常的查詢到結果,此時就說明:from先執行,然后where和select執行,那where和select到底哪個先執行呢?

此時我們可以給select后面的欄位起別名,然后在where中使用這個別名,然后看看是否可以執行成功,

select e.name ename , e.age eage from yun3k_emp e where eage > 15 order by age asc;

執行上述sql報錯了:

由此我們可以得出結論:from先執行,然后執行where,再執行select,

接下來,我們再執行如下SQL陳述句,查看執行效果:

select e.name ename , e.age eage from yun3k_emp e where e.age > 15 order by eage asc;

結果執行成功,那么也就驗證了:order by 是在select陳述句之后執行的,

綜上所述,我們可以看到DQL陳述句的執行順序為:from ... where ... group by ... having ... select ... order by ... limit ...

五. DCL

DCL英文全稱是Data Control Language(資料控制語言),用來管理資料庫用戶、控制資料庫的訪問權限,

1. 管理用戶

(1). 查詢用戶

select * from mysql.user;

其中Host代表當前訪問的主機,如果為localhost,僅代表只能夠在當前本機訪問,是不可以遠程訪問的,User代表的是訪問該資料庫的用戶名,在Mysql中需要通過Host和User來唯一標識一個用戶,

(2). 創建用戶

CREATE USER '用戶名'@'主機名' IDENTIFIED BY '密碼';

案例1:創建一個名為"yun3k"的用戶,設定密碼為”123456”,并且只能本地訪問,

CREATE USER 'yun3k'@'localhost' IDENTIFIED BY '123456';

案例2:創建一個名為”yun3k_com”的用戶,可以在任意主機訪問該資料庫

CREATE USER 'yun3k_com'@'%' IDENTIFIED BY '123456';

(3).修改用戶密碼

ALTER USER '用戶名'@'主機名' IDENTIFIED WITH mysql_native_password BY '新密碼';

案例1:修改”yun3k”的用戶密碼為”654321”,

ALTER USER 'yun3k'@'localhost' IDENTIFIED WITH mysql_native_password BY '654321';

(4). 洗掉用戶

DROP USER '用戶名'@'主機名' ;

案例1:洗掉”yun3k”用戶,

DROP USER 'yun3k'@'localhost';

注:

  • 在Mysql中需要通過用戶名@主機名的方式來唯一標識一個用戶,

  • 主機名可以使用%通配,

2. 權限控制

常用權限如下:

權限 說明
ALL,ALL PRIVILEGES 所有權限
SELECT 查詢資料
INSERT 插入資料
UPDATE 修改資料
DELETE 洗掉資料
ALTER 修改表
DROP 洗掉資料庫/表
CREATE 創建資料庫/表

(1). 查詢權限

SHOW GRANTS FOR '用戶名'@'主機名' ;

案例1:查詢'yun3k_com'@'%'用戶的權限

SHOW GRANTS FOR 'yun3k_com'@'%' ;

(2). 授予權限

GRANT 權限串列 ON 資料庫名.表名 TO '用戶名'@'主機名';

案例1:授予'yun3k_com'@'%'用戶yun3k資料庫所有表的所有操作權限

grant all on yun3k.* to 'yun3k_com'@'%';

(3). 撤銷權限

REVOKE 權限串列 ON 資料庫名.表名 FROM '用戶名'@'主機名';

案例1:撤銷'yun3k_com'@'%'用戶的yun3k資料庫的所有權限

revoke all on yun3k.* from 'yun3k_com'@'%';

注:

  • 多個權限之間,使用逗號分隔

  • 授權事時,資料庫名和表名可以使用*進行通配,代表所有

更多mysql學習請關注微信公眾號”云哥技術yun3k”,回復”mysql學習”,免費領取mysql全套學習資料,

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/556571.html

標籤:其他

上一篇:sql server 資料庫自動備份

下一篇:返回列表

標籤雲
其他(162051) Python(38266) JavaScript(25520) Java(18286) C(15238) 區塊鏈(8275) C#(7972) AI(7469) 爪哇(7425) MySQL(7285) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5876) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4609) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2438) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) HtmlCss(1986) .NET技术(1985) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1882) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • Mysql基礎篇(一)之DDL、DML、DQL、DCL

    # 一. SQL陳述句分類 **SQL陳述句,根據其功能,主要分為四類:DDL、DML、DQL、DCL。** | 分類 | 全稱 | 說明 | | | | | | DDL | Data Definition Language | 資料定義語言,用來定義資料物件(資料庫,表,欄位) | | DML | D ......

    uj5u.com 2023-07-04 09:17:10 more
  • sql server 資料庫自動備份

    一丶打開客戶端: 物件資源管理器->管理->維護計劃(右鍵點擊)->維護計劃向導 二丶打開后點擊下一步, 填寫名稱與說明并更改備份計劃 三丶點下一步, 選擇維護任務 四丶點擊下一步, 選擇需要備份的資料庫, 和備份檔案路徑 五丶點擊下一步, 選擇報告檔案保存路徑 六丶點擊下一步, 查看維護計劃, 沒 ......

    uj5u.com 2023-07-04 09:09:59 more
  • SQL Server中的NULL值處理:判斷與解決方案

    摘要: 在SQL Server資料庫中,NULL是表示缺少資料或未知值的特殊標記。處理NULL值是SQL開發人員經常遇到的問題之一。本文將介紹SQL Server中判斷和處理NULL值的不同方法,以及一些解決方案,幫助您更好地處理資料庫中的NULL值情況。 文章內容: 引言: 在資料庫開發中,經常會 ......

    uj5u.com 2023-07-04 09:04:44 more
  • 完全兼容DynamoDB協議!GaussDB(for Cassandra)為NoSQL注入新活力

    摘要:DynamoDB是一款托管式的NoSQL資料庫服務,支持多種資料模型,廣泛應用于電商、社交媒體、游戲、IoT等場景。 本文分享自華為云社區《完全兼容DynamoDB協議!GaussDB(for Cassandra)為NoSQL注入新活力》,作者:GaussDB 資料庫 。 DynamoDB是一 ......

    uj5u.com 2023-07-04 09:03:59 more
  • Mysql基礎篇(四)之事務

    # 一. 事務簡介 **事務是一組操作的集合,它是一個不可分隔的作業單位,事務會把所有的操作作為一個整體一起向系統提交或撤銷操作請求,即這些操作要么同時成功,要么同時失敗。** **就比如:張三給李四轉賬1000塊錢,張三銀行賬戶的錢減少了1000,而李四銀行賬戶的錢要增加1000。這一組操作就必須 ......

    uj5u.com 2023-07-04 09:02:16 more
  • Mysql基礎篇(三)之多表查詢

    # 一. 多表關系 - **一對多(多對一)** - **多對一** - **一對一** ## 1. 一對多 ### (1). 案例:部門與員工的關系 ### (2). 關系:一個部門對應多個員工,一個員工對應一個部門 ### (3). 實作:在多的一方建立外建,指向一的一方的主鍵 ![](http ......

    uj5u.com 2023-07-04 09:00:36 more
  • Mysql基礎篇(二)之函式和約束

    # 一. 函式 **Mysql中的函式主要分為四類:字串函式、數值函式、日期函式、流程函式** ## 1. 字串函式 **常用函式如下:** | 函式 | 功能 | | | | | CONCAT(S1, S2, ......Sn) | 字串拼接,將S1,S2,.....Sn拼接成一個字串 | ......

    uj5u.com 2023-07-04 08:58:35 more
  • Mysql基礎篇(一)之DDL、DML、DQL、DCL

    # 一. SQL陳述句分類 **SQL陳述句,根據其功能,主要分為四類:DDL、DML、DQL、DCL。** | 分類 | 全稱 | 說明 | | | | | | DDL | Data Definition Language | 資料定義語言,用來定義資料物件(資料庫,表,欄位) | | DML | D ......

    uj5u.com 2023-07-04 08:50:31 more
  • es 筆記二之基礎查詢

    > 本文首發于公眾號:Hunter后端 > 原文鏈接:[es筆記二之基礎查詢](https://mp.weixin.qq.com/s/VW0QCuW-ONEH-TRB2WF4GQ) 這一篇筆記介紹 es 的基礎查詢。 基礎查詢包括很多,比如排序,類似資料庫 limit 的操作,like 操作,與或非 ......

    uj5u.com 2023-07-03 07:52:54 more
  • es 筆記二之基礎查詢

    > 本文首發于公眾號:Hunter后端 > 原文鏈接:[es筆記二之基礎查詢](https://mp.weixin.qq.com/s/VW0QCuW-ONEH-TRB2WF4GQ) 這一篇筆記介紹 es 的基礎查詢。 基礎查詢包括很多,比如排序,類似資料庫 limit 的操作,like 操作,與或非 ......

    uj5u.com 2023-07-03 07:47:23 more