日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql问题举例_MySql问题总结

發布時間:2025/3/19 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql问题举例_MySql问题总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Q1:主鍵,外鍵,超鍵,候選鍵;

主鍵 對表中數據進行唯一標識的數據列的組合;不能缺失;不能空值;

外鍵 該列為另一表的主鍵;

超鍵 關系中能唯一標識數據的屬性;

候選鍵 不含多余屬性的超鍵;

Q2:數據庫事務的四個特征及含義;

原子性 要么全部完成,要么不完成,若發生錯誤會進行回滾操作;

一致性 開始到結束后,數據庫完整性約束沒收到破壞;(實體完整性,參照完整性,用戶定義的完整性)

隔離性 事務與事務之間相隔離,串行化執行;

持久性 事務完成對數據的影響是永久的;

Q3:視圖的作用,可以更改嗎;

視圖是虛擬的表;只包含動態檢索數據的查詢,不包含數據;簡化操作,隱藏細節,保護數據;對視圖的更新會作用于基表,一般不更新;

Q4:drop,delete和truncate ;

drop 表級的刪除;不能回滾;

truncate 清空表;不記錄單行刪除日志;無法恢復;只能對于TABLE操作;不能在帶FOREIGN KEY約束的表(被引用的表)中使用;計數從頭開始;

delete 配合where刪除數據;會記錄日志用于回歸;會觸發觸發器;不減少索引和表的空間;

Q5:索引的工作原理和其種類;

索引的實現通常采用B樹或B+樹,加快查詢速度也消耗更多空間;

唯一索引 不允許任何兩行具相同值

主鍵索引 唯一索引的一種

聚集索引 行的物理順序和鍵值的索引順序相同

普通索引 無限制

全文索引 針對較大的數據生成全文索引很耗時間空間

組合索引 最左前綴原則:若對多列建立組合索引,若第二列未使用索引,則第三列也不會使用

InnoDB 主索引:InnoDB的數據文件本身;輔助索引:相應記錄主鍵的值

MyISAM 索引與數據分離;輔助索引:與主索引無區別;

Q6:連接的種類

內部聯接(等值聯接) INNER JOIN

外部聯接(包含在相關表中沒有關聯行的行) LEFT OUTER JOIN

RIGHT OUTER JOIN

Q7:數據庫范式

1NF 每一列都是不可分割的基本數據項,同一列無二值;無重復的域;

2NF 實例依賴于主鍵部分;

3NF 屬性不依賴于其他非主屬性;

Q8:存儲過程與觸發器的區別

存儲過程和觸發器都是SQL語句集;觸發器不可用CALL調用,而是在用戶執行某些語句后自動調用;

Q9:分表與分區

分表 真正的分表,每張表對應三個文件;提高MYSQL的并發能力;

分區 表中的數據分成多個區塊;突破磁盤的讀寫能力;

Q10:數據庫隔離級別

臟讀 一個事務讀取了另一個事務未提交的數據

不可重復讀 在一次事務范圍內,讀取同一數據產生了不同的值

虛讀 讀取整體的數據后,因其他事務對數據的更新,再次查詢時結果不同

串行化 3種均可避免

可重復讀(默認) 避免1,2

讀已提交 1

讀未提交 無

Q11:MYSQL的兩種存儲引擎

MYISAM 不支持事務,不支持外鍵,表鎖;插入數據時鎖定整個表,查行數時無需整表掃描

INNODB 支持事務,外鍵,行鎖,查表總行數時,全表掃描;

Q12:MYSQL索引算法

HASH 適合等值查找,不適合范圍,不能排序

BTREE 適合范圍查找,無hash沖突

Q13:聚集索引和非聚集索引

聚集索引 數據按索引順序存儲,節點存儲的是真實數據

非聚集索引 節點存儲的是指向真正數據的指針

Q14:索引的優缺點

優點 提高查詢效率

缺點 降低了更新效率

Q15:兩種存儲引擎索引的區別

Innodb 主索引的數據文件本身就是索引文件;輔助索引記錄主鍵的值;

MyISAM 主索引數據文件和索引文件分離;與主索引無區別;

Q16:數據庫的主從復制

