程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 【精粹系列】Mysql精粹,mysql

【精粹系列】Mysql精粹,mysql

編輯:MySQL綜合教程

【精粹系列】Mysql精粹,mysql


關於Mysql整理的需要記憶和熟練掌握的內容

 

1. /* 查看操作 */ ------------------------------------------------------------------------------------------------------- 1. /* 查看操作 */ 
SHOW PROCESSLIST -- 顯示哪些線程正在運行
SHOW VARIABLES -- 查看變量



2. /* 數據庫操作 */ ------------------------------------------------------------------------------------------------------ 2. /* 數據庫操作 */
-- 查看當前數據庫
    select database();
-- 顯示當前時間、用戶名、數據庫版本
    select now(), user(), version();

-- 復制表結構
    CREATE TABLE 表名 LIKE 要復制的表名
-- 復制表結構和數據
    CREATE TABLE 表名 [AS] SELECT * FROM 要復制的表名



3. /* 字符集編碼 */ --------------------------------------------------------------------------------------------------------- 3. /* 字符集編碼 */

字符編碼 -- MySQL、數據庫、表、字段均可設置編碼 -- 數據編碼與客戶端編碼不需一致 SHOW VARIABLES LIKE 'character_set_%' -- 查看所有字符集編碼項 character_set_client 客戶端向服務器發送數據時使用的編碼 character_set_results 服務器端將結果返回給客戶端所使用的編碼 character_set_connection 連接層編碼 SET 變量名 = 變量值 set character_set_client = gbk; set character_set_results = gbk; set character_set_connection = gbk; SET NAMES GBK; -- 相當於完成以上三個設置


4./* 數據類型(列類型) */ ---------------------------------------------------------------------------------------------------4. /* 數據類型(列類型) */
1) 數值類型
  int            4字節
    bigint        8字節
 int(M)    M表示總位數
    - 默認存在符號位,unsigned 屬性修改
    - 顯示寬度,如果某個數不夠定義字段時設置的位數,則前面以0補填,zerofill 屬性修改
        例:int(5)    插入一個數'123',補填後為'00123'
    - 在滿足要求的情況下,越小越好。
    - 1表示bool值真,0表示bool值假。MySQL沒有布爾類型,通過整型0和1表示。常用tinyint(1)表示布爾型。
2) 字符串類型
-- a. char, varchar ----------
    char    定長字符串,速度快,但浪費空間
    varchar    變長字符串,速度慢,但節省空間
    M表示能存儲的最大長度,此長度是字符數,非字節數。
    不同的編碼,所占用的空間不同。
    char,最多255個字符,與編碼無關。
    varchar,最多65535字符,與編碼有關。
    一條有效記錄最大不能超過65535個字節。
        utf8 最大為21844個字符,gbk 最大為32766個字符,latin1 最大為65532個字符
    varchar 是變長的,需要利用存儲空間保存 varchar 的長度,如果數據小於255個字節,則采用一個字節來保存長度,反之需要兩個字節來保存。
    varchar 的最大有效長度由最大行大小和使用的字符集確定。
    最大有效長度是65532字節,因為在varchar存字符串時,第一個字節是空的,不存在任何數據,然後還需兩個字節來存放字符串的長度,所以有效長度是64432-1-2=65532字節。
    例:若一個表定義為 CREATE TABLE tb(c1 int, c2 char(30), c3 varchar(N)) charset=utf8; 問N的最大值是多少? 答:(65535-1-2-4-30*3)/3



5./* 建表規范 */ ------------------------------------------------------------------------------------------------------------------ 5./* 建表規范 */
    -- Normal Format, NF
        - 每個表保存一個實體信息
        - 每個具有一個ID字段作為主鍵
        - ID主鍵 + 原子表
    -- 1NF, 第一范式
        字段不能再分,就滿足第一范式。
    -- 2NF, 第二范式
        滿足第一范式的前提下,不能出現部分依賴。
        消除符合主鍵就可以避免部分依賴。增加單列關鍵字。
    -- 3NF, 第三范式
        滿足第二范式的前提下,不能出現傳遞依賴。
        某個字段依賴於主鍵,而有其他字段依賴於該字段。這就是傳遞依賴。
        將一個實體信息的數據放在一個表內實現。


