MySQL基础
目录
JavaWeb
什么是JavaWeb?
- Web:全球广域网,也称万维网(www),能够通过浏览器访问网站
- JavaWeb:是用Java技术来解决相关web互联网领域的技术栈。
JavaWeb介绍
数据库相关概念
常见的关系型数据库
MySQL数据库
MySQL的安装配置
- 下载
https://downloads.mysql.com/archives/community/
- 安装
- 配置
- 配置MySQL_HOME
- path里配%MYSQL_HOME%/bin
- 新建配置文件my.ini存放在MySQL的根目录
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
default-storage-engine=INNODB
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
- 初始化MySQL
以管理员身份运行cmd,输入mysqld --initialize-insecure 按回车后此时MySQL根目录会产生一个data目录
-
注册MySQL服务
- 在cmd中敲入,mysql -install
-
启动MySQL服务
-
在黑框中敲入 net start mysq
-
net start mysql//启动mysql服务 net stop mysql//停止mysql服务
-
-
修改默认账户密码
- 在黑框里敲入 mysqladmin -u root password 1234,这里1234就是指默认管理员root账户的密码,可以自行修改
-
登录MySQL
- 在黑框中输入:mysql -uroot -p1234,回车即可退出可以输入quit或exit
-
登录参数
mysql -u用户名 -p密码 -h要连接的mysql服务器的ip地址(默认127.0.0.1) -P端口号(默认3306)
MySQL的卸载
- 在cmd中敲入 net stop mysql
- 再敲入 mysqld -remove mysql
- 最后删除MySQL目录及相关的配置文件即可
MySQL数据模型
图形化客户端工具——Navicat
Navicat
- Navicat for MySQL 是管理和开发MySQL或MariaDB 的理想解决方案
- 这套全面的前端工具为数据库管理、开发和维护提供了一款直观而强大的图形化界面
- 官网:http://www.navicat.com.cn
SQL
SQL简介
- 英文:Structured Query Language,简称SQL
- 结构化查询语言,一门操作关系型数据库的编程语言
- 定义操作所有关系型数据库的统一标准、
- 对于同一个需求,每一种数据库操作的方式可能会存在一些不一样的地方,我们称之为“方言''
SQL通用语法
- SQL语句可以单行或多行书写,以分号结尾
- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
- 注释
- 单行注释 --注释内容 或 #注释内容(MySQL 特有)
- 多行注释 /* 注释 */
SQL分类
DDL
操作数据库
操作表
- 创建(Create)
- 查询(Retrieve)
- 修改(Update)
- 删除(Delete)
查询表
- 查询当前数据库下的所有表——show tables;
- 查询表结构——desc 表名称;
创建表
数据类型
- MySQL支持多种类型,可以分为三类:
- 数值
- 日期
- 字符串
创建案例
create table student(
id int,
name varchar(20),
gender char(1),
birthday date,
score double(5,2),
email varchar(30),
tel varchar(15),
status tinyint
);
删除表
- 删除表——drop table 表名;
- 删除表时判断表是否存在——drop table if exists 表名;
修改表
DML
- 添加(insert)
- 修改(update)
- 删除(delete)
添加数据
-
给指定列添加数据
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,...)...;
-- 查询所有数据
SELECT * FROM stu;
-- 给指定的 列添加数据INSERT INTO 表名(列名1,列名2,...) VALUES(值1,值2,...);
INSERT into stu(id,name) values(1,'张三');
-- 给所有列添加数据
INSERT INTO STU(id,name,gender,birthday,score,email,tel,status) values(2,'李四','男','1997-12-12',99.9,'12580@qq.com','13888888888',1);
desc stu;
insert into stu VALUES(2,'李四','男','1997-12-12',99.9,'12580@qq.com','13888888888',1);
output:
1 张三
2 李四 男 1997-12-12 99.90 12580@qq.com 13888888888 1
2 李四 男 1997-12-12 99.90 12580@qq.com 13888888888 1
2 李四 男 1997-12-12 99.90 12580@qq.com 13888888888 1
修改数据
-
修改表数据
UPDATE 表名 SET 列名1=值1,列名2=值2,...[WHERE 条件]
注意:修改语句中如果不加条件,则将所有数据都修改!
-- 将stu表中 马化疼 改为 马花疼
update stu set name='马花疼' where id=2;
删除数据
-
删除数据
DELETE FROM 表名 [WHERE 条件];
注意:删除语句中如果不加条件,则将所有数据都删除!
DQL
查询语法
基础查询
-- 查询所有列的数据,列名的列表可以使用* 代替
select * from stu;
-- 查询地址信息
select address from stu;
-- 去除重复记录
SELECT distinct address from stu;
-- 查询姓名,数学成绩,英语成绩
SELECT name,math,english from stu;
select name,math as 数学成绩,english as 英语成绩 from stu;
select name, math 数学成绩,english as 英语成绩 from stu;
条件查询(where)
-- 条件查询=======================
-- 1.查询年龄大于20岁的学员信息
select * from stu where age > 20;
-- 2.查询年龄大于等于20岁的学员信息
select * from stu where age >= 20;
-- 3. 查询年龄大于等于20岁 并且 年龄 小于小于30岁的学员信息
select id,name,age,sex,address,math,english,hire_date from stu where age >= 20 && age <=30;
select * from stu where age>=20 && age<=30;
select * from stu where age>=20 and age<=30;
-- 4. 查询入学日期在'1998-09-01' 到 '1999-09-09'之间的学员信息
SELECT * from stu WHERE hire_date between '1998-09-01' and '1999-09-09';
-- 5. 查询年龄等于18岁的学员信息
select * from stu where age = 18;
-- 6. 查询年龄不等于18岁的学员信息
select * from stu where age != 18;
select * from stu where age<>18;
-- 7.查询年龄等于18岁 或者年龄等于 20 岁 或者年龄等于22岁的学员
select * from stu where age=18 or age =20 or age=22;
select * from stu where age=18 || age =20 || age = 22;
select * from stu where age in(18,20,22);
-- 8.查询英语成绩为 null 的学员信息
select * from stu where english != null; -- 不能这样写
select * from stu where english is null;
select * from stu where english is not null;
-- 模糊查询 like===============
/*
通配符:
(1) _:代表单个任意字符
(2)%:代表任意个数字符
*/
-- 1. 查询性姓'马'的学员信息
select * from stu where name like '马%';
-- 2.查询第二个字是'花'的学员信息
select * from stu where name like '_花%';
-- 3. 查询名字中包含'德'的学员信息
select * from stu where name like '%德%';
排序查询(ORDER BY)
/*
排序查询:
语法:select 字段列表 from 表名 order by 排序字段名1 [排序方式1],排序字段名2 [排序方式2]...;
排序方式:
ASC:升序排列(默认)
DESC:降序排列
*/
-- 1. 查询学生信息,按照年龄升序排列
select * from stu order by age asc;
-- 2.查询学生信息,按照数学成绩降序排列
select * from stu order by age desc;
-- 3.查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列
select * from stu order by math desc,english asc;
聚合函数
/*
聚合函数
* count:统计数量
* max:求最大值
* min:求最小值
* sum:求和
* avg: 求平均值
*/
-- 1.统计班级一共有多少个学生
select count(id) from stu; -- 统计的列名不能为null
select count(math) from stu;
select count(english) from stu;
-- 2. 查询数学成绩的最高分
select max(math) from stu;
-- 3.查询数学成绩的最低分
select min(math) from stu;
-- 4.查询数学成绩的总分
select sum(math) from stu;
-- 5.查询数学成绩的平均分
select avg(math) from stu;
分页查询(LIMIT)
/*
分页查询
SELECT 字段列表 from 表名 limit 起始索引 , 查询条目数
* 起始索引:从0开始
*/
-- 1. 从0开始查询,查询3条数据
select * from stu limit 0,3;
-- 2. 每页显示3条数据,查询第一页数据
select name, age , sex from stu limit 0,3;
-- 3. 每页显示3条数据,查询第二页数据
select * from stu limit 3,3;
-- 4. 每页显示3条数据, 查询第三页数据
select * from stu limit 6,3;
-- 起始索引 = (当前页码 - 1 ) * 每页显示的条数