一個服務器作為主服務器,一個或多個服務器作為從服務器,主服務器將更新寫到二進制日志,當一個從服務器連接到主服務器時,通知主服務器讀取日志,接收從那時起發生的所有更新。解決:數據分布,負載平衡,備份,高可用性和容錯性

基于語句 在主服務器上執行的語句,在從服務器上也執行

基于行 將改變的內容復制過去

混合類型 語句復制失敗時采用行的形式

Q17:數據庫連接池

為數據庫連接建立一個緩沖池,防止過于大量的連接的建立與管理;

Q18:存儲過程

存儲過程是一些預編譯的SQL語句,執行效率較高

Q19:樂觀鎖和悲觀鎖

樂觀鎖 假定不會發生并發沖突,只在提交時檢查,若有其他數據更新了數據,則回滾;使用數據版本標示數據(時間戳,版本號)

悲觀鎖 假定會發生并發沖突,屏蔽一切破壞數據庫一致性的操作,主要用于數據爭用激烈的環境,以及鎖成本低于回滾成本時;排他鎖;

25、 對于關系型數據庫而言,索引是相當重要的概念,請回答有關索引的幾個問題:

a)、索引的目的是什么?

快速訪問數據表中的特定信息,提高檢索速度

創建唯一性索引,保證數據庫表中每一行數據的唯一性。

加速表和表之間的連接

使用分組和排序子句進行數據檢索時,可以顯著減少查詢中分組和排序的時間

b)、索引對數據庫系統的負面影響是什么?

負面影響:

創建索引和維護索引需要耗費時間,這個時間隨著數據量的增加而增加;索引需要占用物理空間,不光是表需要占用數據空間,每個索引也需要占用物理空間;當對表進行增、刪、改、的時候索引也要動態維護,這樣就降低了數據的維護速度。

c)、為數據表建立索引的原則有哪些?

在最頻繁使用的、用以縮小查詢范圍的字段上建立索引。

在頻繁使用的、需要排序的字段上建立索引

d)、 什么情況下不宜建立索引?

對于查詢中很少涉及的列或者重復值比較多的列,不宜建立索引。

對于一些特殊的數據類型,不宜建立索引,比如文本字段(text)等

26、 簡述在MySQL數據庫中MyISAM和InnoDB的區別

區別于其他數據庫的最重要的特點就是其插件式的表存儲引擎。切記:存儲引擎是基于表的,而不是數據庫。

InnoDB與MyISAM的區別:

InnoDB存儲引擎:主要面向OLTP(Online Transaction Processing,在線事務處理)方面的應用,是第一個完整支持ACID事務的存儲引擎(BDB第一個支持事務的存儲引擎,已經停止開發)。

特點:

· 行鎖設計、支持外鍵,支持事務,支持并發,鎖粒度是支持mvcc得行級鎖;

MyISAM存儲引擎:是MySQL官方提供的存儲引擎,主要面向OLAP(Online Analytical Processing,在線分析處理)方面的應用。

特點:

不支持事務,鎖粒度是支持并發插入得表級鎖,支持表所和全文索引。操作速度快,不能讀寫操作太頻繁;

SQL常用的一些關鍵字

1、distinct關鍵字

顯示沒有重復記錄的商品名稱,商品價格和商品類別列表

select distinct ware_name,price from t_ware;

2、使用計算列

查詢所有商品價格提高20%后的價格

select ware_id,ware_name,price*1.2 from t_ware'

3、列的別名

a) 不使用as

select ware_id,ware_name,price*1.2 price_raise from t_ware;

b)使用as

select ware_id,ware_name,price*1.2 price_raise from t_ware;

4、使用邏輯表達式

a)not 顯示商品價格不大于100的商品

select?ware_id,ware_name,price,category_id from?t_ware where?not?price>100;

b)or 顯示商品類別編號為5或6或7的商品

select?ware_id,ware_name,price,category_id from?t_ware where?category_id or?category_id=6?or?category_id=7;

c)and 顯示商品價格大于100且商品類別編號為5的商品

select?ware_id,ware_name,price,category_id from?t_ware where?not?price>100?and?category_id = 5;

5、使用between關鍵字

顯示商品價格在200元至1000元之間的商品(留心一下,是半開區間還是封閉區間?)

