ALTER TABLE tbl AUTO_INCREMENT = 1000; -- 下一筆從 1000 開始
-- 注意:不能小於現有最大值
CREATE TABLE abc (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
address VARCHAR(200),
postcode CHAR(6)
) ENGINE=InnoDB;
-- 作為第一欄
ALTER TABLE tb_name ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id);
-- 或作為最後一欄
ALTER TABLE tb_name ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY;
-- 方式 A:mysqladmin(命令列)
mysqladmin -u root -p'old_pass' password 'new_pass'
-- 方式 B:SQL(需登入)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_pass';
FLUSH PRIVILEGES;
-- 方式 C:UPDATE user 表(舊版/跳過權限模式)
UPDATE mysql.user SET authentication_string=PASSWORD('new_pass') WHERE User='root';
FLUSH PRIVILEGES;
-- 僅允許特定 IP
CREATE USER 'app'@'192.168.1.50' IDENTIFIED BY 'strong_pass';
GRANT SELECT,INSERT,UPDATE,DELETE ON mydb.* TO 'app'@'192.168.1.50';
-- 允許任意 IP(開發環境)
CREATE USER 'dev'@'%' IDENTIFIED BY 'strong_pass';
GRANT ALL PRIVILEGES ON mydb.* TO 'dev'@'%';
FLUSH PRIVILEGES;
my.cnf 設 bind-address=0.0.0.0 或註解掉。GRANT 即時生效(記憶體權限表更新)。FLUSH PRIVILEGES 僅在直接操作 mysql.user 表(INSERT/UPDATE/DELETE)後需要。SELECT User, Host, plugin FROM mysql.user;
SHOW GRANTS FOR 'app'@'%';
-- 設定 90 天過期
ALTER USER 'app'@'%' PASSWORD EXPIRE INTERVAL 90 DAY;
-- 手動解鎖
ALTER USER 'app'@'%' ACCOUNT UNLOCK;
參考《MySQL Root 密碼重置全平台指南》(ID: 90250),核心:--skip-grant-tables → 修改 authentication_string → FLUSH PRIVILEGES。
| 誤區 | 正確做法 |
|---|---|
| 以為 GRANT 後不用 FLUSH | 直接 GRANT 不需 FLUSH;手動改 user 表才需 |
| %' 含 localhost | 不含!需同時建立 'user'@'localhost' 和 'user'@'%' |
| 密碼用 PASSWORD() | 5.7.6+ 棄用,用 ALTER USER ... IDENTIFIED BY |
| root 開放 % | 極度危險,僅允許 localhost/內網管理 IP |
建立標準化帳號管理 SOP,從源頭杜絕權限混亂與安全隱患。