MySQL數據庫函數、DCL詳解(及備份恢復操做)

MySQL中的函數

<1> 加密函數

  • password(str)mysql

    • 該函數能夠對字符串str進行加密,通常狀況下,此函數給用戶密碼進行加密
    • select password('ruochen666');
    • select PASSWORD(ename) from emp;
  • md5(str)sql

    • 對字符串str進行散列加密,可用戶對於一些普通的不須要解密的數據進行加密
    • select MD5('ruochen666');
    • select MD5(ename) from emp;

<2> 聚合函數

  • avg()數據庫

    • select avg(sal) from emp; # 平均薪資
  • count()數據結構

    • select count(*) from emp; # 員工數量
  • min()ide

    • select MIN(sal) from emp; # 最低薪資
  • max()函數

    • select MAX(sal) from emp; # 最高薪資
  • sum()優化

    • select SUM(sal) from emp; # 薪資求和

<3> 數學相關的函數

  • rand()加密

    • 返回0~1的隨機數
    • select RAND();
  • ads(num)設計

    • 獲取num的絕對值
    • select ABS(-1);
  • mod(num1, num2)code

    • 取餘數
    • select MOD(10, 3);
  • ceiling(num)

    • 向上取整
    • select CEILING(10.1);
  • floor(num)

    • 向下取整
    • select FLOOR(10.1);
  • round(num)

    • 返回離num最近的數 --- 四捨五入
    • select ROUND(10.4);
  • round(num, n)

    • 保留num小數點後的n位
    • select ROUND(10.12345, 2);
  • least(num, num2 ....)

    • 求最小值
    • select LEAST(10, 5, 11, 23, 54);

<4> 字符相關的函數

  • char_length(str)

    • 返回字符串str的長度,單位是字符
    • select CHAR_LENGTH('ruochen');
  • length(str)

    • 返回字符串str的長度
    • select LENGTH('ruochen');
  • instr(str, substr)

    • 返回字符串str中子字符串substr的位置
    • select INSTR('ruochen', 'chen');
  • insert(str1, index, len, str2)

    • 將字符串str2替換str1的index開始長度爲len的數據
    • select INSERT('123456', 1, 3, 'abc');
  • replace(str, oldstr, newstr)

    • 字符串替換
    • select replace('hello', 'll', 'oo');
  • left(str, len) / right(str, len)

    • 返回字符串str的前 / 後len的字符串
    • select LEFT('helloword',5);
    • select RIGHT('helloword',4);

<5> 日期函數

  • now()

    • 獲取當前日期和時間
    • select now();
  • curdate() / current_date();

    • 獲取當前日期
    • select curdate();
    • select current_date();
  • curtime() / current_time();

    • 獲取當前時間
    • select curtime();
    • select current_time();
  • year(date)

    • 獲取年份
    • select year('1995-01-01');

<6> 流程控制函數

  • if(expr, v1, v2)

    • 若是表達式expr成立,則返回v1的值,不然返回v2的值
    • select if(5>3, '大於', '小於');
  • ifnull(v1, v2)

    • 若是v1的值不爲null,則返回v1的值,不然返回v2的值
    • select ifnull('ruochen', '');
  • nullif(expr1, expr2)

    • 若是expr1=expr2,則返回null值,不然返回expr1的值
    • select nullif(2, 2);

MySQL用戶建立和受權(DCL)

<1> 受權

  • 語法格式

    • GRANT 權限 ON 數據庫.表 TO 用戶名@登錄的主機 IDENTIFIED BY 密碼;

    1. 新建數據庫testdb
      create datebase testdb;
    2. 新建用戶 laowang 並賦予 testdb數據庫相應的權限
      grant all privileges on testdb.* to laowang@localhost identified by '123';
    3. 若是想指定部分的權限給用戶
      grant select, update on testdb.* to laowang@localhost identified by '123';
    4. 賦予用戶 laowang 全部數據庫的某些權限
      grant select, update, insert, create, drop on . to laowang@"%" identified by '123';

    注意:all privileges, ., "%"(全部的登錄主機)

    經常使用的權限

    select   對全部表進行查詢操做
    insert   對全部表進行插入操做
    update   對全部表進行更新操做
    delete   對全部表進行刪除操做
    create   數據庫、表、索引
    drop     數據庫和表的刪除操做
    alter    對全部表進行更改

<2> 取消權限

  • revoke 權限 on 數據庫.表 from 用戶名@登錄的主機;
  • revoke select on testdb.* from laowang@localhost;

<3> 顯示授予的權限

  • show grants;

<4> 刪除用戶

  • use mysql;
  • delete from user where user='laowang';
  • flush privileges; -- 刷新權限

MySQL中的索引

<1> 概念

  • 是一種高效獲取數據的數據結構(樹), 以文本的形式存在,以某種數據結構存儲特定的數據(地址)。
  • 比如是一本書的目錄,可以加快數據庫查詢的速度。

<2> 做用

  • 提升查詢的效率
  • 在多表鏈接的時候,做爲條件加速鏈接的速度
  • 在分組和排序檢索數據的時候,減小分組和排序所消耗的時間

<3> 類型

  • 普通索引(最基本的索引)

    • 建立索引

      • 語法格式:create index index_name on table_name(column)

        create table index_tb1(

        id int primary key auto_increment,
        name varchar(32)

        );
        create index index_name on index_tb1(name);

        格式:alter table table_name add index index_name(column);

    • 查看索引

      • 語法格式:show index from table_name;
    • 刪除索引

      • 語法格式:drop index index_name on table_name;
      • drop index index_name on index_tb1;
  • 惟一索引
  • 主鍵索引
注意:使用整型優於字符型,額外維護一個與其餘字段不相關的列,通常設置爲整數類型而且自增加。

MySQL數據庫的備份和恢復

<1> 數據庫的備份

  • 使用mysqldump 命令能夠生成指定的數據庫腳本文件
  • 語法:

    • mysqldump -uroot -p密碼 數據庫名稱 > 生成的腳本文件存放的路徑
  • 例如;

    • mysqldump -uroot -proot ruochen > D:\ruochen.sql(sql腳本文件) 不須要登陸到mysql數據庫中

<2> 數據庫的恢復

  • 語法格式:

    • soure 腳本文件存放的路徑 (先選擇恢復到目的數據庫,須要登陸到mysql數據庫中)
    • mysql -uroot -p 密碼 新數據庫 < 腳本文件存放的路徑(不須要登錄到mysql數據庫中)
  • 注意

    • 指定數據存放的數據庫
    • 表名稱不要重複

數據庫的優化

1. 遵循設計的範式

  • 第一範式:對屬性的原子性的約束,屬性不能再分解
  • 第二範式:對記錄的惟一性的約束,要求每一條記錄都有惟一標識,實體完整性
  • 第三範式:對字段的冗餘約束,字段沒有冗餘。容許字段適當的冗餘,提升數據操做的效率。

2. 選擇合適的存儲引擎

  • Innodb

    • 支持事務
    • 行級別的鎖
    • 外鍵
    • 推薦使用
  • MyISAM

    • 不支持
    • 表級別的鎖
    • 不支持外鍵
    • 查詢效率更高

3. 選擇合適的數據類型

  • 優先考慮整型、日期、字符
  • 推按使用枚舉,enum('男', '女')

4. 適當的創建索引

  • where、order by、group by 後面常常出現的字段
  • 多表的鏈接的字段

5. 避免使用 select *

6. 爲每一張表設置id而且自增加

7. 只須要查詢一條數據,limit 1

相關文章
相關標籤/搜索