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

歡迎訪問 生活随笔!

生活随笔

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

数据库

数据库查询某一列大写转化小写字母表示_算法/开发 面试必看! 【数据库】面试题合集...

發布時間:2025/3/20 数据库 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库查询某一列大写转化小写字母表示_算法/开发 面试必看! 【数据库】面试题合集... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本合集整理了計算機專業相關算法/開發面試中遇到的【數據庫】相關面試題,后續會不斷更新,有需要的小伙伴可以點贊or收藏隨時查閱哦!

Q:數據庫四大特性ACID?

  • Atomicity(原子性):一個事務(transaction)中的所有操作,或者全部完成,或者全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。即,事務不可分割、不可約簡。
  • Consistency(一致性):在事務開始之前和事務結束以后,數據庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設約束、觸發器、級聯回滾等。
  • Isolation(隔離性):數據庫允許多個并發事務同時對其數據進行讀寫和修改的能力,隔離性可以防止多個事務并發執行時由于交叉執行而導致數據的不一致。事務隔離分為不同級別,包括未提交讀(Read uncommitted)、提交讀(read committed)、可重復讀(repeatable read)和串行化(Serializable)。
  • Durability(持久性):事務處理結束后,對數據的修改就是永久的,即便系統故障也不會丟失。

Q:數據庫三范式?

第一范式(確保每列保持原子性)

第一范式是最基本的范式。如果數據庫表中的所有字段值都是不可分解的原子值

第二范式(確保表中的每列都和主鍵相關)

第二范式在第一范式的基礎之上更進一層。第二范式需要確保數據庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵而言)。也就是說在一個數據庫表中,一個表中只能保存一種數據,不可以把多種數據保存在同一張數據庫表中。

第三范式(確保每列都和主鍵列直接相關,而不是間接相關)

第三范式需要確保數據表中的每一列數據都和主鍵直接相關,而不能間接相關。

比如在設計一個訂單數據表的時候,可以將客戶編號作為一個外鍵和訂單表建立相應的關系。而不可以在訂單表中添加關于客戶其它信息(比如姓名、所屬公司等)的字段。如下面這兩個表所示的設計就是一個滿足第三范式的數據庫表。

Q:數據庫索引?

索引的優點?

  • 通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性。
  • 可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。
  • 可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。
  • 在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。
  • 通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能

索引的缺點?

  • 創建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加。
  • 索引需要占物理空間,除了數據表占數據空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大。
  • 當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。

