1. 連線參數
mysql -h host -u user -p[password] [db_name]
-h 本機可省略
-u Unix 下同系統用戶名可省略;Windows 可設 SET USER=name
-p 後無空格直寫密碼不安全,建議交互輸入
2. 修改用戶密碼
UPDATE mysql.user SET Password=PASSWORD('newpass') WHERE Host='%';
FLUSH PRIVILEGES;
3. 配置文件讀取順序(優先級遞增)
/etc/my.cnf 全局
DATADIR/my.cnf 服務器級
--defaults-extra-file 指定文件
~/.my.cnf 用戶級
4. 忘記 root 密碼重置
Linux/Unix
kill -TERM `cat /var/run/mysqld/mysqld.pid` # 正常關閉
mysqld_safe --skip-grant-tables & # 跳過權限啟動
mysql -u root # 免密登入
UPDATE mysql.user SET Password=PASSWORD('newpass') WHERE User='root';
FLUSH PRIVILEGES;
kill -TERM `cat /var/run/mysqld/mysqld.pid` # 關閉
# 正常啟動
Windows
net stop mysql
mysqld-nt --skip-grant-tables
# 新開 cmd
mysql -u root
UPDATE mysql.user SET Password=PASSWORD('newpass') WHERE User='root';
FLUSH PRIVILEGES;
# 關閉控制台,正常啟動服務
5. NULL 值處理
- 不能用
=/!= 比較,用 IS NULL / IS NOT NULL
- MySQL 3.23.23+ 新增
<=> 安全等於,可比較 NULL
- 排序:4.0.2+ NULL 排最前(無論 ASC/DESC)
6. 用戶變量
SELECT @var:=id FROM t WHERE col=val;
SELECT * FROM t WHERE col=@var;
7. 修改提示符
mysql> prompt \d>\_
dbname>
8. 非優化全表 DELETE 保留計數與自增
DELETE FROM t WHERE 1;
9. 事務處理範例(InnoDB/BDB)
CREATE TABLE account (
account_id BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
balance DOUBLE
) ENGINE=InnoDB;
SET AUTOCOMMIT=0;
BEGIN;
UPDATE account SET balance=50.25 WHERE account_id=1;
UPDATE account SET balance=100.25 WHERE account_id=2;
COMMIT; -- 或 ROLLBACK 回滾
-- 隱式提交命令(會結束當前事務)
ALTER TABLE, BEGIN, CREATE INDEX, DROP DATABASE, DROP TABLE,
LOCK TABLES, RENAME TABLE, TRUNCATE, UNLOCK TABLES
10. 變量輔助運算
SELECT @first:=balance FROM account WHERE account_id=1;
SELECT @second:=balance FROM account WHERE account_id=2;
UPDATE account SET balance=@first-25 WHERE account_id=1;
UPDATE account SET balance=@second+25 WHERE account_id=2;