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 保留字的列名或表名。例如,最好避免使用 tablefirst 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%';
相关推荐
IT小白杨18 分钟前
TikTok小店防封号浏览器实战:2026年多店铺环境隔离与账号安全运营技术解析
开发语言·数据库·安全·php·chrome devtools·指纹浏览器
邪修king19 分钟前
Re:Linux 系统篇(十五):进程篇(四):进程切换深度解析 —— CPU 寄存器、进程上下文与切换全流程万字详解
linux·运维·服务器
祢真伟大22 分钟前
Oracle含LOB大字段表的存储占用统计
数据库·oracle
Capricorn198822 分钟前
Bug排障实录:Software 3.0 遭遇文献幻觉?知芽 Notebook Skill 底层架构解析
人工智能·笔记·架构·bug·论文笔记
深念Y28 分钟前
Docker 镜像体积从 110MB 降到 13MB 后端服务的瘦身
运维·docker·容器
颜安青36 分钟前
深度学习Pytorch下载推荐(笔记,仅记录学习)
pytorch·笔记·深度学习
fliter39 分钟前
我们如何通过优化 1.1.1.1 的 DNS 缓存节省 100 TB 内存
后端
小五传输39 分钟前
【一文解读】汽车制造业协同,跨网跨区域文件传输如何落地?
大数据·运维·安全
Inhand-Victor39 分钟前
从 CAN 总线到 AWS IoT:EC312 边缘计算网关实现 CAN 数据云端接入
数据库