|
装完 MySQL 后第一件事不是用数建表,是据库搞清楚你连的是哪个数据库。我见过太多人敲了半天 SQL 报错,用数结果发现压根没选库。据库 MySQL 的用数层级很简单:服务器里可以有多个数据库(database),每个数据库里有多张表(table)。据库你连上服务器之后,用数面对的据库不是一张白纸,而是用数一堆已经存在的库,比如 information_schema、据库mysql、用数performance_schema 这些系统库。据库别去动它们。用数 看有哪些库 SHOW DATABASES; 这条命令返回一个列表。据库如果你刚装好,用数大概率只有系统库。想用自己的,得先建一个。 建库和选库 CREATE DATABASE myapp DEFAULT CHARACTER SET utf8mb4; USE myapp; utf8mb4 这个字符集值得说一下。MySQL 里的 utf8 其实是个残废,最多存三个字节,emoji 和某些生僻汉字存不进去。utf8mb4 才是真正的 UTF-8。这个坑十年前就有人踩,到现在还有人踩。 USE myapp; 执行后,你后续所有操作默认都在这个库里。如果你用命令行客户端,提示符会从 mysql> 变成 mysql> 后面跟库名——有些版本显示,有些不显示,别指望它提醒你。 建表 CREATE TABLE users ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(120) UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); 几个细节。INT UNSIGNED 让 id 从 0 开始且不能为负,范围翻倍。AUTO_INCREMENT 让 MySQL 自己管编号,你不用操心。PRIMARY KEY 是主键,唯一且非空。UNIQUE 约束 email 不重复,但允许多个 NULL——这是 SQL 标准,不是 MySQL 的 bug。DEFAULT CURRENT_TIMESTAMP 让插入时自动填时间,省得应用层再写代码。 增删改查 插入一行: INSERT INTO users (name, email) VALUES ('老张', 'zhang@example.com'); 查: SELECT id, name FROM users WHERE name LIKE '老%'; LIKE 配合 % 是模糊匹配,但注意——以 % 开头的查询用不上索引,数据量大了会全表扫描。我之前有个项目,用户表才三万行,一个 LIKE '%关键词%' 查询跑了 1.2 秒。后来改成全文索引才压下去。 改: UPDATE users SET email = 'new@example.com' WHERE id = 1; 忘了写 WHERE 你就把全表改了。MySQL 不会拦你,命令行客户端也不会二次确认。这是新手最常见的翻车现场。 删: DELETE FROM users WHERE id = 1; 同样,没有 WHERE 就是清空全表。想清空更快可以用 TRUNCATE TABLE users;,它直接重建表,不走事务日志,但也不能回滚。 看看表结构 DESCRIBE users; 或者 SHOW CREATE TABLE users; 看完整的建表语句。后者更详细,连字符集和引擎都列出来。我习惯用后者,因为能直接复制去改。 删库 DROP DATABASE myapp; 执行完,库里所有表和数据瞬间消失,没有回收站。生产环境敲这条命令之前,最好先确认自己没连错服务器。我认识一个哥们,半夜加班手抖,在跳板机上把测试库当生产库删了——还好是测试库。但这种事,想一次就够后怕的。 日常操作基本就这些。剩下的 JOIN、索引、事务、权限,都是在这个骨架上长出来的。先把库选对,再动手写 SQL,能省掉一半莫名其妙的报错。 |