6./* select 查詢語句*/ -------------------------------------------------------------------------------------------------------- 6./* select 查詢語句*/
1) having 子句,條件子句
    與 where 功能、用法相同,執行時機不同。
    where 在開始時執行檢測數據,對原數據進行過濾。
    having 對篩選出的結果再次進行過濾。
    having 字段必須是查詢出來的,where 字段必須是數據表存在的。
    where 不可以使用字段的別名,having 可以。因為執行WHERE代碼時,可能尚未確定列值。
    where 不可以使用合計函數。一般需用合計函數才會用 having
    SQL標准要求HAVING必須引用GROUP BY子句中的列或用於合計函數中的列。

7./* 備份與還原 */ ------------------------------------------------------------------------------------------------------------- 7./* 備份與還原 */
備份,將數據的結構與表內數據保存起來。
利用 mysqldump 指令完成。

-- 導出
1) 導出一張表
  mysqldump -u用戶名 -p密碼 庫名 表名 > 文件名(D:/a.sql)
2)導出多張表
  mysqldump -u用戶名 -p密碼 庫名 表1 表2 表3 > 文件名(D:/a.sql)
3)導出所有表
  mysqldump -u用戶名 -p密碼 庫名 > 文件名(D:/a.sql)
4)導出一個庫 
  mysqldump -u用戶名 -p密碼 -B 庫名 > 文件名(D:/a.sql)

可以-w攜帶備份條件

-- 導入
1)在登錄mysql的情況下:
  source  備份文件
2)在不登錄的情況下
  mysql -u用戶名 -p密碼 庫名 < 備份文


8./* 鎖表 */  ------------------------------------------------------------------------------------------------------------------ 8./* 鎖表 */
表鎖定只用於防止其它客戶端進行不正當地讀取和寫入
MyISAM 支持表鎖,InnoDB 支持行鎖
-- 鎖定
    LOCK TABLES tbl_name [AS alias]
-- 解鎖
    UNLOCK TABLES

 

9./* 用戶和權限管理 */ -------------------------------------------------------------------------------------------------------- 9./* 用戶和權限管理 */
用戶信息表:mysql.user
-- 刷新權限
FLUSH PRIVILEGES
-- 增加用戶
CREATE USER 用戶名 IDENTIFIED BY [PASSWORD] 密碼(字符串)
    - 必須擁有mysql數據庫的全局CREATE USER權限,或擁有INSERT權限。
    - 只能創建用戶,不能賦予權限。
    - 用戶名,注意引號:如 'user_name'@'192.168.1.1'
    - 密碼也需引號,純數字密碼也要加引號
    - 要在純文本中指定密碼,需忽略PASSWORD關鍵詞。要把密碼指定為由PASSWORD()函數返回的混編值,需包含關鍵字PASSWORD
-- 重命名用戶
RENAME USER old_user TO new_user
-- 設置密碼
SET PASSWORD = PASSWORD('密碼')    -- 為當前用戶設置密碼
SET PASSWORD FOR 用戶名 = PASSWORD('密碼')    -- 為指定用戶設置密碼
-- 刪除用戶
DROP USER 用戶名
-- 分配權限/添加用戶
GRANT 權限列表 ON 表名 TO 用戶名 [IDENTIFIED BY [PASSWORD] 'password']
    - all privileges 表示所有權限
    - *.* 表示所有庫的所有表
    - 庫名.表名 表示某庫下面的某表
-- 查看權限
SHOW GRANTS FOR 用戶名
    -- 查看當前用戶權限
    SHOW GRANTS; 或 SHOW GRANTS FOR CURRENT_USER; 或 SHOW GRANTS FOR CURRENT_USER();
-- 撤消權限
REVOKE 權限列表 ON 表名 FROM 用戶名
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 用戶名    -- 撤銷所有權限
-- 權限層級
-- 要使用GRANT或REVOKE,您必須擁有GRANT OPTION權限,並且您必須用於您正在授予或撤銷的權限。
全局層級:全局權限適用於一個給定服務器中的所有數據庫,mysql.user
    GRANT ALL ON *.*和 REVOKE ALL ON *.*只授予和撤銷全局權限。
數據庫層級:數據庫權限適用於一個給定數據庫中的所有目標,mysql.db, mysql.host
    GRANT ALL ON db_name.*和REVOKE ALL ON db_name.*只授予和撤銷數據庫權限。
表層級:表權限適用於一個給定表中的所有列,mysql.talbes_priv
    GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤銷表權限。
列層級:列權限適用於一個給定表中的單一列,mysql.columns_priv
    當使用REVOKE時,您必須指定與被授權列相同的列。


 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved