news 2026/5/22 9:17:07

MySQL学习笔记(part 1:基础介绍和语句)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL学习笔记(part 1:基础介绍和语句)

一、数据模型

(一)数据库类型

1.关系型数据库(RDBMS)

2.非关系型数据库

MySQL属于关系型数据库

(二)数据模型

客户端--数据库管理系统(DBMS)--数据库--表

(三)MySQL启动与停止

(1)从MySQL连接

net start mysql80 net stop mysql80

(2)客户端链接

-- -h指定连接地址 -- -P指定连接端口 -- -u指定连接用户名 -- -p指密码 mysql [-h 127.0.0.1][-P 3306] -u root -p

(四)MySQL的数据类型

1.数值类型

2.字符串类型

3.日期时间类型

MySQL常见数据类型

二、基础SQL语言

(一)通用语法

1.SQL语句可以单行或多行书写,以分号结尾

2.SQL可以缩进,对缩进位数无要求

3.MySQL的SQL语句不区分大小写,建议关键字大写

4.注释:

-- 单行注释,SQL通用 # 单行注释,MySQL特有 /*多行注释 SQL通用*/

(二)SQL语句分类

分类全程说明
DDLData Definition Language数据定义语言,用来定义数据库对象(数据库、数据库表、字段、索引)
DMLData Manioulation Language数据操作语言,用来对数据库表中的数据进行增删改
DQLData Query Language数据查询语言,用来查询数据库中表的记录
DCLData Control Language数据控制语言,用来创建数据库用户,控制数据库的访问权限

(三)DDL语句

1.数据库操作

(1)查询
-- 查询所有数据库 SHOW DATABASES; -- 查询当前数据库 SELECT DATABASE();
(2)创建
-- IF NOT EXISTS:如果数据库名称不存在,则创建。如果存在,则不执行任何操作 -- DEFAULT CHARSET:指定当前数据库使用的字符集,如utf8mb4。可省略,因为数据库有默认字符集。 -- COLLATE:指定排序规则。 CREATE DATABASES [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];

关于COLLATE

(3)删除
DROP DATABASE [IF EXISTS] 数据库名;
(4)使用
-- 切换到该数据库 USE 数据库名;

2.表操作

(1)查询
-- 查询当前数据库所有表 SHOW TABLES; -- 查询表结构 DESC 表名; -- 查询指定表的建表语句 SHOW CREATE TABLE 表名;
(2)创建
CREATE TABLE 表名( 字段1 字段1类型 [COMMENT 字段1注释], 字段2 字段2类型 [COMMENT 字段2注释], 字段3 字段3类型 [COMMENT 字段3注释] )[COMMENT 表注释];

关于数据类型

举例:

限定不带符号:age TINYINTUNSIGNED

限定三位整数、一位小数:score DOUBLE(4,1)

不限定长度文本:usernameVARCHAR(50)

限定文本长度:genderCHAR(1)

练习:设计一张员工表

/*设计一张员工表 员工工号固定长度 性别为男或女 年龄非负数 身份证号存在字母*/ create table employee( id int comment '员工id', worknumber varchar(10) comment '员工工号', name varchar(10) comment '姓名', gender char(1) comment '性别', age tinyint unsigned comment '年龄', idcard char(18) comment '身份证号', entrydate date comment '入职时间' ) comment '员工表';
(3)修改
①添加字段
-- 添加字段 ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];

练习:为employee表增加一个字段

-- 为员工表添加一个昵称字段 alter table emploee add nickname varchar(20) comment '昵称';
②修改字段名和字段类型

修改数据类型

-- 修改指定字段数据类型 ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);

修改字段名和字段类型

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];

练习:将nickname字段名修改为username,类型为varchar(30)

alter table employee change nickname username varchar(30) comment '用户名';
③删除字段
ALTER TABLE 表名 DROP 字段名;

练习:删除username

