mysql 數據庫經常使用技巧

mysql 數據庫經常使用技巧

1. 關於備份數據庫

register數據庫中有user表和logs表
  1. 備份整個數據庫mysql

    mysqldump -uroot -p register > register.sql
    // 備份register數據庫並生成register.sql數據庫文件
  2. 備份數據庫中單張表sql

    mysqldump -u root -p register user > backups.sql
    // 備份register數據庫中user表到backups.sql數據庫文件中
  3. 將sql文件寫入數據庫中數據庫

    mysql -u root -p register < backups.sql
    // 將backups.sql文件寫入到register數據庫中,這裏請注意:mysql -u root -p 後面只能跟數據庫,而不能跟sql文件!
    這裏backups.sql中若是隻含有user中的數據,那麼執行這個寫入過程的時候,不會對logs有任何影響。
  4. 導出數據庫的表結構(若是數據庫中含有數據,不會導出數據,只會導出字段名)架構

    mysqldump -d -uroot -p register user > user.sql
    // 將register數據庫中的user表結構導出
  5. 備份全部的數據庫ide

    mysqldump -u root -p --all-databases > database_dump.txt
    // 將全部的數據庫都備份到database_dump.txt文件中去
  6. 複製表
    使用 SHOW CREATE TABLE 命令獲取建立數據表(CREATE TABLE) 語句,該語句包含了原數據表的結構,索引等。測試

    // 顯示建立 user 表的 sql 語句
    SHOW CREATE TABLE workflow_oa

