MySQL 核心操作全解析(用户 + SHOW+DML+DCL)
基于你提供的实操笔记,我们将 MySQL 核心操作拆解为用户管理、SHOW 查询命令、DML 数据操作、TRUNCATE 与 DELETE 对比、DCL 权限控制五大模块,梳理语法逻辑、补充避坑提示,帮你系统性掌握 “用户 - 数据 - 权限” 的完整操作链路
一、MySQL 用户管理(创建 / 删除 / 登录)
MySQL 用户的核心标识是 ‘用户名’@‘主机’(USERNAME@HOST
),其中HOST
用于限制用户的登录来源,是避免未授权访问的关键
1.1 用户的核心组成:USERNAME@HOST
HOST
字段决定 “用户能从哪些主机连接 MySQL”,常见取值及含义:
HOST 取值 | 含义 | 示例 |
---|---|---|
具体 IP 地址 | 仅允许从该 IP 登录 | 127.0.0.1 (本地回环)、192.168.100.10 (远程 IP) |
% (通配符) | 允许从任意主机登录(谨慎使用,存在安全风险) | 'syf'@'%' |
_ (通配符) | 匹配单个字符(如'192.168.100._' 允许 192.168.100 网段所有 IP 登录) | 'syf'@'192.168.100._' |
localhost | 仅允许本地通过 “socket 文件” 登录(区别于127.0.0.1 的 TCP 连接) | 'syf'@'localhost' |
1.2 用户操作实战(DDL)
(1)创建用户
-
语法:
CREATE USER '用户名'@'主机' IDENTIFIED BY '密码';
-
示例(创建允许从任何主机登录的用户
syf
,密码redhat
):mysql> create user 'syf'@'192.168.100.%' identified by 'redhat'; Query OK, 0 rows affected (0.00 sec)
[root@syf2 ~]# mysql -usyf -h 192.168.100.10 -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.37 MySQL Community Server (GPL)Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MySQL [(none)]> exit Bye
2)用户登录(命令行)
- 语法:
mysql -u用户名 -h主机IP -p
(-h
需与用户的HOST
匹配,否则登录失败) - 示例(用
syf
登录):
[root@syf ~]# mysql -usyf -h192.168.100.10 -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 15 Server version: 5.7.37 MySQL Community Server (GPL)Copyright (c) 2000, 2022, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
(3)删除用户
- 语法:
DROP USER '用户名'@'主机';
(必须指定完整的USERNAME@HOST
,否则可能删错) - 示例:
mysql> drop user 'syf'@'192.168.100.%'; Query OK, 0 rows affected (0.00 sec)mysql> select User,Host from mysql.user; +---------------+-----------+ | User | Host | +---------------+-----------+ | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +---------------+-----------+ 3 rows in set (0.00 sec)
二、SHOW 系列命令:MySQL 的 “查看工具集”
SHOW 命令用于查询 MySQL 的系统信息、库表结构、配置参数等,是日常运维和开发的高频工具。按用途分类如下:
2.1 查看系统基础信息
命令 用途 关键说明 SHOW CHARACTER SET;
查看 MySQL 支持的所有字符集 推荐用 utf8mb4
(支持中文、emoji,utf8
实际是utf8mb3
,不支持 emoji)SHOW ENGINES;
查看当前 MySQL 支持的存储引擎 默认引擎是 InnoDB
(支持事务、外键),MyISAM
不支持事务,仅用于历史场景2.2 查看库表相关信息
命令 用途 示例结果说明 SHOW DATABASES;
查看所有数据库 包含系统库( information_schema
元数据、mysql
权限库、sys
管理库)和自定义库(如sy
)SHOW TABLES;
查看当前数据库的所有表 需先执行 USE 数据库名;
(如USE sy;
)SHOW TABLES FROM 数据库名;
不切换数据库,直接查看指定库的表 示例: SHOW TABLES FROM sy;
(查看sy
库的表)DESC [数据库名.]表名;
(或DESCRIBE
)查看表结构(字段名、类型、约束等) 字段 Null
列显示YES
表示允许 NULL,Key
列显示PRI
表示主键SHOW CREATE TABLE 表名;
查看表的完整创建语句(含引擎、字符集) 可用于复制表结构(如迁移表时直接复用 SQL) SHOW TABLE STATUS LIKE '表名'\G
查看表的详细状态(行数、创建时间等) \G
表示按行显示结果(避免字段过多换行混乱),Rows
列显示表中记录数三、DML 操作:数据的 “增删改查”(核心)
DML(Data Manipulation Language)是针对表中数据的操作,核心是
INSERT
(增)、SELECT
(查)、UPDATE
(改)、DELETE
(删),必须在 “切换到数据库 + 存在表” 的前提下执行1. 首先创建表结构(
CREATE TABLE
)根据表中字段(
id
、name
、age
)和数据特征,创建表的 SQL 语句如下:-- 创建 shenyi 表 mysql> use sy; Database changed mysql> create table shenyi(-> id int primary key auto_increment,-> name varchar(50) not null,-> age int); Query OK, 0 rows affected (0.01 sec)
字段说明:
id
:整数类型,设为主键(PRIMARY KEY
)且自增(AUTO_INCREMENT
),确保每条记录唯一,插入时无需手动指定。name
:字符串类型(VARCHAR(50)
),NOT NULL
表示姓名不能为空。age
:整数类型(INT
),未加NOT NULL
,允许存储NULL
(如lisi
的年龄)。
2. 插入示例数据(
INSERT INTO
)创建表后,插入查询结果中的 7 条记录:
mysql> insert into shenyi (name,age) values-> ('tom',20),-> ('jerry',23),-> ('shenyi',25),-> ('sean',28),-> ('zhangshan',26),-> ('zhangshan',20),-> ('lisi',null); Query OK, 7 rows affected (0.01 sec) Records: 7 Duplicates: 0 Warnings: 0
3. 验证结果
mysql> select * from shenyi; +----+-----------+------+ | id | name | age | +----+-----------+------+ | 1 | tom | 20 | | 2 | jerry | 23 | | 3 | shenyi | 25 | | 4 | sean | 28 | | 5 | zhangshan | 26 | | 6 | zhangshan | 20 | | 7 | lisi | NULL | +----+-----------+------+ 7 rows in set (0.00 sec)
只查询
name
字段的所有值(不显示id
和age
):包含重复值
zhangshan
(出现 2 次),说明表中允许同名记录,这也解释了后续按name
筛选时需要结合age
的原因mysql> select name from shenyi; +-----------+ | name | +-----------+ | tom | | jerry | | shenyi | | sean | | zhangshan | | zhangshan | | lisi | +-----------+ 7 rows in set (0.00 sec)
排序查询(
ORDER BY
)升序(ORDER BY age):
按
age
从小到大排列,NULL
值(最小)排在最前,之后按20→23→25→26→28
顺序排列,与表中数据完全匹配mysql> select * from shenyi order by age; +----+-----------+------+ | id | name | age | +----+-----------+------+ | 7 | lisi | NULL | | 1 | tom | 20 | | 6 | zhangshan | 20 | | 2 | jerry | 23 | | 3 | shenyi | 25 | | 5 | zhangshan | 26 | | 4 | sean | 28 | +----+-----------+------+ 7 rows in set (0.00 sec)
降序(ORDER BY age DESC):
按
age
从大到小排列,最大的28
排在最前,依次递减,NULL
值(最大)排在最后,逻辑与升序完全相反mysql> select * from shenyi order by age desc; +----+-----------+------+ | id | name | age | +----+-----------+------+ | 4 | sean | 28 | | 5 | zhangshan | 26 | | 3 | shenyi | 25 | | 2 | jerry | 23 | | 1 | tom | 20 | | 6 | zhangshan | 20 | | 7 | lisi | NULL | +----+-----------+------+ 7 rows in set (0.01 sec)
限制结果行数(
LIMIT
)-
LIMIT 2
:取排序后前 2 条记录(升序中是NULL
和第一个20
)mysql> select * from shenyi order by age limit 2; +----+------+------+ | id | name | age | +----+------+------+ | 7 | lisi | NULL | | 1 | tom | 20 | +----+------+------+ 2 rows in set (0.00 sec)
-
LIMIT 1,2
:LIMIT 偏移量, 行数
,偏移量从 0 开始。这里偏移 1(跳过第 1 条NULL
),取后面 2 条,即两个age=20
的记录(id=1 和 id=6)mysql> select * from shenyi order by age limit 1,2; +----+-----------+------+ | id | name | age | +----+-----------+------+ | 1 | tom | 20 | | 6 | zhangshan | 20 | +----+-----------+------+ 2 rows in set (0.00 sec)
4. 条件筛选(
WHERE
)-
age >= 25
:筛选age
不小于 25 的记录,对应25、26、28
三个值,共 3 条mysql> select * from shenyi where age >= 25; +----+-----------+------+ | id | name | age | +----+-----------+------+ | 3 | shenyi | 25 | | 4 | sean | 28 | | 5 | zhangshan | 26 | +----+-----------+------+ 3 rows in set (0.00 sec)
age >= 25 AND name = ‘zhangshan’
:多条件筛选,需同时满足 “年龄≥25” 和 “姓名为 zhangshan”。表中
zhangshan`有两条记录(id=5:26 岁;id=6:20 岁),仅 id=5 符合条件mysql> select * from shenyi where age >= 25 and name='zhangshan'; +----+-----------+------+ | id | name | age | +----+-----------+------+ | 5 | zhangshan | 26 | +----+-----------+------+ 1 row in set (0.00 sec)
age BETWEEN 23 and 28
:等价于age >=23 AND age <=28
,包含23、25、26、28
四个值,共 4 条记录mysql> select * from shenyi where age between 23 and 28; +----+-----------+------+ | id | name | age | +----+-----------+------+ | 2 | jerry | 23 | | 3 | shenyi | 25 | | 4 | sean | 28 | | 5 | zhangshan | 26 | +----+-----------+------+ 4 rows in set (0.00 sec)
age IS NOT NULL
/age IS NULL
:专门针对NULL
值的筛选,分别返回 6 条非空记录和 1 条空值记录(id=7)mysql> select * from shenyi where age is not null; +----+-----------+------+ | id | name | age | +----+-----------+------+ | 1 | tom | 20 | | 2 | jerry | 23 | | 3 | shenyi | 25 | | 4 | sean | 28 | | 5 | zhangshan | 26 | | 6 | zhangshan | 20 | +----+-----------+------+ 6 rows in set (0.00 sec)mysql> select * from shenyi where age is null; +----+------+------+ | id | name | age | +----+------+------+ | 7 | lisi | NULL | +----+------+------+ 1 row in set (0.00 sec)
3.1 INSERT:插入数据
-
语法:
INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...);
支持单条插入(1 个
VALUES
)和多条插入(多个VALUES
用逗号分隔)示例(插入数据到
sy.shenyi
表):-- 单条插入 INSERT INTO shenyi (id, name, age) VALUES (1, 'tom', 20); -- 多条插入(更高效,减少IO) INSERT INTO shenyi (id, name, age) VALUES (2, 'jerry', 23), (3, 'shenyi', 25), (7, 'lisi', NULL);
⚠️ 注意:字段顺序需与
VALUES
顺序一致;允许 NULL 的字段(如age
)可直接写NULL
(无需加引号);非 NULL 字段(如id
、name
)必须填写值,否则报错
3.2 SELECT:查询数据(最复杂也最常用)
SELECT`是 DML 的核心,支持按条件过滤、排序、限制结果数量,语法: `SELECT 字段列表 FROM 表名 [WHERE 条件] [ORDER BY 字段 排序方式] [LIMIT 偏移量, 数量];
(1)字段列表表示法
表示符 含义 示例 *
查询所有字段(开发中尽量避免,效率低) SELECT * FROM shenyi;
字段1, 字段2
仅查询指定字段(推荐,减少数据传输) SELECT name, age FROM shenyi;
字段 AS 别名
给字段起别名(方便阅读) SELECT name AS 用户名, age AS 年龄 FROM shenyi;
(2)WHERE 条件:过滤数据
条件类型 操作符 / 关键字 示例(查询 shenyi
表)比较运算 >
,<
,>=
,<=
,=
,!=
SELECT * FROM shenyi WHERE age >= 25;
(年龄≥25)范围匹配 BETWEEN 最小值 AND 最大值
(闭区间)SELECT * FROM shenyi WHERE age BETWEEN 23 AND 28;
(23≤age≤28)NULL 判断 IS NULL
(空)、IS NOT NULL
(非空)SELECT * FROM shenyi WHERE age IS NULL;
(年龄未填写)逻辑组合 AND
(且)、OR
(或)、NOT
(非)SELECT * FROM shenyi WHERE age >=25 AND name='zhangshan';
(年龄≥25 且姓名是 zhangshan)模糊匹配 LIKE
(配合%
/_
)SELECT * FROM shenyi WHERE name LIKE 'zhang%';
(姓名以 zhang 开头)(3)ORDER BY:排序
- 默认升序(
ASC
),显式指定DESC
为降序; - NULL 值排序规则:升序时 NULL 排在最前,降序时 NULL 排在最后(如用户示例中
ORDER BY age DESC
,lisi
的 NULL 排在最后); - 示例:
SELECT * FROM shenyi ORDER BY age DESC;
(按年龄降序)。
(4)LIMIT:限制结果数量
- 语法 1:
LIMIT N
(取前 N 条记录)—— 示例:LIMIT 2
(取前 2 条); - 语法 2:
LIMIT 偏移量, N
(跳过前 “偏移量” 条,取 N 条)—— 示例:LIMIT 1, 2
(跳过第 1 条,取第 2-3 条); - 用途:分页查询(如第 1 页
LIMIT 0,10
,第 2 页LIMIT 10,10
)。
3.3 UPDATE:修改数据
- 语法:
UPDATE 表名 SET 字段1=新值1, 字段2=新值2, ... [WHERE 条件];
- 示例(将
lisi
的年龄改为 30):
mysql> update shenyi set age = 30 where name = 'lisi'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0mysql> select * from shenyi; +----+-----------+------+ | id | name | age | +----+-----------+------+ | 1 | tom | 20 | | 2 | jerry | 23 | | 3 | shenyi | 25 | | 4 | sean | 28 | | 5 | zhangshan | 26 | | 6 | zhangshan | 20 | | 7 | lisi | 30 | +----+-----------+------+ 7 rows in set (0.00 sec)
⚠️ 致命风险:如果不加 WHERE 条件,会修改表中所有记录(如
UPDATE shenyi SET age=30;
会把所有用户的年龄改为 30),生产环境必须先写SELECT
验证条件,再执行UPDATE
3.4 DELETE:删除数据
-
语法:
DELETE FROM 表名 [WHERE 条件];
-
示例:
-- 删除单条记录(id=7的记录) mysql> delete from shenyi where id = 7; Query OK, 1 row affected (0.00 sec) mysql> select * from shenyi; +----+-----------+------+ | id | name | age | +----+-----------+------+ | 1 | tom | 20 | | 2 | jerry | 23 | | 3 | shenyi | 25 | | 4 | sean | 28 | | 5 | zhangshan | 26 | | 6 | zhangshan | 20 | +----+-----------+------+ 6 rows in set (0.00 sec)
-- 删除所有记录(不加WHERE,谨慎!) mysql> delete from shenyi; Query OK, 6 rows affected (0.00 sec)mysql> select * from shenyi; Empty set (0.00 sec)
- 语法:
记录删除,表结构依然存在:
mysql> desc shenyi;+-------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+----------------+| id | int(11) | NO | PRI | NULL | auto_increment || name | varchar(50) | NO | | NULL | || age | int(11) | YES | | NULL | |+-------+-------------+------+-----+---------+----------------+3 rows in set (0.00 sec)
⚠️ 注意:DELETE FROM 表名;
会删除表中所有数据,但保留表结构(字段、约束等),且删除的记录可通过事务回滚恢复(若开启事务)
四、TRUNCATE vs DELETE:清空表数据的区别
用户示例中提到了TRUNCATE
,它与DELETE
都能清空数据,但核心差异极大,生产环境需严格区分:
对比维度 | DELETE | TRUNCATE |
---|---|---|
操作对象 | 逐行删除记录 | 直接释放表的数据页(不逐行删除) |
事务支持 | 支持(可通过ROLLBACK 回滚恢复数据) | 不支持(删除后无法恢复,属于 DDL 操作) |
执行速度 | 慢(逐行记录日志) | 快(仅释放数据页,日志量少) |
自增 ID 重置 | 不重置(删除后新增记录,自增 ID 继续递增) | 重置(删除后新增记录,自增 ID 从 1 开始) |
外键约束限制 | 可删除有外键引用的表数据(需满足外键规则) | 不能删除有外键引用的表数据(直接报错) |
语法形式 | DML 操作(DELETE FROM 表名; ) | DDL 操作(TRUNCATE TABLE 表名; ,TABLE 可省略) |
⚠️ 选择建议:
- 需恢复数据 / 保留自增 ID:用
DELETE FROM 表名 WHERE 条件;
- 无需恢复数据 / 追求速度(如测试环境清空表):用
TRUNCATE 表名;
- 有外键关联的表:只能用
DELETE
,不能用TRUNCATE
示例:
mysql> select * from shenyi;
+----+-----------+------+
| id | name | age |
+----+-----------+------+
| 8 | tom | 20 |
| 9 | jerry | 23 |
| 10 | shenyi | 25 |
| 11 | sean | 28 |
| 12 | zhangshan | 26 |
| 13 | zhangshan | 20 |
| 14 | lisi | NULL |
+----+-----------+------+
7 rows in set (0.00 sec)mysql> truncate shenyi;
Query OK, 0 rows affected (0.00 sec)mysql> select * from shenyi;
Empty set (0.00 sec)mysql> desc shenyi;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
五、DCL 操作:权限的 “授予与回收”
DCL(Data Control Language)用于管理用户的操作权限,确保不同用户只能访问自己权限范围内的库表,核心是GRANT
(授权)、REVOKE
(回收权限)、FLUSH PRIVILEGES
(刷新权限)
5.1 GRANT:授予权限
-
语法:`GRANT 权限类型 ON 操作对象 TO ‘用户名’@‘主机’ [IDENTIFIED BY ‘密码’] [WITH GRANT OPTION]
各部分含义:- 权限类型:
ALL
(所有权限)、SELECT
(查询)、INSERT
(插入)、UPDATE
(修改)、DELETE
(删除)等 - 操作对象:
*.*
:所有数据库的所有表(超级权限,仅给管理员)数据库名.*
:指定数据库的所有表(如sy.*
表示sy
库的所有表)数据库名.表名
:指定数据库的指定表(如sy.chenyu
)
IDENTIFIED BY '密码'
:若用户不存在,可直接创建用户并授权(MySQL 5.7 + 支持,8.0 + 需先创建用户再授权)WITH GRANT OPTION
:允许被授权用户将自己的权限转授给其他用户(不建议给普通用户,存在权限扩散风险)
- 权限类型:
-
示例:
-- 授权shenyi从localhost登录,拥有所有库表的所有权限 GRANT ALL ON *.* TO 'shenyi'@'localhost' IDENTIFIED BY 'redhat'; -- 授权shenyi从192.168.100.10登录,仅拥有cy库所有表的所有权限 GRANT ALL ON sy.* TO 'shenyi'@'192.168.100.10' IDENTIFIED BY 'redhat'; -- 授权shenyi从任意主机登录(%),拥有所有库表的所有权限(生产环境禁用%) GRANT ALL ON *.* TO 'shenyi'@'%' IDENTIFIED BY 'redhat';
5.2 查看权限
- 查看当前登录用户的权限:
SHOW GRANTS;
- 查看指定用户的权限:
SHOW GRANTS FOR '用户名'@'主机';
示例:SHOW GRANTS FOR 'shenyi'@'localhost';
(查看chenyu
在localhost的权限)
5.3 REVOKE:回收权限
-
语法:
REVOKE 权限类型 ON 操作对象 FROM '用户名'@'主机';
-
示例(回收
shenyi
在 192.168.100.10 的所有权限):REVOKE ALL ON *.* FROM 'shenyi'@'192.168.100.10';
5.4 FLUSH PRIVILEGES:刷新权限
- 原理:MySQL 启动时会将
mysql
库的授权表(如user
、db
)加载到内存,GRANT/REVOKE
通常会自动刷新内存,但特殊情况(如手动修改授权表数据)需手动刷新 - 语法:
FLUSH PRIVILEGES;
- 场景:回收权限后若立即生效,可执行此命令(用户示例中回收权限后执行了该命令)
1.搭建mysql服务略
2.创建一个以你名字为名的数据库,并创建一张表student,该表包含三个字段(id,name,age),表结构如下:
mysql> create database shenyi;
Query OK, 1 row affected (0.00 sec)mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| shenyi |
| sy |
| sys |
+--------------------+
6 rows in set (0.01 sec)mysql> use shenyi;
Database changed
mysql> create table student(-> id int(11) primary key auto_increment,-> name varchar(100) not NULL,-> age tinyint(4));
Query OK, 0 rows affected (0.02 sec)
3.查看下该新建的表有无内容(用select语句)
mysql> select * from student;
Empty set (0.00 sec)mysql> desc student;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(100) | NO | | NULL | |
| age | tinyint(4) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.04 sec)
4.往新建的student表中插入数据(用insert语句),结果应如下所示:
mysql> insert into student(name,age) values-> ('tom',20),-> ('jerry',23),-> ('shenyi',25),-> ('sean',28),-> ('zhangshan',26),-> ('zhangshan',20),-> ('lisi',NULL),-> ('chenshuo',10),-> ('wangwu',3),-> ('qiuyi',15),-> ('qiuxiaotian',20);
Query OK, 11 rows affected (0.00 sec)
Records: 11 Duplicates: 0 Warnings: 0mysql> select * from student;
+----+-------------+------+
| id | name | age |
+----+-------------+------+
| 1 | tom | 20 |
| 2 | jerry | 23 |
| 3 | shenyi | 25 |
| 4 | sean | 28 |
| 5 | zhangshan | 26 |
| 6 | zhangshan | 20 |
| 7 | lisi | NULL |
| 8 | chenshuo | 10 |
| 9 | wangwu | 3 |
| 10 | qiuyi | 15 |
| 11 | qiuxiaotian | 20 |
+----+-------------+------+
11 rows in set (0.00 sec)
5.修改lisi的年龄为50
mysql> update student set age=50 where name='lisi';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0mysql> select * from student;
+----+-------------+------+
| id | name | age |
+----+-------------+------+
| 1 | tom | 20 |
| 2 | jerry | 23 |
| 3 | shenyi | 25 |
| 4 | sean | 28 |
| 5 | zhangshan | 26 |
| 6 | zhangshan | 20 |
| 7 | lisi | 50 |
| 8 | chenshuo | 10 |
| 9 | wangwu | 3 |
| 10 | qiuyi | 15 |
| 11 | qiuxiaotian | 20 |
+----+-------------+------+
11 rows in set (0.00 sec)
6.以age字段降序排序
mysql> select * from student order by age desc;
+----+-------------+------+
| id | name | age |
+----+-------------+------+
| 7 | lisi | 50 |
| 4 | sean | 28 |
| 5 | zhangshan | 26 |
| 3 | shenyi | 25 |
| 2 | jerry | 23 |
| 1 | tom | 20 |
| 6 | zhangshan | 20 |
| 11 | qiuxiaotian | 20 |
| 10 | qiuyi | 15 |
| 8 | chenshuo | 10 |
| 9 | wangwu | 3 |
+----+-------------+------+
11 rows in set (0.00 sec)
7.查询student表中年龄最小的3位同学跳过前2位
mysql> select * from student order by age limit 2,3;
+----+-------------+------+
| id | name | age |
+----+-------------+------+
| 10 | qiuyi | 15 |
| 1 | tom | 20 |
| 11 | qiuxiaotian | 20 |
+----+-------------+------+
3 rows in set (0.00 sec)
8.查询student表中年龄最大的4位同学
mysql> select * from student order by age desc limit 4;
+----+-----------+------+
| id | name | age |
+----+-----------+------+
| 7 | lisi | 50 |
| 4 | sean | 28 |
| 5 | zhangshan | 26 |
| 3 | shenyi | 25 |
+----+-----------+------+
4 rows in set (0.00 sec)
9.查询student表中名字叫zhangshan的记录
mysql> select * from student where name='zhangshan';
+----+-----------+------+
| id | name | age |
+----+-----------+------+
| 5 | zhangshan | 26 |
| 6 | zhangshan | 20 |
+----+-----------+------+
2 rows in set (0.01 sec)
10.查询student表中名字叫zhangshan且年龄大于20岁的记录
mysql> select * from student where name='zhangshan' and age > 20;
+----+-----------+------+
| id | name | age |
+----+-----------+------+
| 5 | zhangshan | 26 |
+----+-----------+------+
1 row in set (0.00 sec)
11.查询student表中年龄在23到30之间的记录
mysql> select * from student where age between 23 and 30;
+----+-----------+------+
| id | name | age |
+----+-----------+------+
| 2 | jerry | 23 |
| 3 | shenyi | 25 |
| 4 | sean | 28 |
| 5 | zhangshan | 26 |
+----+-----------+------+
4 rows in set (0.00 sec)
12.修改wangwu的年龄为100
mysql> update student set age=100 where name='wangwu';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0mysql> select * from student;
+----+-------------+------+
| id | name | age |
+----+-------------+------+
| 1 | tom | 20 |
| 2 | jerry | 23 |
| 3 | shenyi | 25 |
| 4 | sean | 28 |
| 5 | zhangshan | 26 |
| 6 | zhangshan | 20 |
| 7 | lisi | 50 |
| 8 | chenshuo | 10 |
| 9 | wangwu | 100 |
| 10 | qiuyi | 15 |
| 11 | qiuxiaotian | 20 |
+----+-------------+------+
11 rows in set (0.00 sec)
13.删除student中名字叫zhangshan且年龄小于等于20的记录
mysql> delete from student where name='zhangshan' and age<=20;
Query OK, 1 row affected (0.01 sec)mysql> select * from student;
+----+-------------+------+
| id | name | age |
+----+-------------+------+
| 1 | tom | 20 |
| 2 | jerry | 23 |
| 3 | shenyi | 25 |
| 4 | sean | 28 |
| 5 | zhangshan | 26 |
| 7 | lisi | 50 |
| 8 | chenshuo | 10 |
| 9 | wangwu | 100 |
| 10 | qiuyi | 15 |
| 11 | qiuxiaotian | 20 |
+----+-------------+------+
10 rows in set (0.00 sec)
14.创建表course表,要求如下
mysql> create table course(-> id int(3) primary key,-> course_name varchar(100));
Query OK, 0 rows affected (0.00 sec)mysql> desc course;
+-------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| id | int(3) | NO | PRI | NULL | |
| course_name | varchar(100) | YES | | NULL | |
+-------------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
15、为course表插入数据
mysql> insert into course values-> (1,'Java'),-> (2,'MySQL'),-> (3,'Python'),-> (4,'Go'),-> (5,'C++');
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0mysql> select *from course;
+----+-------------+
| id | course_name |
+----+-------------+
| 1 | Java |
| 2 | MySQL |
| 3 | Python |
| 4 | Go |
| 5 | C++ |
+----+-------------+
5 rows in set (0.00 sec)
16、创建student123表,要求如下:
mysql> create table student123(-> id int(3) primary key,-> name varchar(100),-> age int(3),-> sex varchar(10),-> height int(3),-> course_id int(3),-> constraint st123_courseid_course_id foreign key (course_id) references course(id));
Query OK, 0 rows affected (0.01 sec)
17、为student123表插入数据如下:
mysql> insert into student123 values-> (1,'Dany',25,'man',160,1),-> (2,'Green',23,'man',158,2),-> (3,'Henry',23,'woman',185,1),-> (4,'Jane',22,'man',162,3),-> (5,'Jim',24,'woman',175,2),-> (6,'John',21,'woman',172,4),-> (7,'Lily',22,'man',165,4),-> (8,'Susan',23,'man',170,5),-> (9,'Thomas',22,'woman',178,5),-> (10,'Tom',23,'woman',165,5);
Query OK, 10 rows affected (0.01 sec)
Records: 10 Duplicates: 0 Warnings: 0mysql> select * from student123;
+----+--------+------+-------+--------+-----------+
| id | name | age | sex | height | course_id |
+----+--------+------+-------+--------+-----------+
| 1 | Dany | 25 | man | 160 | 1 |
| 2 | Green | 23 | man | 158 | 2 |
| 3 | Henry | 23 | woman | 185 | 1 |
| 4 | Jane | 22 | man | 162 | 3 |
| 5 | Jim | 24 | woman | 175 | 2 |
| 6 | John | 21 | woman | 172 | 4 |
| 7 | Lily | 22 | man | 165 | 4 |
| 8 | Susan | 23 | man | 170 | 5 |
| 9 | Thomas | 22 | woman | 178 | 5 |
| 10 | Tom | 23 | woman | 165 | 5 |
+----+--------+------+-------+--------+-----------+
10 rows in set (0.00 sec)