alter table employee drop username;
④修改表名
ALTER TABLE 表名 RENAME TO 新表名;

练习:将表employee修改为employ

alter table employee rename to employ;
⑤删除表
-- 删除表 DROP TABLE [IF EXITS] 表名; -- 删除指定表,并重新创建该表 -- 重新创建会清除数据,留下表结构 TRUNCATE TABLE 表名;

(四)DML语句

1.增加数据(INSERT)

-- 给指定字段增加数据 INSERT INTO 表名(字段名1,字段名2,...) VALUES(值1,值2,...); -- 给全部字段添加数据 INSERT INTO 表名 VALUES(值1,值2,...); -- 批量添加数据 INSERT INTO 表名(字段名1,字段名2,...) VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...); INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);

注意:

①插入字段顺序与值的顺序一一对应;

②插入的是字符串或日期型的数据应包含在引号中;

③插入数据大小应在规定范围内。

练习:向employ中插入数据

insert into employ(id, worknumber, name, gender, age, idcard, entrydate) values(1,'1','itcast','男',20,'123456789012345678','2000-01-01');

2.修改数据(UPDATE)

-- 修改数据 UPDATE 表名 SET 字段名1=值1, 字段名2=值2,...[WHERE 条件];

注意:

修改语句的条件可以有也可以没有,但没有条件的话会修改整张表的所有数据。

练习:修改employ中的数据

-- 修改id为1的数据,将name改为itsql update employ set name='itsql' where id=1; -- 修改id为1的数据,将name改为 小绍,gender为女 update employ set name='小绍', gender ='女' where id = 1; -- 修改所有人的入职日期为2010-01-01 update employ set entrydate ='2010-01-01';

3.删除数据(DELETE)

DELETE FROM 表名 [WHERE 条件];

注意:

DELETE语句的条件可以有,也可以没有,但没有条件会删除整张表的所有数据。

DELETE语句无法删除某一个字段的值。如果要修改,用UPDATE设置为null。

练习:删除employ中的数据

-- 删除gender为女的员工 delete from employ where gender='女'; -- 删除所有的员工 delete from employ;

(五)DQL语句

编写顺序与执行顺序

SELECT -- 4 字段列表 FROM -- 1 表名列表 WHERE -- 2 条件列表 GROUP BY -- 3 分组字段列表 HAVING -- 3 分组后条件列表 ORDER BY -- 5 排序字段列表 LIMIT -- 5 分页参数

1.基本查询(select from)

(1)查询返回多个字段
SELECT 字段1, 字段2,... FROM 表名; SELECT * FROM 表名;
(2)设置别名
SELECT 字段1[AS 别名1], 字段2[AS 别名2], ... FROM 表名;

AS可以省略

(3)去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;

2.条件查询(where)

SELECT 字段列表 FROM 表名 WHERE 条件列表;
条件
运算符种类运算符功能
比较运算符>大于

>=

大于等于
<小于
<=小于等于
=等于
<>或!=不等于
BETWEEN...AND...在某个范围内(包括上下限)。between后为最小值,and后为最大值。不能调转。
IN(...)IN后列表中的值,多选一
LIKE 占位符模糊匹配(_匹配单个字符,%匹配任意个字符)
IS NULL判断字段是不是null
逻辑运算符AND 或 &&且(多个条件同时成立)
OR 或 ||或(多个条件成立任意一个)
NOT 或 !

练习

-- 查询年龄为40的员工 select * from employ where age = 40; -- 查询年龄小于30的员工 select * from employ where age < 30; -- 查询没有身份证号的员工 select * from employ where idcard is null; -- 查询有身份证号的员工 select * from employ where idcard is not null; -- 查询年龄不为40的员工 select * from employ where age != 40; select * from employ where age <> 40; -- 查询年龄在20-30的员工(包含20和30) select * from employ where age >=20 and age <=30; select * from employ where age between 20 and 30; -- 查询性别为女且年龄小于25岁的员工 select * from employ where gender = '女' and age<25; -- 查询年龄为20 30 或40的员工 select * from employ where age=20 or age=30 or age=40; select * from employ where age in(20,30,40); -- 查询名字为两个字的员工 select * from employ where name like '__'; -- 查询身份证号最后一位为X的员工 select * from employ where idcard like '%X';

