忘記密碼
sudo vim /etc/mysql/debian.cnf
記住裡面的 password
值,然後用它來登入:
mysql -u debian-sys-maint -p
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; -- 修改密碼為 password
ubuntu 系統下 mysql 重置密碼和修改密碼操作 | 部落格園
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) | Stack Overflow
執行 .sql 檔案
方法一
登入 MySQL 後,執行 source
命令:
mysql -u root -p
mysql> use database_name;
mysql> source /path/to/file.sql;
檔名不要加引號
PowerShell
Get-Content .\file.sql | mysql -u root -p
方法二
在終端中直接執行 .sql 檔案:
mysql -u root -p database_name < /path/to/file.sql
Q&A
Q: 在命令 mysql -uroot -proot_password
中,為什麼密碼和 -p
選項之間沒有空格?
A: 在 MySQL 命令列工具中,當您使用 -p
選項時,密碼和 -p
之間沒有空格是因為這種設計可以防止密碼洩漏。
當您在命令列中輸入命令時,其他使用者可能會透過 ps
命令(Linux/macOS)或 tasklist
命令(Windows)檢視正在執行的程序。如果密碼和-p選項之間有空格,那麼密碼可能會出現在這些命令的輸出中,從而洩露給其他使用者。
將密碼緊挨著 -p
選項輸入(即不使用空格),可以將密碼作為命令選項的一部分,這樣在程序列表中就不會顯示密碼。這提高了密碼在命令列中使用的安全性。
然而,將密碼直接寫在命令列中仍然存在一定的安全風險。為了更安全地使用 MySQL 命令列工具,建議只使用 -p
選項,而不輸入密碼。這樣,系統會提示您輸入密碼,而不是將密碼直接暴露在命令列中。例如:
mysql -u root -p
在這種情況下,MySQL 命令列工具會提示您輸入密碼,而不會將密碼顯示在螢幕上或程序列表中。這樣可以降低密碼洩露的風險。
DDL
SHOW DATABASES; -- 顯示所有資料庫
CREATE DATABASE database; -- 新建資料庫
CREATE DATABASE IF NOT EXISTS database;
DROP DATABASE database; -- 刪除資料庫
DROP DATABASE IF NOT EXISTS database;
USE database; -- 使用資料庫
SELECT DATABASE(); -- 顯示當前使用的資料庫
SHOW TABLES; -- 顯示資料庫中的所有表
DESCRIBE table; -- 查詢表結構
CREATE TABLE table ( -- 建立表
-- ...
);
DROP TABLE table; -- 刪除表
DROP TABLE IF EXISTS table;
/* 修改表 */
ALTER TABLE table1
RENAME TO table2; -- 重新命名錶
ALTER TABLE table
ADD attribute type; -- 增加屬性
ALTER TABLE table
MODIFY attribute new_type; -- 修改屬性型別
ALTER TABLE table
CHANGE old_attribute new_attribute new_type; -- 更改屬性
ALTER TABLE table
DROP attribute; -- 刪除屬性
CREATE VIEW view AS (SELECT ... FROM ...);
CREATE TABLE table AS (SELECT ... FROM ...);
CREATE TABLE table1 LIKE table2;
DML
-- 增加資料
INSERT INTO table (attr1, attr2, ...) -- (attr1, attr2, ...) 可省略
VALUES (val1, val2, ...), ...;
-- 更新資料
UPDATE table
SET attr1 = val1, attr2 = val2, ...
WHERE p;
-- 刪除資料
DELETE FROM table
WHERE p;
DQL
SELECT ... -- 欄位
FROM ... -- 表
WHERE ... -- 條件
GROUP BY ... -- 分組
HAVING ... -- 分組後條件
ORDER BY ... -- 排序
LIMIT ... -- 分頁
實際開發
外來鍵約束一定要單獨寫:FOREIGN KEY (attr) REFERENCES table(attr);
不要這樣寫:attr INT REFERENCES table(attr)
,這樣加不上外來鍵約束的。
遠端連線
Server:
CREATE USER 'xiao'@'%' IDENTIFIED BY '1296954'; -- 建立使用者,% 表示允許任意主機連線
GRANT ALL PRIVILEGES ON *.* TO 'xiao'@'%'
WITH GRANT OPTION; -- 授權,允許使用者對所有資料庫進行任意操作
Client:
mysql -u xiao -p -h 192.168.1.109 # -h 引數指定資料庫所在的主機
Host 'xxx.xx.xxx.xxx' is not allowed to connect to this MySQL server
修改密碼
set global validate_password_policy=0; -- 修改密碼安全策略為低(只校驗密碼長度,至少 8 位)。
ALTER USER 'root'@'localhost' IDENTIFIED BY '12345678';
-- 授予 root 使用者遠端管理許可權
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '12345678';
MySQL 變數
-- 使用者變數,字首為 @,可以不宣告就使用(初始值為 NULL)
SET @var1 = 1, @var2 = 2;
SELECT @var1 := 1, @var2 := 2; -- SELECT 必須用 := 賦值
-- 區域性變數,必須在 BEGIN ... END 中宣告後再使用
BEGIN
DECLARE var INT DEFAULT 1;
END;
-- 系統變數,字首為 @@
SHOW VARIABLES LIKE 'sort_buffer_size'; -- 檢視變數值
SELECT @@sort_buffer_size;
SET GLOBAL sort_buffer_size=1000000; -- 修改變數值
SET SESSION sort_buffer_size=1000000;