闡述JDBC操作資料庫的步驟
建立資料庫連接配接connection
書寫sql語句
執行對象PrepareStatement
執行sql語句
如果是查詢操作,擷取結果集ResultSet,處理結果集
講一下資料庫的左連接配接右連接配接 ?
左連接配接又稱為左外連接配接,是外連接配接中的一種,他的關鍵字是 left join on/left outter join on
在兩個表的查詢中,左連接配接時左表的記錄會全部表示出來,而右表隻會顯示符合搜尋條件的記錄,右表記錄不足的地方均為NULL
右連接配接關鍵字是right join on/right outter join on,查詢結果和左連接配接相反
資料庫三範式
一般指在利用關系型資料庫建表時普遍需要遵循的三個規範
第一範式要求建表時要保證列的原子性,也就是一個字段隻存儲一項資訊,而不能是集合,數組等非原子資料項
(例如,在個人資訊表中的電話屬性,可能是座機号,也可能是手機号,具有可分割性,是以不符合1NF)
第二範式在第一範式的基礎上要求所有字段都依賴于主鍵,不存在對主鍵的部分依賴(例如一個表中有學号,課程,課程學分,成績四個屬性,其中所有非主鍵列
(成績,課程學分)都依賴于主鍵 (學号,課程)。 但是還存在另外一個依賴:(課程)->(課程學分)。這樣非主鍵列 ‘課程學分‘ 依賴于部分主鍵列 ’課程‘,不符合第二範式。)
第三範式在第二範式的基礎上要求每列都與主鍵有直接關系,不存在傳遞依賴
(成績依賴于姓名(非主鍵),姓名依賴于學号(主鍵),這樣成績就傳遞依賴于學号,不符合第三範式)
資料庫查詢 模糊查詢張%
select * from t where name like '張%';
資料庫了解多少,寫一個更新資料庫中記錄的SQL語句,表你自己定
update t set name = "001" where id = 10;
資料庫的增、删、改、查,去重,左右連接配接?
增
insert into t values(1,'JJ','math');
删
delete from t where id = 1;
改
update t set name = 'xx' where id = 1;
查
select * from t where id = 1;
去重
select distinct name from t;
左右連接配接
select * from a left join b on a.id = b.id;
select * from a right join b on a.id = b.id;
索引的概念、如何去優化?索引提到了B樹
資料庫索引底層原理與優化,面試重點考點!!!(強烈建議看一看,點選)
索引是提高查詢資料速度的資料結構
索引的優化就是查詢算法上的優化-BTree索引
mysql支援的索引類型有BTree索引,哈希索引等
對于Btree索引的優化政策:
最左字首比對原則
對 where,on,group by,order by 中出現的列使用索引
對較小的資料列使用索引
盡量的擴充索引,不要建立索引
不要過多建立索引(會影響插入、删除資料的速度)
什麼是資料庫的表連接配接?具體說一下
表與表之間根據關聯字段"連接配接"(join)在一起,組合成一個資料集。
内連接配接(inner join)交集
外連接配接(outer join)交集的補集
左外連接配接(left outer join)
右外連接配接(right outer join)
左連接配接(left join)
右連接配接(right join)
全連接配接(full join)
都是字面意思,了解一下就行了
資料庫中的索引原理索引失效的場景?
列與列對比(兩個列math,English都單獨建立了索引,查詢時條件為math = English)
存在Null值條件(select * from Student where id is not null;)
Like 通配符 :使用前置通配符
條件上包括函數:
select * from test where upper(name)='SUNYANG'; --不是對索引列計算
select * from test where name=upper('sunyang');--會走索引
資料類型的轉換:id為number類型,select * from sunyang where;
謂詞運算:對索引列進行函數運算
如何快速的清空資料庫中的一個表,但是不可以改變表的結構,還可以繼續往裡面寫資料?
truncate table table_name;
delete * from table_name;
truncate、delete 清空表資料的差別 :
truncate 是整體删除 (速度較快),delete是逐條删除 (速度較慢
truncate 不寫伺服器 log,delete 寫伺服器 log,也就是 truncate 效率比 delete高的原因
索引的建立?為一個已經存在的表添加主鍵索引?
create index index1_id on Student(id);
MySQL語句查詢成績大于60分的學生的資訊
select * from t where grade > 60;
查詢平均成績大于60分的學生的資訊,并按降序排列
select 8 from t where avg(grade) > 60 order by grade desc;
講一下聯合主鍵和符合主鍵
聯合主鍵:其實就是一張中間表,在多張表之間,需要每個表中的主鍵組成聯合主鍵,這樣就可以查到每個表中的每個記錄,聯合主鍵不能為空,否則違背主鍵唯一性原則
複合主鍵:當隻有一個字段作為主鍵是,會有重複的情況,這是需要兩個(以上)字段作為共同主鍵
若表已存在,alter table t add primary key(id)
若表中已有主鍵,先alter drop,再建立
忘記資料庫密碼用什麼指令查詢
bin>net stop mysql//進入 mysql 的 bin 目錄下,打開 cmd ,關閉 mysql 資料庫。
bin>mysqld --skip-grant-tables//啟動 MySQL 服務的時候跳過權限表認證
bin>mysql
mysql>use mysql
mysql>update user set password=password("123456") where user="root";
mysql>flush privileges;//重新整理權限
mysql>quit
bin>mysqladmin -u root -p shutdown//修改root密碼後需要執行該語句
bin>net start mysql//重新開機
MySQL事務的四大特性(ACID)
原子性
一緻性
隔離性
持久性
事物隔離級别
讀已送出
讀未送出
可重複化
可串行化
事務隔離級别,事務操作,ACID詳解(面試重點,強烈建議看一看,點選)
什麼是死鎖,死鎖如何處理?
事務循環等待資料鎖,則會死鎖。
死鎖處理:預防死鎖協定,死鎖恢複機制