MYSQL之庫的操作

創建數據庫

語法很簡單, 主要是看看選項(與編碼相關的):

CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,
create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name

1. 語句中大寫的是關鍵字
2. [] 內的是可選項
3.??CHARACTER SET: 指定數據庫采用的字符集
4.?COLLATE: 指定數據庫字符集的校驗規則

1. 創建一個數據庫最簡單的命令為: create database db_name; --本質是在/var/lib/mysql/下創建一個目錄:

反過來, 在 mysql5.5下, 手動在該目錄下創建一個目錄, mysql 可以查詢到對應目錄名的數據庫. 但不應該這樣創建數據庫. 在 mysql 8 這樣做就不行了, 因為它采用 data dictionary(數據字典)去維護數據庫.

2. create database if not exist db_name, 如果要創建的數據庫存在就不創建, 已經存在的數據庫沒有必要創建.

3.? 數據庫編碼問題, 創建數據庫時有兩個編碼集:?數據庫字符集和數據庫校驗集????????

1. 數據庫字符集(編碼集) 是 未來存儲數據用的字符集
2. 數據庫校驗集 是 為了支持數據庫進行字段比較所使用的編碼, 本質是一種讀取數據庫中數據所采用的編碼格式.

因此, 無論數據庫對數據做任何操作, 都必須保證操作和編碼是一致的.?

a.?當我們創建數據庫沒有指定字符集和校驗規則時, 系統使用默認字符集:?utf8, 校驗規則是:utf8_ general_ ci. 這里我們的 my.cnf 配置為了 character-set-server=utf8mb4, 所以 mysql 的默認字符集以及校驗規則為:?utf8mb4 和?utf8mb4_0900_ai_ci.

MySQL 在早期(如 5.5 及更早)中的 utf8 實際指的是 utf8mb3,無法存儲某些 Unicode 字符,? utf8mb4 是UTF-8完全體, 支持所有 Unicode 字符(包括 emoji, 部分罕見漢字等)

查看系統默認字符集以及校驗規則:

show variables like 'character_set_database';
show variables like 'collation_database';

?查看數據庫支持的字符集和字符集校驗規則:

show charset;
show collation;

show charset 的部分條目:

?b. 現在我們可以手動創建兩個數據庫:

create database d1;
create database d2 charset=gbk colloate gbk_chinese_ci;

注意這里?charset=gbk?可以寫成 character set?gbk

了解: MYSQL 5.5?下可以通過 ?cat?/var/lib/mysql/db_name/db.opt 去查看數據庫的配置選項. 而MySQL 8.0 中, 關于數據庫的配置信息(如字符集和校驗規則)現在存儲在 數據字典表 mysql.schema 中,?該表存儲了數據庫的元數據:

SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME 
FROM INFORMATION_SCHEMA.SCHEMATA;

INFORMATION_SCHEMA.SCHEMATA 視圖專門用于存儲有關 所有數據庫(schema) 的信息?

?c. 校驗規則對數據庫的影響

現在創建兩個數據庫d1 d2, 分別為 utf8mb4_0900_ai_ci 和 utf8mb4_bin, 前者不區分大小寫, 后者區分大小寫.?

一. SELECT顯式查詢以及結果

然后在數據庫插入幾個表供查詢演示.

1. d1 使用默認字符集 utf8mb4_0900_ai_ci 不區分大小寫:?

use d1
create table person(name varchar(20));
insert into person (name) values ('A');
insert into person (name) values ('a');
insert into person (name) values ('B');
insert into person (name) values ('b');
insert into person (name) values ('C');

?2. d2 使用 utf8mb4_bin, 區分大小寫:

use d2
create table person(name varchar(20));
insert into person (name) values ('A');
insert into person (name) values ('a');
insert into person (name) values ('B');
insert into person (name) values ('b');
insert into person (name) values ('C');

在使用數據庫前需要先 use db_name, 再建表. (對應系統級操作 cd dir_name, 相當于在指定目錄下創建文件需要先進入目錄),??

二. SELECT 隱式排序以及結果(默認是升序)

不區分大小寫:?A 和 a 的值要比 B 和 b 小, 所以整體呈現A->B->C的順序:

區分大小寫, 用 ASSIC 碼去進行比較, 小寫字母比大寫字母ASSIC碼要大, 因此為A->B->C->a->b:?

?結論: 校驗集會影響查詢結果, 無論是 顯式地用where去指定 還是 隱式的用order去排序.


操縱數據庫

MySQL 建議我們關鍵字(create select等)使用大寫, 但是不是必須的.

1. 查看數據庫, 經常用到:

show databases;

2.?查看當前使用的是哪個數據庫:

select database();

3.?修改數據庫

對數據庫的修改主要指的是修改數據庫的字符集, 校驗規則:

ALTER DATABASE db_name
[alter_spacification [,alter_spacification]...]
alter_spacification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name

將 mytest 數據庫字符集改成 gbk :

alter database mytest charset=gbk;


?4. 查詢當時創建數據庫時的創建語句:

