Skip to content

MySQL 库表 ​

数据库 ​

sql
SHOW DATABASES;
SELECT DATABASE();
sql
CREATE DATABASE app_db
  DEFAULT CHARACTER SET utf8mb4
  DEFAULT COLLATE utf8mb4_0900_ai_ci;
sql
USE app_db;
DROP DATABASE IF EXISTS app_db;

常用数据类型 ​

类型说明
INT / BIGINT整数。主键常用 BIGINT
DECIMAL(p, s)精确小数。金额优先使用
VARCHAR(n)可变长度字符串
TEXT长文本
DATETIME日期时间,不带时区转换
TIMESTAMP时间戳,受会话时区影响
JSONJSON 文档,MySQL 5.7+ 支持

创建表 ​

sql
CREATE TABLE users (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(64) NOT NULL,
  email VARCHAR(255) NOT NULL UNIQUE,
  age INT UNSIGNED DEFAULT 0,
  status TINYINT NOT NULL DEFAULT 1,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

查看表 ​

sql
SHOW TABLES;
DESC users;
SHOW CREATE TABLE users;
SHOW INDEX FROM users;

修改表 ​

sql
ALTER TABLE users ADD COLUMN avatar_url VARCHAR(500);
ALTER TABLE users MODIFY COLUMN name VARCHAR(100) NOT NULL;
ALTER TABLE users CHANGE COLUMN avatar_url avatar VARCHAR(500);
ALTER TABLE users DROP COLUMN avatar;
ALTER TABLE users RENAME TO app_users;

删除表 ​

sql
DROP TABLE IF EXISTS users;
TRUNCATE TABLE users;

DROP TABLE 删除表结构和数据。TRUNCATE TABLE 清空表数据并重置自增值,在 MySQL 中会隐式提交事务。

索引 ​

sql
CREATE INDEX idx_users_status_created_at ON users (status, created_at);
CREATE UNIQUE INDEX uk_users_email ON users (email);
DROP INDEX idx_users_status_created_at ON users;

事务 ​

sql
START TRANSACTION;

UPDATE users SET age = age + 1 WHERE id = 1;
INSERT INTO orders (user_id, amount) VALUES (1, 99.00);

COMMIT;
-- ROLLBACK;

InnoDB 默认隔离级别是 REPEATABLE READ。

执行计划 ​

sql
EXPLAIN
SELECT *
FROM users
WHERE email = 'tom@example.com';

重点关注:

  • type:访问类型,常见优先级大致为 const、ref、range、index、ALL。
  • key:实际使用的索引。
  • rows:预估扫描行数。
  • Extra:额外信息,如 Using filesort、Using temporary。

连接 ​

MySQL 不支持标准 FULL OUTER JOIN。

基于 MIT 许可发布