日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

day-44(2)mysql

發布時間:2023/12/8 数据库 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 day-44(2)mysql 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ps :
針對mysql的:
start transaction
drop table t1;
rollback;

無法回滾刪除操作,
其他的數據庫中也是一樣的, 但是除了oracle(flashback)

現在阿里云上, 數據庫不建議使用外鍵,效率問題




存儲引擎:

  create table t1(
  id int auto_increment primary key,
  name varchar(32) not null default ''
  )engine=Innodb charset=utf8;

分類:?
  Innodb
  1.(默認版本包含5.5)
  2.支持事務
  3.不支持全文索引
  4.索引和數據都是在同一個文件中, .ibd
    表的結構實在.frm文件中

  MyIsam
  1.(默認版本5.5以下 5.3)
  2.不支持事務
  3.支持全文索引(類似百度搜索框在數據庫搜索)
  4..frm: 表結構
  .MYD: 表數據
  .MYI: 表索引

  memory

  全文索引:
    sphinx

  1).文章,新聞等安全性要求不高的,選myisam
  2). 訂單,資金,賬單,火車票等對安全性要求高的,選用innodb
  3). 對于臨時中轉表,可以用memory型 ,速度最快

索引:

  作用: 加快查詢的速度
    類比: 新華字典的目錄, 可以將索引理解成一個特殊的文件, 然后如果沒有這個文件的話, 查詢是從前到后查找數據的,
    如果有這個文件的話, 會按照一種特殊的數據結構(二叉樹)查找數據

  分類:
    主鍵索引: 加快查詢 + 不能重復 + 不能為空 primary key
    唯一索引: 加快查詢 + 不能重復 unique(列名)
    聯合唯一索引: 加快查詢 + 不能重復 unique(列名1,列名2)
    普通索引: 加快查詢 index('列名')

  創建:
    主鍵索引:
      第一種:
        create table t1(
        id int auto_increment primary key,
        name varchar(32) not null default ''
        )engine=Innodb charset=utf8;
      第二種:
        alter table t1 change id id int auto_increment primary key;

    唯一索引:
      第一種:
        create table t1(
        id int auto_increment primary key,
        name varchar(32) not null default '',
        unique ix_name ('name')
        )engine=Innodb charset=utf8;
      第二種:
        create unique index 索引名稱(ix_name) on 表名(t1)(name);
        create unique index 索引名稱(ix_name_age) on 表名(t1)(name,age);

    普通索引:
      第一種:
        create table t1(
        id int auto_increment primary key,
        name varchar(32) not null default '',
        index ix_name ('name')
        )engine=Innodb charset=utf8;

      第二種:
        create index 索引名稱(ix_name) on 表名(t1)(name);

  刪除:
    drop 索引名稱(ix_name) on 表名(t1);

  查看索引:
    show index from 表名;

  場景:
    使用頻繁的列上加一個索引

  索引的缺點:
    版本5.3以下:
    刪除和修改的速度就變慢了

    版本5.5以上:
    刪除和修改的速度不是特別的慢

    create table t12(
    id int auto_increment primary key,
    name varchar(32) not null default '',
    email varchar(32) not null default ''
    )engine=Innodb charset=utf8;


  索引的使用:

    explain 工具

      查看sql語句是否用的上索引, 或者查看sql執行效率的工具

      給執行的SQL語句出一個報告, 通過此報告來判斷sql語句的執行效率和效果

      id
        查詢順序標識
      select_type
        查詢類型
        SIMPLE 簡單查詢
        PRIMARY 最外層查詢
        SUBQUERY 映射為子查詢
        DERIVED 子查詢
        UNION 聯合
        UNION RESULT 使用聯合的結果
...
      table
        正在訪問的表名
      type
        查詢時的訪問方式,性能:all < index < range < index_merge < ref_or_null < ref < eq_ref < system/const
        ALL 全表掃描,對于數據表從頭到尾找一遍

        INDEX 全索引掃描,對索引從頭到尾找一遍

        RANGE 對索引列進行范圍查找

        REF 根據索引查找一個或多個值

      CONST 常量
        表最多有一個匹配行,因為僅有一行,在這行的列值可被優化器剩余部分認為是常數,
        const表很快,因為它們只讀取一次。
        select nid from tb1 where nid = 2 ;
      SYSTEM 系統
        表僅有一行(=系統表)。這是const聯接類型的一個特例。
      possible_keys
        可能使用的索引

      key
        真實使用的

      key_len
        MySQL中使用索引字節長度

      rows
        mysql估計為了找到所需的行而要讀取的行數 ------ 只是預估值

      extra
        該列包含MySQL解決查詢的詳細信息
      “Using index”
        比較好,使用了索引
      “Using where”
        比較好,使用了索引
      “Using temporary”
        沒用到索引,或sql語句有問題
      “Using filesort”

        沒用到索引,或sql語句有問題
  ES (elasticsearch )
  SQL語句的規則:
    - 不建議使用 like 進行搜索    

    -不建議使用函數
    -類型不一致(規定的和傳入的不一致)
    -order by 排序的列沒有索引,不建議

  - 組合索引最左前綴
  如果組合索引為:(name,email)
  where name and email -- 使用索引
  where name -- 使用索引
  where email -- 不使用索引

慢日志查詢(slow log):

  日志文件: 記錄了執行速度特別慢的SQL語句

  開啟的步驟:
    1. show variables like '%query%';
    2. set global long_query_time = 1; 設置慢查詢的時間
    3. set global slow_query_log = ON 開啟慢日志
    4. set global slow_query_log_file = E:\program\mysql-5.6.44-winx64\data\oldboy-slow.log 慢日志文件

?

普通日志記錄(general log):

  SQL審計 (記錄sql的操作語句)

  show variables like '%general%';
  +------------------+------------------------------------------------+
  | Variable_name | Value |
  +------------------+------------------------------------------------+
  | general_log | ON |
  | general_log_file | E:\program\mysql-5.6.44-winx64\data\oldboy.log |
  +------------------+------------------------------------------------+
  set global general_log = ON;


權限管理:

  創建用戶
  create user '用戶名'@'IP地址' identified by '密碼';
  creaee user 'zekai'@'192.168.1.123' identified by '123qwe';
  creaee user 'zekai'@'192.168.1.%' identified by '123qwe';
  create user 'zekai'@'%' identified by '123qwe';


  刪除用戶
    drop user '用戶名'@'IP地址';
  修改用戶
    rename user '用戶名'@'IP地址' to '新用戶名'@'IP地址';
  修改密碼
    set password for '用戶名'@'IP地址' = Password('新密碼')
  查看權限
    show grants for '用戶'@'IP地址'

  授權:
    grant 權限 on 數據庫.表 to '用戶'@'IP地址' -- 授權

    grant select on db1.* to 'zekai'@'%';
    grant select on *.* to 'zekai'@'%';
    grant select, insert, delete on db1.* to 'zekai'@'%';
    *.* 所有
    select, insert, delete 權限
  取消授權:
    revoke 權限 on 數據庫.表 from '用戶'@'IP地址'

  記住:
    flush privileges;

轉載于:https://www.cnblogs.com/klw1/p/11042208.html

總結

以上是生活随笔為你收集整理的day-44(2)mysql的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。