建索引的幾大原則?

  • 最左前綴匹配原則,非常重要的原則,mysql會一直向右匹配直到遇到范圍查詢(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)順序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引則都可以用到,a,b,d的順序可以任意調整。
  • =和in可以亂序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意順序,mysql的查詢優化器會幫你優化成索引可以識別的形式
  • 盡量選擇區分度高的列作為索引,區分度的公式是count(distinct col)/count(*),表示字段不重復的比例,比例越大我們掃描的記錄數越少,唯一鍵的區分度是1,而一些狀態、性別字段可能在大數據面前區分度就是0,那可能有人會問,這個比例有什么經驗值嗎?使用場景不同,這個值也很難確定,一般需要join的字段我們都要求是0.1以上,即平均1條掃描10條記錄
  • 索引列不能參與計算,保持列“干凈”,比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,原因很簡單,b+樹中存的都是數據表中的字段值,但進行檢索時,需要把所有元素都應用函數才能比較,顯然成本太大。所以語句應該寫成create_time = unix_timestamp(’2014-05-29’);
  • 盡量的擴展索引,不要新建索引。比如表中已經有a的索引,現在要加(a,b)的索引,那么只需要修改原來的索引即可
  • Where 子句中經常使用的字段應該創建索引,分組字段或者排序字段應該創建索引,兩個表的連接字段應該創建索引。
  • like 模糊查詢中,右模糊查詢(321%)會使用索引,而%321 和%321%會放棄索引而使用全局掃描
  • 應該建立索引的情況?

    • 在經常需要搜索的列上,可以加快搜索的速度;
    • 在作為主鍵的列上,強制該列的唯一性和組織表中數據的排列結構;
    • 在經常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;
    • 在經常需要根據范圍進行搜索的列上創建索引,因為索引已經排序,其指定的范圍是連續的;
    • 在經常需要排序的列上創建索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間;
    • 在經常使用在WHERE子句中的列上面創建索引,加快條件的判斷速度。

    不應該建立索引的情況?

    • 對于那些在查詢中很少使用或者參考的列不應該創建索引。這是因為,既然這些列很少使用到,因此有索引或者無索引,并不能提高查詢速度。相反,由于增加了索引,反而降低了系統的維護速度和增大了空間需求。
    • 對于那些只有很少數據值的列也不應該增加索引。這是因為,由于這些列的取值很少,例如人事表的性別列,在查詢的結果中,結果集的數據行占了表中數據行的很大比例,即需要在表中搜索的數據行的比例很大。增加索引,并不能明顯加快檢索速度。
    • 對于那些定義為text, image和bit數據類型的列不應該增加索引。這是因為,這些列的數據量要么相當大,要么取值很少。
    • 當修改性能遠遠大于檢索性能時,不應該創建索引。這是因為,修改性能和檢索性能是互相矛盾的。當增加索引時,會提高檢索性能,但是會降低修改性能。當減少索引時,會提高修改性能,降低檢索性能。因此,當修改性能遠遠大于檢索性能時,不應該創建索引。

    插入索引的sql語句?

    CREATE

    多重的索引

    CREATE INDEX mytable_categoryid_userid ON mytable (category_id,user_id);

    1.添加PRIMARY KEY(主鍵索引)

    mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )

    2.添加UNIQUE(唯一索引)

    mysql>ALTER TABLE `table_name` ADD UNIQUE ( `column` )

    3.添加INDEX(普通索引)

    mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

    4.添加FULLTEXT(全文索引)

    mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`)

    5.添加多列索引

    mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

    Q:數據庫查詢優化?

  • 避免使用星號 * ,用具體字段替代(使用星號會在查詢時增加一個查詢列的操作)
  • 盡量避免在 where 子句中對字段進行 null 值判斷,最好不要給數據庫留NULL,盡可能的使用 NOT NULL填充數據庫 (不然會進行全表掃描,影響效率) ——-反例:select id from t where num is null
  • 可以在num上設置默認值0,確保表中num列沒有null值,然后這樣查詢:select id from t where num = 0
  • 應盡量避免在 where 子句中使用 != 或 <> ,in 或 not in 操作符 (同上),能用between就不要使用in,或者用exists替換in :select num from a where num in(select num from b) 用下面的語句替換:select num from a where exists(select 1 from b where num=a.num)
  • 盡可能的使用 varchar/nvarchar 代替 char/nchar (節省字段存儲空間)
  • Q:什么是幻讀 ?

    幻讀是指當事務不是獨立執行時發生的一種現象。例如第一個事務對一個表中的數據進行了修改,比如這種修改涉及到表中的“全部數據行”。同時,第二個事務也修改這個表中的數據,這種修改是向表中插入“一行新數據”。那么,以后就會發生操作第一個事務的用戶發現表中還存在沒有修改的數據行,就好象發生了幻覺一樣。

    一般解決幻讀的方法是增加范圍鎖RangeS,鎖定檢索范圍為只讀,這樣就避免了幻讀。

    Q:臟讀、幻讀、不可重復讀?

    • 臟讀:一個事務還未提交,另外一個事務訪問此事務修改的數據,并使用,讀取了事務中間狀態數據。
    • 幻讀:一個事務讀取2次,得到的記錄條數不一致,由于2次讀取之間另外一個事務對數據進行了增刪。
    • 不可重復讀:一個事務讀取同一條記錄2次,得到的結果不一致,由于在2次讀取之間另外一個事務對此行數據進行了修改。
    • 不可重復讀和幻讀的區別: 簡單來說,不可重復讀是由于數據修改引起的,幻讀是由數據插入或者刪除引起的。

    Q:數據庫主鍵與索引的區別?

    1:主鍵是為了標識數據庫記錄唯一性,不允許記錄重復,且鍵值不能為空,主鍵也是一個特殊索引;
    2:數據表中只允許有一個主鍵,但是可以有多個索引;
    3.使用主鍵會數據庫會自動創建主索引,也可以在非主鍵上創建索引,方便查詢效率;
    4:索引可以提高查詢速度,它就相當于字典的目錄,可以通過它很快查詢到想要的結果,而不需要進行全表掃描;
    5:主鍵索引外索引的值可以為空;
    6:主鍵也可以由多個字段組成,組成復合主鍵,同時主鍵肯定也是唯一索引;
    7:唯一索引則表示該索引值唯一,可以由一個或幾個字段組成,一個表可以有多個唯一索引。

    Q:回表查詢?

    先索引掃描,再通過ID去取索引中未能提供的數據,即為回表。

    Q:隔離級別?

    SERIALIZABLE(串行化)

    當數據庫系統使用SERIALIZABLE隔離級別時,一個事務在執行過程中完全看不到其他事務對數據庫所做的更新。當兩個事務同時操作數據庫中相同數據時,如果第一個事務已經在訪問該數據,第二個事務只能停下來等待,必須等到第一個事務結束后才能恢復運行。因此這兩個事務實際上是串行化方式運行。

    REPEATABLE READ(可重復讀)

    當數據庫系統使用REPEATABLE READ隔離級別時,一個事務在執行過程中可以看到其他事務已經提交的新插入的記錄,但是不能看到其他事務對已有記錄的更新。

    READ COMMITTED(讀已提交數據)

    當數據庫系統使用READ COMMITTED隔離級別時,一個事務在執行過程中可以看到其他事務已經提交的新插入的記錄,而且還能看到其他事務已經提交的對已有記錄的更新。

    READ UNCOMMITTED(讀未提交數據)

    當數據庫系統使用READ UNCOMMITTED隔離級別時,一個事務在執行過程中可以看到其他事務沒有提交的新插入的記錄,而且還能看到其他事務沒有提交的對已有記錄的更新。
    以上的四種隔離級別按從高到底排序,你可能會說,選擇SERIALIZABLE,因為它最安全!沒錯,它是最安全,但它也是最慢的!四種隔離級別的安全性與性能成反比!最安全的性能最差,最不安全的性能最好!


    后續遇到新的面試題還會持續更新,感興趣的朋友可以繼續關注哦~ 歡迎點贊收藏評論互動~

    注:本文答案多數來自網絡,不一一標注引用。

    總結

    以上是生活随笔為你收集整理的数据库查询某一列大写转化小写字母表示_算法/开发 面试必看! 【数据库】面试题合集...的全部內容,希望文章能夠幫你解決所遇到的問題。

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