亚洲午夜无码久久,今天高清视频免费观看,欧美一夜爽爽爽爽爽爽,在线亚洲欧美日韩精品专区

行業(yè)資訊

服務(wù)器:mysql 查詢+事務(wù)


2020年11月27日

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)然也可深入了解

幻讀解決方案


客服