select ware_id,ware_name,price,category_id from t_ware where price between 200 and 1000;

6、使用in關鍵字

顯示商品類別為5,6,7且價格不小于200元的商品

select ware_id,ware_name,price,category_id from t_ware where category_id in (5,6,7) and price>=200;

7、使用like子句進行模糊查詢

a)%(百分號)表示0到n個任意字符

select?ware_id,ware_name,price,category_id from?t_ware where?ware_name like?'%純棉%';

b)_(下劃線)表示單個的任意字符

select?ware_id,ware_name,price,category_id from?t_ware where?ware_name like??'%長袖_恤%';

8、轉義字符escape的使用

select ware_id,ware_name,price,category_id from t_ware where ware_name like '%\%%' escape '\';

9、使用order by給數據排序

select * from t_ware_category where parent_id = 0 order by ware_id ;

select * from t_ware_category where parent_id = 0 order by ware_id asc;

select * from t_ware_category where parent_id = 0 order by ware_id desc ;

rownum

a)查詢前20條商品記錄

select?ware_id,ware_name,price from?t_ware where?rownum?<= 20;

b)查詢第11條至第20條記錄

select?ware_id,ware_name,price from?t_ware where?rownum<=10?and?ware_id not?in(select?ware_id from?t_ware where?rownum<=10);

10、常用統計函數

a)sum()返回一個數字列或計算列的總和 select sum(price) from t_ware;

b)avg()對一個數字列或計算列球平均值

c)min()返回一個數字列或一個數字表達式的最小值

d)max()返回一個數字列或一個數字表達式的最大值

e)count()返回滿足select語句中指定的條件的記錄值

11、多表查詢和笛卡爾乘積

查詢商品編號,商品名稱,商品價格和商品類別名稱

select t_ware.ware_id, t_ware.ware_name, t_ware.price ,t_ware_category_name from t_ware, t_ware_category ?where t_ware.category_id=t_ware_category.category_id;

使用join

a)左連接

select t_ware.ware_id,t_ware.ware_name,t_ware.price,t_ware_category.category_name from t_ware left join t_ware_category on t_ware.category_id=t_ware_category.category_id;

select w.ware_id,w.ware_name,w.price,wc.category_name from t_ware w left join t_ware_category wc on w.category_id=wc.category_id;

b) 右連接

select?t_ware.ware_id,t_ware.ware_name,t_ware.price,t_ware_category.category_name from?t_ware left?join?t_ware_category on?t_ware.category_id=t_ware_category.category_id;

12、使用union

select?ware_id,ware_name from?t_ware where?ware_name like?'%T恤%'?union?select?ware_id,ware_name from?t_ware where?ware_name like?'%手提包%'

13、使用group by

a)統計每個二級類別下有多少商品,以及商品總價值

select?w.category_id,wc.category_name,count(w.ware_id),sum(w.price) from?t_ware w left?join?t_ware_category wc on?w.category_id=wc.category_id group?by?w.category_id,wc.category_name;

b) 統計每個一級類別下有多少商品,以及商品總價值

select?wc2.category_id,wc2.category_name,sum(w.price) from?t_ware w left?join?t_ware_category wc on?w.category_id=wc.category_id left?join?t_ware_category wc2 on?wc.parent_id=wc2.category_id group?by?wc2.category_id,wc2.category_name;

14、使用having對結果進行篩選

–舉例子說明:查詢table表查詢每一個班級中年齡大于20,性別為男的人數

select?COUNT(*)as?'>20歲人數',classid ?from?Table1 where?sex='男'?group?by?classid,age having?age>20

需要注意說明:當同時含有where子句、group by 子句 、having子句及聚集函數時,執行順序如下:

執行where子句查找符合條件的數據;

使用group by 子句對數據進行分組;對group by 子句形成的組運行聚集函數計算每一組的值;最后用having 子句去掉不符合條件的組。

having 子句中的每一個元素也必須出現在select列表中。有些數據庫例外,如oracle.

having子句和where子句都可以用來設定限制條件以使查詢結果滿足一定的條件限制。

having子句限制的是組,而不是行。where子句中不能使用聚集函數,而having子句中可以

總結

以上是生活随笔為你收集整理的mysql问题举例_MySql问题总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。