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

行業(yè)資訊

  • 首頁
  • 新聞中心
  • 行業(yè)資訊

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


2020年11月27日

DQL排序查詢

	/*
	默認升序排序
	desc -- 降序排序
	asc -- 升序排序
	*/
	select * from emp order by sal;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

DQL聚合函數(shù)

  • 作用:將一列數(shù)據(jù)作為一個整體,進行縱向的計算
  • 語法格式: select 聚合函數(shù)(字段名) from 表名 [where 條件]
	/*
	 - count()    統(tǒng)計個數(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 子句 
  語法格式: select 分組字段/聚合函數(shù) from 表名 group by 分組字段 
  */
  //查詢平局薪資大于2000的部門
  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)鍵字
通過limit關(guān)鍵字去指定要查詢數(shù)據(jù)的條數(shù),行數(shù)

select 字段 from 表名 limit offset,length;

`offset: 起始行數(shù),默認從0開始計數(shù)
length: 返回的行數(shù)(要查尋幾條數(shù)據(jù))

約束

約束名 約束關(guān)鍵字
主鍵 primary key
唯一 unique
非空 not null
外鍵 foreign key

主鍵約束 primary key

特點 不可重復(fù) 唯一 非空
作用 用來表示數(shù)據(jù)庫中的每一條記錄
	/*
	*	約束是指對數(shù)據(jù)進行一定的限制,來保證數(shù)據(jù)的完整性、有效性、正確性
	**/
	//主鍵約束--第一種寫法
	create table student(
		sid int(4) primary key,
		sname varchar(20)
	);
	//主鍵約束--第二種寫法
	create table student(
		sid int(4),
		sname varchar(20),
		primary key(sid) 	//--指定sid為主鍵約束
	);
	//主鍵約束--第二種寫法
	create table student(
		sid int(4),
		sname varchar(20) 	
	);
	/*通過DDL語句添加主鍵約束*/
	alter table student add primary key(sid);
	/*通過DDL語句刪除主鍵*/
	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 主鍵的自動增長 ,字段類型必須是整數(shù)類型
	*/
	create table student(
		sid int(4) primary key auto_increment,
		sname varchar(20) 	
	) auto_increment=100; //自定義自增的起始位置,不寫默認從1開始
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

delete 和 truncate對自增長得影響

  • delete 刪除表中的所有數(shù)據(jù),將表中的數(shù)據(jù)逐條刪除
  • truncate 刪除表中的所有數(shù)據(jù),是將整個表刪除,然后在創(chuàng)建一個結(jié)構(gòu)相同表
	/*delete 刪除所有數(shù)據(jù)*/
	delete from student;  //刪除對自增是沒有影響的
	/*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ù)(對null值,不做唯一判斷)*/
	create table student(
		sid int(4) primary key auto_increment,
		sname varchar(20)  unique
	) ;
	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 主鍵約束: 唯一并且不可以為null
  • 唯一約束: 唯一但是可以為null

默認值:字段名 字段類型 default 默認值

MySQL事務(wù)操作
事務(wù),是一個有一條或者多條sql語句組成的整體,事務(wù)中的操作,要么全部成功,要么全部失敗。
手動提交事務(wù)

功能 語句
開啟事務(wù) start transaction; 或者begin
提交事務(wù) commit
回滾事務(wù) rollback
  • start transaction
    這個語句顯示的標記一個事務(wù)的起始點

  • commit
    表示提交事務(wù), 即提交事務(wù)的所有操作,具體的說,就是講事務(wù)中所有對數(shù)據(jù)庫的更新都寫到磁盤上的物理數(shù)據(jù)庫中,事務(wù)正常結(jié)束。

  • rollback
    表示撤銷事務(wù),即在事務(wù)運行的過程中發(fā)生了某種故障,事務(wù)不能繼續(xù)進行,系統(tǒng)將事務(wù)中對數(shù)據(jù)庫所有已完成的操作全部撤銷,回滾到事務(wù)開始時的狀態(tài)。

事務(wù)的自動提交

	/**
	*	查看事務(wù)是否手動提交 (平常默認就是自動提交)
	*	如果 autocommit 為on 則表示自動提交
	*/
	show variables like 'autocommit';
	
	/*修改為手動提交*/
	set @@autocommit = off;
	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

事務(wù)的四大特性

特性 含義
原子性 每個事務(wù)都是一個整體,不可以在拆分,事務(wù)中所有的SQL語句要么都執(zhí)行成功,要么都失敗。
一致性 事務(wù)在執(zhí)行前數(shù)據(jù)庫的狀態(tài)與執(zhí)行后數(shù)據(jù)庫的狀態(tài)保持一致。如:轉(zhuǎn)賬前兩人的總金額是10000, 轉(zhuǎn)賬后兩人的總金額還是10000
隔離性 事務(wù)與事務(wù)之間不應(yīng)該相互影響,執(zhí)行時保持隔離的狀態(tài)
持久性 一但事務(wù)執(zhí)行成功,對數(shù)據(jù)庫的修改是永久的 ,就算關(guān)機,數(shù)據(jù)也是要保存下來的

事務(wù)的隔離級別

  • 數(shù)據(jù)并發(fā)訪問
    一個數(shù)據(jù)庫可能擁有多個訪問客服端,這些客服端都可以并發(fā)方式訪問數(shù)據(jù)庫。數(shù)據(jù)庫的相同事務(wù)可能被多個事務(wù)同時訪問,如果不采取隔離措施,就會導(dǎo)致各種問題,破壞事務(wù)的完整性。

  • 并發(fā)訪問會產(chǎn)生的問題
    事務(wù)在操作時的理想狀態(tài):所有事務(wù)之間保持隔離,互不影響。因為并發(fā)操作,多個用戶同時訪問同一個數(shù)據(jù),可能引起并發(fā)訪問的問題。

并發(fā)訪問的問題 說明
臟讀 一個事務(wù)讀取到了另一個事務(wù)中尚未提交的數(shù)據(jù)
不可重復(fù)讀 一事務(wù)中兩次讀取的數(shù)據(jù)內(nèi)容不一致,要求的是在一個事務(wù)中多次讀取時數(shù)據(jù)是一致的。這一般是update操作時引發(fā)的問題
幻讀 一個事務(wù)中,某一次的 select 操作所得到的結(jié)果所表征的數(shù)據(jù)狀態(tài),無法支撐后序的業(yè)務(wù)操作。查詢得到的數(shù)據(jù)狀態(tài)不準確,導(dǎo)致幻讀

四種隔離級別

  • read uncommitted--------讀未提交
    可以防止哪些問題: 無

  • read committed--------讀已提交(Oracle 默認隔離級別)
    可以防止哪些問題: 臟讀

  • repeatable read-------可重復(fù)讀(MySQL 默認隔離級別)
    可以防止哪些問題: 臟讀,不可重復(fù)讀

  • serializable ------- 串行化
    可以防止哪些問題: 臟讀,不可重復(fù)讀,幻讀

  • 注意: 隔離級別從小到大,安全性是越來越高,但是效率是越來越低的,根據(jù)不同的情況來選擇不同的隔離級別

隔離級別的相關(guān)命令

	/*
	*查看隔離級別--mysql中默認顯示為 repeatable-read
	**/
	select @@tx_isolation;
	
	/*
	*設(shè)置隔離級別--新開鏈接才能查看隔離級別成功設(shè)置
	**/
	set global transaction isolation level 隔離級別
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

解決臟讀的問題

臟讀是非常危險的,比如張三向李四購買商品,張三開啟事務(wù)后向李四轉(zhuǎn)賬500塊錢,然后李四查詢這個錢已經(jīng)到賬了就把貨物交給了張三,張三收到貨后回滾事務(wù),李四再查時這500塊錢沒了。

- 解決方案:

	一般來說,這應(yīng)該是隔離級別較低,比如read uncommitted級別,這時將級
	別提高到read committed及以上就好了
  • 1
  • 2
  • 3
  • 4

解決不可重復(fù)讀的問題
不可重復(fù)讀就相當(dāng)于我第一次查詢時手機上短信顯示為1000元,然后我給卡里邊充了500,然后在電腦屏幕端顯示1500元,在我不知道已經(jīng)充了錢的情況下我不知道該選擇哪條短信。

 - 解決方案:
			和臟讀差不多,將全局的隔離級別提高到repeatable read 及以上
			就好了
  • 1
  • 2
  • 3

解決幻讀的問題
幻讀還是一樣,將隔離級別提到最高就好了,當(dāng)然也可深入了解

幻讀解決方案


客服