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%';
相关推荐
高级程序源7 小时前
django校园寻物通失物招领平台32261-计算机课程设计、毕业设计
vue.js·python·mysql·小程序·django·flask·课程设计
KIDULT°7 小时前
MySQL系列 (1):数据库原理
运维·数据库·mysql·云计算
我不是程序员三三8 小时前
透明加密软件偶发解密异常排错实录:文件时能打开时乱码
数据库·域智盾
snhna8 小时前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
架构技术专栏8 小时前
Agent 工具调用:从工具声明到执行反馈
前端·人工智能·后端
天行健,君子而铎8 小时前
数据分类分级的范式转换:从规则匹配到场景化高准确率一键部署
网络·数据库·安全
别动我齐刘海8 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
码事漫谈8 小时前
你让AI干的活,它可能只干了十分之一——而你根本看不出来
后端
牛战士coding9 小时前
MySQL 读写分离完整链路:主从复制、多数据源与 @DS 路由
数据库·mysql
Wx-bishekaifayuan9 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游