Mysql精粹系列(精粹)
關(guān)于Mysql整理的需要記憶和熟練掌握的內(nèi)容
1. /* 查看操作 */ ------------------------------------------------------------------------------------------------------- 1. /* 查看操作 */
SHOW PROCESSLIST -- 顯示哪些線程正在運行 SHOW VARIABLES -- 查看變量
2. /* 數(shù)據(jù)庫操作 */ ------------------------------------------------------------------------------------------------------ 2. /* 數(shù)據(jù)庫操作 */
-- 查看當(dāng)前數(shù)據(jù)庫 select database(); -- 顯示當(dāng)前時間、用戶名、數(shù)據(jù)庫版本 select now(), user(), version(); -- 復(fù)制表結(jié)構(gòu) CREATE TABLE 表名 LIKE 要復(fù)制的表名 -- 復(fù)制表結(jié)構(gòu)和數(shù)據(jù) CREATE TABLE 表名 [AS] SELECT * FROM 要復(fù)制的表名
3. /* 字符集編碼 */ --------------------------------------------------------------------------------------------------------- 3. /* 字符集編碼 */
字符編碼 -- MySQL、數(shù)據(jù)庫、表、字段均可設(shè)置編碼 -- 數(shù)據(jù)編碼與客戶端編碼不需一致 SHOW VARIABLES LIKE 'character_set_%' -- 查看所有字符集編碼項 character_set_client 客戶端向服務(wù)器發(fā)送數(shù)據(jù)時使用的編碼 character_set_results 服務(wù)器端將結(jié)果返回給客戶端所使用的編碼 character_set_connection 連接層編碼 SET 變量名 = 變量值 set character_set_client = gbk; set character_set_results = gbk; set character_set_connection = gbk; SET NAMES GBK; -- 相當(dāng)于完成以上三個設(shè)置
4./* 數(shù)據(jù)類型(列類型) */ ---------------------------------------------------------------------------------------------------4. /* 數(shù)據(jù)類型(列類型) */
1) 數(shù)值類型 int 4字節(jié) bigint 8字節(jié) int(M) M表示總位數(shù) - 默認(rèn)存在符號位,unsigned 屬性修改 - 顯示寬度,如果某個數(shù)不夠定義字段時設(shè)置的位數(shù),則前面以0補填,zerofill 屬性修改 例:int(5) 插入一個數(shù)'123',補填后為'00123' - 在滿足要求的情況下,越小越好。 - 1表示bool值真,0表示bool值假。MySQL沒有布爾類型,通過整型0和1表示。常用tinyint(1)表示布爾型。 2) 字符串類型 -- a. char, varchar ---------- char 定長字符串,速度快,但浪費空間 varchar 變長字符串,速度慢,但節(jié)省空間 M表示能存儲的最大長度,此長度是字符數(shù),非字節(jié)數(shù)。 不同的編碼,所占用的空間不同。 char,最多255個字符,與編碼無關(guān)。 varchar,最多65535字符,與編碼有關(guān)。 一條有效記錄最大不能超過65535個字節(jié)。 utf8 最大為21844個字符,gbk 最大為32766個字符,latin1 最大為65532個字符 varchar 是變長的,需要利用存儲空間保存 varchar 的長度,如果數(shù)據(jù)小于255個字節(jié),則采用一個字節(jié)來保存長度,反之需要兩個字節(jié)來保存。 varchar 的最大有效長度由最大行大小和使用的字符集確定。 最大有效長度是65532字節(jié),因為在varchar存字符串時,第一個字節(jié)是空的,不存在任何數(shù)據(jù),然后還需兩個字節(jié)來存放字符串的長度,所以有效長度是64432-1-2=65532字節(jié)。 例:若一個表定義為 CREATE TABLE tb(c1 int, c2 char(30), c3 varchar(N)) charset=utf8; 問N的最大值是多少? 答:(65535-1-2-4-30*3)/3
5./* 建表規(guī)范 */ ------------------------------------------------------------------------------------------------------------------ 5./* 建表規(guī)范 */
-- Normal Format, NF - 每個表保存一個實體信息 - 每個具有一個ID字段作為主鍵 - ID主鍵 + 原子表 -- 1NF, 第一范式 字段不能再分,就滿足第一范式。 -- 2NF, 第二范式 滿足第一范式的前提下,不能出現(xiàn)部分依賴。 消除符合主鍵就可以避免部分依賴。增加單列關(guān)鍵字。 -- 3NF, 第三范式 滿足第二范式的前提下,不能出現(xiàn)傳遞依賴。 某個字段依賴于主鍵,而有其他字段依賴于該字段。這就是傳遞依賴。 將一個實體信息的數(shù)據(jù)放在一個表內(nèi)實現(xiàn)。
6./* select 查詢語句*/ -------------------------------------------------------------------------------------------------------- 6./* select 查詢語句*/
1) having 子句,條件子句 與 where 功能、用法相同,執(zhí)行時機(jī)不同。 where 在開始時執(zhí)行檢測數(shù)據(jù),對原數(shù)據(jù)進(jìn)行過濾。 having 對篩選出的結(jié)果再次進(jìn)行過濾。 having 字段必須是查詢出來的,where 字段必須是數(shù)據(jù)表存在的。 where 不可以使用字段的別名,having 可以。因為執(zhí)行WHERE代碼時,可能尚未確定列值。 where 不可以使用合計函數(shù)。一般需用合計函數(shù)才會用 having SQL標(biāo)準(zhǔn)要求HAVING必須引用GROUP BY子句中的列或用于合計函數(shù)中的列。
7./* 備份與還原 */ ------------------------------------------------------------------------------------------------------------- 7./* 備份與還原 */
備份,將數(shù)據(jù)的結(jié)構(gòu)與表內(nèi)數(shù)據(jù)保存起來。 利用 mysqldump 指令完成。 -- 導(dǎo)出 1) 導(dǎo)出一張表 mysqldump -u用戶名 -p密碼 庫名 表名 > 文件名(D:/a.sql) 2)導(dǎo)出多張表 mysqldump -u用戶名 -p密碼 庫名 表1 表2 表3 > 文件名(D:/a.sql) 3)導(dǎo)出所有表 mysqldump -u用戶名 -p密碼 庫名 > 文件名(D:/a.sql) 4)導(dǎo)出一個庫 mysqldump -u用戶名 -p密碼 -B 庫名 > 文件名(D:/a.sql) 可以-w攜帶備份條件 -- 導(dǎo)入 1)在登錄mysql的情況下: source 備份文件 2)在不登錄的情況下 mysql -u用戶名 -p密碼 庫名 < 備份文
8./* 鎖表 */ ------------------------------------------------------------------------------------------------------------------ 8./* 鎖表 */
表鎖定只用于防止其它客戶端進(jìn)行不正當(dāng)?shù)刈x取和寫入 MyISAM 支持表鎖,InnoDB 支持行鎖 -- 鎖定 LOCK TABLES tbl_name [AS alias] -- 解鎖 UNLOCK TABLES
9./* 用戶和權(quán)限管理 */ -------------------------------------------------------------------------------------------------------- 9./* 用戶和權(quán)限管理 */
用戶信息表:mysql.user -- 刷新權(quán)限 FLUSH PRIVILEGES -- 增加用戶 CREATE USER 用戶名 IDENTIFIED BY [PASSWORD] 密碼(字符串) - 必須擁有mysql數(shù)據(jù)庫的全局CREATE USER權(quán)限,或擁有INSERT權(quán)限。 - 只能創(chuàng)建用戶,不能賦予權(quán)限。 - 用戶名,注意引號:如 'user_name'@'192.168.1.1' - 密碼也需引號,純數(shù)字密碼也要加引號 - 要在純文本中指定密碼,需忽略PASSWORD關(guān)鍵詞。要把密碼指定為由PASSWORD()函數(shù)返回的混編值,需包含關(guān)鍵字PASSWORD -- 重命名用戶 RENAME USER old_user TO new_user -- 設(shè)置密碼 SET PASSWORD = PASSWORD('密碼') -- 為當(dāng)前用戶設(shè)置密碼 SET PASSWORD FOR 用戶名 = PASSWORD('密碼') -- 為指定用戶設(shè)置密碼 -- 刪除用戶 DROP USER 用戶名 -- 分配權(quán)限/添加用戶 GRANT 權(quán)限列表 ON 表名 TO 用戶名 [IDENTIFIED BY [PASSWORD] 'password'] - all privileges 表示所有權(quán)限 - *.* 表示所有庫的所有表 - 庫名.表名 表示某庫下面的某表 -- 查看權(quán)限 SHOW GRANTS FOR 用戶名 -- 查看當(dāng)前用戶權(quán)限 SHOW GRANTS; 或 SHOW GRANTS FOR CURRENT_USER; 或 SHOW GRANTS FOR CURRENT_USER(); -- 撤消權(quán)限 REVOKE 權(quán)限列表 ON 表名 FROM 用戶名 REVOKE ALL PRIVILEGES, GRANT OPTION FROM 用戶名 -- 撤銷所有權(quán)限 -- 權(quán)限層級 -- 要使用GRANT或REVOKE,您必須擁有GRANT OPTION權(quán)限,并且您必須用于您正在授予或撤銷的權(quán)限。 全局層級:全局權(quán)限適用于一個給定服務(wù)器中的所有數(shù)據(jù)庫,mysql.user GRANT ALL ON *.*和 REVOKE ALL ON *.*只授予和撤銷全局權(quán)限。 數(shù)據(jù)庫層級:數(shù)據(jù)庫權(quán)限適用于一個給定數(shù)據(jù)庫中的所有目標(biāo),mysql.db, mysql.host GRANT ALL ON db_name.*和REVOKE ALL ON db_name.*只授予和撤銷數(shù)據(jù)庫權(quán)限。 表層級:表權(quán)限適用于一個給定表中的所有列,mysql.talbes_priv GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤銷表權(quán)限。 列層級:列權(quán)限適用于一個給定表中的單一列,mysql.columns_priv 當(dāng)使用REVOKE時,您必須指定與被授權(quán)列相同的列。
以上所述是小編給大家介紹的Mysql精粹系列(精粹),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
MySQL group by和left join并用解決方式
這篇文章主要介紹了MySQL group by和left join并用解決方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12Ubuntu18.0.4下mysql 8.0.20 安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了Ubuntu18.0.4下mysql 8.0.19 安裝配置方法圖文教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-05-05MySQL 查找價格最高的圖書經(jīng)銷商的幾種SQL語句
不同的圖書,在不同的經(jīng)銷商的價格不同,我們這里要找到每種圖書最高的經(jīng)銷商是誰? 找最低的類似了。2009-07-07MySQL創(chuàng)建用戶和權(quán)限管理的方法
這篇文章主要介紹了MySQL創(chuàng)建用戶和權(quán)限管理的方法,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07