1. 程式人生 > >MySQL深入學習(一)--介紹

MySQL深入學習(一)--介紹

替代 exist 主鍵 ast rac iad roo 分支 表名

目錄

  • 數據庫之Mysql
  • 一、MySQL 版本
    • Mysql主流版本
  • 二、MySQL的體系結構
    • 1.MySQL C/S結構
    • 2.MySQL實例
    • 3.mysqld三層結構
  • 三、MySQL的邏輯結構
  • 四.SQL 語句
    • 1 SQL 種類
    • 2.不同分類語句作用
      • DDL
      • DCL
      • DML
      • DQL

數據庫之Mysql

一、MySQL 版本

MySQL目前三大最火的分支仍然是Oracle控制的、MariaDB控制的,以及Percona控制的,三者各有特色。其中,Oracle把控了原生MySQL社區版的發展,Percona緊跟MySQL的功能特性,並做了一些運維的改進和工具,MariaDB更加開放,功能特性也更強一些。

Mysql主流版本

  • mysql 5.6 5.6.36 5.38 5.6.40
  • mysql 5.7 5.7.18 5.7.20 5.7.22

二、MySQL的體系結構

1.MySQL C/S結構

MySQL兩種鏈接方法

  • TCP/IP (遠程,本地)
mysql -uroot -poldboy123 -h 10.0.0.200 -P3306
  • SOCKET(本地)
mysql -uroot -poldboy123 -S /tmp/mysql.sock 

當server和client在同一臺服務器上的時候,我們可以直接用mysql命令登陸。

當什麽參數都沒有指定的時候,mysql默認使用socket方式登陸

mysql登陸的時候,指定參數-h,會使用tcp/ip的方式連接

,如果沒有指定端口的話,默認是使用3306端口

2.MySQL實例

實例=mysqld+內存結構
MySQL實例======> mysqld(董事長)---->master thread(經理)---->N Thread(員工) ------>內存結構(辦公區)

3.mysqld三層結構

# 第一層:連接層
1.提供連接協議(TCP ,Socket)
2.用戶驗證
3.提供專用鏈接線程

# 第二層:SQL層
1.接收連接的命令
2.然後語法檢測
3.之後語義(SQL類型),權限
    SQL類型:
        DDL數據定義語言   
        DCL數據控制語言    
        DML數據操作語言     
        DQL數據查詢
        
4.專用的解析器解析SQL,解析成多種執行計劃
5.優化器:幫我們選擇一個代價最低的執行計劃(cpu,IO,MEM)
6.執行器:按照優化器的選擇,執行SQL語句,得出獲取數據方法
# 註:
#   查詢緩存:默認是關閉的.   一般會使用redis或Tair替代      
#   記錄日誌:二進制日誌

# 第三層:存儲引擎層
1.按照SQL層結論,找相應數據,結構化成表的形式

三、MySQL的邏輯結構

庫(schema):存儲表的地方(庫名,屬性)
表(Table):二維表

二維表
    表名字
    表的屬性(表的大小,權限,存儲引擎,字符集等)
    列:列名字,列屬性(數據類型,約束,其他定義)     
    行(記錄):數據行

四.SQL 語句

1 SQL 種類

  • DDL:數據定義語言
  • DCL:數據控制語言
  • DML:數據操作語言
  • DQL:數據查詢語言

2.不同分類語句作用

DDL

CREATE DATABASE
DROP   DATABASE
ALTER  DATABASE

# SQL語句規範第一條:
    CREATE DATABASE oldboy CHARSET utf8mb4;
    1.關鍵字大寫(非必須),字面量小寫(必須)
    2.庫名字,只能是小寫,不能有數字開頭,不能是預留關鍵字
    3.庫名字必須和業務名有關,例如his_user;
    4.必須加字符集.

CREATE TABLE 
DROP   TABLE
ALTER  TABLE


CREATE TABLE t1 (
id  INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT ‘用戶ID‘,
sname  VARCHAR(20) NOT NULL COMMENT ‘用戶姓名‘,
gender ENUM(‘f‘,‘m‘,‘u‘) NOT NULL DEFAULT ‘u‘ COMMENT ‘用戶性別‘,
telnum CHAR(11) NOT NULL UNIQUE COMMENT ‘手機號‘,
tmdate DATETIME NOT NULL DEFAULT NOW() COMMENT ‘錄入時間‘
)ENGINE INNODB CHARSET utf8mb4;

# SQL語句規範第二條:
    1.關鍵字大寫(非必須),字面量小寫(必須)
    2.表名必須小寫,不能有數字開頭,不能是預留關鍵字
    3.表名字必須和業務名有關
    4.必須加存儲引擎和字符集
    5.適合的數據類型
    6.必須要有主鍵
    7.盡量非空選項
    8.字段唯一性
    9.必須加註釋
    10.避免使用外鍵
    11.建立合理的索引

DCL

# 1. 創建用戶
  # 用戶只能在指定的IP地址上登錄
  CREATE USER 用戶名@IP地址 IDENTIFIED BY ‘密碼‘;
  # 用戶可以在任意IP地址上登錄
  CREATE USER 用戶名@‘%‘ IDENTIFIED BY ‘密碼‘;

# 2.給用戶授權
  # 給用戶分派在指定的數據庫上的指定的權限
  GRANT 權限1, … , 權限n ON 數據庫.* TO 用戶名@IP地址
    # 例如;GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON mydb1.* TO user@localhost;
    # 給user1用戶分派在mydb1數據庫上的create、alter、drop、insert、update、delete、select權限
  # 給用戶分派指定數據庫上的所有權限
  GRANT ALL ON 數據庫.* TO 用戶名@IP地址;
    > 

# 3.撤銷授權
  # 撤消指定用戶在指定數據庫上的指定權限
  REVOKE 權限1, … , 權限n ON 數據庫.* FROM 用戶名@IP地址;
  # 例如;REVOKE CREATE,ALTER,DROP ON mydb1.* FROM user1@localhost;
  # 撤消user1用戶在mydb1數據庫上的create、alter、drop權限

# 4.查看權限
  # 查看指定用戶的權限
  SHOW GRANTS FOR 用戶名@IP地址

# 5.刪除用戶
  DROP USER 用戶名@IP地址

DML

insert
update
delete 

# SQL語句規範第三條:
    1.insert語句按批量插入數據
    2.update必須加where條件
    3.delete盡量替換為update
    4.如果有清空全表需求,不要用delete,推薦使用truncate 

DQL

select 
show

# SQL語句規範第四條:   
    1. select語句避免使用 select *  from  t1; 應當使用  select id,name from t1;
    2. select語句盡量加等值的where條件.例如 select * from t1 where id=20;
    3. select 語句對於範圍查詢,例如 ;select * from t1 where id>200; 盡量添加limit或者  id>200 and id<300 union all id>300 and id<400
    4. select 的where 條件  不要使用 <>、like、‘%name‘、not in、not exist 
    5. 不要出現3表以上的表連接,避免子查詢
    6. where條件中不要出現函數操作.

MySQL深入學習(一)--介紹