3.聚合参数(count、max、min、avg、sum)

将一列数据作为一个整体进行纵向运算

null值不参与计算

函数功能
count统计数量
max最大值
min最小值
avg平均值
sum求和
SELECT 聚合函数(字段列表) FROM 表名;

练习

-- 统计企业员工数量 select count(*) from employ; select count(id) from employ; -- 统计企业员工的平均年龄 select avg(age) from employ; -- 统计最大年龄 select max(age) from employ; -- 统计西安地区年龄之和 select sum(age) from employ where workaddress = "西安";

4.分组查询(group by)

SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
where和having的区别
执行时机不同where是分组之前过滤,不满足where条件不参与分组having是分组之后的结果进行过滤
判断条件不同where不能对聚合函数进行判断having可以对聚合函数进行判断

练习

-- 根据员工性别进行分组,统计男性和女性员工的数量 select gender, count(*) from employ group by gender; -- 根据员工性别进行分组,统计男性和女性员工的平均年龄 select gender, avg(age) from employ group by gender; -- 查询年龄小于45的员工,并根据工作地址进行分组,获取员工数量大于等于3的地址 select workaddress, count(*) from employ where age<45 group by workaddress having count(*)>=3; -- 使用别名 select workaddress, count(*) as address_count from employ where age<45 group by workaddress having address_count>=3;

注意:

执行顺序where>聚合函数>having

分组之后,查询字段一般和聚合函数和分组字段,查询其他字段没有意义(只会返回第一个符合条件的数据)。

5.排序查询(order by)

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;

排序方式:

ASC升序(默认)
DESC降序

注意:多字段排序时,当第一个字段相同时才会按第二个字段排序。

练习

-- 根据年龄对公司员工进行升序排序 select * from employee order by age asc; -- 根据入职时间对公司员工进行降序排序 select * from employee order by entrydate desc; -- 根据年龄对公司员工进行升序排序,年龄相同按入职时间进行降序排序 select * from employ order by age asc, entrydate desc;

6.分页查询(limit)

SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;

注意:

起始索引从0开始,起始索引=(查询页码-1)*每页记录数。

分页查询不同数据库有不同的实现。MySQL用的是LIMIT。

如果查询的第一页数据,起始索引可以省略,直接简写为limit

示例

-- 查询第一页员工数据,每页显示10条记录 select * from employ limit 0,10; select * from employ limit 10; -- 查询第二页员工数据,每页显示10条记录(第11-20条记录) select * from employ limit 10,10;

练习

-- 查询年龄为20,21,22,23岁女性员工的信息 select * from employ where gender = '女' and age in(20,21,22,23); -- 查询性别为男,年龄在20-40岁以内(含),姓名为3个字的员工 -- 中间的括号可以分隔条件,看起来更清晰 select * from employ where gender = '男' and (age between 20 and 40) and name like '___'; -- 统计员工表中年龄小于60岁的男性员工和女性员工的数量 select gender, count(*) from employ where age < 60 group by gender; /*查询所有年龄小于35岁的员工的姓名和年龄, 并对查询结果根据年龄升序排序,如果年龄相同按入职时间降序排序*/ select name, age where age < 35 order by age asc, entrydate desc; /*查询性别为男,且年龄在20-40岁(含)以内的前五个员工信息 并对结果按年龄进行升序排序,年龄相同按入职时间降序排序*/ select * from employ where gender = '男' and age between 20 and 40 order by age asc, entrydate desc limit 5;

(六)DCL语句

1.管理用户

