MySQL資料庫筆記六:數據定義語言及資料庫的備份和修複

来源:https://www.cnblogs.com/sl0309/archive/2019/08/31/11439699.html
-Advertisement-
Play Games

1. MySQL中的函數 <1>加密函數 <2>聚合函數 <3>數學相關的函數 <4>字元相關的函數 <5>日期函數 <6>流程式控制制函數 2. 用戶的創建和授權(DCL) <1>授權的語法格式 <2>取消許可權的語法格式 <3>顯示授予的許可權 <4>刪除用戶 3.MySQL中的索引 <1>概念: <2 ...


1. MySQL中的函數

<1>加密函數

password(str)
    該函數可以對字元串str進行加密,一般情況下,此函數給用戶密碼加密。

    select PASSWORD('tlxy666'); 

md5(str)
    對字元串str進行散列加密,可用戶對於一些普通的不需要進行解密的數據進行加密。

<2>聚合函數

avg()
count()
min()
max()
sum()

    例如:
        select AVG(sal) from emp;   平均薪資
        select COUNT(*) from emp;   員工數量
        select MIN(sal) from emp;   最低工資
        select MAX(sal) from emp;   最高工資
        select SUM(sal) from emp;   工資求和

<3>數學相關的函數

rand()
    返回0~1的隨機數
    select RAND();

abs()
    獲取num的絕對值
    select ABS(-2);
mod(num1,num2)
    取餘數
    select MOD(10,3)

ceiling(num)
    向上取整
    select CEILING(10.1);

floor(num)
    向下取整    
    select FLOOR(10.1);

round(num)
    返回離num最近的數----四捨五入
    select round(10.5)

round(num,n)
    保留num小數點後的n位
    select ROUND(10.12345,3);

least(num,num2,.....)
    求最小值
    select LEAST(10,5,18,3,20)

<4>字元相關的函數

char_length(str)
        返回字元串str的長度,單位是字元
        select CHAR_LENGTH('nihaoya');

    length(str) 
        返回字元串str的長度
        select length('nihaoya')

    instr(str,substr)
        返回字元串str中子字元串substr的位置
        select INSTR('123456','34');

    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)

<5>日期函數

now()
    獲取當前日期和時間
    select now();

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

curtime()/current_time();
    select current_time();

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

<6>流程式控制制函數

 if(expr,v1,v2)
        如果表達式expr成立,則返回v1的值,否則返回v2的值
        select if(5>3,'大於','小於')

    ifnull(v1,v2)
        如果v1的值不為null,則返回v1的值,否則返回v2的值
        select IFNULL(4,0);

    nullif(expr1,expr2)
        如果expr1=expr2,則返回null值,否則返回expr1的值
        select NULLIF(2,2)
 

2. 用戶的創建和授權(DCL)

<1>授權的語法格式

GRANT 許可權 ON 資料庫.表 TO 用戶名@登錄的主機  IDENTIFY BY 密碼;


1. 新建資料庫testdb
    create database 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; -- 刷新許可權

3.MySQL中的索引

<1>概念:

是一種高效獲取數據的數據結構(樹),以文本的形式存在。以某種數據結構存儲特定的數據(地址)。
好比是一本書的目錄,能夠加快資料庫查詢的數據。

<2>作用

提高查詢的效率
在多表連接的時候,作為條件加速連接的速度
在分組和排序檢索數據的時候,減少分組和排序所消耗的時間。

<3>類型

1.普通索引(最基本的索引)
    1.1 創建索引
        格式: 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);

    1.2 查詢索引 
            格式:show index from table_name;

    1.3 刪除索引
            格式:drop index index_name on table_name;

2.唯一索引
3.主鍵索引
    註意:使用整型優於字元型,額為維護一個與其他欄位不相關、與業務不相關的列,一般設置為整數類型並且自增長。

4.MySQL資料庫的備份和恢復

<1>資料庫的備份

使用mysqldump 命令可以生成指定的資料庫腳本文件。

