Web (World Wide Web) 即全球广域网,也称为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。是建立在Internet上的一种网络服务,为浏览者在Internet上查找和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将Internet上的信息节点组织成一个互为关联的网状结构。能够通过浏览器访问的网站。
web包括:web服务器和web客户端两部分。
是用Java技术来解决web互联网领域的技术栈
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。
MySQL官方链接https://downloads.mysql.com/archives/community/
打开刚刚解压的文件夹 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
在命令行输入如下命令:
mysqld --initialize-insecure
注意:
如果显示:由于找不到MSVCR120.dll,无法继续执行代码,重新安装程序可能会解决此问题。
解决办法:这是因为没有安装如下软件导致的,点击如下链接,下载vcredist.
https://www.microsoft.com/zh-CN/download/details.aspx?id=40784
无脑安装就好了
在命令行输入如下命令:
mysqld -install
结果显示:
现在你的计算机上已经安装好了MySQL服务,计算机可以称其为:MySQL服务器
在命令行输入如下命令:
net start mysql//启动服务
net stop mysql //停止服务
在命令行输入如下命令:
mysqladmin -u root password 1234
mysqladmin: [警告] 在命令行界面上使用密码可能不安全。
警告:由于密码将以明文形式发送到服务器,请使用 ssl 连接以确保密码安全。
mysql管理员:
您不能在 mysqld 运行时使用“密码”命令
禁用授权表(以 --skip-grant-tables 开始)。
使用:“mysqladmin flush-privileges password '*'”代替
在命令行输入如下命令:
mysql -uroot -p
结果显示:
在命令行输入如下命令:
exit
1.敲入net stop mysql
,回车
2.敲入mysqld -remove mysql
,回车
3.删除MySQL目录以及相关配置的环境变量。
关系型数据库:是建立在关系结构基础上的数据库,简单来说,关系型数据库是由多张能相互连接的二维表组成的数据库
什么是SQL
SQL分类
-- 注释内容
或#注释内容
;多行注释:/* 注释内容 */
mysql> show databases;-- 数据结束
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> show databases;#数据结束
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> show databases;/*数据结束
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
/*> asjjfha
/*> hasjh
/*> */
1.查询
在命令行输入如下命令:
show databases;
2.创建
创建数据库
create database 数据库名称;
创建数据库(判断,如果不存在则创建)
create database if not exists 数据库名称;
3.删除
删除数据库:
drop database 数据库名称;
删除数据库(判断,如果存在则删除)
drop database if exists 数据库名称;
4.使用数据库
查看当前使用的数据库:
select database();
使用数据库:
use 数据库名称;
查询当前数据库下所有表的名称
show tables;
查询表结构
desc 表名称;
create table 表名(
字段名1 数据类型1,
字段名2 数据类型2,
...
字段名n 数据类型n
);
注意:最后一行末尾不加逗号。
样例展示:
mysql> create database db1
-> ;
Query OK, 1 row affected (0.00 sec)
mysql> use db1
Database changed
mysql>
mysql>
mysql> create table tb_user(
-> id int,
-> username varchar(20),
-> password varchar(32)
-> );
Query OK, 0 rows affected (0.04 sec)
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| tb_user |
+---------------+
1 row in set (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 | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
mysql>
删除表:
drop table 表名称;
删除表(判断,如果存在则删除)
drop table if exists 表名称;
测试样例输出:
mysql> show databases
-> ;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db1 |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.01 sec)
mysql> use db1; -- 使用数据库
Database changed
mysql> select database(); -- 查看当前使用的数据库
+------------+
| database() |
+------------+
| db1 |
+------------+
1 row in set (0.00 sec)
mysql> show tables;-- 查询当前数据库下所有表的名称
+---------------+
| Tables_in_db1 |
+---------------+
| tb_user |
+---------------+
1 row in set (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 | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (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 to use near 'tb_user' at line 1
mysql> drop table tb_user;
Query OK, 0 rows affected (0.03 sec)
mysql> show tables;
Empty set (0.00 sec)
1.修改表名
alter table 表名 rename to 新的表名;
测试样例:
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| hello |
+---------------+
1 row in set (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 | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
mysql> alter table hello rename to user;\
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| user |
+---------------+
1 row in set (0.00 sec)
2.添加一列:
alter table 表名 add 列名 数据类型;
测试样例:
mysql> alter table user add sex int;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;
+----------+-------------+------+-----+---------+-------+
| 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 | |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
3.修改数据类型:
alter table 表名 modify 列名 新数据类型;
测试样例:
mysql> alter table user modify sex varchar(10);
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;
+----------+-------------+------+-----+---------+-------+
| 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 | |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
4.修改列名和数据类型
alter table 表名 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 | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> alter table hello change password pass int;
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 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 | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
5.修改字符集
-- 标准语法
alter table 表名 character set 字符集名称;
-- 查看数据库中数据表字符集
show table status from 数据库名 like '数据表名';
6.删除列
alter table 表名 drop 列名;
测试样例:
mysql> alter table hello drop sex;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 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 | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
新增格式1:给指定列添加数据
-- 标准语法
INSERT INTO 表名(列名1,列名2,...) VALUES (值1,值2,...);
-- 查看表中所有数据
SELECT * FROM 表名;
测试样例:
mysql> insert into user(id,username) values(1,'zhangsan');
Query OK, 1 row affected (0.01 sec)
mysql> select * from user;
+------+----------+------+------+
| id | username | pass | sex |
+------+----------+------+------+
| 1 | zhangsan | NULL | NULL |
+------+----------+------+------+
1 row in set (0.01 sec)
新增格式2:默认给全部列添加数据
-- 标准语法
INSERT INTO 表名 VALUES (值1,值2,值3,...);
-- 查看表中所有数据
SELECT * FROM 表名;
测试样例:
mysql> insert into user values(4,'xiaoyan',6666,'female');
Query OK, 1 row affected (0.01 sec)
mysql> select * from user;
+------+----------+------+--------+
| id | username | pass | sex |
+------+----------+------+--------+
| 1 | zhangsan | NULL | NULL |
| 2 | lisi | 1234 | male |
| 3 | wangwu | 1234 | female |
| 4 | xiaoyan | 6666 | female |
+------+----------+------+--------+
4 rows in set (0.00 sec)
新增格式3:批量添加数据
-- 默认添加所有列数据 标准语法
INSERT INTO 表名 VALUES (值1,值2,值3,...),(值1,值2,值3,...),(值1,值2,值3,...);
-- 查看表中所有数据
SELECT * FROM 表名;
-- 给指定列添加数据 标准语法
INSERT INTO 表名(列名1,列名2,...) VALUES (值1,值2,...),(值1,值2,...),(值1,值2,...);
-- 查看表中所有数据
SELECT * FROM 表名;
测试样例:
mysql> insert into user(id,username,pass,sex) values(2,'lisi',1234,'male'),(3,'wangwu',1234,'female');
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from user;
+------+----------+------+--------+
| id | username | pass | sex |
+------+----------+------+--------+
| 1 | zhangsan | NULL | NULL |
| 2 | lisi | 1234 | male |
| 3 | wangwu | 1234 | female |
+------+----------+------+--------+
3 rows in set (0.00 sec)
mysql> insert into user values(4,'xiaoyan',6666,'female'),(4,'xiaoyan',6666,'female'),(4,'xiaoyan',6666,'female');
Query OK, 3 rows affected (0.04 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from user;
+------+----------+------+--------+
| 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 |
+------+----------+------+--------+
7 rows in set (0.00 sec)
注意事项
-- 标准语法
UPDATE 表名 SET 列名1 = 值1,列名2 = 值2,... [where 条件];
-- 查看所有数据
SELECT * FROM 表名;
测试样例:
mysql> update user set id=6,pass=8888 where username='xiaoyan';
Query OK, 4 rows affected (0.02 sec)
Rows matched: 4 Changed: 4 Warnings: 0
mysql> select * from user;
+------+----------+------+--------+
| 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 |
+------+----------+------+--------+
7 rows in set (0.00 sec)
-- 标准语法
DELETE FROM 表名 [WHERE 条件];
-- 查看所有商品信息
SELECT * FROM product;
测试样例:
mysql> delete from user where id = 6;
Query OK, 4 rows affected (0.00 sec)
mysql> select * from user;
+------+----------+------+--------+
| id | username | pass | sex |
+------+----------+------+--------+
| 1 | zhangsan | NULL | NULL |
| 2 | lisi | 1234 | male |
| 3 | wangwu | 1234 | female |
+------+----------+------+--------+
3 rows in set (0.00 sec)
mysql> delete from user;
Query OK, 3 rows affected (0.00 sec)
mysql> select * from user;
Empty set (0.00 sec)
-- 创建db1数据库
CREATE DATABASE db1;
-- 使用db1数据库
USE db1;
-- 创建数据表
CREATE TABLE product(
id INT, -- 商品编号
NAME VARCHAR(20), -- 商品名称
price DOUBLE, -- 商品价格
brand VARCHAR(10), -- 商品品牌
stock INT, -- 商品库存
insert_time DATE -- 添加时间
);
-- 添加数据
INSERT INTO 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> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| product |
+---------------+
1 row in set (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 |
+------+--------------+-------+--------+-------+-------------+
7 rows in set (0.00 sec)
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
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 | 联想 |
+--------------+-------+--------+
7 rows in set (0.00 sec)
-- 标准语法
SELECT DISTINCT 列名1,列名2,... FROM 表名;
-- 查询品牌
SELECT brand FROM product;
-- 查询品牌,去除重复
SELECT DISTINCT brand FROM product;
测试样例:
mysql> select brand from product;
+--------+
| brand |
+--------+
| 华为 |
| 小米 |
| 苹果 |
| 华为 |
| 小米 |
| 苹果 |
| 联想 |
+--------+
7 rows in set (0.00 sec)
mysql> select distinct brand from product;
+--------+
| brand |
+--------+
| 华为 |
| 小米 |
| 苹果 |
| 联想 |
+--------+
4 rows in set (0.00 sec)
-- 标准语法
SELECT 列名1 运算符(+ - * /) 列名2 FROM 表名;
/*
计算列的值
标准语法:
SELECT 列名1 运算符(+ - * /) 列名2 FROM 表名;
如果某一列为null,可以进行替换
ifnull(表达式1,表达式2)
表达式1:想替换的列
表达式2:想替换的值
*/
-- 查询商品名称和库存,库存数量在原有基础上加10
SELECT NAME,stock+10 FROM product;
-- 查询商品名称和库存,库存数量在原有基础上加10。进行null值判断
SELECT NAME,IFNULL(stock,0)+10 FROM product;
-- 标准语法
SELECT 列名1,列名2,... AS 别名 FROM 表名;
-- 查询商品名称和库存,库存数量在原有基础上加10。进行null值判断。起别名为getSum
SELECT NAME,IFNULL(stock,0)+10 AS 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 |
+--------------+-------+
7 rows in set (0.00 sec)
mysql> SELECT NAME,stock+10 FROM product;
+--------------+----------+
| NAME | stock+10 |
+--------------+----------+
| 华为手机 | 33 |
| 小米手机 | 40 |
| 苹果手机 | 28 |
| 华为电脑 | 24 |
| 小米电脑 | 36 |
| 苹果电脑 | 25 |
| 联想电脑 | NULL |
+--------------+----------+
7 rows in set (0.00 sec)
mysql> select NAME,IFNULL(stock,0)+10 getsum from product;
+--------------+--------+
| NAME | getsum |
+--------------+--------+
| 华为手机 | 33 |
| 小米手机 | 40 |
| 苹果手机 | 28 |
| 华为电脑 | 24 |
| 小米电脑 | 36 |
| 苹果电脑 | 25 |
| 联想电脑 | 10 |
+--------------+--------+
7 rows in set (0.01 sec)
符号 | 功能 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
= | 等于 ‘==’是错的 |
<> 或 != |
不等于 |
BETWEEN … AND … | 在某个范围之内(都包含) |
IN(…) | 多选一 |
LIKE 占位符 | 模糊查询 _单个任意字符 %多个任意字符 |
IS NULL |
是NULL |
IS NOT NULL |
不是NULL |
AND 或 && | 并且 |
OR 或 || | 或者 |
NOT 或 ! | 非,不是 |
-- 标准语法
SELECT 列名 FROM 表名 WHERE 条件;
-- 查询库存大于20的商品信息
SELECT * FROM product WHERE stock > 20;
-- 查询品牌为华为的商品信息
SELECT * FROM product WHERE brand='华为';
-- 查询金额在4000 ~ 6000之间的商品信息
SELECT * FROM product WHERE price >= 4000 AND price <= 6000;
SELECT * FROM product WHERE price BETWEEN 4000 AND 6000;
-- 查询库存为14、30、23的商品信息
SELECT * FROM product WHERE stock=14 OR stock=30 OR stock=23;
SELECT * FROM product WHERE stock IN(14,30,23);
-- 查询库存为null的商品信息
SELECT * FROM product WHERE stock IS NULL;
-- 查询库存不为null的商品信息
SELECT * FROM product WHERE stock IS NOT NULL;
-- 查询名称以小米为开头的商品信息
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 |
+------+--------------+-------+--------+-------+-------------+
2 rows in set (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 |
+------+--------------+-------+--------+-------+-------------+
4 rows in set (0.00 sec)
关键词 | 功能 |
---|---|
ORDER BY 列名1 排序方式1,列名2 排序方式2 | 对指定列排序,ASC升序(默认的) DESC降序 |
-- 标准语法
SELECT 列名 FROM 表名 [WHERE 条件] ORDER BY 列名1 排序方式1,列名2 排序方式2;
-- 按照库存升序排序,默认升序
SELECT * FROM product ORDER BY stock ASC;
-- 查询名称中包含手机的商品信息。按照金额降序排序
SELECT * FROM product WHERE NAME LIKE '%手机%' ORDER BY price DESC;
-- 按照金额升序排序,如果金额相同,按照库存降序排列
SELECT * FROM product ORDER BY price ASC,stock DESC;
测试样例:
mysql> select * from product order by 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 |
+------+--------------+-------+--------+-------+-------------+
7 rows in set (0.00 sec)
mysql> SELECT * FROM product WHERE NAME LIKE '%手机%' ORDER BY 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 |
+------+--------------+-------+--------+-------+-------------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM product ORDER BY 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 |
+------+--------------+-------+--------+-------+-------------+
7 rows in set (0.00 sec)
函数名 | 功能 |
---|---|
count(列名) | 统计数量(一般选用不为null的列) |
max(列名) | 最大值 |
min(列名) | 最小值 |
sum(列名) | 求和 |
avg(列名) | 平均值 |
-- 标准语法
SELECT 函数名(列名) FROM 表名 [WHERE 条件];
-- 计算product表中总记录条数
SELECT COUNT(*) FROM product;
-- 获取最高价格
SELECT MAX(price) FROM product;
-- 获取最高价格的商品名称
SELECT NAME,price FROM product WHERE price = (SELECT MAX(price) FROM product);
-- 获取最低库存
SELECT MIN(stock) FROM product;
-- 获取最低库存的商品名称
SELECT NAME,stock FROM product WHERE stock = (SELECT MIN(stock) FROM product);
-- 获取总库存数量
SELECT SUM(stock) FROM product;
-- 获取品牌为苹果的总库存数量
SELECT SUM(stock) FROM product WHERE brand='苹果';
-- 获取品牌为小米的平均商品价格
SELECT AVG(price) FROM product WHERE brand='小米';
where > 聚合函数 > having
-- 标准语法
SELECT 列名 FROM 表名 [WHERE 条件] GROUP BY 分组列名 [HAVING 分组后条件过滤] [ORDER BY 排序列名 排序方式];
-- 按照品牌分组,获取每组商品的总金额
SELECT brand,SUM(price) FROM product GROUP BY brand;
-- 对金额大于4000元的商品,按照品牌分组,获取每组商品的总金额
SELECT brand,SUM(price) FROM product WHERE price > 4000 GROUP BY brand;
-- 对金额大于4000元的商品,按照品牌分组,获取每组商品的总金额,只显示总金额大于7000元的
SELECT brand,SUM(price) AS getSum FROM product WHERE price > 4000 GROUP BY brand HAVING getSum > 7000;
-- 对金额大于4000元的商品,按照品牌分组,获取每组商品的总金额,只显示总金额大于7000元的、并按照总金额的降序排列
SELECT brand,SUM(price) AS getSum FROM product WHERE price > 4000 GROUP BY brand HAVING getSum > 7000 ORDER BY getSum DESC;
测试样例:
mysql> select brand,SUM(price) from product group by brand;
+--------+------------+
| brand | SUM(price) |
+--------+------------+
| 华为 | 10998 |
| 小米 | 7998 |
| 联想 | 7999 |
| 苹果 | 14998 |
+--------+------------+
4 rows in set (0.01 sec)
mysql> select brand,sum(price) from product where price>4000 group by brand;
+--------+------------+
| brand | sum(price) |
+--------+------------+
| 华为 | 6999 |
| 小米 | 4999 |
| 联想 | 7999 |
| 苹果 | 14998 |
+--------+------------+
4 rows in set (0.01 sec)
mysql> select brand,sum(price) as getsum from product where price>4000 group by brand having getsum>7000;
+--------+--------+
| brand | getsum |
+--------+--------+
| 联想 | 7999 |
| 苹果 | 14998 |
+--------+--------+
2 rows in set (0.00 sec)
mysql> select brand,sum(price) as getsum from product where price>4000 group by brand having getsum>7000 order by getsum desc;
+--------+--------+
| brand | getsum |
+--------+--------+
| 苹果 | 14998 |
| 联想 | 7999 |
+--------+--------+
2 rows in set (0.00 sec)
开始索引从 0 开始,计算公式:起始索引=(当前页码-1)*每页条数
-- 标准语法
SELECT 列名 FROM 表名 [WHERE 条件] GROUP BY 分组列名 [HAVING 分组后条件过滤] [ORDER BY 排序列名 排序方式] LIMIT 开始索引,查询条数;
-- 公式:开始索引 = (当前页码-1) * 每页显示的条数
-- 每页显示2条数据
SELECT * FROM product LIMIT 0,2; -- 第一页 开始索引=(1-1) * 2
SELECT * FROM product LIMIT 2,2; -- 第二页 开始索引=(2-1) * 2
SELECT * FROM product LIMIT 4,2; -- 第三页 开始索引=(3-1) * 2
SELECT * FROM product LIMIT 6,2; -- 第四页 开始索引=(4-1) * 2
测试样例:
mysql> SELECT * FROM product LIMIT 0,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 |
+------+--------------+-------+--------+-------+-------------+
3 rows in set (0.00 sec)
mysql> select * from product limit 3,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 |
+------+--------------+-------+--------+-------+-------------+
3 rows in set (0.00 sec)
DCL学习
如果你需要添加 MySQL 用户,你只需要在 mysql 数据库中的 user 表添加新用户即可。
以下为添加用户的的实例,用户名为guest,密码为guest123,并授权用户可进行 SELECT, INSERT 和 UPDATE操作权限:
mysql> use mysql;
Database changed
mysql> INSERT INTO user
(host, user, password,
select_priv, insert_priv, update_priv)
VALUES ('localhost', 'guest',
PASSWORD('guest123'), 'Y', 'Y', 'Y');
Query OK, 1 row affected (0.20 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 1 row affected (0.01 sec)
mysql> SELECT host, user, password FROM user WHERE user = 'guest';
+-----------+---------+------------------+
| host | user | password |
+-----------+---------+------------------+
| localhost | guest | 6f8c114b58f2ce9e |
+-----------+---------+------------------+
1 row in set (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> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON TUTORIALS.*
-> TO 'zara'@'localhost'
-> IDENTIFIED BY 'zara123';
以上命令会在mysql数据库中的user表创建一条用户信息记录。
注意: MySQL 的SQL语句以分号 ;
作为结束标识。
JDBC API 是一个 Java API,它可以访问任何类型的表格数据,特别是可以访问存储在关系数据库里的数据。JDBC 可以用 Java 语言在各种平台上实现。
Apache Maven 是一套软件工程管理和整合工具。基于项目对象模型(POM)的概念,通过一个中央信息管理模块,Maven 能够管理项目的构建、报告和文档。
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。