MySQL 基础:库、表、用户与授权
从登录 MySQL 到建库建表、创建用户与最小权限授权,再到增删改查的完整入门。
在你的服务器(VPS)上装好 MySQL 后,日常工作大多围绕四件事展开:创建数据库、设计表、管理用户与权限、读写数据。本文用 Ubuntu/Debian 环境为例,带你把这条主线跑通。
登录 MySQL
MySQL 通常随包管理器安装(sudo apt install mysql-server)。装好后用 root 登录:
sudo mysql
在较新的版本里,root 默认用 authsocket 认证,所以 sudo mysql 不需要密码。如果你为某个账户设置了密码,则这样登录:
mysql -u appuser -p
回车后输入密码即可。加 -h 可指定主机,加 -P 指定端口(默认 3306)。
创建数据库
进入 MySQL 提示符后,一条语句即可建库。建议显式指定字符集,避免中文乱码:
CREATE DATABASE shop
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
SHOW DATABASES;
USE shop;
utf8mb4 能完整存储中文和 emoji,是目前推荐的默认字符集。USE shop; 表示后续操作都在这个库里进行。
创建表与常见字段类型
表定义了数据的结构。下面建一张用户表:
CREATE TABLE users (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(255) NOT NULL,
age INT,
balance DECIMAL(10,2) DEFAULT 0.00,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
DESCRIBE users;
常用字段类型:
- INT / BIGINT:整数,UNSIGNED 表示非负,常配 AUTOINCREMENT 做自增主键。
- VARCHAR(n):变长字符串,适合用户名、邮箱等。
- DECIMAL(m,d):定点小数,金额务必用它而非 FLOAT,避免精度误差。
- DATE / DATETIME / TIMESTAMP:日期与时间。
- TEXT:长文本;BOOLEAN 实为 TINYINT(1)。
创建用户并授权
不要用 root 跑业务应用。为每个应用建独立账户,只给它需要的权限,这就是最小权限原则。
CREATE USER 'appuser'@'localhost'
IDENTIFIED BY 'ChangeThisStrongPass!';
GRANT SELECT, INSERT, UPDATE, DELETE
ON shop.*
TO 'appuser'@'localhost';
这里 'appuser'@'localhost' 表示只允许从本机连接。若应用在另一台机器,把 localhost 换成对应 IP 或 '%'(任意主机,谨慎使用)。上面只授予了对 shop 库的增删改查,不含建表、删库等管理权限。
收回权限用 REVOKE,查看某账户权限用 SHOW GRANTS:
REVOKE DELETE ON shop.* FROM 'appuser'@'localhost';
SHOW GRANTS FOR 'appuser'@'localhost';
FLUSH PRIVILEGES 何时需要
如果你是用 GRANT / CREATE USER / REVOKE 改的权限,MySQL 会自动生效,无需手动刷新。只有当你直接 UPDATE 了 mysql.user 等系统表时,才需要:
FLUSH PRIVILEGES;
基本增删改查
-- 插入
INSERT INTO users (username, email, age)
VALUES ('alice', '[email protected]', 30);
-- 查询
SELECT id, username, email
FROM users
WHERE is_active = TRUE
ORDER BY created_at DESC
LIMIT 10;
-- 更新(务必带 WHERE)
UPDATE users SET age = 31 WHERE username = 'alice';
-- 删除(务必带 WHERE)
DELETE FROM users WHERE id = 5;
最重要的一条:UPDATE 和 DELETE 一定要写 WHERE,否则会改动或删除全表数据。上生产前先用 SELECT 配同样的 WHERE 确认命中的行。
小结
登录用 sudo mysql 或 mysql -u 用户 -p;CREATE DATABASE 建库时指定 utf8mb4;CREATE TABLE 时按数据含义选字段类型,金额用 DECIMAL。为应用创建专用账户并通过 GRANT 只授予必要权限,REVOKE 收回,遵循最小权限。FLUSH PRIVILEGES 只在直改系统表后才用。日常读写就是 SELECT/INSERT/UPDATE/DELETE,而 UPDATE 与 DELETE 永远记得带 WHERE。掌握这条主线,你就能在自己的服务器上安全地管理数据了。