語法:
    mysqldump -uroot -p密碼 資料庫名稱 > 生成的腳本文件存放的路徑

例如:
    mysqldump -uroot -proot tlxy > G:\tlxy.sql (sql腳本文件) 不需要登錄到mysql資料庫中

<2>資料庫的恢復

語法格式:
    source 腳本文件存放的路徑        (先選擇恢復到目的資料庫,需要登錄到mysql資料庫中)

    mysql -uroot -p密碼   新資料庫 < 腳本文件存放的路徑 (不需要登錄到mysql數據中)

    註意:指定數據存放的資料庫
         表名稱不要重覆。

5.資料庫的優化

1.遵循設計範式

第一範式:對屬性的原子性的約束,屬性不能再分解
第二範式:對記錄的唯一性約束,要求每一條記錄都有唯一標識,實體完整性。
第三範式:對欄位的冗餘約束,欄位沒有冗餘。 允許欄位適當的冗餘,提高數據操作的效率。

2.選擇合適的存儲引擎

Innodb      支持事務        行級別的鎖   外鍵          推薦使用
MyISAM      不支持     表級別的鎖   不支持外鍵   查詢效率更高

3.選擇合適的數據類型

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

4.適當的建立索引

where       order by    group by 後面經常出現的字元
多表的連接的欄位

5.避免使用 select *

6.為每一張表設置id並且自增長

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • RDMA (Remote Direct Memory Access) 全稱為 遠程直接記憶體訪問 其出現的目的:為瞭解決網路傳輸中服務端數據處理的延遲而產生的。其將數據直接從一臺電腦的記憶體傳輸到另一臺電腦,無需雙方操作系統的介入。這允許高吞吐、低延遲的網路通信,尤其適合在大規模並行電腦集群中使用 ...
  • 進入Windows系統控制面板-->外觀和個性化-->字體(選擇一個字體文件simsun.ttc複製)進入zabbix的web伺服器[root@test-zabbix]# cd ~/zabbix/assets/fonts/上傳文件simsun.ttc至該目錄[root@test-zabbix]# m ...
  • 1.在Windows系統中的C盤,新建一個zabbix目錄C:/zabbix2.先下載zabbix-agent的安裝包https://assets.zabbix.com/downloads/4.0.10/zabbix_agents-4.0.10-win-amd64.zip3.解壓zabbix_age ...
  • 最近心血來潮想給自己的筆記本裝一套linux系統作為開發環境, 說乾就乾,首先先收集一下現在linux主流版本, 貌似現在市場上應用伺服器比較多的是redhat相關產品,而ubuntu的優勢在於它龐大的社區支持用戶群體, 個人任務兩個都差不多,至於選擇哪個看個人興趣。 我選擇的是RedHat旗下Ce ...
  • 信號量 一、 1、信號量的數據類型為結構sem_t,它本質上是一個長整型的數。 2、例如: typedef struct { struct _pthread_fastlock __sem_lock; int __sem_value; _pthread_descr __sem_waiting; } s ...
  • [TOC] mysql資料庫 資料庫是什麼 存儲數的的倉庫 列表,字典....等等,都是記憶體中的,其缺點:斷點即消失, 優點:速度快 文件存儲, 缺點: 速度慢, 優點: 可以實現永久保存 本質就是一套基於CS結構的,客戶端和服務端程式,最終的數據存儲在伺服器端的磁碟中 為什麼要使用資料庫 直接使用 ...
  • [學習筆記] 下載hadoop-2.7.4-src.tar.gz,拷貝hadoop-2.7.4-src.tar.gz中hadoop-mapreduce-project\hadoop-mapreduce-examples\src\main\java\org\apache\hadoop\examples ...
  • Navicat Premium 功能很強大,支持不同資料庫客戶端的連接,並且使用工具可以生成兩個庫差異的sql腳本,方便dev與test環境表結構同步,具體操作方法如下 單擊運行,實現兩個庫中模式表結構同步,也可導出sql腳本,發給測試人員自己執行sql腳本。 Navicat Premium 12. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...