一、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);