一、MySQL 概述
1.1 数据库相关概念
数据库:(DB:DataBase)
-
存储数据的仓库,数据是有组织的进行存储
数据库管理系统:(DBMS:DataBase Management System)
-
操作和管理数据库的大型软件
SQL:(SQL:Structured Query Language,结构化查询语言)
-
操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。
主流的关系型数据库管理系统
- ORACLE
- MySQL
- SQLServer
- PostgreSQL
- SQLite(安卓)
1.2 MySQL 数据库
版本:
-
社区版,免费,MySQL 不提供任何技术支持
-
商业版,收费,官方提供技术支持
MySQL 下载:
-
MySQL 下载网址
安装:
1.3 MySQL 数据库的启动与停止
1、启动:
net start mysql80
2、停止 :
net stop mysql80
mysql80 是系统服务名称:
【注意】:MySQL 默认是开机自启动的
1.4 MySQL 客户端连接
1、方式一
2、方式二
系统自带的命令行工具执行指令
mysql [-h 127.0.0.1] [-p 3306] -u root -p
【注意】使用这种方式时,需要配置 PATH 环境变量
1.5 MySQL 数据库数据模型
关系型数据库(RDBMS)
概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库(Excel 表)。
特点:
-
使用表存储数据,格式统一,便于维护
-
使用 SQL 语言操作,标准统一,使用方便
二维表
二、SQL
2.1 SQL 通用语法
-
SQL 语句可以单行或多行书写,以分号结尾
-
SQL 语句可以使用空格 / 缩进来增强语句的可读性
-
MySQL 数据库的SQL 语句不区分大小写,关键字建议使用大写。
-
注释:
-
单行注释:--注释内容,或 #注释内容(MySQL 特有)
-
多行注释:/* 注释内容 */
-
2.2 SQL 分类
2.3 DDL(数据定义语言)
作用:用来定义数据库对象(数据库、表、字段)
2.3.1 数据库操作
1. 查询:
查询所有数据库:
SHOW DATABASES;
查询当前数据库:----> 在某个数据库工作,不知道它的名字
SELECT DATABASE();
2.创建:
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集][COLLATE 排序规则];
[IF NOT EXISTS]:如果该数据库名不存在就创建,否则就不创建。
3.删除
DROP DATABASE [IF EXISTS]数据库名;
4.使用
USE 数据库名;
2.3.2 表操作(创建、查询)
1.表操作 --- 查询
查询当前数据库中所有表:
SHOW TABLES;
查询表结构:
DESC 表名;
查询指定表的建表语句:
SHOW CREATE TABLES 表名;
2.表操作 --- 创建
CREATE TABLE 表名(
字段1 字段1类型 [COMMENT 字段1注释],
字段2 字段2类型 [COMMENT 字段2注释],
字段3 字段3类型 [COMMENT 字段3注释],
......
字段n 字段n类型 [COMMENT 字段n注释]
)[COMMENT 表注释];
【注】[......] 为可选参数,最后一个字段后面没有逗号
2.3.3 表操作(数据类型及案例)
1.表操作 --- 数据类型
MySQL 中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
精度:是指该数的数字个数
标度:是指该数的小数个数
-
123.45
-
精度是 5
-
标度是 2
-
char(10) --->性能好
varchar(10) ---->性能较差
案例:
CREATE TABLE EMP(
ID INT COMMENT '编号',
WORKID VARCHAR(10) COMMENT '工号',
NAME VARCHAR(10) COMMENT '姓名',
GENDER CHAR(1) COMMENT '性别',
AGE TINYINT UNSIGNED COMMENT '年龄',
IDCARD CAHR(18) COMMENT '身份证号',
ENTRYTIME DATA COMMENT '入职时间'
)COMMENT '员工表';
2.3.4 表操作 --- 修改&删除
1.DDL -- 表操作 -- 修改
1.1 添加字段
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
案例:为 emp 表增加一个新的字段 “昵称” 为 nickname,类型为 varchar(20)
ALTER TABLE emp ADD nickname VARCHAR(20) COMMENT '昵称';
1.2 修改字段
修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
案例:将 emp 表的 nickname 字段修改为 username,类型为 varchar(30)
ALTER TABLE emp CHANGE nickname username VARCHAR(30) COMMENT '用户名';
1.3 删除字段
ALTER TABLE 表名 DROP 字段名;
案例:将 emp 表的字符 username 删除
ALTER TABLE emp DROP username;
1.4 修改表名
ALTER TABLE 表名 RENAME TO 新表名;
案例:将 emp 表的表名修改为 employee
ALTER TABLE emp RENAME TO employee;
2.DDL -- 表操作 -- 删除
2.1 删除表
DROP TABLE [IF EXISTS] 表名;
2.2 删除指定表,并重新创建该表
TRUNCATE TABLE 表名;
2.3.5 DDL 小结
2.3.6 MySQL 图形化界面
2.4 DML(数据操作语言)
DML 英文全称是 Data Manipulation Language (数据操作语言),用来对数据库中表的数据记录进行增删改操作。
作用:用来对数据库表中的数据进行 增删改
-
添加数据:INSERT
-
修改数据:UPDATA
-
删除数据:DELETE
1. DML - 添加数据(insert)
1.1 给指定字段添加数据
INSERT INTO 表名(字段名1,字段名2,...) VALUES(值1,值2,...);
1.2 给全部字段添加数据
不指定字段名称,就是给表中所有字段添加数据
INSERT INTO 表名 VALUES(值1,值2,...);
1.3 批量添加数据
INSERT INTO 表名(字段名1,字段名2,...) VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);
不指定字段名称,就是给表中所有字段添加数据
INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);
【注意】
-
插入数据时,指定的字段顺序需要与值的顺序是一 一对应的。
-
字符串和日期型数据应该包含在引号中。
-
插入的数据大小,应该在字段的规定范围内。
案例
insert into emp(id, workid, name, gender, age, idcord, entrydata) values (1,'1','itcast','男',10,'123456789012345678','2000-10-01');
# 给指定字段添加数据
insert into emp(id, workid, name, gender, age, idcord, entrydata) values (3,'2','itcast2','男',-1,'123456789012345678','2000-10-01');
# 给全部字段添加数据
insert into emp values (11,'11','allice','女',10,'123456789012345678','2001-08-09');
-- 批量添加数据
insert into emp values (14,'14','王林','女',10,'123456789012345678','2001-08-09'),
(13,'13','黄天霸','女',10,'123456789012345678','2001-08-09'),
(12,'12','张无忌','女',10,'123456789012345678','2001-08-09');
-- 查询所有数据
select * from emp;
2. DML - 修改数据(updata)
语法:
UPDATE 表名 SET 字段名1 = 值1,字段名2 = 值2,...[WHERE 条件];
【注意】:修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
案例:
-- 修改id 为 1 的数据,将 name 修改为 唐三
update emp set name = '唐三' where id = 1;
-- 修改id 为 2 的数据,将 name 修改为 田二林,gender 修改为 '女'
update emp set name = '田二林',gender = '女' where id = 2;
-- 将所有员工的入职日期修改为 2008-01-01
update emp set entrydata = '2008-01-01';
3. DML - 删除数据(delete)
语法:
DELETE FROM 表名 [WHERE 条件]
【注意】
- delete 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据
- delete 语句不能删除某一个字段的值(乐园使用 update 进行删除)
案例:
-- 删除 gerder 为 女 的员工
delete from emp where gender = '女';
-- 删除所有员工
delete from emp;
4、DML(数据操作语言)总结
2.5 DQL(数据查询语言)⭐
作用:用来 查询 数据库中表的记录
DQL(Data Query Language):数据查询语言,用来查询数据库中表的记录。
查询关键字:select
DQL 语法
1、DQL - 基本查询
案例:
-- 删除表
drop table emp;
-- 查询数据
-- 数据准备
create table empployee(
id int comment '编号',
worknc varchar(10) comment '工号',
name varchar(10) comment '姓名',
genger char(1) comment '性别',
age tinyint unsigned comment '年龄',
idcars char(18) comment '身份证号',
workaddress varchar(50) comment '工作地址',
entrydate date comment '入职时间'
) comment '员工表';
-- 添加数据(插入数据)
insert into empployee(id, worknc, name, genger, age, idcars, workaddress, entrydate)
values (1,'1','王林','男',20,'123456789012345678','北京','2000-01-01'),
(2,'2','田大林','男',21,'123456789012345678','北京','2000-01-01'),
(3,'3','田二林','男',19,'123456789012345678','北京','2000-01-01'),
(4,'4','田三林','男',18,'123456789012345678','北京','2000-01-01'),
(5,'5','海瑞','男',20,'123456789012345678','海南','2000-01-01'),
(6,'6','虹猫','男',18,'123456789012345678','上海','2000-01-01'),
(7,'7','蓝兔','女',18,'123456789012345678','上海','2000-01-01'),
(8,'8','石昊','男',20,'123456789012345678','北京','2000-01-01'),
(9,'9','荒','男',20,'123456789012345678','北京','2000-01-01'),
(10,'10','冰帝蟹','女',20,'123456789012345678','北京','2000-01-01'),
(11,'11','韩立','男',20,'123456789012345678','天津','2000-01-01'),
(12,'12','冯宝宝','女',200,'123456789012345678','四川','2000-01-01'),
(13,'13','张楚岚','男',20,'123456789012345678','河北','2000-01-01'),
(14,'14','徐三','男',20,null,'长沙','2000-01-01');
select * from empployee;
-- 查询基本要求
-- 基本查询
-- 1.查询指定字段 name,worknc,age 返回
select name,worknc,age from empployee;
-- 2.查询所有字段返回
select id, worknc, name, genger, age, idcars, workaddress, entrydate from empployee;
# 尽量不要这样写,不要写 *
select * from empployee;
-- 3.查询所有员工的工作地址,起别名
select workaddress from empployee;
select workaddress as '工作地址' from empployee;
select workaddress '工作地址' from empployee;
-- 4.查询所有员工的上班地址(不要重复)
select distinct workaddress from empployee;
2、DQL - 条件查询
案例:
-- 条件查询
-- 1.查询年龄等于 88 的员工
select * from empployee where age = 88;
-- 2.查询年龄小于 20 的员工信息
select * from empployee where age < 20;
-- 3.查询年龄小于等于 20 的员工信息
select * from empployee where age <= 20;
-- 4,查询没有身份证号的员工信息
select * from empployee where idcars is null;
-- 5.查询有身份证号的员工信息
select * from empployee where not (idcars is null);
select * from empployee where idcars is not null;
-- 6.查询年龄不等于 88 的员工信息
select * from empployee where age != 88;
select * from empployee where age <> 88;
-- 7.查询年龄在 15岁(包含)到 20 岁(包含)之间的员工信息
select * from empployee where age >= 15 && age <= 20;
select * from empployee where age >= 15 and age <= 20;
-- between 最小值 and 最大值
select * from empployee where age between 15 and 20;
-- 8.查询性别为 女 且年龄小于 25 岁的员工信息
select *from empployee where genger = '女' && age < 25;
select *from empployee where genger = '女' and age < 25;
-- 9.查询年龄等于 18 或 20 或 40 的员工信息
select * from empployee where age = 18 || age = 20 || age = 40;
select * from empployee where age = 18 or age = 20 or age = 40;
select * from empployee where age in(18,20,40);
-- 10.查询姓名为两个字的员工信息
select * from empployee where name like '__';
-- 11.查询身份证号最后一位是 X 的员工信息
select * from empployee where idcars like '%X';
3、DQL - 聚合函数
案例:
-- 聚合函数
-- 1.统计该企业员工数量
select count(*) from empployee;
select count(id) from empployee;
-- 2.统计该企业员工的平均年龄
select avg(age) from empployee;
-- 3.统计该企业员工的最大年龄
select max(age) from empployee;
-- 4.统计该企业员工的最小年龄
select min(age) from empployee;
-- 5.统计北京地区员工的年龄之和
select sum(age) from empployee where workaddress = '北京';
4、DQL - 分组查询
案例:
-- 分组查询
-- 1.根据性别分组,统计男性员工 和 女性员工的数量
select genger,count(*) from empployee group by genger;
-- 2.根据性别分组,统计男性员工 和 女性员工的平均年龄
select genger,avg(age) from empployee group by genger;
-- 3.查询年龄小于 45 的员工,并根据工作地址分组,获取员工数量大于等于 3 的工作地址
select workaddress, count(*) from empployee where age < 45 group by workaddress having count(*) >= 3;
select workaddress, count(*) address_count from empployee where age < 45 group by workaddress having address_count >= 3;
5、DQL - 排序查询
案例:
-- 排序查询
-- 1.根据年龄对公司的员工进行升序排序
-- 升序:从小到大
select name,age from empployee order by age asc;
-- 2.根据入职时间,对员工进行降序排序
-- 降序:由大到小
select name,entrydate from empployee order by entrydate desc ;
-- 3.根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序
select name,age,entrydate from empployee order by age asc,entrydate desc ;
6、DQL- 分页查询
案例:
-- 分页查询
-- 1.查询第 1 页员工数据,每页展示 10 条记录
select * from empployee limit 0,10;
select * from empployee limit 10;
-- 2.查询第 2 页员工数据,每页展示 10 条记录 ------> (页码 - 1)* 页展示记录数
select * from empployee limit 10,10;
7、案例
-- 1.查询年龄为 20,21,22,23岁的女性员工信息
select * from empployee where genger = '女' and age in(20,21,22,23);
-- 2.查询性别为 男,并且年龄在 20-40 岁(含)以内的姓名为三个字的员工
select * from empployee where (genger = '男') and (age between 20 and 40 ) and (name like '___');
-- 3.统计员工表中,年龄小于 60 岁的,男性员工 和 女性员工的人数
select genger,count(*) from empployee where age < 60 group by genger;
-- 4.查询所有年龄小于等于 35 岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序
select name,age,entrydate from empployee where age <= 35 order by age asc,entrydate desc;
-- 5.查询性别为男,且年龄在 20-40 岁(含)以内的前 5 个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序
select * from empployee where (genger = '男') and (age between 20 and 40) order by age asc,entrydate asc limit 5;
8、DQL - 执行顺序
什么别名去验证
9、总结
2.6 DCL(数据控制语言)
作用:用来创建数据库用户、控制数据库的访问权限
DCL(Data Control Language)数据控制语言,用来管理数据库用户、控制数据库的访问权限。
1、DCL - 管理用户
2、DCL - 权限控制
三、函数
函数:是指一段可以直接被另一段程序调用的程序或代码。
3.1 字符串函数
-- concat 字符串连接
select concat('Hello',' MySQL');
-- lower 把大写字符转成小写
select lower('Hello');
-- upper 把小写字符转成大写
select upper('Hello');
-- lpad str 左侧填充
select lpad('01',5,'-');
select lpad('01',3,'-');
-- rpad str 右侧填充
select rpad('01',5,'-');
-- trim 去除字符串前后空格
select trim(' Hello MySQL ');
-- substring 截取字符串
select substring('Hello MySQL',1,5);