2. 經常使用命令

  1. 鏈接數據庫編碼

    mysql -h[主機地址] -u[用戶名] -p[用戶密碼] 
    
    //舉例:鏈接本地數據庫 mysql -h 127.0.0.1 -u root -p 123456 (有些狀況下能夠不須要輸入主機地址):mysql -u root -p
  2. 建立數據庫命令行

    create database [庫名];
    
    //舉例:建立thinkcms數據庫 create database thinkcms;
    
    create database [庫名] charset utf8; //建立數據庫並存儲字符集爲utf8
    
    create database [庫名] DEFAULT CHARSET utf8 COLLATE utf8_general_ci; # utf8編碼
    
    create database [庫名] DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; # gbk編碼
  3. 顯示全部數據庫unix

    show databases;
  4. 打開數據庫code

    use [庫名];
    
    //舉例:使用thinkcms數據庫 use thinkcms
  5. 刪除數據庫

    drop database [庫名]; 
    
    //舉例:刪除thinkcms數據庫 drop database thinkcms
  6. 建立數據表

    CREATE TABLE [表名] ([字段名] [字段類型] [字段參數]);
    
    //舉例:建立reg數據表並將id設置成自增主鍵,並將innodb設置成存儲引擎,字符集設置成utf8
    mysql> CREATE TABLE reg(
       -> id INT NOT NULL AUTO_INCREMENT,
       -> user VARCHAR(100) NOT NULL,
       -> pwd VARCHAR(40) NOT NULL,
       -> create_time DATE,
       -> PRIMARY KEY (id)
       -> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
  7. 顯示數據表字段名(以及字段名備註)

    desc [表名];    (或者使用:show columns from [表名];)
    
    // 舉例:顯示reg表的字段名 
    desc reg;  
    show columns from reg;  
    // 顯示字段名包含備註
    show full columns from reg;
  8. 顯示當前數據庫下全部的數據表

    show tables;
  9. 刪除數據表

    drop table [表名];
    
    //舉例:刪除reg表 drop table reg;
  10. 清空表內容

    truncate [表名];
    
    //舉例:清除 reg 表中全部內容, truncate reg;
  11. 對數據表重命名

    alter table [舊錶名] rename as [新表名];
    
    //舉例:將register表名稱修改成users
    alter table register rename as users;
  12. 修改表

    • 添加列:

      alter table 表名 add 列名 類型
      // 舉例: ALTER TABLE menus ADD status TINYINT(1) DEFAULT 1 COMMENT '是否顯示'
    • 刪除列:

      alter table 表名 drop column 列名
    • 修改列:

      alter table 表名 modify column 列名 類型;  -- 類型
      
      alter table 表名 change column 原列名 新列名 類型; -- 列名,類型
      ALTER TABLE students CHANGE COLUMN birth birthday VARCHAR(20) NOT NULL;
    • 添加主鍵:

      alter table 表名 add primary key(列名);
    • 刪除主鍵:

      alter table 表名 drop primary key;
      
      alter table 表名  modify  列名 int, drop primary key;
    • 添加外鍵:

      alter table 從表 add constraint 外鍵名稱(形如:FK_從表_主表) foreign key 從表(外鍵字段) references 主表(主鍵字段);
      
      // 例子
      ALTER TABLE students
      ADD CONSTRAINT fk_class_id
      FOREIGN KEY (class_id)
      REFERENCES classes (id);
      
      其中,外鍵約束的名稱fk_class_id能夠任意,FOREIGN KEY (class_id)指定了class_id做爲外鍵,REFERENCES classes (id)指定了這個外鍵將關聯到classes表的id列(即classes表的主鍵)
    • 刪除外鍵:

      alter table 表名 drop foreign key 外鍵名稱
      
      // 例子 (不會刪除外鍵字段)
      ALTER TABLE students
      DROP FOREIGN KEY fk_class_id;
    • 修改默認值:

      ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
    • 刪除默認值:

      ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
  13. 對數據表的CURD

    插入數據:
    INSERT INTO table_name ( field1, field2,...fieldN )
                           VALUES
                           ( value1, value2,...valueN );
                           
    //舉例:在register表中插入一行數據:
    insert into register (`user`,`time`,`pwd`) values ('小明', '2016-04-22 15:25:33', '1');
    //插入多行數據:
    INSERT INTO employee_tbl (`pid`,`user`,`time`,`pwd`) VALUES 
    ('1', '小明', '2016-04-22 15:25:33', '1'), 
    ('2', '小王', '2016-04-20 15:25:47', '3'), 
    ('3', '小麗', '2016-04-19 15:26:02', '2'), 
    ('4', '小王', '2016-04-07 15:26:14', '4'), 
    ('5', '小明', '2016-04-11 15:26:40', '4'),
    ('6', '小明', '2016-04-04 15:26:54', '2');
    
    更新數據:
    UPDATE table_name SET field1=new-value1, field2=new-value2
    [WHERE Clause];
    
    //舉例:在register表中更新第一條數據:
    update register set user="王五",pwd=555 where id=1;
    // 全部80分如下的同窗成績加10分
    UPDATE students SET score=score+10 WHERE score<80;
    
    刪除數據:
    DELETE FROM table_name [WHERE Clause];
    
    //舉例:在register表中刪除第一條數據:
    delete from register where id=1;
    
    查詢語句:
    SELECT column_name,column_name
    FROM table_name
    [WHERE Clause];
    
    =====================where 條件=====================
    //舉例:在register表中查詢id=1的數據:
    select * from register where id=1;
    
    select * from 表 where id > 1 and name != 'aylin' and num = 12;
    select * from 表 where id between 5 and 16;
    select * from 表 where id in (11,22,33)
    select * from 表 where id not in (11,22,33)
    select * from 表 where id in (select nid from 表)
    
    =====================通配符 like=====================
    //在register表中查詢全部名字name含有張三的人
    select * from register where name like "%張三%";
    select * from register where name like '張三_'  # 張三開頭的全部(一個字符)
    
    =====================限制 limit=====================
    select * from 表 limit 5;            - 前5行
    select * from 表 limit 4,5;          - 從第4行開始的5行
    select * from 表 limit 5 offset 4    - 從第4行開始的5行
    
    =====================排序 asc,desc=====================
    select * from 表 order by 列1 desc,列2 asc    - 根據 「列1」 從大到小排列,若是相同則按列2從小到大排序
    
    =====================分組 group by=====================
    select num from 表 group by num
    select num,nid from 表 group by num,nid
    select num,nid from 表  where nid > 10 group by num,nid order nid desc
    select num,nid,count(*),sum(score),max(score),min(score) from 表 group by num,nid
    select num from 表 group by num having max(id) > 10
    
    特別的:group by 必須在where以後,order by以前

3. 其它簡單命令

  1. 查詢時間:

    select now();
  2. 查詢當前用戶:

    select user();
  3. 查詢數據庫版本:

    // 方法0一、命令行中直接敲如下命令
    mysql -V (大寫的V)
    // 方法0二、命令行中輸入如下命令
    mysql --help | grep Distrib
    // 方法0三、鏈接數據庫以後輸入
    status
    // 方法0四、直接查詢版本
    select version();
  4. 查詢當前使用的數據庫:

    select database();
  5. 查詢當前日期:

    select current_date;
  6. 查詢當前時間距離指定時間的天數

    SELECT DATEDIFF(CURDATE(), FROM_UNIXTIME(1527782400, '%Y-%m-%d'))
    // 1527782400對應的是2018-06-01 00:00的時間戳,若是今天是2018-06-07,那麼返回的值就是6
  7. 時間戳和時間互相轉換

    // 時間戳轉換成時間
    SELECT FROM_UNIXTIME(1234567890);
    SELECT FROM_UNIXTIME(1234567890, '%Y-%m-%d %H:%i:%S')
    // 會輸出 2009-02-14 07:31:30
    
    // 時間轉換成時間戳
    SELECT unix_timestamp("2018-6-1 00:00:00");
    // 會輸出 1527782400

4. 默認數據庫

  • 默認數據庫有以下:
    1. mysql :用戶權限相關數據
    2. test : 用於用於測試數據
    3. information_schema : MySQL自己架構相關數據
  • 用戶管理:
    1. 建立用戶

      create user '用戶名'@'IP地址' identified by '密碼';
    2. 刪除用戶

      drop user '用戶名'@'IP地址';
    3. 修改用戶

      rename user '用戶名'@'IP地址'; to '新用戶名'@'IP地址';
    4. 修改密碼

      set password for '用戶名'@'IP地址' = Password('新密碼');
  • 權限管理:
    1. 查看權限

      show grants for '用戶'@'IP地址'
    2. 受權

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

      2.1. 建立一個alex用戶,並賦予權限

      grant all privileges on *.* to  alex@"%" identified by "qazwsx" with grant option;
      
      //grant 是受權命令,其中 alex 是咱們鏈接用的用戶名、"qazwsx"是鏈接密碼,用戶名後面的 "%" 通用符表示容許各 host 操做。
    3. 取消受權

      revoke 權限 on 數據庫.表 from '用戶名'@'IP地址'
    4. 刷新受權

      flush privileges;
    5. 受權示例以下:

      grant all privileges on db1.tb1 TO '用戶名'@'IP'
      
      grant select on db1.* TO '用戶名'@'IP'
      
      grant select,insert on *.* TO '用戶名'@'IP'
      
      revoke select on db1.tb1 from '用戶名'@'IP'
相關文章
相關標籤/搜索