北京網(wǎng)站制作建設(shè)公司流感用什么藥最好
DDL: 數(shù)據(jù)定義語(yǔ)言 Definition,用來(lái)定義數(shù)據(jù)庫(kù)對(duì)象(數(shù)據(jù)庫(kù)、表、字段)CREATE、DROP、ALTER
DML: 數(shù)據(jù)操作語(yǔ)言 Manipulation,用來(lái)對(duì)數(shù)據(jù)庫(kù)表中的數(shù)據(jù)進(jìn)行增刪改 INSERT、UPDATE、DELETE
注意:
DDL是改變表的結(jié)構(gòu)
DML是改變表的數(shù)據(jù)
DQL: 數(shù)據(jù)查詢語(yǔ)言 Query,用來(lái)查詢數(shù)據(jù)庫(kù)中表的記錄 SELECT、FROM、WHERE
DCL: 數(shù)據(jù)控制語(yǔ)言 Control,用來(lái)創(chuàng)建數(shù)據(jù)庫(kù)用戶、控制數(shù)據(jù)庫(kù)的控制權(quán)限 GRANT、REVOKE
注意:
DQL就是查詢數(shù)據(jù)
DCL改變用戶權(quán)限
數(shù)據(jù)庫(kù)基本操作
1、查詢所有數(shù)據(jù)庫(kù)
show databases;
2、查詢當(dāng)前數(shù)據(jù)庫(kù)
select database();
3、使用數(shù)據(jù)庫(kù)
use 數(shù)據(jù)庫(kù)名;
4、查詢當(dāng)前數(shù)據(jù)庫(kù)所有表
show tables;
5、查詢表的結(jié)構(gòu)
desc 表名;
UTF8字符集長(zhǎng)度為3字節(jié),有些符號(hào)占4字節(jié),所以推薦用utf8mb4字符集
DDL
1、創(chuàng)建數(shù)據(jù)庫(kù)
create database 數(shù)據(jù)庫(kù)名;
2、刪除數(shù)據(jù)庫(kù)
drop database 數(shù)據(jù)庫(kù)名;
3、創(chuàng)建表(最后一個(gè)字段后面沒有逗號(hào))
create table 表名(
字段1 字段1類型,
字段2 字段2類型,
字段3 字段3類型,
…
字段n 字段n類型
);
4、查詢指定表的建表語(yǔ)句
show create table 表名;
5、alter的使用:
添加字段:alter table 表名 add 字段名 類型;
修改數(shù)據(jù)類型:alter table 表名 modify 字段名 新的數(shù)據(jù)類型;
修改字段名和字段類型:
alter table 表名 change 原來(lái)字段名字 新的字段名字 字段類型;
刪除字段:alter table 表名 drop 字段名;
修改表名:alter table 表名 rename to 新的表名;
6、刪除操作
刪除表:drop table 表名;
刪除表并且重新創(chuàng)建該表:truncate table 表名;
數(shù)據(jù)類型
1、數(shù)值類型
有符號(hào)(signed)
無(wú)符號(hào)(unsigned)
區(qū)別: 是否允許出現(xiàn)負(fù)數(shù)
2、字符串類型
3、日期時(shí)間類型
DML
添加數(shù)據(jù):insert
修改數(shù)據(jù):update
刪除數(shù)據(jù):delete
添加數(shù)據(jù)
1、指定的字段
insert into 表名 (字段名1,字段名2,…) values(值1,值2,…);
2、全部的字段
insert into 表名 values(值1,值2,…);
批量的添加數(shù)據(jù)
insert into 表名 (字段名1,字段名2,…) values(值1,值2,…),(值1,值2,…),(值1,值2,…);
或者
insert into 表名 values(值1,值2,…),(值1,值2,…),(值1,值2,…);
注意
1、字符串和日期類型的數(shù)據(jù)應(yīng)該包含在引號(hào)里面
2、插入的數(shù)據(jù)大小應(yīng)該在字段的規(guī)定范圍內(nèi)
更新操作
修改數(shù)據(jù)
update 表名 set 字段名1 = 值1,字段名2 = 值2,… [where 條件];
注意:
修改語(yǔ)句的條件如果沒有那么就會(huì)去修改整張表的所有數(shù)據(jù) update
刪除操作
刪除數(shù)據(jù)
delete from 表名 [where 條件];
注意
刪除語(yǔ)句的條件如果沒有那么就會(huì)去刪除整張表的所有數(shù)據(jù) delete
delete語(yǔ)句是不可以去刪除某一個(gè)字段的值的
可以使用update將其設(shè)置為null
DQL
模板:
SELECT字段列表
FROM表名字段
WHERE條件列表
GROUP BY分組字段列表
HAVING分組后的條件列表
ORDER BY排序字段列表
LIMIT分頁(yè)參數(shù)
1基礎(chǔ)查詢
1、查詢多個(gè)字段
select 字段1,字段2,字段3,… from 表名;
select * from 表名;
2、設(shè)置別名
select 字段 as 別名 from 表名;
或者
select 字段 別名 from 表名;
3、去除重復(fù)記錄
select distinct 字段 from 表名;
2條件查詢
select 字段列表 from 表名 where 條件列表;
3聚合函數(shù)
將一列數(shù)據(jù)作為一個(gè)整體來(lái)進(jìn)行縱向的計(jì)算
select 聚合函數(shù)(字段列表) from 表名;
注意:
null值是不參與聚合函數(shù)的運(yùn)算的
4分組查詢
注意
where和having的區(qū)別:
1、where是分組之前進(jìn)行過(guò)濾,不滿足where條件不參與分組,having是分組后對(duì)結(jié)果進(jìn)行過(guò)濾。
2、where不能對(duì)聚合函數(shù)進(jìn)行判斷,而having可以。
執(zhí)行順序
where > 聚合函數(shù) > having
分組之后,查詢的字段一般為聚合函數(shù)和分組字段,查詢其他字段無(wú)任何意義
5排序查詢
asc 是 升序排序
desc 是 降序排序
注意
如果是多字段排序,當(dāng)?shù)谝粋€(gè)字段值相同時(shí),才會(huì)根據(jù)第二個(gè)字段進(jìn)行排序
6分頁(yè)查詢
limit 起始索引,查詢記錄數(shù);
注意
1、起始索引從0開始,起始索引 = (查詢頁(yè)碼 - 1) * 每頁(yè)顯示記錄數(shù)
2、如果查詢的是第一頁(yè)數(shù)據(jù),起始索引可以省略
DQL語(yǔ)句的執(zhí)行順序
執(zhí)行順序:from、where、group by、having、select、order by、limit
注意
根據(jù)sql的執(zhí)行順序可知:group by 和 having 是在select的前面的,那么select 里面起的別名怎么還可以在having里面使用呢?
--年齡小于45,并根據(jù)工作地址分組,獲取員工數(shù)量大于等于3的工作地址select workaddress, count(*) address_count from employee where age < 45 group by workaddress having address_count >= 3;
DCL
用來(lái) 管理數(shù)據(jù)庫(kù)用戶 以及 控制數(shù)據(jù)庫(kù)的訪問權(quán)限
管理用戶
1、查詢用戶
user mysql;
select * from user;
2、創(chuàng)建用戶
create user '用戶名'@'主機(jī)名' identified by '密碼';
3、修改用戶密碼
alter user ‘用戶名’@‘主機(jī)名’ identified with mysql_native_password by ‘新密碼’;
4、刪除用戶
drop user '用戶名'@'主機(jī)名';
注意
創(chuàng)建用戶test,能在任意主機(jī)訪問
create user ‘test’@‘%’ identified by ‘123456’;
也就是說(shuō):主機(jī)名可以使用 % 通配
權(quán)限控制
1、查詢權(quán)限
show grants for '用戶名'@'主機(jī)名';
2、授予權(quán)限
grant 權(quán)限列表(all) on 數(shù)據(jù)庫(kù)名.表名 to '用戶名'@'主機(jī)名';
3、撤銷權(quán)限
revoke 權(quán)限列表(all) on 數(shù)據(jù)庫(kù)名.表名 from ‘用戶名’@‘主機(jī)名’;
注意
1、多個(gè)權(quán)限用逗號(hào)分隔
2、授權(quán)時(shí),數(shù)據(jù)庫(kù)名和表名可以用 * 進(jìn)行通配,代表所有