目錄
?編輯
一?DDL
(一 數據庫操作
1 查詢-數據庫(所有/當前)
2 創建-數據庫
3 刪除-數據庫
4 使用-數據庫
(二 表操作
1 創建-表結構
2 查詢-所有表結構名稱
3 查詢-表結構內容
4 查詢-建表語句
5 添加-字段名+數據類型
6 修改-字段數據類型
7 修改-字段+字段數據類型
8 刪除-字段
9 修改-表名
10 刪除-表
11 刪除-表中數據
(三 Datagrip圖形化界面激活碼使用
二 DML-表-增刪改數據
(一 添加數據
1 給指定字段添加數據
2 給全部字段添加數據(逐個)
3 批量添加數據
(二 修改數據
1 修改表中的數據
2 刪除表中的數據
三 DQL-表-查數據
?查詢數據
(一 基礎查詢
(二 條件查詢 - where
(三 聚合查詢 - count/max/min/sum/avg
(四 分組查詢 - group by ... having
(五 排序查詢 - order by
(六 分頁查詢 - limit
(七 補充
四 DCL-權限控制
(一 查詢用戶
(二?創建用戶
(三 修改用戶密碼
(四?刪除用戶
(五 權限控制
一?DDL
(一 數據庫操作
1 查詢-數據庫(所有/當前)
1 所有數據庫:
show databases;
2 查詢當前數據庫:
select database();
2 創建-數據庫
可以定義數據庫的編碼方式
create database if not exists ax1;
create database ax2;
3 刪除-數據庫
drop database ax1;
4 使用-數據庫
use ax1;
select database();
切換當前數據庫位置并驗證是否為當前數據庫:
(二 表操作
1 創建-表結構
2 查詢-所有表結構名稱
show tables;
圖形化展示
3 查詢-表結構內容
desc?myfirst_tb;
圖形化展示:
4 查詢-建表語句
show create table first_tb;
圖形化展示:
5 添加-字段名+數據類型
alter table 表名 add 字段名 類型 注釋;
alter table emp add nickname varchar(10) comment '昵稱';
圖形化展示:
6 修改-字段數據類型
alter table 表名 modify 字段名 新數據類型;
alter table emp modify IDcard char(19);
圖形化展示
7 修改-字段+字段數據類型
alter table 表名 change 舊字段名 新字段名 類型 comment 注釋;
alter table emp change IDcard idcard char(18) comment '身份證';
圖形化展示:
8 刪除-字段
alter table 表名 drop 字段名;
alter table emp drop ax2;
圖形化展示:
9 修改-表名
alter table 表名 rename to 新表名;
alter table emp rename to newemp;
圖形化展示:
10 刪除-表
drop table if exists 表名;
drop table if exists 表名;
圖形化展示:
11 刪除-表中數據
表結構保留:TRUNCATE TABLE
只會刪除表中的所有數據,但不會刪除表本身或其結構定義。因此,使用 DESC
或 SHOW COLUMNS FROM myfirst_tbl1;
時,您仍然可以看到表的字段定義。
truncate table 表名;
truncate table myfirst_tb1;
圖形化展示:
(三 Datagrip圖形化界面激活碼使用
網址:
2025 最新Jetbrains激活服務器 全部產品均適用 | ahhhhfs - A姐分享
二 DML-表-增刪改數據
1 概念:DML全稱Data Manipulation Language(數據操作語言),用來對數據庫中表的數據記錄進行增刪改。
- 添加數據:(INSERT)
- 修改數據:(UPDATE)
- 刪除數據:(DELETE)
(一 添加數據
1 給指定字段添加數據
insert into 表名 (字段名1,字段名2...)values (值1,值2...);
2 給全部字段添加數據(逐個)
insert into 表名 values (值1,值2);
3 批量添加數據
insert into 表名(字段名1,字段名2...)values (值1,值2...),(值1,值2)...;
insert into 表名? values(值1,值2...);
# 逐個添加
insert into first_tb (id, name, age, gender) values (2,'超哥',100,'男');insert into first_tb values (3,'小明',100,'女');# 批量添加
insert into first_tb (id, name, age, gender) values (4,'張三',100,'男'),(5,'李四',100,'男'),(6,'劉六',21,'男');insert into first_tb values (7,'王五',32,'男'),(8,'he',12,'男'),(9,'ok',22,'女');# 查看table 數據
select * from first_tb;
注意事項:
- 插入數據時,指定的字段順序需要與值的順序一一對應。
- 字符串和日期類型應該包含在引號中。
- 插入的數據大小,應該在字段的規定范圍內。
(二 修改數據
1 修改表中的數據
updata 表名 set 字段名1 = 值1 ,字段名2 = 值2 ,.......where 條件;
注意事項:
- 修改語句的條件可以有,也可以沒有,如果沒有條件,則會修改整張表的所有數據。
# 將first_tb表當中的id為1的數據項的name修改為it
update first_tb set name = 'it' where id = 1;# 將first_tb表當中的name為it的數據項的id修改為0,name修改為it_er
update first_tb set id = 0,name='it_er' where name = 'it';
2 刪除表中的數據
delete from 表名 where 條件;
注意事項:
- 修改語句的條件可以有,也可以沒有,如果沒有條件,則會修改整張表的所有數據。
- 可以使用and or 進行范圍判定。
# 刪除id為0的數據項
delete from first_tb where id = 0;
# 刪除id為3并且姓名為小明的數據項
delete from first_tb where id = 3 and name='小明';# 刪除id為3或姓名為小明的數據項
delete from first_tb where id = 3 or name='小明';
三 DQL-表-查數據
1 概念:DQL全稱Data Query Language(數據查詢語言),數據查詢語言,用來查詢數據庫中表的記錄。
- 查詢數據關鍵字:(SELECT)?
?查詢數據
(一 基礎查詢
1 查詢多個字段
select 字段1,字段2...from 表名;
# 返回first_tb表中字段name和id字段列表
select name,id from first_tb;
2 查詢所有字段
select? * from 表名;
# 返回first_tb表中的所有字段列表
select * from first_tb;
3 設置別名并查詢
select 字段1 as 別名1 ,字段2 as 別名2 ...from 表名;
# 設置別名(as可省略)作用是將表中的字段顯示給我們時更加容易區分
select id as ID , name as NAME from first_tb;
4 去除重復項
select distinct 字段列表 from 表名;
# 刪除id重復項
select distinct id from first_tb;
5 代碼實現
insert into user_pro (id, worker, gender, age, idcard, workaddress, entrydate, name)
values (1, '1000000101', '男', 18, '123456789123456781', '安徽合肥', '2000-01-01', '超哥'),(2, '1000000102', '男', 28, '123456789123456782', '安徽阜陽', '2000-11-01', '張三'),(3, '1000000103', '男', 38, '123456789123456783', '安徽六安', '2000-02-01', '李四'),(4, '1000000104', '女', 48, '123456789123456784', '安徽淮北', '2000-03-01', '王五'),(5, '1000000105', '女', 58, '123456789123456785', '安徽亳州', '2000-04-01', '劉六'),(6, '1000000106', '女', 68, '123456789123456786', '安徽馬鞍山', '2000-05-01', '周七'),(7, '1000000107', '女', 78, '123456789123456787', '安徽黃山', '2000-01-11', '安八'),(8, '1000000108', '女', 88, '123456789123456788', '安徽滁州', '2000-01-31', '老八'),(9, '1000000109', '男', 98, '123456789123456789', '安徽安慶', '2000-01-21', '李白'),(10, '1000000110', '男', 18, '12345678912345678X', '安徽蕪湖', '2000-01-21', '杜甫'),(11, '1000000111', '男', 28, '123456789123456711', '安徽宿州', '2000-01-11', '駱賓王'),(12, '1000000112', '女', 38, '123456789123456722', '安徽蚌埠', '2000-03-01', '齊白石'),(13, '1000000113', '女', 48, '123456789123456733', '安徽宣稱', '2000-06-01', '薛之謙'),(14, '1000000114', '女', 58, '123456789123456744', '安徽池州', '2000-08-01', '小白'),(15, '1000000115', '男', 68, '123456789123456755', '安徽銅陵', '2000-05-01', '小黑'),(16, '1000000116', '男', 78, '123456789123456766', '安徽合肥', '2000-03-01', '小藍'),(17, '1000000117', '男', 88, '123456789123456777', '安徽合肥', '2000-07-01', '小一'),(18, '1000000118', '男', 98, '123456789123456788', '安徽合肥', '2000-08-01', '小兒'),(19, '1000000119', '男', 18, '123456789123456799', '安徽合肥', '2000-09-01', '小三'),(20, '1000000120', '男', 28, '12345678912345679X', '安徽合肥', '2000-10-01', '小四'),(21, '1000000121', '男', 38, '12345678912345677X', '安徽合肥', '2000-01-01', '小五');
update user_pro set workaddress='安徽淮南' where id=16;# 1 查詢name age worker字段列表
select name,age,worker from user_pro;
# 2 查詢所有字段
select name,id,worker,workaddress,gender,idcard,entrydate,age from user_pro;
select * from user_pro;
# 3 查詢所有員工的工作地址(將列表名顯示為工作地址 as 可省略)
select workaddress as '工作地址' from user_pro;
# 4 查詢員工的工作地址(去重)
select distinct workaddress from user_pro;
(二 條件查詢 - where
1 語法
select 字段列表 from 表名 where 條件列表;
2 條件符號
3 代碼實現:
# 1 查詢年齡等于88的員工信息
select * from users where age = 88;# 2 查詢年齡小于30的員工信息
select * from users where age <= 30;# 3 查詢沒有身份證的員工信息
select * from users where idcard is null ;# 4 查詢有身份證的員工信息
select * from users where idcard is not null;# 5 查詢年齡不等于88和78的員工信息
select * from users where age != 88 and age != 78;
select * from users where age <> 88 and age <> 78;# 6 查詢在28至58之間的員工信息(左右都包括)
select * from users where age between 28 and 58;
select * from users where age >= 28 && age <= 58;# 7 查詢性別為女且年齡小于58的員工信息
select * from users where gender = '女' and age < 58;# 8 查詢姓名為三個字的員工信息 <--> _ 單個字符 % 任意數個
select * from users where name like '___';# 9 查詢年齡為18 28 38 的員工信息
select * from users where age = 18 or age = 28 or age = 38;
select * from users where age in (18,28,38);# 10查詢身份證號最后一位是X的員工信息
select * from users where idcard like '%X';
select * from users where idcard like '_________________X'
(三 聚合查詢 - count/max/min/sum/avg
1? 語法
select 聚合函數 (字段列表)from 表名;
2 聚合函數:將一列數據作為一個整體,進行縱向計算。
- count:? 統計數量
- max? :最大值
- min : 最小值
- avg : 平均值
- sum : 求和
3 注意事項
- null不參與計算
4 代碼實現:
# 求員工最大年齡
select max(age) from users;# 統計員工數量
select count(name) from users;# 求平均年齡
select sum(age)/count(name) from users;
select avg(age) from users;# 求最小年齡
select min(age) from users;# 統計安徽合肥地區員工的年齡之和
select * from users where workaddress = '安徽合肥';
select sum(age) from users where workaddress = '安徽合肥';
(四 分組查詢 - group by ... having
1 語法
select? 字段列表 from 表名 where 條件 group by 字段分組名 having 分組后過濾條件 ;
2 where 與 having 的區別
- 執行時機不同:where 是分組之前進行過濾,不滿足where ,不參與分組;二having 是分組之后對結果進行過濾。
- 判斷條件不同:where 不能對聚合函數進行判斷,而having 可以。
3 注意事項:
- where先判斷,在進行聚合函數的處理,再進行having 的判斷處理。
- 分組之后,查詢的字段一般為聚合函數和分組字段,查詢其他字段無意義。
4 代碼實現:
# 1 根據性別分組,統計男性員工 和 女性員工的數量
select gender,count(*) from users group by gender;# 2 根據性別分組,統計男性員工和女性員工的平均年齡
select gender,avg(age) from users group by gender;# 3 查詢年齡小于等于58的員工,根據共組地址分組獲取員工數量大于等于2的地址
select workaddress,count(*) from users where age <= 58 group by workaddress having count(*)>=2;
(五 排序查詢 - order by
1 語法
select 字段列表 from 表名 order by 字段1? 排序方式1 ,字段2? 排序方式2;
2 排序方式
- ASC:升序(默認值)
- DESC:降序
3 注意事項:
- 如果是多段字段排序,當地一個字段值相同時,會按第二個字段排序規則。
4 代碼實現:
# 1 根據年齡對公司的員工進行升序排序
select * from users order by age ASC ;# 2 根據入職時間對公司員工進行降序排序
select * from users order by entrydate DESC ;# 3 根據年齡對公司員工進行升序排序,年齡相同在按照入職時間進行降序排序
select * from users order by age ASC , entrydate DESC;
(六 分頁查詢 - limit
1 語法
select 字段列表 from 表名 limit 起始索引,查詢次數;
2 注意事項:
- 起始索引從0開始,其實索引 = (查詢頁碼 - 1)* 每頁顯示記錄數。
- 分頁查詢時數據庫的方言,不同數據庫有不同的實現,MySQL是limit。
- 如果查詢的是第一頁的數據,其實索引可以省略,之間簡寫為limit 10;
3 代碼實現:
# 1 從第1個開始展示,展示10個
select * from users limit 0,10;# 2 從第5個開始展示,展示5個
select * from users limit 4,5;
(七 補充
練習:
# 1 查詢年齡為28,18,38的員工信息
select * from users where age in (28,18,38);# 2 查詢姓名兩個字性別為男并且年齡為38至68之間的員工信息
select * from users where age between 38 and 68 && name like '__';# 3 統計員工表中奈年齡小于等于68,男性和女性分別的人數(age統計的是非空,如果想包含null則最好使用*)
select gender,count(age) from users where age <= 68 group by gender;# 4 查詢所有年齡小于68歲的員工的姓名和年齡,并對查詢結果按照年齡升序排序,如果年齡相同按入職時間降序排序
select name,age from users where age <= 68 order by age ASC ,entrydate DESC ;# 5 查詢性別為男,并且年齡在28-68之間的前五個員工信息,對查詢結果按年齡升序排序,年齡相同的按入職時間升序排序
select * from users where age between 28 and 68 and gender='男' order by age ASC , entrydate DESC limit 0,5;
編寫順序與執行順序
四 DCL-權限控制
1 概念:全稱Data Control Language(數據控制語言),用來管理數據庫用戶,控制數據庫的訪問權限。
注意事項:
- 主機名可以使用%通配(任意)
- 這類SQL開發成員操作的較少,主要是DBA(Data Administrator?數據庫管理員) 使用。
2 圖形化展示
(一 查詢用戶
1 語法?
- use mysql;
- select * from user;
2 代碼實現
# 查詢數據庫
use mysql;
select * from user;
(二?創建用戶
1 語法
create user '用戶名'@’主機名‘ identified by 密碼;
2 代碼實現
# 創建一個用戶anxian1 只能在當前主機localhost訪問,密碼123456
create user 'anxian1'@'localhost' identified by '123456';# 創建用戶anxian2 可以在任意主機訪問數據庫,密碼654321
create user 'anxian2'@'%' identified by '654321';
(三 修改用戶密碼
1 語法
alter user '用戶名'@’主機名‘ identified with mysql_native_password by '新密碼';
2 代碼實現
# 修改用戶anxian2 訪問密碼改為123456
alter user 'anxian2'@'%' identified with mysql_native_password by '123456';
(四?刪除用戶
1 語法
drop user '用戶名'@’主機名‘;
2 代碼實現
# 刪除anxian1@localhost用戶
drop user 'anxian1'@'localhost' ;
(五 權限控制
MySQL中定義了很多權限,常見的就以下幾種
1 查詢權限
show grants for? '用戶名'@‘主機名’;
# 查詢權限
show grants for 'anxian2'@'%';
2 授予權限
grant 權限列表 on 數據庫名.表名 to '用戶名'@‘主機名’;
# 授予權限
grant all on itheima.* to 'anxian2'@'%';
3 撤銷權限
revoke 權限列表 on 數據庫名.表名 from ‘用戶名’@‘主機名’;
# 撤銷權限
revoke all on itheima.* from 'anxian2'@'%';