-
互聯(lián)網(wǎng)安全法,互聯(lián)網(wǎng)凈網(wǎng)行動(dòng)
-
”凈網(wǎng)2020”落實(shí)好維護(hù)網(wǎng)絡(luò)安全責(zé)任
-
關(guān)于端午節(jié)放假通知-宇眾網(wǎng)絡(luò)
-
宇眾網(wǎng)絡(luò)春節(jié)放假通知
-
關(guān)于公司收款銀行賬戶變更通知函-宇眾網(wǎng)絡(luò)
-
關(guān)于網(wǎng)上有人冒充我公司名義進(jìn)行詐騙的公告。
-
關(guān)于端午節(jié)放假通知,節(jié)日放假,但是我們業(yè)務(wù)不“放假”-宇眾網(wǎng)絡(luò)
-
工信部進(jìn)一步加強(qiáng)未備案網(wǎng)站管理工作的通知-宇眾網(wǎng)絡(luò)
-
關(guān)于東莞市宇眾網(wǎng)絡(luò)科技有限公司香港數(shù)據(jù)中心(香港機(jī)房)路由優(yōu)化通知
-
宇眾網(wǎng)絡(luò)慶祝五·一勞動(dòng)節(jié)快樂(lè)
-
東莞東城機(jī)房網(wǎng)絡(luò)升級(jí)通知
-
臨近過(guò)年,互聯(lián)網(wǎng)IDC貴圈也有被騙的,請(qǐng)認(rèn)準(zhǔn)宇眾網(wǎng)絡(luò)公司官方聯(lián)系方式
-
我司已獲得ISP/ICP/IDC三證資格,更好的為客戶服務(wù)
-
關(guān)于浙江金華高防機(jī)房網(wǎng)絡(luò)線路切割通知
-
工信部近日下發(fā)關(guān)于進(jìn)一步規(guī)范域名備案工作的通知
行業(yè)資訊
- 首頁(yè)
- 新聞中心
- 行業(yè)資訊
服務(wù)器:mysql 查詢+事務(wù)
DQL排序查詢
/*
默認(rèn)升序排序
desc -- 降序排序
asc -- 升序排序
*/
select * from emp order by sal;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
DQL聚合函數(shù)
- 作用:將一列數(shù)據(jù)作為一個(gè)整體,進(jìn)行縱向的計(jì)算
- 語(yǔ)法格式: select 聚合函數(shù)(字段名) from 表名 [where 條件]
/*
- count() 統(tǒng)計(jì)個(gè)數(shù)
- sum() 求和
- max() 求最大值
- min() 求最小值
- avg() 求平均數(shù)
*/
select avg(sal) as '平均薪資' from emp where deptno = 20;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
DQL分組查詢
/*
分組查詢 使用group by 子句
語(yǔ)法格式: select 分組字段/聚合函數(shù) from 表名 group by 分組字段
*/
//查詢平局薪資大于2000的部門(mén)
select deptno, avg(sal)
from emp where deptno is not null group by deptno
having avg(sal) > 2000;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
limit關(guān)鍵字
通過(guò)limit關(guān)鍵字去指定要查詢數(shù)據(jù)的條數(shù),行數(shù)
select 字段 from 表名 limit offset,length;
`offset: 起始行數(shù),默認(rèn)從0開(kāi)始計(jì)數(shù)
length: 返回的行數(shù)(要查尋幾條數(shù)據(jù))
約束
約束名 | 約束關(guān)鍵字 |
---|---|
主鍵 | primary key |
唯一 | unique |
非空 | not null |
外鍵 | foreign key |
主鍵約束 primary key
特點(diǎn) | 不可重復(fù) 唯一 非空 |
---|---|
作用 | 用來(lái)表示數(shù)據(jù)庫(kù)中的每一條記錄 |
/*
* 約束是指對(duì)數(shù)據(jù)進(jìn)行一定的限制,來(lái)保證數(shù)據(jù)的完整性、有效性、正確性
**/
//主鍵約束--第一種寫(xiě)法
create table student(
sid int(4) primary key,
sname varchar(20)
);
//主鍵約束--第二種寫(xiě)法
create table student(
sid int(4),
sname varchar(20),
primary key(sid) //--指定sid為主鍵約束
);
//主鍵約束--第二種寫(xiě)法
create table student(
sid int(4),
sname varchar(20)
);
/*通過(guò)DDL語(yǔ)句添加主鍵約束*/
alter table student add primary key(sid);
/*通過(guò)DDL語(yǔ)句刪除主鍵*/
alter table student drop primary key;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
/**
* 主鍵自增
* 關(guān)鍵字: auto_increment 主鍵的自動(dòng)增長(zhǎng) ,字段類(lèi)型必須是整數(shù)類(lèi)型
*/
create table student(
sid int(4) primary key auto_increment,
sname varchar(20)
) auto_increment=100; //自定義自增的起始位置,不寫(xiě)默認(rèn)從1開(kāi)始
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
delete 和 truncate對(duì)自增長(zhǎng)得影響
- delete 刪除表中的所有數(shù)據(jù),將表中的數(shù)據(jù)逐條刪除
- truncate 刪除表中的所有數(shù)據(jù),是將整個(gè)表刪除,然后在創(chuàng)建一個(gè)結(jié)構(gòu)相同表
/*delete 刪除所有數(shù)據(jù)*/
delete from student; //刪除對(duì)自增是沒(méi)有影響的
/*truncate 刪除所有數(shù)據(jù)*/
truncate table student;
- 1
- 2
- 3
- 4
非空約束 not null
/*添加非空約束*/
create table student(
sid int(4) primary key auto_increment,
sname varchar(20) not null //sname這列數(shù)據(jù)不可以為null
) ;
- 1
- 2
- 3
- 4
- 5
唯一約束 unique
/*表中的某一列不可以重復(fù)(對(duì)null值,不做唯一判斷)*/
create table student(
sid int(4) primary key auto_increment,
sname varchar(20) unique
) ;
- 1
- 2
- 3
- 4
- 5
- 6
主鍵約束: 唯一并且不可以為null
唯一約束: 唯一但是可以為null
默認(rèn)值:字段名 字段類(lèi)型 default 默認(rèn)值
MySQL事務(wù)操作
事務(wù),是一個(gè)有一條或者多條sql語(yǔ)句組成的整體,事務(wù)中的操作,要么全部成功,要么全部失敗。
手動(dòng)提交事務(wù)
功能 | 語(yǔ)句 |
---|---|
開(kāi)啟事務(wù) | start transaction; 或者begin |
提交事務(wù) | commit |
回滾事務(wù) | rollback |
-
start transaction
這個(gè)語(yǔ)句顯示的標(biāo)記一個(gè)事務(wù)的起始點(diǎn) -
commit
表示提交事務(wù), 即提交事務(wù)的所有操作,具體的說(shuō),就是講事務(wù)中所有對(duì)數(shù)據(jù)庫(kù)的更新都寫(xiě)到磁盤(pán)上的物理數(shù)據(jù)庫(kù)中,事務(wù)正常結(jié)束。 -
rollback
表示撤銷(xiāo)事務(wù),即在事務(wù)運(yùn)行的過(guò)程中發(fā)生了某種故障,事務(wù)不能繼續(xù)進(jìn)行,系統(tǒng)將事務(wù)中對(duì)數(shù)據(jù)庫(kù)所有已完成的操作全部撤銷(xiāo),回滾到事務(wù)開(kāi)始時(shí)的狀態(tài)。
事務(wù)的自動(dòng)提交
/**
* 查看事務(wù)是否手動(dòng)提交 (平常默認(rèn)就是自動(dòng)提交)
* 如果 autocommit 為on 則表示自動(dòng)提交
*/
show variables like 'autocommit';
/*修改為手動(dòng)提交*/
set @@autocommit = off;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
事務(wù)的四大特性
特性 | 含義 |
---|---|
原子性 | 每個(gè)事務(wù)都是一個(gè)整體,不可以在拆分,事務(wù)中所有的SQL語(yǔ)句要么都執(zhí)行成功,要么都失敗。 |
一致性 | 事務(wù)在執(zhí)行前數(shù)據(jù)庫(kù)的狀態(tài)與執(zhí)行后數(shù)據(jù)庫(kù)的狀態(tài)保持一致。如:轉(zhuǎn)賬前兩人的總金額是10000, 轉(zhuǎn)賬后兩人的總金額還是10000 |
隔離性 | 事務(wù)與事務(wù)之間不應(yīng)該相互影響,執(zhí)行時(shí)保持隔離的狀態(tài) |
持久性 | 一但事務(wù)執(zhí)行成功,對(duì)數(shù)據(jù)庫(kù)的修改是永久的 ,就算關(guān)機(jī),數(shù)據(jù)也是要保存下來(lái)的 |
事務(wù)的隔離級(jí)別
-
數(shù)據(jù)并發(fā)訪問(wèn)
一個(gè)數(shù)據(jù)庫(kù)可能擁有多個(gè)訪問(wèn)客服端,這些客服端都可以并發(fā)方式訪問(wèn)數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)的相同事務(wù)可能被多個(gè)事務(wù)同時(shí)訪問(wèn),如果不采取隔離措施,就會(huì)導(dǎo)致各種問(wèn)題,破壞事務(wù)的完整性。 -
并發(fā)訪問(wèn)會(huì)產(chǎn)生的問(wèn)題
事務(wù)在操作時(shí)的理想狀態(tài):所有事務(wù)之間保持隔離,互不影響。因?yàn)椴l(fā)操作,多個(gè)用戶同時(shí)訪問(wèn)同一個(gè)數(shù)據(jù),可能引起并發(fā)訪問(wèn)的問(wèn)題。
并發(fā)訪問(wèn)的問(wèn)題 | 說(shuō)明 |
---|---|
臟讀 | 一個(gè)事務(wù)讀取到了另一個(gè)事務(wù)中尚未提交的數(shù)據(jù) |
不可重復(fù)讀 | 一事務(wù)中兩次讀取的數(shù)據(jù)內(nèi)容不一致,要求的是在一個(gè)事務(wù)中多次讀取時(shí)數(shù)據(jù)是一致的。這一般是update操作時(shí)引發(fā)的問(wèn)題 |
幻讀 | 一個(gè)事務(wù)中,某一次的 select 操作所得到的結(jié)果所表征的數(shù)據(jù)狀態(tài),無(wú)法支撐后序的業(yè)務(wù)操作。查詢得到的數(shù)據(jù)狀態(tài)不準(zhǔn)確,導(dǎo)致幻讀 |
四種隔離級(jí)別
-
read uncommitted--------讀未提交
可以防止哪些問(wèn)題: 無(wú) -
read committed--------讀已提交(Oracle 默認(rèn)隔離級(jí)別)
可以防止哪些問(wèn)題: 臟讀 -
repeatable read-------可重復(fù)讀(MySQL 默認(rèn)隔離級(jí)別)
可以防止哪些問(wèn)題: 臟讀,不可重復(fù)讀 -
serializable ------- 串行化
可以防止哪些問(wèn)題: 臟讀,不可重復(fù)讀,幻讀 -
注意: 隔離級(jí)別從小到大,安全性是越來(lái)越高,但是效率是越來(lái)越低的,根據(jù)不同的情況來(lái)選擇不同的隔離級(jí)別
隔離級(jí)別的相關(guān)命令
/*
*查看隔離級(jí)別--mysql中默認(rèn)顯示為 repeatable-read
**/
select @@tx_isolation;
/*
*設(shè)置隔離級(jí)別--新開(kāi)鏈接才能查看隔離級(jí)別成功設(shè)置
**/
set global transaction isolation level 隔離級(jí)別
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
解決臟讀的問(wèn)題
臟讀是非常危險(xiǎn)的,比如張三向李四購(gòu)買(mǎi)商品,張三開(kāi)啟事務(wù)后向李四轉(zhuǎn)賬500塊錢(qián),然后李四查詢這個(gè)錢(qián)已經(jīng)到賬了就把貨物交給了張三,張三收到貨后回滾事務(wù),李四再查時(shí)這500塊錢(qián)沒(méi)了。
- 解決方案:
一般來(lái)說(shuō),這應(yīng)該是隔離級(jí)別較低,比如read uncommitted級(jí)別,這時(shí)將級(jí)
別提高到read committed及以上就好了
- 1
- 2
- 3
- 4
解決不可重復(fù)讀的問(wèn)題
不可重復(fù)讀就相當(dāng)于我第一次查詢時(shí)手機(jī)上短信顯示為1000元,然后我給卡里邊充了500,然后在電腦屏幕端顯示1500元,在我不知道已經(jīng)充了錢(qián)的情況下我不知道該選擇哪條短信。
- 解決方案:
和臟讀差不多,將全局的隔離級(jí)別提高到repeatable read 及以上
就好了
- 1
- 2
- 3
解決幻讀的問(wèn)題
幻讀還是一樣,將隔離級(jí)別提到最高就好了,當(dāng)然也可深入了解