MySQL-核心操作全解析用户-SHOWDMLDCL
MySQL 核心操作全解析(用户 + SHOW+DML+DCL)
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 Bye2)用户登录(命令行)
- 语法:
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: 03. 验证结果
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: 0 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 | 30 | +----+-----------+------+ 7 rows in set (0.00 sec)⚠️ 致命风险:如果不加 WHERE 条件,会修改表中所有记录(如
UPDATE shenyi SET age=30;会把所有用户的年龄改为 30),生产环境必须先写SELECT验证条件,再执行UPDATE3.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在 的权限)
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: 0
mysql> 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: 0
mysql> 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: 0
mysql> 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: 0
mysql> 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: 0
mysql> 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)