mysql 专业笔记 -- 第 1 章:MySQL 入门

第 1.1 节:入门

在 MySQL 中创建数据库
sql 复制代码
CREATE DATABASE mydb;

返回值:

复制代码
Query OK, 1 row affected (0.05 sec)
使用已创建的数据库 mydb
sql 复制代码
USE mydb;

返回值:

复制代码
Database changed
在 MySQL 中创建表
sql 复制代码
CREATE TABLE mytable (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    username VARCHAR(100) NOT NULL,
    email VARCHAR(100) NOT NULL,
    PRIMARY KEY (id)
);
  • CREATE TABLE mytable 将创建一个名为 mytable 的新表。
  • id INT UNSIGNED NOT NULL AUTO_INCREMENT 创建 id 列,这种类型的字段会为表中的每条记录分配一个唯一的数字 ID(即任意两行不能有相同的 id),MySQL 会自动为记录的 id 字段分配一个新的唯一值(从 1 开始)。

返回值:

复制代码
Query OK, 0 rows affected (0.10 sec)
向 MySQL 表中插入一行
sql 复制代码
INSERT INTO mytable (username, email) VALUES ("myuser", "myuser@example.com");

返回值示例:

复制代码
Query OK, 1 row affected (0.06 sec)

字符串(varchar)也可以用单引号插入:

sql 复制代码
INSERT INTO mytable (username, email) VALUES ('username', 'username@example.com');
更新 MySQL 表中的一行
sql 复制代码
UPDATE mytable SET username="myuser" WHERE id=8;

返回值示例:

复制代码
Query OK, 1 row affected (0.06 sec)

整数类型的值在查询中可以不用引号。字符串和日期必须用单引号 ' 或双引号 " 括起来。

删除 MySQL 表中的一行
sql 复制代码
DELETE FROM mytable WHERE id=8;

返回值示例:

复制代码
Query OK, 1 row affected (0.06 sec)

这将删除 id 为 8 的行。

基于条件从 MySQL 表中查询行
sql 复制代码
SELECT * FROM mytable WHERE username = "myuser";

返回值:

复制代码
+----+----------+---------------------+
| id | username | email               |
+----+----------+---------------------+
|  1 | myuser   | myuser@example.com  |
+----+----------+---------------------+
1 row in set (0.00 sec)
显示现有数据库列表
sql 复制代码
SHOW DATABASES;

返回值:

复制代码
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
+--------------------+
2 rows in set (0.00 sec)

你可以把 information_schema 看作一个"主数据库",它提供了对数据库元数据的访问。

显示现有数据库中的表
sql 复制代码
SHOW TABLES;

返回值:

复制代码
+----------------+
| Tables_in_mydb |
+----------------+
| mytable        |
+----------------+
1 row in set (0.00 sec)
显示表的所有字段
sql 复制代码
DESCRIBE databaseName.tableName;

或者,如果已经使用了某个数据库:

sql 复制代码
DESCRIBE tableName;

返回值:

复制代码
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| fieldname| fieldvaluetype   | NO/YES | keytype | defaultfieldvalue| auto_increment |
+----------+------------------+------+-----+---------+----------------+
n rows in set (0.00 sec)
  • Extra 可能包含 auto_increment 等。
  • Key 指的是可能影响字段的键类型,例如主键(PRI)、唯一键(UNI)等。
创建用户

首先,你需要创建一个用户,然后授予该用户对某些数据库/表的权限。创建用户时,还需要指定该用户可以从哪里连接。

sql 复制代码
CREATE USER 'user'@'localhost' IDENTIFIED BY 'some_password';

这将创建一个只能从数据库所在本地机器连接的用户。

sql 复制代码
CREATE USER 'user'@'%' IDENTIFIED BY 'some_password';

这将创建一个可以从任何地方(除了本地机器)连接的用户。

返回值示例:

复制代码
Query OK, 0 rows affected (0.00 sec)
添加权限

为指定数据库的所有表授予常用基本权限:

sql 复制代码
GRANT SELECT, INSERT, UPDATE ON databaseName.* TO 'userName'@'localhost';

为用户授予所有数据库的所有表的所有权限(请谨慎使用此操作):

sql 复制代码
GRANT ALL ON *.* TO 'userName'@'localhost' WITH GRANT OPTION;

如上所示,*.* 针对所有数据库和表,databaseName.* 针对特定数据库的所有表。也可以指定具体的数据库和表,如 databaseName.tableName。

如果用户不需要能够授予其他用户权限,则应省略 WITH GRANT OPTION。

权限可以是 ALL,也可以是以下权限的组合(非穷举列表),每个权限之间用逗号分隔:

  • SELECT
  • INSERT
  • UPDATE
  • DELETE
  • CREATE
  • DROP
注意

通常,应尽量避免使用包含空格或 SQL 保留字的列名或表名。例如,最好避免使用 table 或 first name 这样的名称。

如果必须使用此类名称,请将它们放在反引号分隔符中。例如:

sql 复制代码
CREATE TABLE `table` (
    `first name` VARCHAR(30)
);

对该表执行包含反引号分隔符的查询可能如下:

sql 复制代码
SELECT `first name` FROM `table` WHERE `first name` LIKE 'a%';

第 1.2 节:信息模式示例

进程列表

这将按信息降序、时间升序显示所有活动及休眠中的查询。

sql 复制代码
SELECT * FROM information_schema.PROCESSLIST ORDER BY INFO DESC, TIME DESC;

以下查询提供了更详细的时间信息(默认单位为秒):

sql 复制代码
SELECT ID, USER, HOST, DB, COMMAND,
       TIME AS time_seconds,
       ROUND(TIME / 60, 2) AS time_minutes,
       ROUND(TIME / 60 / 60, 2) AS time_hours,
       STATE, INFO
FROM information_schema.PROCESSLIST
ORDER BY INFO DESC, TIME DESC;
存储过程搜索

可以轻松地在所有存储过程中搜索单词和通配符。

sql 复制代码
SELECT * FROM information_schema.ROUTINES
WHERE ROUTINE_DEFINITION LIKE 'word%';
相关推荐
ss2731 分钟前
PostgreSQL慢查询定位与优化
数据库·postgresql
ZhengEnCi17 分钟前
Agent 规则管理:让 Memory 做索引、让 Skill 存规则——上下文上限实测与分工方案
后端
叼烟扛炮20 分钟前
[Git 实战] 学习笔记:从生成 SSH 密钥到解决 TortoiseGit 推送报错全指南
linux·运维·笔记·git·学习
香蕉大香蕉(06敬畏市场)25 分钟前
MySQL 单点详解(07)
java·数据库·mysql·ai·博客·八股
nice_lcj5201 小时前
深入理解 Java 反射:从 Class 对象到方法调用(含性能实测 + 迷你 IOC 实战 + 面试考点)
java·开发语言·后端·面试
蒸蒸yyyyzwd1 小时前
学习笔记 八股手撕
笔记·学习
骑着蜗牛撵大象3271 小时前
2026 后端 AI 工程化:Spring AI 管调用、MCP 管工具、Agent 内嵌管自治
java·人工智能·后端·spring·ai·可观测性·mcp
smilejingwei1 小时前
TRAE 插件上新 | SQLazy:让 AI 写出可信复杂 SQL
数据库·人工智能·sql
我要见SA姐12 小时前
GitHub Actions 自动化:5 个真实运维提效案例
运维·数据库·机器学习·oracle·回归
摸爬滚打的小李2 小时前
Spring XML + WAR + Tomcat 项目启动
后端