MySQL命令
登錄mysql賬號
dos命令窗口:
-- mysql(或者是mysqlsh) -u賬號名 -p密碼 mysql -uroot -p123
use
-- 使用數據庫
use db_name;
select
-- 查看當前使用的數據庫
select database();
-- 查看當前數據庫版本
select version();
show
-- 查看數據庫目錄
show databases;
-- 查看數據庫中的表目錄
show tables;
-- 查看其他庫中的表
show tables from db_name;
-- 查看表的創建語句
show create table tb_name;
desc
-- 查看表結構
desc tb_name;
explain
-- 查看語句的執行狀態(執行計划)
explain select ename,sal from emp where sal = 5000;
create
-- 創建一個數據庫
create database db_name;
drop
-- 刪除一個數據庫
drop database db_name;
source
-- 加載 sql 文件,拖拽文件到dos窗口會自動生成路徑
-- \source
source D:\AllCode\SQLCode\test.sql
limit
介紹:分頁查詢
limit <startIndex>, <lenght>
startInsdex 表示起始位置,從 0 開始。
lenght 表示取幾個。
固定公式:每頁顯示 pageSize 條記錄:
limit (pageNo - 1) * pageSize, pageSize
# 例子,顯示前五頁的數據
-- 從 5 開始,取 5 個,將顯示第 5~10 條的數據。
select ename,sal from emp order by sal desc limit 5,5;
其他命令
-- 終止一條語句
\c 或者按ctrl+c鍵
-- 退出 mysql
\q 或者 quit 或者 exit
DDL語句 數據定義語言
create
介紹:創建表
-- 建表語句的語法格式:
create table 表名(
字段名1 數據類型,
字段名1 數據類型,
字段名1 數據類型,
......
);
-- 將查詢結果做一張表:create table 表名 as select語句;
create table t_test
as
select * from emp;
constraint(約束)
constraint | 約束 | 介紹 |
---|---|---|
not null | 非空約束 | 約束的字段不能為null |
unique | 唯一約束 | 約束的字段不能重復,但可為null |
primary key | 主鍵約束 | 約束的字段既不能為null,也不能重復,一張表只能存其一 |
foreign key | 外鍵約束 | 外鍵值可以為null,被引用的字段不一定是主鍵,但至少具有unique約束 |
-- 列級約束
-- not null 只有列級約束
drop table if exists t_class;
create table t_class(
cid int primary key, -- 主鍵約束
cname varchar(255) unique, -- 唯一約束
cpassword varchar(255) not null, -- 非空約束
)
-- 表級約束
drop table if exists t_student;
create table t_student(
sid int auto_increment, -- 自增
classid int,
sname varchar(255),
scode varchar(255),
spassword varchar(255),
-- 聯合約束,兩者其一俱備唯一性即可
unique(sname,scode),
-- 復合主鍵
primary key(sid,spassword)
-- 外鍵引用
foreign key(classid) references t_class(cid)
)
drop
-- 刪除一張表
drop table 表名;
-- 如果表存在則刪除,mysql特有語句
drop table if exists 表名;
alter
DML語句 數據操作語言
insert
介紹:往表里添加數據。
-- 添加一行記錄
insert into
表名(字段名1, 字段名2, ...)
values (數據1, 數據2, ...);
-- 添加一行記錄,省略字段
insert into 表名
values (數據1, 數據2, ...);
-- 添加兩行記錄
insert into
表名(字段名1, 字段名2, ...)
values
(數據1, 數據2, ...),
(數據1, 數據2, ...);
-- 將查詢結果插入到一張表中:insert into 表名 select語句;
insert into t_test select * from emp;
update
修改表中的數據
-- 語法格式:update 表名 set 字段名1=值1,字段名2=值2...where條件;
update
emp
set
ename = 'black', sal = 1234
where
deptno = 10;
delete
刪除表中的數據
-- 語法格式:delete from 表名 where條件
delete from emp where deptno = 10;
truncate
介紹:永久截斷(刪除)表中的數據,不可回滾。
truncate table emp;
index(索引)
介紹:主鍵和具有unique約束的字段會自動添加索引。
# create index 索引名稱 on 表名(字段名); # drop index 索引名稱 on 表名; -- 給sal字段添加索引 create index emp_sal_index on emp(sal); -- 刪除索引 drop index emp_sal_index;
view(視圖)
只能通過DQL語句創建視圖對象。
可以對視圖進行CRUD操作。
對視圖進行增刪改查,會影響到原表數據。
-- 創建視圖
create view myview as select empno,ename from emp;
-- 刪除視圖
drop view myview;
DQL語句 數據查詢語言
select
select -- execute order 5
...
from -- execute order 1
where -- execute order 2
...
group by -- execute order 3
...
having -- execute order 4
...
order by -- execute order 6
...
limit -- execute order 7
...
條件查詢運算符
運算符 | 說明 |
---|---|
= | 等於 |
<> 或 != | 不等於 |
< | 小於 |
<= | 小於等於 |
> | 大於 |
>= | 大於等於 |
between ... and ... | 兩個值之間 |
is null | 為空(is not null 不為空) |
and | 與 |
or | 或 |
in( , ) | 包含(not in(,) 不包含) |
not | 取非 |
like | 模糊查詢(使用 % 與 _ 匹配) |
order by
-- asc表示升序,desc表示降序,默認是升序
select 字段... from 表名 order by 字段 desc;
-- 多字段排序,越靠前的字段越起主導作用,優先滿足前排字段的條件
# 例子,emp是員工表,ename是員工名,sal是員工工資
select ename,sal from emp order by sal desc, ename asc;
多行處理函數
函數 | 說明 |
---|---|
count() | 取得記錄數 |
sum() | 求和 |
avg() | 取平均值 |
max() | 獲取最大值 |
min() | 獲取最小值 |
注意一:所有的多行處理函數都是對某一組數據進行操作
注意二:多行處理函數自動忽略 null
注意三:多行處理函數不能出現在where子句中
注意四:多行處理函數在group by語句后執行
# emp是員工表,sal 是員工工資
select sum(sal) from emp; -- 找出工資總和
select avg(sal) from emp; -- 算出平均工資
select max(sal) from emp; -- 找出最高工資
select min(sal) from emp; -- 找出最低工資
select count(*) from emp; -- 找出總條數
select count(sal) from emp; -- 找出不為null的條數
ifnull()
# emp是員工表,comm 是員工津貼
-- ifnull(可能為null的數據,被當做什么處理)
select ename,ifnull(comm,0) from emp;
distinct
-- 去除重復記錄
select distinct 字段 from 表名;
-- distinct 修飾多個字段時,所有字段聯合去重
select distinct 字段1,字段2... from 表名;
注意一:distinct 只能出現在所有字段的最前方
join...on...
語法格式 | 說明 |
---|---|
inner join...on... |
內連接,只會將參與連接的表A,表B相匹的數據查詢出來。inner 關鍵字可省略。 |
left outer join...on... |
外連接,優先查詢主表,副表無匹配項時以 null 填充。left 修飾左邊的表為主表,outer 關鍵字可省略。 |
right outer join...on... |
外連接,優先查詢主表,副表無匹配項時以 null 填充。right 修飾右邊的表為主表,outer 關鍵字可省略。 |
union
介紹:可將兩次查詢的結果拼接成一張表,通常用於拼接兩張毫不相干的表。
注意:參與拼接的表列數必須相同
-- 語法
select
...
from
...
union
select
...
from
...
TCL語句 事務控制語言
介紹:事務(Transaction)
和事務有關的語句只有 DML語句(
insert, delete, update
)
-- 開啟事務
start transaction;
-- 回滾
rollback;
-- 提交
commit;
-- 設置回滾點, 回滾:rollback name;
savepoint name;
DCL語句 數據控制語言
補充知識
在 sql 中,null 參與運算的結果必定為 null。
示例數據表的代碼
-- 部門表
create table dept(
deptno int primary key auto_increment, -- 部門編號
dname varchar(14) , -- 部門名字
loc varchar(13) -- 地址
) ;
-- 員工表
create table emp(
empno int primary key auto_increment,-- 員工編號
ename varchar(10), -- 員工姓名 -
job varchar(9), -- 崗位
mgr int, -- 直接領導編號
hiredate date, -- 雇佣日期,入職日期
sal int, -- 薪水
comm int, -- 提成
deptno int not null, -- 部門編號
foreign key (deptno) references dept(deptno)
);
insert into dept values(10,'財務部','北京');
insert into dept values(20,'研發部','上海');
insert into dept values(30,'銷售部','廣州');
insert into dept values(40,'行政部','深圳');
insert into emp values(7369,'劉一','職員',7902,'1980-12-17',800,null,20);
insert into emp values(7499,'陳二','推銷員',7698,'1981-02-20',1600,300,30);
insert into emp values(7521,'張三','推銷員',7698,'1981-02-22',1250,500,30);
insert into emp values(7566,'李四','經理',7839,'1981-04-02',2975,null,20);
insert into emp values(7654,'王五','推銷員',7698,'1981-09-28',1250,1400,30);
insert into emp values(7698,'趙六','經理',7839,'1981-05-01',2850,null,30);
insert into emp values(7782,'孫七','經理',7839,'1981-06-09',2450,null,10);
insert into emp values(7788,'周八','分析師',7566,'1987-06-13',3000,null,20);
insert into emp values(7839,'吳九','總裁',null,'1981-11-17',5000,null,10);
insert into emp values(7844,'鄭十','推銷員',7698,'1981-09-08',1500,0,30);
insert into emp values(7876,'郭十一','職員',7788,'1987-06-13',1100,null,20);
insert into emp values(7900,'錢多多','職員',7698,'1981-12-03',950,null,30);
insert into emp values(7902,'大錦鯉','分析師',7566,'1981-12-03',3000,null,20);
insert into emp values(7934,'木有錢','職員',7782,'1983-01-23',1300,null,10);