MySQL 偶爾使用的重要 SQL 總結


MySQL 數據庫已經是目前最流行的數據庫了。由於其社區版具有開源、免費、跨平台的特性,而且安裝配置容易,功能豐富強大,所以被絕大多數企業作為首選數據庫。尤其是對於 .NET 開發人員來說,進入 .NET Core 技術時代,絕大部分人也都從 SQL Server 轉向了 MySQL 了,其主要原因還是 SQL Server 在跨平台技術上起步太晚了,在 Linux 平台下使用的公司和開發人員太少了,尤其是在微服務盛行的今天,其技術資料和成熟解決方案太少,再加上其不是開源免費,導致 SQL Server 的市場份額逐步萎縮。

今天發布的這篇博客,不是有關 MySQL 增刪改查的基本 SQL 語句的總結,而是針對大家平時很需要,但是卻一下子想不起來,在網上又不太好查到的 SQL 語句進行總結。主要目的還是方便我個人在使用的時候,能夠快速找到,節省時間。


一、操作數據庫

-- 查詢 mysql 目前有哪些數據庫
SHOW DATABASES;

-- 查看數據庫的字符集,格式如下:
-- SHOW CREATE DATABASE 數據庫名稱;
SHOW CREATE DATABASE testdb;

-- 創建一個數據庫,格式如下:
-- CREATE DATABASE IF NOT EXISTS 數據庫名稱 CHARACTER SET 字符集名稱
CREATE DATABASE IF NOT EXISTS testdb CHARACTER SET utf8;

-- 修改數據庫的字符集,格式如下:
-- ALTER DATABASE 數據庫名稱 CHARACTER SET 字符集名稱;
ALTER DATABASE testdb CHARACTER SET gbk;

-- 使用某個數據庫,使后續的 SQL 語句默認運行在這個數據庫上
USE testdb;

-- 查看當前正在使用哪個數據庫
SELECT DATABASE();

-- 刪除數據庫,格式如下:
-- DROP DATABASE IF EXISTS 數據庫名稱;
DROP DATABASE IF EXISTS testdb;

二、操作數據表

-- 以我自己創建的數據庫來舉例
USE testdb;

-- 查看 testdb 數據庫中有哪些表
SHOW TABLES;

-- 查看具體一張表的表結構
-- 格式為:DESC 表名;
DESC users;

-- 查看具體一張表的字符集
-- 格式為:SHOW TABLE STATUS FROM 庫名 LIKE '表名';
SHOW TABLE STATUS FROM testdb LIKE 'users';

-- 修改一張表的字符集
-- 格式為:ALTER TABLE 表名 CHARACTER SET 字符集名稱;
ALTER TABLE users CHARACTER SET gbk;

-- 參照現有數據庫中的某張表,創建一個結構相同的表(只參考結構,不包含數據)
-- 格式為:CREATE TABLE 表名 LIKE 被參照的表名;
CREATE TABLE my_user LIKE users;

-- 修改一個表的名稱
-- 格式為:ALTER TABLE 表名 RENAME TO 新的表名;
ALTER TABLE my_user RENAME TO custom_user;

-- 為表添加一列
-- 格式為:ALTER TABLE 表名 ADD 列名 數據類型;
ALTER TABLE users ADD gender VARCHAR(10);

-- 修改一個表中某一列的名稱
-- 格式為:ALTER TABLE 表名 MODIFY 列名 新數據類型;
ALTER TABLE users MODIFY gender INT;

-- 同時修改某一列的名稱和數據類型
-- 格式為:ALTER TABLE 表名 CHANGE 列名 新列名 新數據類型;
ALTER TABLE users CHANGE gender company VARCHAR(100);

-- 刪除表中某一列
-- 格式為:ALTER TABLE 表名 DROP 列名;
ALTER TABLE users DROP company;

-- 刪除某張表
-- 格式為:DROP TABLE IF EXISTS 表名;
DROP TABLE IF EXISTS custom_user;

三、命令行備份還原

大部分情況下,我們都使用圖形化工具進行 mysql 中某個數據庫的備份和還原,但是如果你想通過程序定期備份 mysql 中某個數據庫的話,可以考慮通過程序執行命令行來實現備份還原。

注意:通過命令行備份 mysql 中某個數據庫,並不是登錄到 mysql 中執行備份命令,而是運行 mysql 的 bin 目錄下的 mysqldump 這個可執行文件來備份數據庫。在 windows 操作系統,需要遠程連接到 mysql 安裝的服務器上,在 linux 需要通過 Xshell 等工具連接到 mysql 所在服務器。

