MySQL

第二章 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
​

 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值