show create database 數據庫名;

  • 數據庫名字的反引號``, 是為了防止使用的數據庫名剛好是關鍵字.
  • /*!40100 default.... */ 這個不是注釋, 表示當前 mysql 版本大于4.01版本, 就執行這句話.??
  • alter 之后, show create database db_name; 也會相應更改

可以加上\G選項, 去掉多余的邊框, 只顯示有用信息, 后面show create table tb_name; 實用.?

5. 數據庫刪除

DROP DATABASE [IF EXISTS] db_name;

?執行刪除之后的結果:

  • 數據庫內部看不到對應的數據庫
  • 對應的數據庫文件夾被刪除, 級聯刪除, 里面的數據表全部被刪

注意: 不要隨意刪除數據庫.

數據庫的備份和恢復

mysql 不提供直接數據庫進行重命名, 也不要直接對數據庫對應的目錄文件重命名. 如果非要重命名, 方法是對數據庫進行備份, 然后把文件導入到新的數據庫中.

數據庫遷移

數據庫在兩個機器上轉移很容易, 只需要將備份文件交給另一臺機器, 然后還原即可.?

1. 備份要使用 mysql 提供的工具去備份,? 備份成功之后, 會生成一個指定的備份文件, 圖中為d1.sql:

?2. 刪掉d1數據庫之后, 再在mysql環境下用 source 命令還原回去:

3. 由于 d1.sql 備份文件中備份的是關于該數據庫曾經的所有操作, 所以會依次執行 d1.sql 中保存的操作.?

數據庫重命名

如果備份一個數據庫時, 沒有帶上 -B 參數, 在恢復數據庫時, 需要:

1. 先創建空數據庫, 自己命名
2.?使用數據庫
3. 直接輸入 source 來還原

本質是因為沒有 -B 的參數, 備份的文件中就不會有第一行 create database db_name 語句, 只會保留一些表信息. 因此需要自己創建一個數據庫并命名.

備份表和多個數據庫?

另外, 我們如果備份的不是整個數據庫, 而是其中的若干張表.?

mysqldump -u root -p 數據庫名 表名1 表名2 > 備份文件路徑

?同時備份多個數據庫:?

mysqldump -u root -p -B 數據庫名1 數據庫名2 ... > 數據庫存放路徑

查看連接情況

show processlist;

?可以告訴我們當前有哪些用戶連接到我們的MySQL, 如果查出某個用戶不是你正常登陸的, 很有可能你的數據庫被人入侵了. 以后大家發現自己數據庫比較慢時, 可以用這個指令來查看數據庫連接情況.

總結

數據庫的名稱不要輕易改, 數據庫不要輕易刪除, 因為上層應用依賴數據庫且認定改數據庫的名稱, 改動會出錯.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/77856.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77856.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/77856.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Git Flow分支模型

