1.一張表,里面有 ID 自增主鍵,當 insert 了 17 條記錄之后, 刪除了第 15, 16, 17 條記錄,再把 Mysql 重啟,再 insert 一條記 錄,這條記錄的 ID 是 18 還是 15 ?
1.如果表的類型是 MyISAM , 那么是 18。
因為 MyISAM 表會把自增主鍵的最大 ID 記錄到數據文件里,重啟 MySQL自增主鍵的最大 ID 也不會丟失。
2.如果表的類型是 InnoDB,那么是 15。
InnoDB 表只是把自增主鍵的最大 ID 記錄到內存中,所以重啟數據庫或者是對表進行 OPTIMIZE 操作,都會導致最大 ID 丟失。
2.Mysql 的技術特點是什么?
Mysql 數據庫軟件是一個客戶端或服務器系統。
其中包括:支持各種客戶端程序和庫的多線程 SQL 服務器、不同的后端、廣泛的應用程序編程接口和管理工具。
3.Heap 表是什么?
HEAP 表存在於內存中,用於臨時高速存儲。
- BLOB 或 TEXT 字段是不允許的
- 只能使用比較運算符=,<,>,=>,= <
- HEAP 表不支持 AUTO_INCREMENT
- 索引不可為 NULL
4.Mysql 服務器默認端口是什么?
Mysql 服務器的默認端口是 3306。
5.與 Oracle 相比,Mysql 有什么優勢?
Mysql 是開源軟件,隨時可用,無需付費。
Mysql 是便攜式的。
帶有命令提示符的 GUI。
使用 Mysql 查詢瀏覽器支持管理。
6.如何區分 FLOAT 和 DOUBLE?
以下是 FLOAT 和 DOUBLE 的區別:
浮點數以 8 位精度存儲在 FLOAT 中,並且有 四 個字節。
浮點數存儲在 DOUBLE 中,精度為 18 位,有 八 個字節。
7.區分 CHAR_LENGTH 和 LENGTH?
CHAR_LENGTH 是字符數,而 LENGTH 是字節數。
Latin 字符的這兩個數據是相同的, 但是對於 Unicode 和其他編碼,它們是不同的。
8.請簡潔描述 Mysql 中 InnoDB 支持的四種事務隔離級別名 稱,以及逐級之間的區別?
SQL 標准定義的四個隔離級別為:
read uncommited :讀到未提交數據
read committed:臟讀,不可重復讀
repeatable read:可重讀
serializable :串行事物
9.在 Mysql 中 ENUM 的用法是什么?
ENUM 是一個字符串對象,用於指定一組預定義的值,並可在創建表時使用。
Create table size(name ENUM('Smail,'Medium','Large');
10.如何定義 REGEXP?
REGEXP 是模式匹配,其中匹配模式在搜索值的任何位置。
11.CHAR 和 VARCHAR 的區別?
以下是 CHAR 和 VARCHAR 的區別:
CHAR 和 VARCHAR 類型在 存儲 和 檢索 方面有所不同
CHAR 列長度固定為創建表時聲明的長度,長度值范圍是 1 到 255
當 CHAR 值被存儲時,它們被用空格填充到特定長度,檢索 CHAR 值時需刪除尾隨空格。
12.列的字符串類型可以是什么?
字符串類型是:
SET
BLOB
ENUM
CHAR
TEXT
VARCHAR
13.如何獲取當前的 Mysql 版本?
SELECT VERSION();用於獲取當前 Mysql 的版本。
14.Mysql 中使用什么存儲引擎?
存儲引擎稱為表類型,數據使用各種技術存儲在文件中。
技術涉及:
Storage mechanism
Locking levels
Indexing
Capabilities and functions.
15.Mysql 驅動程序是什么?
以下是 Mysql 中可用的驅動程序:
PHP 驅動程序
JDBC 驅動程序
ODBC 驅動程序
CWRAPPER
PYTHON 驅動程序
PERL 驅動程序
RUBY 驅動程序
CAP11PHP 驅動程序
Ado.net5.mxj
16.TIMESTAMP 在 UPDATE CURRENT_TIMESTAMP 數據 類型上做什么?
創建表時 TIMESTAMP 列用 Zero 更新。
只要表中的其他字段發生更改,UPDATE CURRENT_TIMESTAMP 修飾符就將時間戳字段更新為當前時間。
17.主鍵和候選鍵有什么區別?
表格的每一行都由主鍵唯一標識,一個表只有一個主鍵。
主鍵也是候選鍵。
按照慣例,候選健可以被指定為主鍵,並且可以用於任何外鍵引用。
18.如何使用 Unix shell 登錄 Mysql?
# [mysql dir]/bin/ mysql -h hostname -u <UserName> -p <password>
19.myisatchk 是用來做什么的?
它用來壓縮 MyISAM 表,這減少了磁盤或內存使用。
20.MYSQL 數據庫服務器性能分析的方法命令有哪些?
Show status 一些值得監控的變量值:
Bytes_received和Bytes_sent
和服務器之間來往的流量。
Com_*
服務器正在執行的命令。
Created_*
在查詢執行期限間創建的臨時表和文件。
•Hancler_*
存儲引擎操作。
Select_*
不同類型的聯接執行計划。
•Sort_*
幾種排序信息。
Show session status like 'Select':
Show profiles
SET profiling=1;
Show profiles \ G
Show profile;
21.如何控制 HEAP 表的最大尺寸?
Heal 表的大小可通過稱為 max_heap_table_size 的 Mysql 配置變量來控制。
22.MyISAM Static 和 MyISAM Dynamic 有什么區別?
在MyISAM Static 上的所有字段有固定寬度。動態 MyISAM 表將具有像 TEXT,BLOB
等字段,以適應不同長度的數據類型。點擊這里有一套最全阿里面試題總結。
MyISAM Static 在受損情況下更容易恢復
23.federated 表是什么?
federated 表,允許訪問位於其他服務器數據庫上的表。
24.如果一個表有一列定義為 TIMESTAMP,將發生什么?
每當行被更改時,時間戳字段將獲取當前時間戳。
25.列設置為 AUTO INCREMENT 時,如果在表中達到最大值,會發生什么情況?
它會停止遞增,任何進一步的插入都將產生錯誤,因為密鑰已被使用。
26.怎樣才能找出最后一次插入時分配了哪個自動增量?
LAST_INSERT_ID 將返回由 Auto_increment 分配的最后一個值,並且不需要指定表名稱。
27.你怎么看到為表格定義的所有索引?
索引是通過以下方式為表格定義的:
SHOW INDEX FROM <tablename>;
28.LIKE 聲明中的 % 和 _ 是什么意思?
%對應於0個或更多字符,_ 只是 LIKE 語句中的一個字符。
29.如何在 Unix 和 Mysql 時間戳之間進行轉換?
UNIX_TIMESTAMP 是從 Mysql 時間戳轉換為 Unix 時間戳的命令
FROM_UNIXTIME 是從 Unix 時間戳轉換為 Mysql 時間戳的命令
30.列對比運算符是什么?
在 SELECT 語句的列比較中使用 =,<>,<=,<,> =,>,<<, >>, <=> , AND, OR 或 LIKE 運算符。
31. 我們如何得到受查詢影響的行數?
行數可以通過以下代碼獲得:
SELECT COUNT(user_id)FROM users;
32. Mysql 查詢是否區分大小寫?
不區分
SELECT VERSION(), CURRENT_DATE;
SeLect version(), current_date;
seleCt vErSiOn(), current_ DATE;
所有這些例子都是一樣的,Mysql 不區分大小寫。
33. LIKE 和 REGEXP 操作有什么區別?
LIKE 和 REGEXP 運算符用於表示 ^ 和 %。
SELECT * FROM employee WHERE emp_name REGEXP "^b";
SELECT * FROM employee WHERE emp_name LIKE "%b";
34. BLOB 和 TEXT 有什么區別?
BLOB 是一個二進制對象,可以容納可變數量的數據。
有四種類型的 BLOB -
TINYBLOB
BLOB
MEDIUMBLOB
LONGBLOB
它們只能在所能容納價值的最大長度上有所不同。
TEXT 是一個不區分大小寫的 BLOB。
四種 TEXT 類型
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
它們對應於四種 BLOB 類型,並具有相同的最大長度和存儲要求。
BLOB 和 TEXT 類型之間的唯一區別在於對 BLOB 值進行排序和比較時區分大小寫,對TEXT 值不區分大小寫。
35. mysql_fetch_array 和 mysql_fetch_object 的區別是什么?
mysql_fetch_array()
將結果行作為關聯數組或來自數據庫的常規數組返回。
mysql_fetch_object
從數據庫返回結果行作為對象。
36. 我們如何在 mysql 中運行批處理模式?
以下命令用於在批處理模式下運行:
mysql;
mysql mysql.out
37. MyISAM 表格將在哪里存儲,並且還提供其存儲格式?
每個 MyISAM 表格以三種格式存儲在磁盤上:
".frm" 文件存儲表定義
數據文件具有 ".MYD" (MYData)擴展名
索引文件具有 ".MYI" (MYIndex)擴展名
38. Mysql 中有哪些不同的表格?
共有5 種類型的表格:
MyISAM
Heap
Merge
INNODB
ISAM
MyISAM 是 Mysql 的默認存儲引擎。
39. ISAM 是什么?
ISAM 簡稱為索引順序訪問方法。
它是由 IBM 開發的,用於在磁帶等輔助存儲系統上存儲和檢索數據。
40. InnoDB 是什么?
InnoDB 是一個由 Oracle 公司開發的 Innobase Oy 事務安全存儲引擎。
41. Mysql 如何優化 DISTINCT?
DISTINCT 在所有列上轉換為 GROUP BY,並與 ORDER BY 子句結合使用。
SELECT DISTINCT t1.a FROM t1,t2 where t1.a=t2.a;
42. 如何輸入字符為十六進制數字?
如果想輸入字符為十六進制數字,可以輸入帶有單引號的十六進制數字和前綴(X),或者只用(Ox)前綴輸入十六進制數字。
如果表達式上下文是字符串,則十六進制數字串將自動轉換為字符串。
43. 如何顯示前 50 行?
在Mysql中,使用以下代碼查詢顯示前 50 行:
SELECT * FROM LIMIT 0,50;
44. 可以使用多少列創建索引?
任何標准表最多可以創建 16 個索引列。
45. NOW() 和 CURRENT_DATE() 有什么區別?
NOW() 命令用於顯示當前年份,月份,日期,小時,分鍾和秒。
CURRENT_DATE() 僅顯示當前年份,月份和日期。
46. 什么樣的對象可以使用 CREATE 語句創建?
以下對象是使用 CREATE 語句創建的:
DATABASE
EVENT
FUNCTION
INDEX
PROCEDURE
TABLE
TRIGGER
USER
VIEW
47. Mysql 表中允許有多少個 TRIGGERS?
在Mysql 表中允許有六個觸發器,如下:
BEFORE INSERT
AFTER INSERT
BEFORE UPDATE
AFTER UPDATE
BEFORE DELETE
AFTER DELETE
48. 什么是非標准字符串類型?
以下是非標准字符串類型:
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
49. 什么是通用 SQL 函數?
CONCAT(A, B) - 連接兩個字符串值以創建單個字符串輸出。
通常用於將兩個或多個字段合並為一個字段。
FORMAT(X, D) - 格式化數字 X 到 D 有效數字。
CURRDATE(), CURRTIME() - 返回當前日期或時間。
NOW() - 將當前日期和時間作為一個值返回。
MONTH (), DAY(), YEAR(), WEEK(), WEEKDAY() - 從日期值中提取給定數據。
HOUR(), MINUTE(), SECOND() - 從時間值中提取給定數據。
DATEDIFF(A, B) - 確定兩個日期之間的差異, 通常用於計算年齡
SUBTIMES(A, B) - 確定兩次之間的差異。
FROMDAYS(INT) - 將整數天數轉換為日期值。
50. 解釋訪問控制列表
ACL(訪問控制列表)是與對象關聯的權限列表。
這個列表是 Mysql 服務器安全模型的基礎,它有助於排除用戶無法連接的問題。
Mysql 將 ACL(也稱為授權表)緩存在內存中。
當用戶嘗試認證或運行命令時,Mysql 會按照預定的順序檢查 ACL 的認證信息和權限。
51. MYSQL 支持事務嗎?
在缺省模式下,MYSQL 是 autocommit 模式的,所有的數據庫更新操作都會即時提交,所以在缺省情說下,mysql是不支持事務的。
但是如果你的 MYSQL 表類型是使用 InnoDB Tables 或 BDB tables 的話,你的 MYSQL 就可以使用事務處理,使用 SET AUTOCOMMIT=0 就可以使 MYSQL 允許在非 autocommit 模式,在非 autocommit 模式下,你必須使用 COMMIT 來提交你的更改,或者用 ROLLBACK 來回滾你的更改。
示例如下:
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summmary=@A WHERE type=1;
COMMIT;
52. mysql 里記錄貨幣用什么字段類型好
NUMERIC 和 DECIMAL 類型被 Mysql 實現為同樣的類型,這在 SQL92 標准允許。他們被用於保存值,該值的准確精度是極其重要的值,例如與金錢有關的數據。當聲明一個類是這些類型之一時,精度和規模的能被(並且通常是)指定;
salary DECIMAL(9,2)
在這個例子中,9(precision)代表將被用於存儲值的總的小數位數,而2(scalel)代表將被用於存儲小數點后的位數。
因此,在這種情況下,能被存儲在 salary 列中的值的范圍是從-9999999.99 到 9999999.99。
在 ANSI/ISO SQL92 中,句法 DECIMAL(P) 等價於 DECIMAL(p,0)。
同樣,句法 DECIMAL 等價於 DECIMAL(p,0),這里實現被允許決定值P。
Mysql 當前不支持 DECIMAL/NUMERIC 數據類型的這些變種形式的任一種。
這一般說來不是一個嚴重的問題,因為這些類型的主要益處得自於明顯地控制精度和規模的能力。
DECIMAL 和 NUMERIC 值作為字符串存儲,而不是作為二進制浮點數,以便保存那些值的小數精度。
一個字符用於值的每一位、小數點(如果 scale>0)和“-”符號(對於負值)。如果 scale 是 O, DECIMAL 和 NUMERIC 值不包含小數點或小數部分。
DECIMAL 和 NUMERIC 值得最大的范圍與 DOUBLE 一樣,但是對於一個給定的 DECIMAL 或 NUMERIC 列,實際的范圍可由制由給定列的precision 或 scale 限制。
當這樣的列賦給了小數點后面的位超過指定 scale 所允許的位的值,該值根據 scale 四舍五入。
當一個DECIMAL 或 NUMERIC 列被賦給了其大小超過指定(或缺省的) precision 和 scale 隱含的范圍的值,Mysal 存儲表示那個范圍的相應的端點值。
53. MYSQL 數據表在什么情況下容易損壞?
服務器突然斷電導致數據文件損壞。
強制關機,沒有先關閉 mysql 服務等。
54. mysql 有關權限的表都有哪幾個?
Mysql服務器通過權限表來控制用戶對數據庫的訪問,權限表存放在mysql 數據庫里,由mysql_install_db 腳本初始化。
這些權限表分別 user, db, table_priv, columns _priv 和 host。
55. Mysql 中有哪幾種鎖?
MyISAM 支持表鎖,InnoDB 支持表鎖和行鎖,默認為行鎖
表級鎖:開銷小,加鎖快,不會出現死鎖。鎖定粒度大,發生鎖沖突的概率最高,並發量最低
行級鎖:開銷大,加鎖慢,會出現死鎖。鎖力度小,發生鎖沖突的概率小,並發度最高