1. 程式人生 > >【面試題】MySQL相關

【面試題】MySQL相關

1.MySQL常用命令

  • 建立表:create table employee(id int,name varchar(20));
  • 修改表結構(列):alter table employee add/modify/drop salary float;
    • 修改字符集:alter table employee character set GBK;
    • 修改列名:alter table employee change math English int;
    • 更改表名:alter table employee rename student;
  • 刪除表:drop table student;
  • 建立索引:create unique index unique_id on employee (id);或alter table employee add fulltext index fulltextidx(id);
  • 刪除索引:drop index unique_id on employee;或alter table employee drop index fulltextidx;
  • 新增資料:insert into student values(1,”W”);
  • 刪除資料:delete from student where name = ‘Lee’;
  • 修改資料:update employee set salary = 5000;
  • 查詢資料:
    • select distinct English from student;
    • select * from student where English between 80 and 100;
    • select * from student where name like ‘張%’;
    • select name 姓名,math 數學from student where name like ‘張%’ order by 數學 desc;
    • select count(*)/sum(math)/avg(math) from student;
    • select product, sum(price) from orders group by product having sum(price) > 100;
  • 查詢日期:select now() from dual;或select date_add(now(),interval 20 minute) from dual;
  • 新增外來鍵約束:alter table student add constraint FK_ID foreign key (gid) references grade (id) ;(先新增主表,先修改或刪除副表)
  • 左外連線查詢:select * from dept left join possible on dept.id = possible.dept_id;
  • 子查詢:select *from department where did>any(select did from employee);
  • 備份資料庫:mysqldump -u username -p mydb2 >c:/311.sql
  • 建立觸發器:create trigger newproduct after insert on products for each now select “product added”;

2.資料庫中事物的特徵?

  • 事務:start transaction;、commit; 、rollback;

  • 事務的四大特性

    • 原子性:事務是一組不可分割的單位,要麼同時成功要麼同時不成功
    • 一致性:事務前後的資料完整性應該保持一致,
    • 隔離性:多個使用者併發訪問資料庫時,一個使用者的事務不能被其他使用者的事務所幹擾
    • 永續性:一個事務一旦被提交,對資料庫中的資料的改變就是永久性的,即使資料庫發生故障也不應該對其有任何影響。
  • 讀的種類

    • 髒讀:一個事務讀取到另一個事務未提交的資料
    • 不可重複讀:一個事務多次讀取同一條記錄,讀取的結果不相同
    • 虛讀(幻讀):一個事務多次查詢整表的資料,由於其他事務新增(刪除)記錄造成多次查詢出的記錄條數不同。
  • 四大隔離級別

隔離級別 髒讀(Dirty Read) 不可重複讀(NonRepeatable Read) 幻讀(Phantom Read)
未授權讀(Read uncommitted) 可能 可能 可能
已授權讀(Read committed) 不可能 可能 可能
可重複讀(Repeatable read) 不可能 不可能 可能
可序列化(SERIALIZABLE) 不可能 不可能 不可能

注:mysql 預設是repeatable read 級別!

3.JDBC的使用?

  • 使用步驟

    • 註冊驅動:Class.forName(“com.mysql.jdbc.Driver”);
    • 建立連線:Connection conn = DriverManager.getConnection(URL, user, password);
    • 執行SQL語句:PreparedStatement ps = conn.prepareStatement(sql);
    • PreparedStatement 可用預編譯的sql、sql快取區、有效防止sql注入(OR 1=1 )
    • 執行處理結果:ResultSet rs = ps.executeQuery();
  • 常用元件

    • BeanUtils:物件的拷貝、註冊日期型別轉換器
    • DbUtils:定義了所有的與資料庫操作的方法,簡化編碼量
    • C3P0連線池:new ComboPooledDataSource();

4.InnodB與MyISAM的區別

  • 建立索引的目的是加快對錶中記錄的查詢或排序,但索引是佔用空間的,影響速度。索引型別:主鍵索引、唯一索引、普通索引、全文索引(FULLTEXT ),而主鍵索引是特殊的唯一性索引。

  • MySQL支援MyISAM、InnoDB、MEMORY、MERGE、ARCHIVE多種儲存引擎,而預設是InnoDB

  • MyISAM:獨立於作業系統,表鎖,不支援外來鍵、事務。儲存格式分為靜態、動態、壓縮表,適合以讀操作和插入操作為主,只有很少的更新和刪除操作,並且對事務的完整性,併發性要求不是很高的情況

  • InnoDB:預設,行級鎖定、外來鍵約束、自動災難恢復、支援事務。對事物的完整性有比較高的要求,在併發條件下要求資料的一致性,包含很多操作。InnoDB只有通過索引進行檢索的時候才會使用行級鎖,否則會使用表級鎖。

  • MEMORY:存在記憶體,為得到最快的響應時間;MERGE:一組MyISAM表的組合;ARCHIVE:歸檔後僅支援插入和查詢。

  • 實現方式:

    • MyISAM:使用B+ Tree作為索引結構,葉節點存放的是資料記錄的地址,索引和實際的資料是分開的,只不過是用索引指向了實際的資料,即非聚集索引。
    • InnoDB:資料本身就是按B+ Tree組織的一個索引結構,葉節點存放的是完整的資料記錄,即聚集索引,主鍵是InnoDB表記錄的”邏輯地址“,所以InnoDB要求表必須有主鍵,MyISAM可以沒有

5.MySQL為什麼使用B+樹作為索引?

  • 資料結構作為索引的優劣指標:索引的結構組織要儘量減少查詢過程中磁碟I/O的存取次數。

  • B樹適合在磁碟等直接儲存裝置上組織動態查詢表,檔案的組織方式是B樹或B+樹。在查詢和動態操作方面效率很高。雖然hash表的效率更高,可是hash表存在雜湊衝突問題,而且一般利用率僅為50%,當儲存比例達到一定程度時hash表必須進行擴容才能維持之後的操作,而B樹不用。



本人才疏學淺,若有錯,請指出,謝謝!
如果你有更好的建議,可以留言我們一起討論,共同進步!
衷心的感謝您能耐心的讀完本篇博文!