关于mysql的一些问题_关于mysql的一些细节问题
1. MySQL刪除有外鍵約束的表
當刪除的表中的字段被用作了其他表的外鍵,因此在刪除這個表(父表)之前必須先刪除具有外鍵的表(子表)。也就是說,刪除表的過程需要和創建表的過程一致。
但如果數據庫表格之間關系太復雜,數量太多,操作起來就很麻煩。
因此,MySQL中提供了一個變量FOREIGN_KEY_CHECKS來設置是否在必要的時候檢查外鍵約束。即MySQL的外鍵約束是可控的。
在MySQL中,把 information_schema 看作是一個數據庫,確切說是信息數據庫。其中保存著關于MySQL服務器所維護的所有其他數據庫的信息。如數據庫名,數據庫的表,表欄的數據類型與訪問權 限等。
下面2個步驟暴力刪除
SELECT concat('DROP TABLE IF EXISTS ', table_name, ';')
FROM information_schema.tables
WHERE table_schema = MyDatabaseName;
/*MyDatabaseName是你數據庫的名稱*/
SET FOREIGN_KEY_CHECKS = 0
-- DROP語句
SET FOREIGN_KEY_CHECKS = 1;
2. 如何給表中的某個字段授權
先給此字段創建一個視圖,接著對視圖授權。
3. where語句中不能出現聚集函數
聚集函數也叫列函數,它們都是基于整列數據進行計算的,而where子句則是對數據行進行過濾的(這里過濾是在一個記錄里邊過濾的,基于"行"),在篩選過程中依賴“基于已經篩選完畢的數據得出的計算結果”是一種悖論,這是行不通的。更簡單地說,因為聚集函數要對全列數據時行計算,因而使用它的前提是:結果集已經確定!
而where子句還處于“確定”結果集的過程中,因而不能使用聚集函數。
4. 區分大小寫比較
where子句的字符串比較是不區分大小寫的,但是可以使用binary關鍵字設定where子句區分大小寫。
select * from table1 where binary name = 'li';
5. mysql將字符轉換成數字
將字符的數字轉成數字,比如'0'轉成0可以直接用加法來實現
例如:將pony表中的d 進行排序,可d的定義為varchar,可以這樣解決
select * from pony order by (d+0)
在進行ifnull處理時,比如 ifnull(a/b,'0') 這樣就會導致 a/b成了字符串,因此需要把'0'改成0,即可解決此困擾
比較數字和varchar時,比如a=11,b="11ddddd";
則 select 11="11ddddd"相等
若絕對比較可以這樣:
select binary 11 =binary "11ddddd"
字符集轉換 : CONVERT(xxx USING gb2312)
類型轉換和SQL Server一樣,就是類型參數有點點不同 : CAST(xxx AS 類型) , CONVERT(xxx,類型),類型必須用下列的類型:
可用的類型:
二進制,同帶binary前綴的效果 : BINARY
字符型,可帶參數 : CHAR()
日期 : DATE
時間: TIME
日期時間型 : DATETIME
浮點數 : DECIMAL
整數 : SIGNED
無符號整數 : UNSIGNED
6. 三種注釋寫法
#DELETE FROM SeatInformation
/*DELETE FROM SeatInformation */
-- DELETE FROM SeatInformation
需要特別注意 -- 這種注釋后面要加一個空格
7. 清除MySQL查詢緩存與測試性能
#關閉查詢緩存
set global query_cache_size = 0;
set global query_cache_type = off;
#查詢系統環境變量
show variables like '%pro%';
set profiling=1;#開啟性能測試功能
-- 需要測試的sql語句
show profiles;
#清空查詢緩存
RESET QUERY CACHE
# set sql_safe_updates=0; #非主鍵條件下無法執行update或者delete命令
總結
以上是生活随笔為你收集整理的关于mysql的一些问题_关于mysql的一些细节问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 分组排序取前n_mysql分
- 下一篇: mysql 子查询概念_聊聊MySQL的