(1)查询用户
USE mysql; SELECT * FROM user;
(2)创建用户
CREATE USER '用户名'@'主机名' INDENTIFIED BY '密码';

本地主机localhost

任意主机通配符%

(3)修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
(4)删除用户
DROP USER '用户名'@'主机名';

练习

-- 创建用户it1,只能在本机localhost上访问,密码123456 create user 'it1'@'localhost' indentified by '123456'; -- 创建用户it2,能在任意主机上访问,密码123456 create user 'it2'@'%' identified by '123456'; -- 修改用户it2的密码为1234 alter user 'it2'@'%' identified with mysql_native_password by '1234'; -- 删除用户it1 drop user 'it1'@'localhost';

2.权限控制

MySQL常用权限
权限说明
ALL, ALL PRIVILEGES所有权限
SELECT查询权限
INSERT插入数据
UPDATE修改数据
ALTER修改表
DROP删除数据库/表/视图
CREATE修改数据库/表

(1)查询权限

SHOW GRANTS FOR '用户名'@'主机名';

(2)授予权限

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';

如果授予所有数据库所有表的权限可写*.*

(3)撤销权限

REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

练习

-- 查询it2的权限 show grants for 'it2'@'%'; -- 授予权限 grant all on data.* to 'it2'@'%'; -- 撤销权限 revoke all on data.* from 'it2'@'%';

注意:

多个权限用逗号分隔

授权时,数据库名和表名都可以用*通配,代表所有

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 9:16:09

JavaEE|网络原理TCP/IP

应用层之前编写完了基本的 java sock&#xff0c;所写的所有代码都在应用层&#xff0c;都是为了完成某项业务应用层也是直接和应用程序相关&#xff0c;程序员写代码的时候&#xff0c;只要涉及网络通信都可以视为应用层的一部分应用层里涉及到的网络通信的协议很多都是程序员…

作者头像 李华
网站建设 2026/5/22 9:13:51

ZenTimings:AMD Ryzen用户的硬件监控与性能优化利器

ZenTimings&#xff1a;AMD Ryzen用户的硬件监控与性能优化利器 【免费下载链接】ZenTimings 项目地址: https://gitcode.com/gh_mirrors/ze/ZenTimings 在AMD Ryzen平台日益普及的今天&#xff0c;如何精准掌握硬件运行状态成为许多用户关心的问题。ZenTimings作为一款…

作者头像 李华
网站建设 2026/5/22 9:12:15

Seata 分布式事务配置实战:基于 Nacos 的高可用部署方案

Seata 分布式事务配置实战&#xff1a;基于 Nacos 的高可用部署方案 1. 引言 在微服务架构中&#xff0c;分布式事务一直是绕不开的难题。Seata&#xff08;Simple Extensible Autonomous Transaction Architecture&#xff09;是阿里巴巴开源的分布式事务解决方案&#xff0c;…

作者头像 李华
网站建设 2026/5/22 9:10:01

终极抖音批量下载指南:三步轻松保存所有精彩视频

终极抖音批量下载指南&#xff1a;三步轻松保存所有精彩视频 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖…

作者头像 李华
网站建设 2026/5/22 9:09:12

抖音批量下载助手完整使用指南:5分钟掌握高效视频采集技巧

抖音批量下载助手完整使用指南&#xff1a;5分钟掌握高效视频采集技巧 【免费下载链接】douyinhelper 抖音批量下载助手 项目地址: https://gitcode.com/gh_mirrors/do/douyinhelper 在内容创作和短视频研究领域&#xff0c;获取高质量视频素材是许多用户面临的共同挑战…

作者头像 李华
网站建设 2026/5/22 9:07:00

告别Steam限制!WorkshopDL:零门槛的Steam创意工坊下载神器

告别Steam限制&#xff01;WorkshopDL&#xff1a;零门槛的Steam创意工坊下载神器 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在Epic Games Store或GOG平台购买了游戏…

作者头像 李华