經典分支模型(Git Flow) 由 Vincent Driessen 提出的 Git Flow 模型,是管理 main(或 master)和 dev 分支的經典方案: main 用于生產發布,保持穩定; dev 用于日常開發,合并功能分支(feature/*); 功能開發在 feature 分支進行,完成后合并回 dev; 預發布分支(rele…

【Spring】依賴注入的方式:構造方法、setter注入、字段注入

在Spring框架中,除了構造器注入(Constructor Injection)和Setter注入(Setter Injection),還有一種依賴注入方式:字段注入(Field Injection)。字段注入通過在Bean的字段上…

【數學建模】隨機森林算法詳解:原理、優缺點及應用

隨機森林算法詳解:原理、優缺點及應用 文章目錄 隨機森林算法詳解:原理、優缺點及應用引言隨機森林的基本原理隨機森林算法步驟隨機森林的優點隨機森林的缺點隨機森林的應用場景Python實現示例超參數調優結論參考文獻 引言 隨機森林是機器學習領域中一種…

HttpSessionListener 的用法筆記250417

HttpSessionListener 的用法筆記250417 以下是關于 HttpSessionListener 的用法詳解,涵蓋核心方法、實現步驟、典型應用場景及注意事項,幫助您全面掌握會話(Session)生命周期的監聽與管理: 1. 核心功能 HttpSessionLi…

【Python爬蟲基礎篇】--2.模塊解析

目錄 1.urllib庫 1.1.request模塊 1.1.1、urllib.request.urlopen() 函數 1.1.2.urllib.request.urlretrieve() 函數 1.2. error模塊 1.3. parse 模塊 2. BeautifulSoup4庫 2.1.對象種類 2.2.對象屬性 2.2.1.子節點 2.2.2.父節點 2.2.3.兄弟節點 2.2.4.回退和前進 …

Ubuntu-Linux從桌面到顯示的全流程:技術分析總結

引言 Ubuntu作為主流的Linux發行版,其顯示系統經歷了從傳統X11到現代Wayland的演進。本文將詳細分析從應用程序到屏幕顯示的完整技術流程,包括桌面環境、顯示服務器、圖形棧和硬件交互等核心環節。 1. 系統架構概覽 Ubuntu的顯示系統架構可分為四個主要…

在PyCharm中部署AI模型的完整指南

引言 隨著人工智能技術的快速發展,越來越多的開發者開始將AI模型集成到他們的應用程序中。PyCharm作為一款強大的Python IDE,為AI開發提供了出色的支持。本文將詳細介紹如何在PyCharm中部署AI模型,從環境配置到最終部署的完整流程。 第一部分:準備工作 1. 安裝PyCharm …

WHAT - 靜態資源緩存穿透

文章目錄 1. 動態哈希命名的基本思路2. 具體實現2.1 Vite/Webpack 配置動態哈希2.2 HTML 文件中動態引用手動引用使用 index.html 模板動態插入 2.3 結合 Cache-Control 避免緩存穿透2.4 適用于多環境的動態策略 總結 在多環境部署中,靜態資源緩存穿透是一個常見問題…

PoCL環境搭建

PoCL環境搭建 **一.關鍵功能與優勢****二.設計目的****三.測試步驟**1.創建容器2.安裝依賴3.編譯安裝pocl4.運行OpenCL測試程序 Portable Computing Language (PoCL) 簡介 Portable Computing Language (PoCL) 是一個開源的、符合標準的異構計算框架,旨在為 OpenCL…

【區塊鏈技術解析】從原理到實踐的全鏈路指南

目錄 前言:技術背景與價值當前技術痛點解決方案概述目標讀者說明 一、技術原理剖析核心概念圖解核心作用講解關鍵技術模塊技術選型對比 二、實戰演示環境配置要求核心代碼實現(10個案例)案例1:創建簡單區塊鏈案例2:工作…

在Windows上安裝Git

一、安裝 Git 下載 Git地址:Git - Downloads (git-scm.com) 1、在頁面中找到適用于 Windows 系統的最新版本安裝包(通常為.exe 格式文件),點擊下載鏈接。 出于訪問Git官網需要科學上網,不會的可以私信我要軟件包&…

Golang interface總結(其一)

本篇是對golang 中的interface做一些淺層的、實用的總結 多態 常用場景 interface內僅包含函數類型,然后定義結構體去實現,如下 package mainimport "fmt"type Animal interface {Sound()Act() }type Cat struct{}func (c *Cat) Sound() {…

TVM計算圖分割--Collage

1 背景 為滿足高效部署的需要,整合大量優化的tensor代數庫和運行時做為后端成為必要之舉。現在的深度學習后端可以分為兩類:1)算子庫(operator kernel libraries),為每個DL算子單獨提供高效地低階kernel實現。這些庫一般也支持算…

Redis——內存策略

目錄 前言 1.過期策略 1.1過期策略——DB結構 1.2過期策略——惰性刪除 1.3過期策略——定期刪除 2.淘汰策略 2.1最少最近使用和使用頻率原理 2.2內存淘汰策略執行流程 總結: 前言 Redis之所以性能強,主要的原因就是基于內存存儲。然而單節點的R…

原型模式詳解及在自動駕駛場景代碼示例(c++代碼實現)

模式定義 原型模式(Prototype Pattern)是一種創建型設計模式,通過克隆已有對象來創建新對象,避免重復執行昂貴的初始化操作。該模式特別適用于需要高效創建相似對象的場景,是自動駕駛感知系統中處理大量重復數據結構的…

在kali中安裝AntSword(蟻劍)

步驟一、下載壓縮包 源碼:https://github.com/AntSwordProject/antSword,下載壓縮包。 加載器:https://github.com/AntSwordProject/AntSword-Loader,根據系統選擇壓縮包(kali選擇AntSword-Loader-v4.0.3-linux-x64&…

華為倉頡編程語言基礎概述

第一章:技術演進與誕生背景 1.1 萬物智聯時代的編程挑戰 在5G、物聯網、邊緣計算等技術推動下,全球智能設備數量呈指數級增長。據IDC預測,2025年全球IoT設備將突破550億臺,這對系統級編程語言提出新要求: 異構硬件兼…

【Linux篇】探索進程間通信:如何使用匿名管道構建高效的進程池

從零開始:通過匿名管道實現進程池的基本原理 一. 進程間通信1.1 基本概念1.2 通信目的1.3 通信種類1.3.1 同步通信1.3.2 異步通信 1.4 如何通信 二. 管道2.1 什么是管道2.2 匿名管道2.2.1 pipe()2.2.2 示例代碼:使用 pipe() 進行父子進程通信2.2.3 管道容…

【LeetCode】嚼爛熱題100【持續更新】

2、字母異位詞分組 方法一&#xff1a;排序哈希表 思路&#xff1a;對每個字符串排序&#xff0c;排序后的字符串作為鍵插入到哈希表中&#xff0c;值為List<String>形式存儲單詞原型&#xff0c;鍵為排序后的字符串。 Map<String, List<String>> m new Ha…

2025年最新版 Git和Github的綁定方法,以及通過Git提交文件至Github的具體流程(詳細版)

文章目錄 Git和Github的綁定方法與如何上傳至代碼倉庫一. 注冊 GitHub 賬號二.如何創建自己的代碼倉庫&#xff1a;1.登入Github賬號&#xff0c;完成登入后會進入如下界面&#xff1a;2.點擊下圖中紅色框選的按鈕中的下拉列表3.選擇New repostitory4.進入創建界面后&#xff0…