2021-1-3 ~ 2021-1-6
本文比较长,这也是我第一次尝试发长篇博客(24000余字),本文会从MySQL的安装到SQL语言基础,带你入门数据库,如果觉得对你有帮助的话,点个赞,点个关注吧,这将会给予我更多的动力,Thanks♪(・ω・)ノ!!!
文章目录
一、Java Web 简介
Web:
Web (World Wide Web) 即全球广域网,也称为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。是建立在Internet上的一种网络服务,为浏览者在Internet上查找和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将Internet上的信息节点组织成一个互为关联的网状结构。能够通过浏览器访问的网站。
web包括:web服务器和web客户端两部分。
Java Web :
是用Java技术来解决web互联网领域的技术栈
结构组成:
- 网页:展现数据
- 数据库:存储和管理数据
- Java web 程序:逻辑处理
二、数据库:
- 存储数据的仓库,数据是有组织的进行存储,英文:DateBase(DB)
- 数据管理系统:管理数据库的大型软件,英文:DateBase Management System( DBMS) - 数据库: 数据库是一些关联表的集合。.- 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。- 列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。- 行:一行(元组,或记录)是一组相关的数据,例如一条用户订阅的数据。- 冗余:存储两倍数据,冗余可以使系统速度更快。- 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。- 外键:外键用于关联两个表。- 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。- 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值 进行排序的一种结构。类似于书籍的目录。- 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
- SQL: (Structured Query Language)结构化查询语言,操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准
MySQL
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。
下载安装:
1. 下载链接:
MySQL官方链接https://downloads.mysql.com/archives/community/
2. 配环境变量
高级系统设置中的环境变量,设置path路径
3. 配置 MySQL 的配置文件
打开刚刚解压的文件夹
D:\MySQL\mysql-5.7.24-winx64
,在该文件夹下创建
my.ini
配置文件,编辑
my.ini
配置以下基本信息:
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置3306端口
port =3306
# 设置mysql的安装目录
basedir=D:\\MySQL\\mysql-5.7.24-winx64
# 设置mysql数据库的数据的存放目录
datadir= D:\\MySQL\\mysql-5.7.24-winx64\data
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 跳过登录密码验证
skip-grant-tables
4. 启动下 MySQL 数据库:
以管理员的身份打开cmd
1. 初始化MySQL
在命令行输入如下命令:
mysqld --initialize-insecure
结果显示:
命令行里没有输出
注意:
如果显示:
由于找不到MSVCR120.dll,无法继续执行代码,重新安装程序可能会解决此问题。
解决办法:这是因为没有安装如下软件导致的,点击如下链接,下载vcredist.
https://www.microsoft.com/zh-CN/download/details.aspx?id=40784
无脑安装就好了
2. 注册MySQL服务
在命令行输入如下命令:
mysqld -install
结果显示:
现在你的计算机上已经安装好了MySQL服务,计算机可以称其为:MySQL服务器
3. 启动MySQL服务
在命令行输入如下命令:
net start mysql//启动服务
net stop mysql //停止服务
结果显示:
4. 改密码:
在命令行输入如下命令:
mysqladmin -u root password 1234
结果显示:
mysqladmin:[警告] 在命令行界面上使用密码可能不安全。
警告:由于密码将以明文形式发送到服务器,请使用 ssl 连接以确保密码安全。
mysql管理员:
您不能在 mysqld 运行时使用“密码”命令
禁用授权表(以 --skip-grant-tables 开始)。
使用:“mysqladmin flush-privileges password '*'”代替
5. 登录 mysql
在命令行输入如下命令:
mysql -uroot -p
结果显示:
6. 退出 mysql
在命令行输入如下命令:
exit
5. 卸载 MySQL 数据库:(提桶跑路)
1.敲入
net stop mysql
,回车
2.敲入
mysqld -remove mysql
,回车
3.删除MySQL目录以及相关配置的环境变量。
MySQL数据模型
关系型数据库:是建立在关系结构基础上的数据库,简单来说,关系型数据库是由多张能相互连接的二维表组成的数据库
优点:
- 都是使用表结构,格式一致,便于维护。
- 使用通用的SQL语言操作,使用方便,可用于复杂查询
- 数据存储在磁盘中,安全。
数据库就是文件夹,数据表是文件
SQL :
- 什么是SQL- Structured Query Language:结构化查询语言- 其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式可能会存在一些不一样的地方,我们称为“方言”。
- SQL分类- DDL(Data Definition Language)数据定义语言 - 用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等- DML(Data Manipulation Language)数据操作语言 - 用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等- DQL(Data Query Language)数据查询语言 - 用来查询数据库中表的记录(数据)。关键字:select, where 等- DCL(Data Control Language)数据控制语言(了解) - 用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等
- 英文: Structured Query Language,简称SQL
- 结构化查询语言,一门操作关系型数据库的编程语言
- 定义操作所有关系型数据库的统一标准
- 对于同一个需求,每一种数据库操作的方式可能会有所不同。
SQL通用语法
- 单行或多行书写,以分号结尾;
- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
- 注释:单行注释:
-- 注释内容
或#注释内容
;多行注释:/* 注释内容 */
mysql>showdatabases;-- 数据结束+--------------------+|Database|+--------------------+| information_schema || mysql || performance_schema || sys |+--------------------+4rowsinset(0.00 sec)
mysql>showdatabases;#数据结束+--------------------+|Database|+--------------------+| information_schema || mysql || performance_schema || sys |+--------------------+4rowsinset(0.00 sec)
mysql>showdatabases;/*数据结束
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
/*> asjjfha
/*> hasjh
/*> */
SQL分类
- DDL (Data Definition Language)数据定义语言,用来定义数据库对象:数据库,表,列;
- DML (Data Manipulation Language)数据操作语言,用来对数据库中表的数据进行增删改;
- DQL (Data Query Language)数据查询语言,用来查询数据库中表的记录(数据);
- DCL (Data Control Language)数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户。
1. DDL (Data Definition Language)数据定义语言
DDL–查询库
1.查询
在命令行输入如下命令:
showdatabases;
2.创建
创建数据库
createdatabase 数据库名称;
创建数据库(判断,如果不存在则创建)
createdatabaseifnotexists 数据库名称;
3.删除
删除数据库:
dropdatabase 数据库名称;
删除数据库(判断,如果存在则删除)
dropdatabaseifexists 数据库名称;
4.使用数据库
查看当前使用的数据库:
selectdatabase();
使用数据库:
use 数据库名称;
DDL–操作表
1. 查询表
查询当前数据库下所有表的名称
showtables;
查询表结构
desc 表名称;
2. 创建表
createtable 表名(
字段名1 数据类型1,
字段名2 数据类型2,...
字段名n 数据类型n
);
注意:最后一行末尾不加逗号。
样例展示:
mysql>createdatabase db1
->;
Query OK,1row affected (0.00 sec)
mysql>use db1
Database changed
mysql>
mysql>
mysql>createtable tb_user(-> id int,-> username varchar(20),-> password varchar(32)->);
Query OK,0rows affected (0.04 sec)
mysql>showtables;+---------------+| Tables_in_db1 |+---------------+| tb_user |+---------------+1rowinset(0.00 sec)
mysql>desc tb_user
->;+----------+-------------+------+-----+---------+-------+| Field |Type|Null|Key|Default| Extra |+----------+-------------+------+-----+---------+-------+| id |int(11)| YES ||NULL||| username |varchar(20)| YES ||NULL||| password |varchar(32)| YES ||NULL||+----------+-------------+------+-----+---------+-------+3rowsinset(0.01 sec)
mysql>
数据类型:数值,日期,字符串
3. 删除表
删除表:
droptable 表名称;
删除表(判断,如果存在则删除)
droptableifexists 表名称;
测试样例输出:
mysql>showdatabases->;+--------------------+|Database|+--------------------+| information_schema || db1 || mysql || performance_schema || sys |+--------------------+5rowsinset(0.01 sec)
mysql>use db1;-- 使用数据库Database changed
mysql>selectdatabase();-- 查看当前使用的数据库+------------+|database()|+------------+| db1 |+------------+1rowinset(0.00 sec)
mysql>showtables;-- 查询当前数据库下所有表的名称+---------------+| Tables_in_db1 |+---------------+| tb_user |+---------------+1rowinset(0.00 sec)
mysql>desc tb_user;-- 查询表结构+----------+-------------+------+-----+---------+-------+| Field |Type|Null|Key|Default| Extra |+----------+-------------+------+-----+---------+-------+| id |int(11)| YES ||NULL||| username |varchar(20)| YES ||NULL||| password |varchar(32)| YES ||NULL||+----------+-------------+------+-----+---------+-------+3rowsinset(0.01 sec)
mysql>drop tb_user;-- 删除表
ERROR 1064(42000): You have an error in your SQL syntax;check the manual that corresponds to your MySQL server version for the right syntax touse near 'tb_user' at line 1
mysql>droptable tb_user;
Query OK,0rows affected (0.03 sec)
mysql>showtables;
Empty set(0.00 sec)
4. 修改表
1.修改表名
altertable 表名 renameto 新的表名;
测试样例:
mysql>showtables;+---------------+| Tables_in_db1 |+---------------+| hello |+---------------+1rowinset(0.01 sec)
mysql>desc hello;+----------+-------------+------+-----+---------+-------+| Field |Type|Null|Key|Default| Extra |+----------+-------------+------+-----+---------+-------+| id |int(11)| YES ||NULL||| username |varchar(20)| YES ||NULL||| pass |int(11)| YES ||NULL||+----------+-------------+------+-----+---------+-------+3rowsinset(0.01 sec)
mysql>altertable hello renametouser;\
Query OK,0rows affected (0.02 sec)
mysql>showtables;+---------------+| Tables_in_db1 |+---------------+|user|+---------------+1rowinset(0.00 sec)
2.添加一列:
altertable 表名 add 列名 数据类型;
测试样例:
mysql>altertableuseradd sex int;
Query OK,0rows affected (0.04 sec)
Records: 0 Duplicates: 0Warnings: 0
mysql>descuser;+----------+-------------+------+-----+---------+-------+| Field |Type|Null|Key|Default| Extra |+----------+-------------+------+-----+---------+-------+| id |int(11)| YES ||NULL||| username |varchar(20)| YES ||NULL||| pass |int(11)| YES ||NULL||| sex |int(11)| YES ||NULL||+----------+-------------+------+-----+---------+-------+4rowsinset(0.01 sec)
3.修改数据类型:
altertable 表名 modify 列名 新数据类型;
测试样例:
mysql>altertableusermodify sex varchar(10);
Query OK,0rows affected (0.05 sec)
Records: 0 Duplicates: 0Warnings: 0
mysql>descuser;+----------+-------------+------+-----+---------+-------+| Field |Type|Null|Key|Default| Extra |+----------+-------------+------+-----+---------+-------+| id |int(11)| YES ||NULL||| username |varchar(20)| YES ||NULL||| pass |int(11)| YES ||NULL||| sex |varchar(10)| YES ||NULL||+----------+-------------+------+-----+---------+-------+4rowsinset(0.00 sec)
4.修改列名和数据类型
altertable 表名 change 列名 新列名 新数据类型;
测试样例:
mysql>desc hello;+----------+-------------+------+-----+---------+-------+| Field |Type|Null|Key|Default| Extra |+----------+-------------+------+-----+---------+-------+| id |int(11)| YES ||NULL||| username |varchar(20)| YES ||NULL||| password |varchar(32)| YES ||NULL||+----------+-------------+------+-----+---------+-------+3rowsinset(0.00 sec)
mysql>altertable hello change password pass int;
Query OK,0rows affected (0.05 sec)
Records: 0 Duplicates: 0Warnings: 0
mysql>desc hello;+----------+-------------+------+-----+---------+-------+| Field |Type|Null|Key|Default| Extra |+----------+-------------+------+-----+---------+-------+| id |int(11)| YES ||NULL||| username |varchar(20)| YES ||NULL||| pass |int(11)| YES ||NULL||+----------+-------------+------+-----+---------+-------+3rowsinset(0.00 sec)
5.修改字符集
-- 标准语法altertable 表名 characterset 字符集名称;-- 查看数据库中数据表字符集showtablestatusfrom 数据库名 like'数据表名';
6.删除列
altertable 表名 drop 列名;
测试样例:
mysql>altertable hello drop sex;
Query OK,0rows affected (0.04 sec)
Records: 0 Duplicates: 0Warnings: 0
mysql>desc hello;+----------+-------------+------+-----+---------+-------+| Field |Type|Null|Key|Default| Extra |+----------+-------------+------+-----+---------+-------+| id |int(11)| YES ||NULL||| username |varchar(20)| YES ||NULL||| password |varchar(32)| YES ||NULL||+----------+-------------+------+-----+---------+-------+3rowsinset(0.00 sec)
2. DML (Data Manipulation Language)数据操作语言
添加数据
新增格式1:给指定列添加数据
-- 标准语法INSERTINTO 表名(列名1,列名2,...)VALUES(值1,值2,...);-- 查看表中所有数据SELECT*FROM 表名;
测试样例:
mysql>insertintouser(id,username)values(1,'zhangsan');
Query OK,1row affected (0.01 sec)
mysql>select*fromuser;+------+----------+------+------+| id | username | pass | sex |+------+----------+------+------+|1| zhangsan |NULL|NULL|+------+----------+------+------+1rowinset(0.01 sec)
新增格式2:默认给全部列添加数据
-- 标准语法INSERTINTO 表名 VALUES(值1,值2,值3,...);-- 查看表中所有数据SELECT*FROM 表名;
测试样例:
mysql>insertintouservalues(4,'xiaoyan',6666,'female');
Query OK,1row affected (0.01 sec)
mysql>select*fromuser;+------+----------+------+--------+| id | username | pass | sex |+------+----------+------+--------+|1| zhangsan |NULL|NULL||2| lisi |1234| male ||3| wangwu |1234| female ||4| xiaoyan |6666| female |+------+----------+------+--------+4rowsinset(0.00 sec)
新增格式3:批量添加数据
-- 默认添加所有列数据 标准语法INSERTINTO 表名 VALUES(值1,值2,值3,...),(值1,值2,值3,...),(值1,值2,值3,...);-- 查看表中所有数据SELECT*FROM 表名;-- 给指定列添加数据 标准语法INSERTINTO 表名(列名1,列名2,...)VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);-- 查看表中所有数据SELECT*FROM 表名;
测试样例:
mysql>insertintouser(id,username,pass,sex)values(2,'lisi',1234,'male'),(3,'wangwu',1234,'female');
Query OK,2rows affected (0.01 sec)
Records: 2 Duplicates: 0Warnings: 0
mysql>select*fromuser;+------+----------+------+--------+| id | username | pass | sex |+------+----------+------+--------+|1| zhangsan |NULL|NULL||2| lisi |1234| male ||3| wangwu |1234| female |+------+----------+------+--------+3rowsinset(0.00 sec)
mysql>insertintouservalues(4,'xiaoyan',6666,'female'),(4,'xiaoyan',6666,'female'),(4,'xiaoyan',6666,'female');
Query OK,3rows affected (0.04 sec)
Records: 3 Duplicates: 0Warnings: 0
mysql>select*fromuser;+------+----------+------+--------+| id | username | pass | sex |+------+----------+------+--------+|1| zhangsan |NULL|NULL||2| lisi |1234| male ||3| wangwu |1234| female ||4| xiaoyan |6666| female ||4| xiaoyan |6666| female ||4| xiaoyan |6666| female ||4| xiaoyan |6666| female |+------+----------+------+--------+7rowsinset(0.00 sec)
- 注意事项- 列名和值的数量以及数据类型要对应- 除了数字类型,其他数据类型的数据都需要加引号(单引双引都可以,推荐单引)
修改数据
-- 标准语法UPDATE 表名 SET 列名1= 值1,列名2= 值2,...[where 条件];-- 查看所有数据SELECT*FROM 表名;
测试样例:
mysql>updateuserset id=6,pass=8888where username='xiaoyan';
Query OK,4rows affected (0.02 sec)Rowsmatched: 4 Changed: 4Warnings: 0
mysql>select*fromuser;+------+----------+------+--------+| id | username | pass | sex |+------+----------+------+--------+|1| zhangsan |NULL|NULL||2| lisi |1234| male ||3| wangwu |1234| female ||6| xiaoyan |8888| female ||6| xiaoyan |8888| female ||6| xiaoyan |8888| female ||6| xiaoyan |8888| female |+------+----------+------+--------+7rowsinset(0.00 sec)
- 注意事项 - 修改语句中必须加条件- 如果不加条件,则将所有数据都修改
删除数据
-- 标准语法DELETEFROM 表名 [WHERE 条件];-- 查看所有商品信息SELECT*FROM product;
测试样例:
mysql>deletefromuserwhere id =6;
Query OK,4rows affected (0.00 sec)
mysql>select*fromuser;+------+----------+------+--------+| id | username | pass | sex |+------+----------+------+--------+|1| zhangsan |NULL|NULL||2| lisi |1234| male ||3| wangwu |1234| female |+------+----------+------+--------+3rowsinset(0.00 sec)
mysql>deletefromuser;
Query OK,3rows affected (0.00 sec)
mysql>select*fromuser;
Empty set(0.00 sec)
- 注意事项 - 删除语句中必须加条件- 如果不加条件,则将所有数据删除
3. DQL (Data Query Language)数据查询语言
数据准备
-- 创建db1数据库CREATEDATABASE db1;-- 使用db1数据库USE db1;-- 创建数据表CREATETABLE product(
id INT,-- 商品编号
NAME VARCHAR(20),-- 商品名称
price DOUBLE,-- 商品价格
brand VARCHAR(10),-- 商品品牌
stock INT,-- 商品库存
insert_time DATE-- 添加时间);-- 添加数据INSERTINTO product VALUES(1,'华为手机',3999,'华为',23,'2088-03-10'),(2,'小米手机',2999,'小米',30,'2088-05-15'),(3,'苹果手机',5999,'苹果',18,'2088-08-20'),(4,'华为电脑',6999,'华为',14,'2088-06-16'),(5,'小米电脑',4999,'小米',26,'2088-07-08'),(6,'苹果电脑',8999,'苹果',15,'2088-10-25'),(7,'联想电脑',7999,'联想',NULL,'2088-11-11');
测试输出:
mysql>showtables;+---------------+| Tables_in_db1 |+---------------+| product |+---------------+1rowinset(0.00 sec)
mysql>select*from product;+------+--------------+-------+--------+-------+-------------+| id | NAME | price | brand | stock | insert_time |+------+--------------+-------+--------+-------+-------------+|1| 华为手机 |3999| 华为 |23|2088-03-10||2| 小米手机 |2999| 小米 |30|2088-05-15||3| 苹果手机 |5999| 苹果 |18|2088-08-20||4| 华为电脑 |6999| 华为 |14|2088-06-16||5| 小米电脑 |4999| 小米 |26|2088-07-08||6| 苹果电脑 |8999| 苹果 |15|2088-10-25||7| 联想电脑 |7999| 联想 |NULL|2088-11-11|+------+--------------+-------+--------+-------+-------------+7rowsinset(0.00 sec)
查询语法
select
字段列表
from
表名列表
where
条件列表
groupby
分组字段
having
分组之后的条件
orderby
排序
limit
分页限定
查询全部
-- 标准语法SELECT*FROM 表名;-- 查询product表所有数据-- 查询所以列的数据,列名的列表可以使用*代替SELECT*FROM product;
查询部分
多个字段查询
-- 标准语法SELECT 列名1,列名2,...FROM 表名;-- 查询名称、价格、品牌SELECT NAME,price,brand FROM product;
测试样例:
mysql>select NAME,price,brand from product;+--------------+-------+--------+| NAME | price | brand |+--------------+-------+--------+| 华为手机 |3999| 华为 || 小米手机 |2999| 小米 || 苹果手机 |5999| 苹果 || 华为电脑 |6999| 华为 || 小米电脑 |4999| 小米 || 苹果电脑 |8999| 苹果 || 联想电脑 |7999| 联想 |+--------------+-------+--------+7rowsinset(0.00 sec)
去除重复查询
- 注意:只有全部重复的才可以去除
-- 标准语法SELECTDISTINCT 列名1,列名2,...FROM 表名;-- 查询品牌SELECT brand FROM product;-- 查询品牌,去除重复SELECTDISTINCT brand FROM product;
测试样例:
mysql>select brand from product;+--------+| brand |+--------+| 华为 || 小米 || 苹果 || 华为 || 小米 || 苹果 || 联想 |+--------+7rowsinset(0.00 sec)
mysql>selectdistinct brand from product;+--------+| brand |+--------+| 华为 || 小米 || 苹果 || 联想 |+--------+4rowsinset(0.00 sec)
计算列的值(四则运算)
-- 标准语法SELECT 列名1 运算符(+-*/) 列名2FROM 表名;/*
计算列的值
标准语法:
SELECT 列名1 运算符(+ - * /) 列名2 FROM 表名;
如果某一列为null,可以进行替换
ifnull(表达式1,表达式2)
表达式1:想替换的列
表达式2:想替换的值
*/-- 查询商品名称和库存,库存数量在原有基础上加10SELECT NAME,stock+10FROM product;-- 查询商品名称和库存,库存数量在原有基础上加10。进行null值判断SELECT NAME,IFNULL(stock,0)+10FROM product;
起别名
-- 标准语法SELECT 列名1,列名2,...AS 别名 FROM 表名;-- 查询商品名称和库存,库存数量在原有基础上加10。进行null值判断。起别名为getSumSELECT NAME,IFNULL(stock,0)+10AS getsum FROM product;SELECT NAME,IFNULL(stock,0)+10 getsum FROM product;
测试样例:
mysql>select NAME,stock from product;+--------------+-------+| NAME | stock |+--------------+-------+| 华为手机 |23|| 小米手机 |30|| 苹果手机 |18|| 华为电脑 |14|| 小米电脑 |26|| 苹果电脑 |15|| 联想电脑 |NULL|+--------------+-------+7rowsinset(0.00 sec)
mysql>SELECT NAME,stock+10FROM product;+--------------+----------+| NAME | stock+10|+--------------+----------+| 华为手机 |33|| 小米手机 |40|| 苹果手机 |28|| 华为电脑 |24|| 小米电脑 |36|| 苹果电脑 |25|| 联想电脑 |NULL|+--------------+----------+7rowsinset(0.00 sec)
mysql>select NAME,IFNULL(stock,0)+10 getsum from product;+--------------+--------+| NAME | getsum |+--------------+--------+| 华为手机 |33|| 小米手机 |40|| 苹果手机 |28|| 华为电脑 |24|| 小米电脑 |36|| 苹果电脑 |25|| 联想电脑 |10|+--------------+--------+7rowsinset(0.01 sec)
条件查询
条件分类
符号功能>大于<小于>=大于等于<=小于等于=等于
‘==’是错的
<>
或 !=不等于BETWEEN … AND …在某个范围之内(都包含)IN(…)多选一LIKE 占位符模糊查询
_单个任意字符
%多个任意字符
IS NULL
是NULL
IS NOT NULL
不是NULLAND 或 &&并且OR 或 ||或者NOT 或 !非,不是
条件查询语法
-- 标准语法SELECT 列名 FROM 表名 WHERE 条件;-- 查询库存大于20的商品信息SELECT*FROM product WHERE stock >20;-- 查询品牌为华为的商品信息SELECT*FROM product WHERE brand='华为';-- 查询金额在4000 ~ 6000之间的商品信息SELECT*FROM product WHERE price >=4000AND price <=6000;SELECT*FROM product WHERE price BETWEEN4000AND6000;-- 查询库存为14、30、23的商品信息SELECT*FROM product WHERE stock=14OR stock=30OR stock=23;SELECT*FROM product WHERE stock IN(14,30,23);-- 查询库存为null的商品信息SELECT*FROM product WHERE stock ISNULL;-- 查询库存不为null的商品信息SELECT*FROM product WHERE stock ISNOTNULL;-- 查询名称以小米为开头的商品信息SELECT*FROM product WHERE NAME LIKE'小米%';-- 查询名称第二个字是为的商品信息SELECT*FROM product WHERE NAME LIKE'_为%';-- 查询名称为四个字符的商品信息SELECT*FROM product WHERE NAME LIKE'____';-- 查询名称中包含电脑的商品信息SELECT*FROM product WHERE NAME LIKE'%电脑%';
测试函数:
mysql>SELECT*FROM product WHERE NAME LIKE'_为%';+------+--------------+-------+--------+-------+-------------+| id | NAME | price | brand | stock | insert_time |+------+--------------+-------+--------+-------+-------------+|1| 华为手机 |3999| 华为 |23|2088-03-10||4| 华为电脑 |6999| 华为 |14|2088-06-16|+------+--------------+-------+--------+-------+-------------+2rowsinset(0.01 sec)
mysql>SELECT*FROM product WHERE NAME LIKE'%电脑%';+------+--------------+-------+--------+-------+-------------+| id | NAME | price | brand | stock | insert_time |+------+--------------+-------+--------+-------+-------------+|4| 华为电脑 |6999| 华为 |14|2088-06-16||5| 小米电脑 |4999| 小米 |26|2088-07-08||6| 苹果电脑 |8999| 苹果 |15|2088-10-25||7| 联想电脑 |7999| 联想 |NULL|2088-11-11|+------+--------------+-------+--------+-------+-------------+4rowsinset(0.00 sec)
排序查询
排序分类
- 注意:多个排序条件,当前边的条件值一样时,才会判断第二条件
关键词功能ORDER BY 列名1 排序方式1,列名2 排序方式2对指定列排序,ASC升序(默认的) DESC降序排序语法
-- 标准语法SELECT 列名 FROM 表名 [WHERE 条件]ORDERBY 列名1 排序方式1,列名2 排序方式2;-- 按照库存升序排序,默认升序SELECT*FROM product ORDERBY stock ASC;-- 查询名称中包含手机的商品信息。按照金额降序排序SELECT*FROM product WHERE NAME LIKE'%手机%'ORDERBY price DESC;-- 按照金额升序排序,如果金额相同,按照库存降序排列SELECT*FROM product ORDERBY price ASC,stock DESC;
测试样例:
mysql>select*from product orderby insert_time asc;+------+--------------+-------+--------+-------+-------------+| id | NAME | price | brand | stock | insert_time |+------+--------------+-------+--------+-------+-------------+|1| 华为手机 |3999| 华为 |23|2088-03-10||2| 小米手机 |2999| 小米 |30|2088-05-15||4| 华为电脑 |6999| 华为 |14|2088-06-16||5| 小米电脑 |4999| 小米 |26|2088-07-08||3| 苹果手机 |5999| 苹果 |18|2088-08-20||6| 苹果电脑 |8999| 苹果 |15|2088-10-25||7| 联想电脑 |7999| 联想 |NULL|2088-11-11|+------+--------------+-------+--------+-------+-------------+7rowsinset(0.00 sec)
mysql>SELECT*FROM product WHERE NAME LIKE'%手机%'ORDERBY price DESC;+------+--------------+-------+--------+-------+-------------+| id | NAME | price | brand | stock | insert_time |+------+--------------+-------+--------+-------+-------------+|3| 苹果手机 |5999| 苹果 |18|2088-08-20||1| 华为手机 |3999| 华为 |23|2088-03-10||2| 小米手机 |2999| 小米 |30|2088-05-15|+------+--------------+-------+--------+-------+-------------+3rowsinset(0.00 sec)
mysql>SELECT*FROM product ORDERBY price ASC,stock DESC;+------+--------------+-------+--------+-------+-------------+| id | NAME | price | brand | stock | insert_time |+------+--------------+-------+--------+-------+-------------+|2| 小米手机 |2999| 小米 |30|2088-05-15||1| 华为手机 |3999| 华为 |23|2088-03-10||5| 小米电脑 |4999| 小米 |26|2088-07-08||3| 苹果手机 |5999| 苹果 |18|2088-08-20||4| 华为电脑 |6999| 华为 |14|2088-06-16||7| 联想电脑 |7999| 联想 |NULL|2088-11-11||6| 苹果电脑 |8999| 苹果 |15|2088-10-25|+------+--------------+-------+--------+-------+-------------+7rowsinset(0.00 sec)
聚合函数
- 将一列数据作为一个整体,进行纵向的计算,null值不参与运算
聚合函数分类
函数名功能count(列名)统计数量(一般选用不为null的列)max(列名)最大值min(列名)最小值sum(列名)求和avg(列名)平均值
聚合函数语法
-- 标准语法SELECT 函数名(列名)FROM 表名 [WHERE 条件];-- 计算product表中总记录条数SELECTCOUNT(*)FROM product;-- 获取最高价格SELECTMAX(price)FROM product;-- 获取最高价格的商品名称SELECT NAME,price FROM product WHERE price =(SELECTMAX(price)FROM product);-- 获取最低库存SELECTMIN(stock)FROM product;-- 获取最低库存的商品名称SELECT NAME,stock FROM product WHERE stock =(SELECTMIN(stock)FROM product);-- 获取总库存数量SELECTSUM(stock)FROM product;-- 获取品牌为苹果的总库存数量SELECTSUM(stock)FROM product WHERE brand='苹果';-- 获取品牌为小米的平均商品价格SELECTAVG(price)FROM product WHERE brand='小米';
分组查询
- 分组之后,查询的字段为聚合函数和分组字段,查询其他字段毫无意义。
- where 和 having 的区别: - 执行时机不一致:where 是分组前经行限定,不满足 where 条件,则不参与分组,而 having 是分组之后对结果进行过滤。- 可判断的条件不一样:where 不能对聚合函数进行判断, having 可以。
- 执行顺序: -
where > 聚合函数 > having
-- 标准语法SELECT 列名 FROM 表名 [WHERE 条件]GROUPBY 分组列名 [HAVING 分组后条件过滤][ORDERBY 排序列名 排序方式];-- 按照品牌分组,获取每组商品的总金额SELECT brand,SUM(price)FROM product GROUPBY brand;-- 对金额大于4000元的商品,按照品牌分组,获取每组商品的总金额SELECT brand,SUM(price)FROM product WHERE price >4000GROUPBY brand;-- 对金额大于4000元的商品,按照品牌分组,获取每组商品的总金额,只显示总金额大于7000元的SELECT brand,SUM(price)AS getSum FROM product WHERE price >4000GROUPBY brand HAVING getSum >7000;-- 对金额大于4000元的商品,按照品牌分组,获取每组商品的总金额,只显示总金额大于7000元的、并按照总金额的降序排列SELECT brand,SUM(price)AS getSum FROM product WHERE price >4000GROUPBY brand HAVING getSum >7000ORDERBY getSum DESC;
测试样例:
mysql>select brand,SUM(price)from product groupby brand;+--------+------------+| brand |SUM(price)|+--------+------------+| 华为 |10998|| 小米 |7998|| 联想 |7999|| 苹果 |14998|+--------+------------+4rowsinset(0.01 sec)
mysql>select brand,sum(price)from product where price>4000groupby brand;+--------+------------+| brand |sum(price)|+--------+------------+| 华为 |6999|| 小米 |4999|| 联想 |7999|| 苹果 |14998|+--------+------------+4rowsinset(0.01 sec)
mysql>select brand,sum(price)as getsum from product where price>4000groupby brand having getsum>7000;+--------+--------+| brand | getsum |+--------+--------+| 联想 |7999|| 苹果 |14998|+--------+--------+2rowsinset(0.00 sec)
mysql>select brand,sum(price)as getsum from product where price>4000groupby brand having getsum>7000orderby getsum desc;+--------+--------+| brand | getsum |+--------+--------+| 苹果 |14998|| 联想 |7999|+--------+--------+2rowsinset(0.00 sec)
分页查询
开始索引从 0 开始,计算公式:
起始索引=(当前页码-1)*每页条数
-- 标准语法SELECT 列名 FROM 表名 [WHERE 条件]GROUPBY 分组列名 [HAVING 分组后条件过滤][ORDERBY 排序列名 排序方式]LIMIT 开始索引,查询条数;-- 公式:开始索引 = (当前页码-1) * 每页显示的条数-- 每页显示2条数据SELECT*FROM product LIMIT0,2;-- 第一页 开始索引=(1-1) * 2SELECT*FROM product LIMIT2,2;-- 第二页 开始索引=(2-1) * 2SELECT*FROM product LIMIT4,2;-- 第三页 开始索引=(3-1) * 2SELECT*FROM product LIMIT6,2;-- 第四页 开始索引=(4-1) * 2
测试样例:
mysql>SELECT*FROM product LIMIT0,3;+------+--------------+-------+--------+-------+-------------+| id | NAME | price | brand | stock | insert_time |+------+--------------+-------+--------+-------+-------------+|1| 华为手机 |3999| 华为 |23|2088-03-10||2| 小米手机 |2999| 小米 |30|2088-05-15||3| 苹果手机 |5999| 苹果 |18|2088-08-20|+------+--------------+-------+--------+-------+-------------+3rowsinset(0.00 sec)
mysql>select*from product limit3,3;+------+--------------+-------+--------+-------+-------------+| id | NAME | price | brand | stock | insert_time |+------+--------------+-------+--------+-------+-------------+|4| 华为电脑 |6999| 华为 |14|2088-06-16||5| 小米电脑 |4999| 小米 |26|2088-07-08||6| 苹果电脑 |8999| 苹果 |15|2088-10-25|+------+--------------+-------+--------+-------+-------------+3rowsinset(0.00 sec)
4. DCL (Data Control Language)数据控制语言
DCL学习
MySQL 用户设置
如果你需要添加 MySQL 用户,你只需要在 mysql 数据库中的 user 表添加新用户即可。
以下为添加用户的的实例,用户名为guest,密码为guest123,并授权用户可进行 SELECT, INSERT 和 UPDATE操作权限:
mysql>use mysql;Database changed
mysql>INSERTINTOuser(host,user, password,
select_priv, insert_priv, update_priv)VALUES('localhost','guest',
PASSWORD('guest123'),'Y','Y','Y');
Query OK,1row affected (0.20 sec)
mysql> FLUSH PRIVILEGES;
Query OK,1row affected (0.01 sec)
mysql>SELECT host,user, password FROMuserWHEREuser='guest';+-----------+---------+------------------+| host |user| password |+-----------+---------+------------------+| localhost | guest |6f8c114b58f2ce9e |+-----------+---------+------------------+1rowinset(0.00 sec)
在添加用户时,请注意使用MySQL提供的 PASSWORD() 函数来对密码进行加密。 你可以在以上实例看到用户密码加密后为:
6f8c114b58f2ce9e
.
注意:在 MySQL5.7 中 user 表的
password
已换成了
authentication_string
。
注意:
password()
加密函数已经在 8.0.11 中移除了,可以使用 MD5() 函数代替。
注意:在注意需要执行
FLUSH PRIVILEGES
语句。 这个命令执行后会重新载入授权表。
如果你不使用该命令,你就无法使用新创建的用户来连接mysql服务器,除非你重启mysql服务器。
你可以在创建用户时,为用户指定权限,在对应的权限列中,在插入语句中设置为 ‘Y’ 即可,用户权限列表如下:
Select_priv
Insert_priv
Update_priv
Delete_priv
Create_priv
Drop_priv
Reload_priv
Shutdown_priv
Process_priv
File_priv
Grant_priv
References_priv
Index_priv
Alter_priv
另外一种添加用户的方法为通过SQL的 GRANT 命令,以下命令会给指定数据库TUTORIALS添加用户 zara ,密码为 zara123 :
mysql>use mysql;Database changed
mysql>GRANTSELECT,INSERT,UPDATE,DELETE,CREATE,DROP->ON TUTORIALS.*->TO'zara'@'localhost'-> IDENTIFIED BY'zara123';
以上命令会在mysql数据库中的user表创建一条用户信息记录。
注意: MySQL 的SQL语句以分号
;
作为结束标识。
以下内容将在后续更新,敬请期待!!!!
JDBC
JDBC API 是一个 Java API,它可以访问任何类型的表格数据,特别是可以访问存储在关系数据库里的数据。JDBC 可以用 Java 语言在各种平台上实现。
Maven
Apache Maven 是一套软件工程管理和整合工具。基于项目对象模型(POM)的概念,通过一个中央信息管理模块,Maven 能够管理项目的构建、报告和文档。
MyBatis
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
版权归原作者 Eternity_GQM 所有, 如有侵权,请联系我们删除。