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。掌握这条主线,你就能在自己的服务器上安全地管理数据了。