第二章 MySQL的使用
2.1 MySQL服务的启动
2.2 MySQL命令行
建议配置环境变量:配置到MySQL安装目录下的bin
cmd命令行,使用mysql登录:
mysql -uroot -p 回车 输入密码 mysql -uroot -p密码 不建议使用,密码暴露
第三章 SQL的介绍
3.1.什么是sql
-
SQL:Structure Query Language。(结构化查询语言),通过sql操作数据库(操作数据库,操作表,操作数据)
-
SQL被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后来被国际化标准组织(ISO)采纳为关系数据库语言的国际标准
-
各数据库厂商(MySql,oracle,sql server)都支持ISO的SQL标准。(普通话)
-
各数据库厂商在标准的基础上做了自己的扩展。 各个数据库自己特定的语法 (方言)
3.2 sql的分类
-
Data Definition Language (DDL数据定义语言) 如:操作数据库,操作表
-
Data Manipulation Language(DML数据操纵语言),如:对表中的记录操作增删改
-
Data Query Language(DQL 数据查询语言),如:对表中数据的查询操作
-
Data Control Language(DCL 数据控制语言),如:对用户权限的设置
3.3 MySQL的语法规范和要求
(1)mysql的sql语法不区分大小写
MySQL的关键字和函数名等不区分大小写,但是对于数据值是否区分大小写,和字符集与校对规则有关。
(2)命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号
(3)建议不要使用mysql的关键字等来作为表名、字段名等,如果不小心使用,请在SQL语句中使用`(飘号)引起来
(4)数据库和表名、字段名等对象名中间不要包含空格
(5)同一个mysql软件中,数据库不能同名,同一个库中,表不能重名,同一个表中,字段不能重名
(6)标点符号:
符号:字符串,日期,数据使用单引号
(7)SQL脚本中如何加注释
单行注释:#注释内容
单行注释:--空格注释内容 其中--后面的空格必须有
多行注释:/* 注释内容 */
#以下两句是一样的,不区分大小写 show databases; SHOW DATABASES; #创建表格 #create table student info(...); #表名错误,因为表名有空格 create table student_info(...); #其中name使用``飘号,因为name和系统关键字或系统函数名等预定义标识符重名了。 CREATE TABLE t_stu( id INT, `name` VARCHAR(20) ); select id as "编号", `name` as "姓名" from t_stu; #起别名时,as都可以省略 select id as 编号, `name` as 姓名 from t_stu; #如果字段别名中没有空格,那么可以省略"" select id as 编 号, `name` as 姓 名 from t_stu; #错误,如果字段别名中有空格,那么不能省略""
第四章-DDL操作数据库
4.1创建数据库
create database 数据库名 create database 数据库名 character set utf8mb4;
MySQL8开始,安装的时候没有默认编码表的选择了(5.x有),使用的编码表就是utf8mb4
有的文字使用4个字节存储
4.2查看所有的数据库
4.2.1查看所有的数据库
show databases
4.2.2查看数据库的定义结构
show create database 数据库名
4.3 删除数据库
数据库的所有操作:没有确定这一环节,做了就是做了
drop database 数据库名
第五章-DDL操作表
5.1 创建表
5.1.1 语法
create table 数据表名( 字段名1 数据类型 [约束], 字段名2 数据类型 [约束], 字段名3 数据类型 [约束] )
中括号可选,可以写可以不写!
5.1.2 类型
5.1.2.1 数值类型
-
整型系列:xxxInt
-
-
浮点型系列:float,double(或real)
double(M,D):表示最长为M位,其中小数点后D位
例如:double(5,2)表示的数据范围[-999.99,999.99],如果超过这个范围会报错。
-
定点型系列:decimal(底层实际上是使用字符串进行存储)
decimal(M,D):表示最长为M位,其中小数点后D位, decimal(10,2) 总长度10位,小数点2位
5.1.2.2 日期时间类型
日期时间类型:year, date, datetime, timestamp
注意一下每一种日期时间的表示范围
timestamp和datetime的区别:
-
timestamp范围比较小
-
timestamp和时区有关
-
show variables like 'time_zone';
-
set time_zone = '+8:00';
-
-
timestamp受MySQL版本和服务器的SQLMode影响很大
-
表中的第一个非空的timestamp字段如果插入和更新为NULL则会自动设置为系统时间
-
5.1.2.3 字符串类型
MySQL中提供了多种对字符数据的存储类型,不同的版本可能有所差异。常见的有:
char,varchar,xxtext,binary,varbinary,xxblob,enum,set等等
-
字符串类型char,varchar(M)
char如果没有指定宽度,默认为1个字符
varchar(M),必须指定宽度
create table student( id int, `name` varchar(20), age int, address varchar(100) );
5.2 查看表
show tables
5.3 修改表【掌握,但是不要记忆】
修改已经创建好的数据表:这个操作有风险,知道有这个功能即可,不让做
修改表结构关键字 alter table
-
修改表结构,添加列,性别字段,数据类型char(1)
-- 修改表结构,添加列,性别字段,数据类型char(1) -- 修改表 表名 添加 列名 数据类型 alter table student add gender char(1)
-
修改表结构,修改列名
-- 修改表结构,修改列名 -- 修改表 表名 改变 旧的列名 新列名 数据类型 alter table student change gender xingbie char(1)
-
修改表结构,修改数据类型
-- 修改表结构,修改数据类型 -- 修改表 表名 改变 列名 新的数据类型 -- 数据类型改变,导致存储数据改变,以前是可变字符,改成int类型,数据全部变成0 alter table student modify xingbie int
-
修改表结构,删除字段
-- 修改表结构,删除字段 -- 修改表 表名 丢弃 列名 alter table student drop xingbie
5.4 删除表
drop table 表名
第六章-DML操作表记录-增删改【重点】
-
准备工作: 创建一张商品表(商品id,商品名称,商品价格,商品数量.)
create table product( pid int primary key auto_increment, pname varchar(40), price double, num int, cid int );
6.1 插入记录
数据操作的四大项:CRUD (C create R read U update D delete)增删改查
-
插入数据的格式一: insert into
-- 数据表插入数据,保证字段和值得对应,数值除了数字外,其他类型,写单引号 insert into 表名(字段名1,字段名2,字段名3) values (值1,值2,值3) INSERT INTO product(pid,pname,price,num,cid) VALUES (1,'苹果手机14',15999,1000,1);
-
插入数据的格式二:insert into
insert into 表名 values (必须是全列值) INSERT INTO product VALUES(2,'佳能单反',5999,599,2); 数据表主键是自动增长的,可以实现程序中的i++效果,pid的列值,可以写为null INSERT INTO product VALUES(NULL,'华为手机Meta40',8699,10,1);
-
插入数据的格式三:insert into 批量写入
insert into 表名 values (必须是全列值),(全列值),(全列值),(全列值) INSERT INTO product VALUES(NULL,'宏碁蜂鸟',4999,899,3), (NULL,'戴尔游匣',9999,1899,3),(NULL,'联想拯救者',9998,799,3)
6.2 更新记录
对数据表中数据行,数据做改变,称为编辑或者是更新
语法:update set where
-- 修改符号条件的数据 update 表名 set 字段=值,字段=值,字段=值 where 条件 -- update 表名 set 字段=值,字段=值,字段=值 where 条件 UPDATE product SET pname = 'Acer',price = 4888.99,num = 799 WHERE pid = 4 -- 数据更新的时候,如果条件都不满足,更新结果是0行 UPDATE product SET pname = 'Acer',price = 4888.99,num = 799 WHERE pid = 8 -- 更细数据的时候,忘记写条件,全改 UPDATE product SET pname = 'Acer',price = 4888.99,num = 799
6.3 删除记录
语法:delete from
delete from 表名 where 条件 DELETE FROM product WHERE pid = 6
-
实际项目开发中,删除
-
物理删除:delete语句,数据彻底没有了(不做)
-
逻辑删除:数据的假删除,数据表中添加字段(isDelete)默认值都是0,删除数据,将字段isDelete值改为1,查询数据,不查询数值是1
-
第七章-DQL操作表记录-查询【重点】
7.1 基本查询语法
INSERT INTO product VALUES(NULL,'苹果电脑',18000.0,10,1); INSERT INTO product VALUES(NULL,'华为5G手机',30000,20,2); INSERT INTO product VALUES(NULL,'小米手机',1800,30,2); INSERT INTO product VALUES(NULL,'iPhonex',8000,10,2); INSERT INTO product VALUES(NULL,'iPhone7',6000,200,2); INSERT INTO product VALUES(NULL,'iPhone6s',4000,1000,2); INSERT INTO product VALUES(NULL,'iPhone6',3500,100,2); INSERT INTO product VALUES(NULL,'iPhone5s',3000,100,2); INSERT INTO product VALUES(NULL,'方便面',4.5,1000,3); INSERT INTO product VALUES(NULL,'咖啡',11,200,4); INSERT INTO product VALUES(NULL,'矿泉水',3,500,4);
-
查询全部的数据:
-- 查询全表数据 * 代表所有的字段 select * from 表名
查询,字段名写 *,不允许,会造成查询的速度降低。查询语句写 * 会造成索引失效
-
查询全表的数据:
select 字段名1,字段名2 from 表名 -- select 字段名1,字段名2 from 表名 SELECT pid,pname,price,num,cid FROM product; SELECT pname,price,num FROM product;
7.2 简单查询
-
去重查询函数:distinct(字段名)
select distinct(num) from product -- 只查询去掉重复的字段
-
运算查询:查询商品表,商品价格全部上涨20%
SELECT pid,pname,price + price *0.2 ,num,cid FROM product ;
-
查询重命名:关键字 as 新的列名
-- 运算查询:查询商品表,商品价格全部上涨20%,字段名,重新命名 SELECT pid,pname,price + price *0.2 AS price,num,cid FROM product ; -- 重命名可以省略as不写 SELECT pid,pname,price + price *0.2 price,num,cid FROM product ;
7.3 条件查询
-
SQL语句的运算符
-
比较运算符:=,< , > , <= , >= , <>不等于,MySQL支持 !=
-
逻辑运算符:and 与,or 或 ,not 取反
-
区间范围运算符:between...and
-
模糊运算符:like
-
范围查询:in
-
非空查询:is null
-
-
查询商品编号是10的
SELECT * FROM product WHERE pid = 10
-
查询商品价格,必须大于3000
SELECT * FROM product WHERE price > 3000
-
查询商品价格,必须不等于3000
-- 查询商品价格,必须不等于3000 SELECT * FROM product WHERE price <> 3000 SELECT * FROM product WHERE price != 3000
-
查询商品价格,大于等于3000,小于等于6000
-- 查询商品价格,大于等于3000,小于等于6000 SELECT * FROM product WHERE price >= 3000 AND price <= 6000 -- 查询商品价格,大于等于3000,小于等于6000 使用between查询 -- 使用between查询,数字小的在前面,数字大的在后面 -- between查询可以查询日期,小日期在前2022-5-5,大日期后面2022-6-6 SELECT * FROM product WHERE price BETWEEN 3000 AND 6000
-
模糊查询:查询商品名字,有ph
-- 模糊查询:查询商品名字,有ph -- 模糊查询运算符 like,通配符% 任何字符,任意个数 SELECT * FROM product WHERE pname LIKE '%ph%' -- 模糊查询:商品名有小 SELECT * FROM product WHERE pname LIKE '%小%' -- 模糊查询的通配符 _ 只能铜牌一个字符 -- 查询商品名是i开头,只能有6个字符 SELECT * FROM product WHERE pname LIKE 'i______'
-
范围查询:查询商品的编号,是9,11,13,15,17
-- 范围查询:查询商品的编号,是9,11,13,15,17 SELECT * FROM product WHERE pid = 9 OR pid = 11 OR pid = 13 OR pid = 15 OR pid = 17 -- 范围内,不连续的,建议使用in 查询 SELECT * FROM product WHERE pid IN (15,9,11,13,17) -- 范围查询:查询商品的编号,不是9,11,13,15,17 SELECT * FROM product WHERE pid NOT IN (15,9,11,13,17)
-
null值查询
INSERT INTO product VALUES(NULL,'法拉利',4599999,1,NULL) -- 查询商品表,cid字段是null,运算符 is null SELECT * FROM product WHERE cid IS NULL -- 查询商品表,cid字段不是null SELECT * FROM product WHERE cid IS NOT NULL
7.4 排序查询
-
升序排序: order by 字段名 asc (asc可以不写,默认就是升序)
-
降序排序: order by 字段名 desc 要写的
-- 升序排序: order by 字段名 asc (asc可以不写,默认就是升序) SELECT * FROM product ORDER BY price -- 降序排序: order by 字段名 desc 要写的 SELECT * FROM product ORDER BY price DESC
TreeMap:集合对键进行排序,SQL语句查询数据库,结果就是有序的
7.5 聚合函数
函数名 | 作用 |
---|---|
sum(字段名) | 对指定字段的值求和,列的值都是字符串,结果0 |
max(字段名) | 获取字段中的最大值 |
min(字段名) | 获取字段中的最小值 |
avg(字段名) | 对指定的列值,计算平均数 |
count(字段名) | 对指定列,统计该列有多少行数据 |
-- sum函数求和 -- 查询数据表,对价格求和 SELECT SUM(price) FROM product; -- avg函数平均数 -- 查询数据表,对价格计算平均数 SELECT AVG(price)FROM product; -- count计算列中行数的 SELECT COUNT(pid) FROM product;
7.6 分组查询
-
分组统计关键字 group by 字段名
-
-- 查询商品表,按照cid分类字段,相同的为一组,统计每组价格总和 -- 按照cid字段分组 SELECT SUM(price),cid FROM product GROUP BY cid
-
where 条件过滤
-
where过滤条件,过滤原始数据表
-
分组查询后,数据是临时性的,不能使用where过滤
-
-
having
-
可以过滤分组后的数据
-
-- 分组价格求和已经实现,价格小于1000的,不查询 SELECT SUM(price) price,cid FROM product GROUP BY cid HAVING price >= 1000
7.7 分页查询
/* 通过SQL语句,查询分页数据 limit关键字:查询中默认添加的 限时查询的数量 0 数据表的开始索引,1000 查询显示1000条 limit m,n m 开始索引 n 显示条数 limit查询的公式 select * from 表名 limit (当前页数-1)*n, 显示的条数 */ SELECT * FROM product LIMIT 0,1000; #第一屏数据查询 SELECT * FROM product LIMIT 0,5; #第二屏数据查询 SELECT * FROM product LIMIT 5,5 #第三屏数据查询 SELECT * FROM product LIMIT 10,5