1. 程式人生 > 實用技巧 >mysql知識點

mysql知識點

mysql總結

基礎概念

什麼是mysql以及描述

mysql(dbms)就是一個操作檔案的軟體。對於資料庫我們可以把它作為一個資料夾,而表就可以看作是一個檔案(excel、csv)等等。

mysql屬於什麼型別的資料庫

資料庫分為關係型資料庫和非關係型資料庫。其中關係型資料庫包括:sql server 、sqlite、mysql、orcle、db2等等;非關係型資料庫包括:mongodb、redis等等。

基本操作

資料庫

  • 建立資料庫
    • create databases name default character set 'utf8'
  • 刪除資料庫
    • drop database name

使用者

  • 建立
    • create user name%'ip' indentified by password
  • 授權
    • grant viliges on database[.table] to user
  • 撤權
    • revoke viliges on database[.table] from user
  • 修改密碼
    • set password for user = new_password

  • 建立表

    • create table name(id int not null auto_increment primary key, name char(10)) engine = innodb default character set 'utf8';
  • 刪除表

    • drop table name
    • 當涉及到多個相關聯的表時,先刪除有外來鍵的表。
  • 外來鍵

    • 一種約束,提高資料的安全性,分別查詢,節省空間。

    • ` create table tb1(
          id int not null auto_increment primary key, 
          name char(10), 
          class_id int, 
          constraint foreign key (tb1.class_id) references tb2(id)
      ) engine = innodb character set 'utf8';`
      
  • 索引

    • 建立

      • create index ix_name on table(column_name);
        
    • 刪除

      • drop index ix_name on table;
  • 資料型別

    • 整型
      • int tinyint bigint
    • 浮點數
      • float double decimal
    • 字元
      • varchar char text
    • 日期
      • date datetime
  • 集合

    • 通過集合,在建立表的時候就可以使用集合的子集。

    • ` create table tb1(
          id int not null auto_increment primary key, 
          name char(10), 
          style set('red', 'big', 'blue','small')
      ) engine = innodb character set 'utf8';`
      
  • 列舉

    • ` create table tb1(   
           id int not null auto_increment primary key,    
           name char(10),    
           gender enum('男', '女')
       ) engine = innodb character set 'utf8';`
      

      • insert into table(age, name) values(age_value, name_value);
      • insert into table(age, name) select age, name from table2;
        
    • 刪除表
      • drop table name;
    • 刪除內容
      • delete from table;
      • truncate from table;
    • 單表
      • select * from table;
    • 多表
      • select * from tb1, tb2 where tb1.id = tb2.id;
      • select * from tb1 left join tb2 on tb1.id = tb2.id;,inner join、left join、right join。left join 以左邊的表格為基準在右邊的的表格中進行匹配,若右邊的表格中沒有則為null。inner join作用類似於left join,但是它會就見值為null的行給遮蔽了。
    • update table_name set age = ? where id = ?

高階操作

觸發器

  • 建立(before -->new/after -->odd)

    • delimiter //
      create trigger name  on table before/after insert/update/delete for each row
      begin 
      select * from table2;
      end //
      delimiter ;
      
  • 刪除

    • drop trigger name;
      

儲存過程

儲存過程就是將多個操作語句封裝在一起,通過一個名字呼叫。

  • 建立

    • delimiter //
      create procedure name()
      begin 
      select * from table;
      end //
      delimiter ;
      
  • 刪除

    • drop procedure name;
      
  • 使用

    • call name();
      
  • 高階(含引數)

    • in

    • out

    • inout

    • delimiter //
      create procedure name(
          in var1 int,
          out var2 int,
          inout var3 int
      )
      begin 
      declare var4 int;
      set var4 = xxxx;
      end //
      delimiter ;
      

檢視

  • 建立

    • create view name as (
      select * from table;
      )
      
  • 使用

    • select * from name;
      
  • 刪除

    • drop view name;
      

分頁效能優化

  • 資料較少時
    • select * from table limit 10;
  • 當資料較大時(當前頁面的最大id -->max_id, 最小id-->min_id
    • 下一頁
      • select * from table where id > max_id limit 10;
    • 上一頁
      • select * from table where id < min_id order by id desc limit 10;
    • 特殊情況,當前處於192 193 194 195,要194的
      • select * from (select * from table where id > 192.max_id limit 20) order by id desc limit 10;

導致不能命中索引的情況

  • like
  • or
  • order by(主鍵除外)
  • >=(主鍵除外)
  • !=(主鍵除外)
  • 型別不一致(主鍵除外)

不推薦的情況

  • select *
  • 多使用count(1) 代替count(*)

設定變數

  • 自動增長步長

    • set session auto_increment_increment = xxx;基於會話
  • 自動增長的起始值

    • set session auto_increment_offset = xxx;
  • 設定變數

    • set session/global varible = xxx;

python操作資料庫

基本

  • pymysql

    • import pymysql
      
      conn = pymysql 
      cursor = 
      sql = 'select * from table'
      cursor.execute(sql, [])
      result = cursor.fetchall()
      cursor.close()
      conn.close()
      

高階

  • sqlalchemy