mysql -h host_name -u user_name -p[password] [database_name]
-h/--host:目標主機,本地可省略-u/--user:用戶名,Unix系統同系統用戶名可省略-p/--password:密碼提示模式(推薦),直接寫密碼有洩露風險USE db_name切換數據庫,或啟動時直接指定UPDATE mysql.user SET Password=PASSWORD('new_pwd') WHERE User='root' AND Host='%';
FLUSH PRIVILEGES;
注意:MySQL 5.7+中Password列已改為authentication_string,建議使用ALTER USER 'root'@'%' IDENTIFIED BY 'new_pwd';
/etc/my.cnf — 全局選項DATADIR/my.cnf — 實例級選項--defaults-extra-file — 指定額外配置~/.my.cnf — 用戶級選項後讀取的配置會覆蓋先讀取的同名參數,利用此機制可實現多實例差異化配置。
kill -TERM $(cat mysql.pid)(避免用-9導致數據損失)mysqld_safe --skip-grant-tables &mysql -u root → UPDATE mysql.user SET authentication_string=PASSWORD('new_pwd') WHERE User='root'; FLUSH PRIVILEGES;mysqld --skip-grant-tablesNULL不可參與算術/比較運算,NULL=NULL結果為NULL(非true)IS NULL / IS NOT NULL<=>安全比較:col <=> NULL等同col IS NULLNULL值永遠排在最前(無論ASC/DESC)SELECT @max_id := MAX(id) FROM orders;
SELECT * FROM order_items WHERE order_id = @max_id;
@,賦值用:=(避免與比較運算符混淆)mysql> PROMPT \u@\h:\d>_
root@localhost:test>_
常用轉義符:\u用戶、\h主機、\d當前庫、\_空格。
DELETE FROM table_name WHERE 1;
優於TRUNCATE的場景:需保留AUTO_INCREMENT計數器、需獲取影響行數、表有外鍵引用(TRUNCATE會失敗)。
CREATE TABLE account (id BIGINT PRIMARY KEY, balance DOUBLE) ENGINE=InnoDB;
SET AUTOCOMMIT=0;
BEGIN;
UPDATE account SET balance=balance-100 WHERE id=1;
UPDATE account SET balance=balance+100 WHERE id=2;
-- 若中間報錯
ROLLBACK;
-- 確認無誤
COMMIT;
ALTER TABLE、CREATE INDEX、DROP DATABASE/TABLE、LOCK TABLES、TRUNCATE等DDL語句均會觸發隱式提交,事務設計時務必避開。
| 級別 | 設置語法 | 生效範圍 | 持久性 |
|---|---|---|---|
| GLOBAL | SET GLOBAL var=val; / SET @@GLOBAL.var=val; |
全服務器新連接 | 重啟失效,需寫入配置文件固化 |
| SESSION | SET SESSION var=val; / SET @@SESSION.var=val; |
當前連接 | 斷開連接失效 |
需SUPER權限修改全局變量;會話級默認繼承全局值,修改全局不影響已建連接的會話值。