-- 備份語句格式為:mysqldump -u root -p 數據庫名稱 > 文件保存路徑

-- windows 下的備份示例:
mysqldump -u root -p testdb > d:\testdb20220131.sql
-- linux 下的備份示例:
mysqldump -u root -p testdb > /databak/testdb20220131.sql

還原數據庫的命令操作,則需要登錄到 mysql 中運行。一般情況下,建議創建一個新數據庫,將備份先還原到這個新建的數據庫中,然后通過修改程序的數據庫連接字符串,實現數據庫的切換。

mysql 官方沒有提供修改數據庫名稱的命令。如果非得想讓還原后的數據庫名稱跟原數據庫名稱相同的話,只能先刪除原來的數據庫,然后新建一個相同名稱的數據庫,然后將備份還原到新數據庫中。這種操作相對比較危險一些。

在 Windows 操作系統,假如我們還是遠程連接到 mysql 安裝的服務器上,通過 cmd 窗口命令行進入 mysql 的 bin 目錄下,在 linux 需要通過 Xshell 等工具連接到 mysql 所在服務器。

-- 登錄到 mysql 中之后,執行還原命令的格式為:source 備份文件路徑;

-- 登錄 mysql 格式為:mysql {-h 主機ip} {-P 端口號} -u 賬號 -p {使用的數據庫名稱}
-- 其中 {} 的內容,可以省略,默認使用 3306 端口,登錄 localhost 的 mysql 數據庫 
mysql -u root -p
-- 數據 root 賬號的密碼后,登錄到 mysql 中
-- 新建一個數據庫
CREATE DATABASE IF NOT EXISTS testdb2 CHARACTER SET utf8;
-- 使用新數據庫
USE testdb2;
-- windows 下的還原示例:
SOURCE d:\testdb20220131.sql
-- linux 下的還原示例:
SOURCE /databak/testdb20220131.sql

四、操作用戶

mysql 操作用戶的絕大多數命令,需要使用 root 賬號來操作,其它賬號沒有權限。

-- 查看當前登錄用戶
select user();

-- 登錄到 mysql 之后,修改當前登錄用戶的密碼
mysql -u root -p
-- 輸入密碼正確后,登錄到 mysql 中,然后通過以下語句修改密碼
SET PASSWORD = '123456';

--------------------------------

-- 創建新用戶:授權必須指定 ip 192.168.1.44 才能訪問 mysql 的用戶 wolfer
create user 'wolfer'@'192.168.1.44' identified by '123456';

-- 創建新用戶:授權必須指定 ip 段 192.168.1.* 才能訪問 mysql 的用戶 monkey
create user 'monkey'@'192.168.1.%' identified by '123456';

-- 創建新用戶:授權任何 ip 都能訪問 mysql 的用戶 alpha
create user 'alpha'@'%' identified by '123456';

-- 刪除用戶
drop user 'wolfer'@'192.168.1.44';

-- 修改用戶名
rename user 'alpha'@'%' to 'jobs'@'%';

-- 修改某個用戶的密碼
set password for 'monkey'@'192.168.1.%' = 'fastorder';

--------------------------------

-- 查看權限
show grants for 'jobs'@'%'

-- 授權 jobs 用戶僅對 testdb.user 表有查詢、插入和更新的操作
grant select,insert,update on testdb.user to 'jobs'@'%';

-- 授權 jobs 用戶對 testdb 下的所有表任意操作
grant all privileges on testdb.* to 'jobs'@'%';

-- 授權 jobs 用戶對所有數據庫中文件有任何操作
grant all privileges  on *.*  to 'jobs'@'%';

-- 取消 jobs 用戶對 testdb 的 user 表的任意操作
revoke all on testdb.user from 'jobs'@'%';

-- 取消來自遠程服務器的 jobs 用戶對數據庫 testdb 的所有表的所有權限
revoke all on db1.* from 'jobs'@'%'; 

-- 取消來自遠程服務器的 jobs 用戶所有數據庫的所有的表的權限
revoke all privileges on *.* from 'jobs'@'%';

-- 注意:以上授權操作,以及取消授權操作,
-- 在被操作賬號不重新登錄的情況下,需要執行以下語句才能生效
flush privileges;

OK,已經總結完畢,內容不是很多,希望上面這些 SQL 語句,能夠對大家有所幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM