1. 程式人生 > >程式設計師常見面試之 資料庫 知識點小結(三)

程式設計師常見面試之 資料庫 知識點小結(三)

前言

根據自己的專案經驗和閱讀經驗,整理了一些資料庫常見面試知識點,喜歡能幫助到大家。

常用 SQL 語句

order

select a,b from list_table order by b asc

從 list_table 表中選出 a,b列,並按照 b 的升序排列

ASC表示按升序排序,DESC表示按降序排序
ORDER BY 1 表示 所select 的欄位按第一個欄位排序

INSERT INTO SELECT 和 SELECT INTO FROM 區別

1.INSERT INTO SELECT語句
      語句形式為:Insert into Table2(field1,field2,...
) select value1,value2,... from Table1 要求目標表Table2必須存在,由於目標表Table2已經存在,所以我們除了插入源表Table1的欄位外,還可以插入常量 2.SELECT INTO FROM語句 語句形式為:SELECT vale1, value2 into Table2 from Table1 要求目標表Table2不存在,因為在插入時會自動建立表Table2,並將Table1中指定欄位資料複製到Table2中

distinct

select distinct c from list_table order
by c desc

這兒的 distinct 表示去除重複的意思
選出 c 值,並按照 c 的降序排列,消除重複的 c 值

constraint

建立約束

alter table 表格名稱 add constraint 約束名稱 增加的約束型別 (列名)
例子:
alter table emp add constraint p_const primary key (id)

上面 sql 語句表示把 id 設定為主鍵
約束名稱是為了方便後面刪除這個約束

unique約束:
就是給列的資料追加的不重複的約束型別
格式:

alter table 表名 add constraint
約束名稱 約束型別(列名)

比方說可以給ename列加個unique,讓ename列的資料不重複
例子:

alter table emp add constraint qwe unique(ename)

(1) 唯一性約束所在的列允許空值,但是主鍵約束所在的列不允許空值。
(2) 可以把唯一性約束放在一個或者多個列上,這些列或列的組合必須有唯一的。但是,唯一性約束所在的列並不是表的主鍵列。

(3) 唯一性約束強制在指定的列上建立一個唯一性索引。在預設情況下,建立唯一性的非聚簇索引,但是,也可以指定所建立的索引是聚簇索引。
(4)建立主鍵的目的是讓外來鍵來引用.
(5)一個表最多隻有一個主鍵,但可以有很多唯一鍵

index

CREATE INDEX index_name on TABLE_NAME(Column_name)
mysql> create index i_name on my_user(name);
Query OK, 100000 rows affected (0.84 sec)
Records: 100000  Duplicates: 0  Warnings: 0

建立索引,上面可以看到,建立索引會影響到所有行。

ALTER TABLE my_user ADD UNIQUE INDEX i_name (name);

如果是唯一話,可以建立唯一索引,上面的UNIQUE表示唯一的意思。

注意 如果某列有多行包含 NULL 值,則不能在該列上建立唯一索引。同樣,如果列的組合中有多行包含 NULL 值,則不能在多個列上建立唯一索引。在建立索引時,這些被視為重複的值。

isnull 或NVL函式

將 null 值轉化為特定數值,這個有很多函式。isnull decode nvl coalesce 多種函式可以解決。

coalesce 函式可以接受多個引數,將會返回這些引數中第一個非NULL的值,若提供的引數全部為NULL,則返回NULL。
ifnull 函式和coalesce功能一樣,只是只可以接受兩個引數。

SELECT a.*,isnull(t.cous,0) as count FROM brand as a 
left join (select brandid as bid,count(1) as cous from shopbrand group by brandid) t on a.brandid=t.bid 
ORDER BY count DESC LIMIT 0,20

這兒一定要注意到左連線,如果 a 表中某個欄位沒有資料關聯到 t 表,那麼得到的 t.cous是 null。需要進行處理。

日誌檔案滿

在事務日誌已滿的情況下,使用者不能更新資料。backup log語句有雙重的目的,

不僅可以備份事務日誌,並且在事務日誌滿的時候,使用者還可以利用他清理事務日誌,移去事務日誌中不活動的部分

截斷並不減少物理日誌檔案大小,而是減少邏輯日誌檔案的大小並釋放磁碟空間以供重新使用。

參考文章