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