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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...