CREATE TABLE t3 LIKE t1; INSERT INTO t3 SELECT * FROM t1;
-- 創建 ALTER TABLE t ADD INDEX idx_name (col); CREATE UNIQUE INDEX uq_name ON t(col); -- 刪除 DROP INDEX idx_name ON t; ALTER TABLE t DROP PRIMARY KEY;
CREATE VIEW v_t1 AS SELECT * FROM t1 WHERE id BETWEEN 5 AND 10; DROP VIEW v_t1;
| 分類 | 函數 | 說明 |
|---|---|---|
| 字符串 | CONCAT(s1,...) | 拼接字符串 |
| LCASE/UCASE | 大小寫轉換 | |
| LENGTH | 字節長度 | |
| LTRIM/RTRIM | 去首尾空格 | |
| REPLACE(str, from, to) | 替換 | |
| SUBSTRING(str, pos, len) | 截取 | |
| REPEAT/SPACE | 重複/生成空格 | |
| 數學 | CEILING/FLOOR | 向上/向下取整 |
| MAX/MIN | 最大/最小值 | |
| SQRT/RAND | 開方/隨機數 | |
| 日期 | NOW/CURDATE/CURTIME | 當前日期時間/日期/時間 |
| UNIX_TIMESTAMP/FROM_UNIXTIME | ||
| DATEDIFF | 日期差天數 | |
| WEEK/YEAR | 周數/年份 |
PREPARE stmt1 FROM 'SELECT * FROM t1 WHERE id > ?'; SET @i = 5; EXECUTE stmt1 USING @i; DEALLOCATE PREPARE stmt1;
-- 事務保存點
SET autocommit=0;
DELETE FROM t1 WHERE id=11;
SAVEPOINT p1;
DELETE FROM t1 WHERE id=10;
ROLLBACK TO p1;
-- 存儲過程
CREATE PROCEDURE p1()
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < 10 DO
SELECT i; SET i = i+1;
END WHILE;
END;
CALL p1();
CREATE TRIGGER tg1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN INSERT INTO t2(id) VALUES(NEW.id); END;
TRUNCATE TABLE t; -- 歸 1 ALTER TABLE t AUTO_INCREMENT = 1;
SELECT cname, pname, COUNT(*) FROM demo GROUP BY cname, pname WITH ROLLUP;
輸出含各層級小計及總計行(NULL 代表該維度匯總)。
ON DELETE CASCADE / UPDATE CASCADE 實現級聯SHOW GLOBAL STATUS LIKE 'Com_%'EXPLAIN SELECT ... 或開啟慢查詢日誌type(system > const > eq_ref > ref > range > index > ALL)、key、rows、ExtraLIKE 'abc%' 走索引,LIKE '%abc' 全掃IS NULL 可走索引,OR 兩側必須都有索引才會使用SHOW STATUS LIKE 'Handler_read%'; -- Handler_read_key 高 = 索引命中好 -- Handler_read_rnd_next 高 = 需補索引
-- 1. 分析表 CHECK TABLE tbl_name; -- 2. 優化表(碎片整理,僅 MyISAM/BDB/InnoDB 有效) OPTIMIZE TABLE tbl_name;
-- MyISAM ALTER TABLE t DISABLE KEYS; LOAD DATA INFILE 'file' INTO TABLE t; ALTER TABLE t ENABLE KEYS; -- InnoDB:按主鍵順序導入、關閉 unique_checks/autocommit
SELECT id, SUM(m) FROM t GROUP BY id ORDER BY NULL; -- 禁止文件排序
-- 原:WHERE id NOT IN (SELECT id FROM t2) -- 優化: SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id WHERE t2.id IS NULL;
sync_binlog=1 保證數據不丟,性能折半;高併發可設 0 或 Nmax_allowed_packet 主從需一致,建議 16M+slave-skip-errors 僅用於非核心只讀從庫read-only 限制從庫寫入-- 全局讀鎖(適合 mysqldump 熱備) FLUSH TABLES WITH READ LOCK; -- 釋放 UNLOCK TABLES;
systemctl stop mysqld
mysqld_safe --skip-grant-tables &
mysql -uroot
UPDATE mysql.user SET authentication_string=PASSWORD('new') WHERE user='root';
FLUSH PRIVILEGES;