直擊資料庫面試題:資料庫查詢語句

2020-12-08 騰訊網

Student(S#,Sname,Sage,Ssex) 學生表

Course(C#,Cname,T#) 課程表

SC(S#,C#,score) 成績表

Teacher(T#,Tname) 教師表

問題:

1、查詢「001」課程比「002」課程成績高地所有學生的學號

select a.S#

from (select s#,score from SC where C#=』001′) a,

(select s#,score from SC where C#=』002′) b

where a.score>b.score and a.s#=b.s#;

2、查詢平均成績大於60分的同學的學號和平均成績

select S#,avg(score)

from sc

group by S# having avg(score) >60;

3、查詢所有同學的學號、姓名、選課數、總成績

select Student.S#,Student.Sname,count(SC.C#),sum(score)

from Student left Outer join SC on Student.S#=SC.S#

group by Student.S#,Sname

4、查詢姓「李」的老師的個數

select count(distinct(Tname))

from Teacher

where Tname like 『李%』;

5、查詢沒學過「葉平」老師課的同學的學號、姓名

select Student.S#,Student.Sname

from Student

where S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname=』葉平』);

6、查詢學過「001」並且也學過編號「002」課程的同學的學號、姓名

select Student.S#,Student.Sname

from Student,SC

where Student.S#=SC.S# and SC.C#=』001′and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#=』002′);

7、查詢學過「葉平」老師所教的所有課的同學的學號、姓名

select S#,Sname

from Student

where S# in

(select S#

from SC ,Course ,Teacher

where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname=』葉平』 group by S# having count(SC.C#)=(select count(C#) from Course,Teacher where Teacher.T#=Course.T# and Tname=』葉平』));

8、查詢所有課程成績小於60分的同學的學號、姓名

select S#,Sname

from Student

where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);

9、查詢沒有學全所有課的同學的學號、姓名

select Student.S#,Student.Sname

from Student,SC

where Student.S#=SC.S#

group by Student.S#,Student.Sname having count(C#)

10、查詢至少有一門課與學號為「1001」的同學所學相同的同學的學號和姓名

select S#,Sname

from Student,SC

where Student.S#=SC.S# and C# in (select C# from SC where S#='1001');

11、刪除學習「葉平」老師課的SC表記錄

Delect SC

from course ,Teacher

where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='葉平';

12、查詢各科成績最高和最低的分:以如下形式顯示:課程ID,最高分,最低分

SELECT L.C# 課程ID,L.score 最高分,R.score 最低分

FROM SC L ,SC R

WHERE L.C# = R.C#

and

L.score = (SELECT MAX(IL.score)

FROM SC IL,Student IM

WHERE IL.C# = L.C# and IM.S#=IL.S#

GROUP BY IL.C#)

and

R.Score = (SELECT MIN(IR.score)

FROM SC IR

WHERE IR.C# = R.C#

GROUP BY IR.C# );

13、查詢學生平均成績及其名次

SELECT 1+(SELECT COUNT( distinct 平均成績)

FROM (SELECT S#,AVG(score) 平均成績

FROM SC

GROUP BY S# ) T1

WHERE 平均成績 > T2.平均成績) 名次, S# 學生學號,平均成績

FROM (SELECT S#,AVG(score) 平均成績 FROM SC GROUP BY S# ) T2

ORDER BY 平均成績 desc;

14、查詢各科成績前三名的記錄:(不考慮成績並列情況)

SELECT t1.S# as 學生ID,t1.C# as 課程ID,Score as 分數

FROM SC t1

WHERE score IN (SELECT TOP 3 score

FROM SC

WHERE t1.C#= C#

ORDER BY score DESC)

ORDER BY t1.C#;

15、查詢每門功課成績最好的前兩名

SELECT t1.S# as 學生ID,t1.C# as 課程ID,Score as 分數

FROM SC t1

WHERE score IN (SELECT TOP 2 score

FROM SC

WHERE t1.C#= C#

ORDER BY score DESC )

ORDER BY t1.C#;

補充:

已經知道原表

year salary

——————

2000 1000

2001 2000

2002 3000

2003 4000

解:

select b.year,sum(a.salary)

from salary a,salary b

where a.year

group by b.year

order by b.year;

在面試過程中多次碰到一道SQL查詢的題目,查詢A(ID,Name)表中第31至40條記錄,ID作為主鍵可能是不是連續增長的列,完整的查詢語句如下:

方法一:

select top 10 *

from A

where ID >(select max(ID) from (select top 30 ID from A order by ID ) T) order by ID

方法二:

select top 10 *

from A

where ID not In (select top 30 ID from A order by ID)

order by ID

資料庫面試題

1. 在一個查詢中,使用哪一個關鍵字能夠除去重複列值?

答案:使用distinct關鍵字

2. 什麼是快照?它的作用是什麼?

答案:快照Snapshot是一個文件系統在特定時間裡的鏡像,對於在線實時數據備份非常有用。快照對於擁有不能停止的應用或具有常打開文件的文件系統的備份非常重要。對於只能提供一個非常短的備份時間而言,快照能保證系統的完整性。

3. 解釋存儲過程和觸發器

存儲過程是一組Transact-SQL語句,在一次編譯後可以執行多次。因為不必重新編譯Transact-SQL語句,所以執行存儲過程可以提高性能。

觸發器是一種特殊類型的存儲過程,不由用戶直接調用。創建觸發器時會對其進行定義,以便在對特定表或列作特定類型的數據修改時執行。

4. SQL Server是否支持行級鎖,有什麼好處?

支持動態行級鎖定。

SQL Server 2000動態地將查詢所引用的每一個表的鎖定粒度調整到合適的級別。當查詢所引用的少數幾行分散在一個大型表中時,優化數據並行訪問的最佳辦法是使用粒度鎖,如行鎖。但是,如果查詢引用的是一個表中的大多數行或所有行,優化數據並行訪問的最佳辦法可以是鎖定整個表,以儘量減少鎖定開銷並儘快完成查詢。

SQL Serve 2000通過為每個查詢中的每個表選擇適當的鎖定級別,在總體上優化了數據並發訪問。對於一個查詢,如果只引用一個大型表中的幾行,則資料庫引擎可以使用行級鎖定;如果引用一個大型表的幾頁中的多行,則使用頁級鎖定;如果引用一個小型表中的所有行,則使用表級鎖定。

5. 資料庫日誌幹什麼用,資料庫日誌滿的時候再查詢資料庫時會出現什麼情況?

每個資料庫都有事務日誌,用以記錄所有事務和每個事務對資料庫所做的修改。

6. 存儲過程和函數的區別?

存儲過程是用戶定義的一系列SQL語句的集合,涉及特定表或其它對象的任務,用戶可以調用存儲過程,而函數通常是資料庫已定義的方法,它接收參數並返回某種類型的值並且不涉及特定用戶表。

7. 事務是什麼?

事務是作為一個邏輯單元執行的一系列操作,一個邏輯工作單元必須有四個屬性,稱為 ACID(原子性、一致性、隔離性和持久性)屬性,只有這樣才能成為一個事務:

(1) 原子性

事務必須是原子工作單元;對於其數據修改,要麼全都執行,要麼全都不執行。

(2) 一致性

事務在完成時,必須使所有的數據都保持一致狀態。在相關資料庫中,所有規則都必須應用於事務的修改,以保持所有數據的完整性。事務結束時,所有的內部數據結構(如 B 樹索引或雙向鍊表)都必須是正確的。

(3) 隔離性

由並發事務所作的修改必須與任何其它並發事務所作的修改隔離。事務查看數據時數據所處的狀態,要麼是另一併發事務修改它之前的狀態,要麼是另一事務修改它之後的狀態,事務不會查看中間狀態的數據。這稱為可串行性,因為它能夠重新裝載起始數據,並且重播一系列事務,以使數據結束時的狀態與原始事務執行的狀態相同。

(4) 持久性

事務完成之後,它對於系統的影響是永久性的。該修改即使出現系統故障也將一直保持。

8. 遊標的作用?如何知道遊標已經到了最後?

遊標用於定位結果集的行,通過判斷全局變量@@FETCH_STATUS可以判斷是否到了最後,通常此變量不等於0表示出錯或到了最後。

9. 觸發器分為事前觸發和事後觸發,這兩種觸發有何區別?語句級觸發和行級觸發有何區別?

事前觸發器運行於觸發事件發生之前,而事後觸發器運行於觸發事件發生之後。通常事前觸發器可以獲取事件之前和新的欄位值。

語句級觸發器可以在語句執行前或後執行,而行級觸發在觸發器所影響的每一行觸發一次。

10. 解決死鎖的方法有哪些?

SQL Server自動檢測和消除死鎖

設置死鎖優先級

設置鎖定超時

使用更新鎖避免死鎖

11. 提高資料庫運行效率的辦法有哪些?

在給定的系統硬體和系統軟體條件下,提高資料庫系統的運行效率的辦法是:

(1) 在資料庫物理設計時,降低範式,增加冗餘, 少用觸發器, 多用存儲過程。

(2) 當計算非常複雜、而且記錄條數非常巨大時(例如一千萬條),複雜計算要先在資料庫外面,以文件系統方式用C++語言計算處理完成之後,最後才入庫追加到表中去。這是電信計費系統設計的經驗。

(3) 發現某個表的記錄太多,例如超過一千萬條,則要對該表進行水平分割。水平分割的做法是,以該表主鍵PK的某個值為界線,將該表的記錄水平分割為兩個表。若發現某個表的欄位太多,例如超過八十個,則垂直分割該表,將原來的一個表分解為兩個表。

(4) 對資料庫管理系統DBMS進行系統優化,即優化各種系統參數,如緩衝區個數。

(5) 在使用面向數據的SQL語言進行程序設計時,儘量採取優化算法。總之,要提高資料庫的運行效率,必須從資料庫系統級優化、資料庫設計級優化、程序實現級優化,這三個層次上同時下功夫。

12. 通俗地理解三個範式

通俗地理解三個範式,對於資料庫設計大有好處。在資料庫設計中,為了更好地應用三個範式,就必須通俗地理解三個範式(通俗地理解是夠用的理解,並不是最科學最準確的理解)

第一範式:1NF是對屬性的原子性約束,要求屬性具有原子性,不可再分解;

第二範式:2NF是對記錄的惟一性約束,要求記錄有惟一標識,即實體的唯一性;

第三範式:3NF是對欄位冗餘性的約束,即任何欄位不能由其他欄位派生出來,它要求欄位沒有冗餘。沒有冗餘的資料庫設計可以做到。但是,沒有冗餘的資料庫未必是最好的資料庫,有時為了提高運行效率,就必須降低範式標準,適當保留冗餘數據。具體做法是:在概念數據模型設計時遵守第三範式,降低範式標準的工作放到物理數據模型設計時考慮。降低範式就是增加欄位,允許冗餘。

13. 簡述存儲過程的優缺點

優點:

1. 更快地執行速度:存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度;

2. 與事務的結合,提供更好的解決方案:當對資料庫進行複雜操作時(如對多個表進行Update、Insert、Query和Delete時),可將此複雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用;

3. 支持代碼重用:存儲過程可以重複使用,可減少資料庫開發人員的工作量;

4. 安全性高:可設定只有某此用戶才具有對指定存儲過程的使用權。

缺點:

1. 如果更改範圍大到需要對輸入存儲過程的參數進行更改,或者要更改由其返回的數據,則你仍需要更新程序集中的代碼以添加參數、更新 GetValue() 調用,等等,這時候估計比較繁瑣了。

2. 可移植性差由於存儲過程將應用程式綁定到 SQL Server,因此使用存儲過程封裝業務邏輯將限制應用程式的可移植性。如果應用程式的可移植性在您的環境中非常重要,則將業務邏輯封裝在不特定於 RDBMS 的中間層中可能是一個更佳的選擇。

14. 主鍵和唯一索引有什麼區別?

相同點:它們都屬於實體完整性約束。

不同點:

(1) 唯一性約束所在的列允許空值,但是主鍵約束所在的列不允許空值。

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

(3) 唯一性約束強制在指定的列上創建一個唯一性索引。在默認情況下,創建唯一性的非聚簇索引,但是,也可以指定所創建的索引是聚簇索引。

(4) 建立主鍵的目的是讓外鍵來引用。

(5) 一個表最多只有一個主鍵,但可以有很多唯一鍵。

15. 簡述索引存取的方法的作用和建立索引的原則

作用:加快查詢速度。

原則:

(1) 如果某屬性或屬性組經常出現在查詢條件中,考慮為該屬性或屬性組建立索引;

(2) 如果某個屬性常作為最大值和最小值等聚集函數的參數,考慮為該屬性建立索引;

(3) 如果某屬性經常出現在連接操作的連接條件中,考慮為該屬性或屬性組建立索引;

16. 簡述資料庫的設計過程

資料庫設計分為五個階段:

需求分析:主要是準確收集用戶信息需求和處理需求,並對收集的結果進行整理和分析,形成需求說明。

概念結構設計:對用戶需求進行綜合、歸納、抽象,形成一個與與具體的DBMS無關概念模型(一般為ER模型)。

邏輯結構設計:將概念結構設計的概念模型轉化為某個特定的DBMS所支持的數據模型,建立資料庫邏輯模式,並對其進行優化,同時為各種用戶和應用設計外模式。

物理結構設計:為設計好的邏輯模型選擇物理結構,包括存儲結構和存取方法等,建立資料庫物理模式。

實施和維護:實施就是使用DLL語言建立資料庫模式,將實際數據載入資料庫,建立真正的資料庫。維護階段是對運行中的資料庫進行評價、調整和修改。

17. 什麼是內存洩漏?

一般我們所說的內存洩漏指的是堆內存的洩漏。堆內存是程序從堆中為其分配的,大小任意的,使用完後要顯示釋放內存。當應用程式用關鍵字new等創建對象時,就從堆中為它分配一塊內存,使用完後程序調用free或者delete釋放該內存,否則就說該內存就不能被使用,我們就說該內存被洩漏了。

18. 什麼是基本表?什麼是視圖?

基本表是本身獨立存在的表,在 SQL 中一個關係就對應一個表。

視圖是從一個或幾個基本表導出的表。視圖本身不獨立存儲在資料庫中,是一個虛表

19. 試述視圖的優點

(1) 視圖能夠簡化用戶的操作

(2) 視圖使用戶能以多種角度看待同一數據;

(3) 視圖為資料庫提供了一定程度的邏輯獨立性;

(4) 視圖能夠對機密數據提供安全保護。

20. 所有的視圖是否都可以更新?為什麼?

不是。視圖是不實際存儲數據的虛表,因此對視圖的更新,最終要轉換為對基本表的更新。因為有些視圖的更新不能惟一有意義地轉換成對相應基本表的更新,所以,並不是所有的視圖都是可更新的。

21. 哪類視圖是可以更新的?哪類視圖是不可更新的?

基本表的行列子集視圖一般是可更新的。若視圖的屬性來自集函數、表達式,則該視圖肯定是不可以更新的。

22. 維護資料庫的完整性、一致性、你喜歡用觸發器還是自寫業務邏輯?為什麼?

儘可能用約束(包括CHECK、主鍵、唯一鍵、外鍵、非空欄位)實現,這種方式的效率最好;其次用觸發器,這種方式可以保證無論何種業務系統訪問資料庫都能維持資料庫的完整性、一致性;最後再考慮用自寫業務邏輯實現,但這種方式效率最低、編程最複雜,當為下下之策。

23. 在為視圖創建索引前,視圖本身必須滿足哪些條件?

(1) 視圖以及視圖中引用的所有表都必須在同一資料庫中,並具有同一個所有者

(2) 索引視圖無需包含要供優化器使用的查詢中引用的所有表。

(3) 必須先為視圖創建唯一群集索引,然後才可以創建其它索引。

(4) 創建基表、視圖和索引以及修改基表和視圖中的數據時,必須正確設置某些 SET 選項(在本文檔的後文中討論)。另外,如果這些 SET 選項正確,查詢優化器將不考慮索引視圖。

(5) 視圖必須使用架構綁定創建,視圖中引用的任何用戶定義的函數必須使用 SCHEMABINDING 選項創建。

(6) 另外,還要求有一定的磁碟空間來存放由索引視圖定義的數據。

24. 什麼是SQL Server的確定性函數和不確定性函數?

只要使用特定的輸入值集並且資料庫具有相同的狀態,不管何時調用,始終都能範圍相同結果的函數叫確定性函數。幾十訪問的資料庫的狀態不變,每次書用特定的輸入值都可能範圍不同結果的函數叫非確定性函數。

相關焦點

  • 資料庫之SQL查詢語句
    所有資料庫都使用相同或者相似的語言。(1) 數據定義語言(DDL ): Data Definition Language用於建立、修改、刪除資料庫對象。資料庫對象包括:表、視圖、索引、序列。和事務相關,執行完後需要經過事務控制語句提交後才能真正的將改變應用到資料庫中。包括:INSERT:將數據插入到數據表中UPDATE:更新數據表中已存在的數據DELETE:刪除數據表中的數據(3) 事務控制語言(TCL):Transaction Control Language用來維護數據一致性的語句。
  • 資料庫面試題:redo log和binlog的區別、一條更新語句的執行過程
    資料庫面試題:redo log和binlog的區別1.redo log是InnoDB引擎特有的;binlog是MySQL的Server層實現的,所有引擎都可以使用;2.redo log是物理日誌,記錄的是
  • SQL 資料庫語句
    小夥伴們,精心找到一份整理SQL語句一、基礎1、說明:創建資料庫CREATE DATABASE
  • 資料庫sql語句的基礎使用,學習資料庫的關鍵一步
    創建資料庫create database 資料庫名;create database 資料庫名 character set 字符集;查看某個資料庫的定義的信息:show create database 資料庫名;刪除資料庫drop database 資料庫名稱;切換資料庫:use
  • 醫院SQL資料庫系統語句優化
    隨著醫院信息系統模塊的不斷增加,特別是近兩年電子病歷的使用,臨床診療信息大量寫入資料庫,數據量急劇增加,造成業務資料庫非常龐大,業務處理的速度明顯下降。加之在頻繁的業務資料庫中還要進行大數據量查詢或報表統計,導致在業務處理時經常出現阻塞或死鎖現象,嚴重影響到日常的工作。故如何對資料庫性能在進行優化設計,即提高資料庫的吞吐量、減少用戶等待時間具有重大意義。
  • 資料庫常見面試題:樂觀、悲觀鎖,行鎖、表鎖、讀、寫鎖,間隙鎖
    資料庫面試題MySQL資料庫常見面試題:闡述樂觀、悲觀鎖,、表鎖,讀、寫鎖,間隙鎖(重要,好多公司都考)在InnoDB中,級鎖都是基於索引的,如果條SQL語句不到索引是不會使級鎖的,會使表級鎖把整張表鎖住。間隙鎖(GAP) 是個範圍於表鎖,於鎖的鎖,主要是為了防幻讀。
  • 面試被問:JDBC底層是如何連接資料庫的?
    背景前兩天一個小夥伴面試的時候,被問JDBC底層是如何連接資料庫的?他頓時一臉懵逼,因為大部分人只知道JDBC的幾個步驟,至於底層到底是怎麼連接資料庫的,還真不知道。由於小夥伴是面試高級開發,問這種問題倒也不能說面試官過分,如果是初級或者中級,那問著問題就確實有些過分了。
  • 【資料庫】MySQL常見SQL語句
    databasename - 資料庫名,tablename-表名,如果要授予該用戶對所有資料庫和表的相應操作權限則可用表示, 如.(對所有資料庫所有表相應權限),datebasename.(對指定資料庫所有表相應權限)。
  • 吊打面試官?2020 年資料庫高頻面試題|原力計劃
    2)查詢數據不方便數據保存在資料庫:1)數據永久保存2)使用SQL語句,查詢方便效率高。3)管理數據方便2、什麼是SQL?結構化查詢語言(Structured Query Language)簡稱SQL,是一種資料庫查詢語言。
  • 資料庫常用的sql語句匯總(2)
    資料庫相關查所有資料庫 show databases;創建資料庫 create database db1;查看資料庫show create database db1;創建資料庫指定字符集 create database db1 character set utf8/gbk刪除資料庫 drop database db1;使用資料庫 use db1;
  • JDBC簡單查詢資料庫
    1、我們先新建一個資料庫作為測試庫資料庫名稱為test、測試表為person資料庫數據2、找到我們需要的Jar在我們準備的Maven倉庫中,從網上下載也是可以的3、導入我們的Jar選擇Properties
  • 通用SQL資料庫查詢語句精華使用簡介
    :  表名 as 別名表名 別名  (二) FROM子句  FROM子句指定SELECT語句查詢及與查詢相關的表或視圖。  二、 聯合查詢  UNION運算符可以將兩個或兩個以上上SELECT語句的查詢結果集合合併成一個結果集合顯示,即執行聯合查詢。
  • 這才是你需要的最基礎的資料庫面試題(通俗易懂)
    索引就一種特殊的查詢表,資料庫的搜尋引擎可以利用它加速對數據的檢索。它很類似與現實生活中書的目錄,不需要查詢整本書內容就可以找到想要的數據。索引可以是唯一的,創建索引允許指定單個列或者是多個列。缺點是它減慢了數據錄入的速度,同時也增加了資料庫的尺寸大小。
  • Django查詢資料庫操作詳解(一)
    返回單條查詢結果我們知道 Manager 查詢管理器提供了查詢 Model 實例的接口,這些接口通常會返回三種類型:單實例、RawQuerySet、QuerySet。通常的實際的開發工作中,我們會根據給定的條件查詢資料庫記錄。Django 為實現返回單條查詢數據提供了兩個查詢方法 get 和 get_or_create。
  • 從Web查詢資料庫之PHP與MySQL篇
    腳本主要包括了連接資料庫和執行查詢的命令。PHP啟動了對MySQL伺服器的連接並向該伺服器發送適當的查詢。 MySQL伺服器接收到資料庫查詢的請求,開始處理這個查詢,並將查詢結果返回給PHP引擎。 PHP引擎完成了腳本的運行後,將該HTML返回Web伺服器。 Web伺服器再將HTML返回給客戶端瀏覽器,用戶就可以看到響應後的結果頁面。
  • 後端產品經理筆記之查詢資料庫
    本文從實際工作中梳理出7個方面的總結:資料庫、常用sql語句、數據傳輸、文檔語法、邏輯規則、交互方案、擴展技能。4、比MYsql強大的關係型資料庫還有ORACLE。比如1000W條數據以上級別的數據,一般用的比較多的是ORACLE。5、MYsql每張表只能有一個主鍵。但開發會創建多個欄位的索引。目的是為了提高查詢速度。至少提升上百倍查詢速度。
  • 數據工程師面試必備——Python與資料庫的那些事
    最近身邊有小夥伴在準備python數據工程師的面試,趁這個機會整理了Python與資料庫的相關問題,話不多說,直接開始。SQL(Structured Query Language)資料庫,指關係型資料庫。主要代表:SQL Server、Oracle、MySQL、PostgreSQL。
  • JDBC使用ResultSet查詢資料庫記錄
    JDBC使用ResultSet查詢資料庫記錄1.從數據中查詢數據需要用到集合ResultSet,而Statement的executeQuery()方法可以得到結果集。首先新建chaxunTest.java2.從資料庫查詢記錄需要如下幾個步驟3.其中關閉資料庫資源,需要我們重寫下release函數,新增一個ResultSet參數4.往步驟中添加代碼如下5.在main方法中執行代碼,查詢出一條記錄。6.如果我想查詢多條記錄呢?
  • 資料庫面試題:唯一索引和普通索引選哪個?MySQL的優化 -開課吧
    在找工作面試的時候,面試官會看你的簡歷,會重點問你簡歷上寫的技術,所以你要精心準備自己簡歷上的問題。同時,面試官也會問一些基礎問題和其他方向的技術問題,希望以下的一些常見MySQL面試題能對你有所幫助。
  • 資料庫面試題:MySQL大數據量下的優化-乾貨整理
    資料庫面試題 這個題可說的點實在太多了, 試官很有可能跟據下 說的優化進 來問問題。欄位類型儘量精確,儘量 ,能 int 不需要 bigint 儘量不要 null ,聲明 not null ,如果是null 0代替,儘量使 TIMESTAMP DATETIME 整型來存ip 注意反範式和範式的優化 查詢時