- 博客主页:誓则盟约
- 系列专栏:Java Web
- 关注博主,后期持续更新系列文章
- 如果有错误感谢请大家批评指出,及时修改
- 感谢大家点赞👍收藏⭐评论✍
MySQL笔记:
一、注释:
- 单行注释: -- 注释 或者 # 注释
- 多行注释:/* 注释 */
- SQL语句中的关键字不区分大小写。
- SQL语句可以单行/多行书写,以分号结束。
二、SQL四大类:
**需求+原型 -> 设计(概要设计,详细设计,接口设计,数据库设计)-> 数据库 -> 数据库操作 -> 数据库优化**
三、数据类型:
数值类型:
tinyint: 1个字节,小整数值 0-255
smallint:大整数值 0-65535
int:4个字节 大整数值
bigint:8个字节,极大整数值,0-264-1**
float:4字节,单精度浮点数值,float(5,2):5表示整个数字长度,2表示小数位个数
double:8字节,双进度浮点数值,double(5,2)
字符串类型:
** char:0-255字节,定长字符串**
** varchar:0-65535字节,变长字符串**
** 定长和变长区别:**
**char(10): 最多只能存储10个字符,不足10个字符,占用10个字符空间,超过就报错。 性能高,浪费空间。**
** varchar(10): 最多只能存储10个字符,按照实际长度存储,超过报错。 性能低,节省空间。**
日期类型:
** date:3字节,YYYY-MM-DD,日期值,不显示时间。**
** time:3字节,HH:MM:SS,时间值或持续时间。**
** datetime:8字节,YYYY-MM-DD HH:MM:SS,混合日期和时间值。**
四、约束:
** 约束:作用于表中字段上的规则,用于限制存储在表中的数据。**
非空约束:限制该字段值不能为null , not null
** 唯一约束:保证字段的所有数据都是唯一、不重复的 , unique**
** 主键约束:主键是一行数据的唯一标识,要求非空并且唯一 , primary key**
** 默认约束:保存数据时,如果未指定该字段值,则采用默认值 , default**
外键约束: 让两张表的数据建立连接,保证数据的一致性和完整性 , foreign key
** auto_increment:自动增长 从1开始**
** 常用约束类型:非空、唯一、主键、默认、外键。**
DDL:数据定义语言
一、常用DDL数据库操作语句:
show databases; 显示所有数据库
show tables; 显示该数据库内的所有表
create database [name]; 创建一个名为name的数据库
create database if not exists db01; 创建一个名字为 db01 的数据库(前提是该数据库创建前不存在)
use [name]; 切换为名字为 name 的数据库
select database(); 查询当前正在使用的数据库。
drop database [name]; 删除某个数据库
drop database if exists db01; 如果db01存在再删除,不存在不执行操作。不会报错。
二、常用DDL表结构操作语句:
查看表结构:
查看当前数据库下的表: show tables;
** 查看指定表结构: desc tb_emp;**
** 查看数据库的建表语句: show create table tb_emp;**
修改表结构:
** 1.为表 tb_emp 添加字段 qq varchar(11)**
** alter table tb_emp add qq varchar(11) comment 'QQ';**
** 2.修改 tb_emp 字段类型 qq varchar(13)**
** alter table tb_emp modify qq varchar(13) comment 'QQ';**
** 3.修改 tb_emp 字段名 qq 为 qq_num varchar(13)**
** alter table tb_emp change qq qq_num varchar(13) comment 'QQ';**
** 4.删除 tb_emp 的 qq_num 字段**
** alter table tb_emp drop column qq_num;**
** 5.将 tb_emp 表名修改为 emp**
** rename table tb_emp to emp;**
删除表结构:
删除 tb_emp 表:
** drop table if exists tb_emp;**
创建表结构:
create table 表名(
** 字段1 字段类型 [约束] [comment 字段1注释],**
** ........**
** 字段2 字段类型 [约束] [comment 字段2注释]**
)[comment 表注释];
注:上述所有的 database 都可以被等价替换成 schema
DML:数据操作语言
一、常用DML关键字
添加数据: insert
** 语法: insert into 表名(字段列表) values(字段值列表);**
例1:
- 为 tb_emp 表的 username,name,gender 字段插入值
insert into tb_emp(username,name,gender,create_time,update_time) values ('wuji','张无极',1,now(),now());
例2:
- 为 tb_emp 表的所有字段插入值
insert into tb_emp(id, username, password, name, gender, image, job, entry_date, create_time, update_time) values (null,'zhiruo','123','周芷若',2,'1.jpg',1,'2010-01-01',now(),now());
insert into tb_emp values (null,'zhiruo2','123','周芷若',2,'1.jpg',1,'2010-01-01',now(),now());
例3:
- 批量为 tb_emp 表的 username,name,gender 字段插入数据
insert into tb_emp(username,name,gender,create_time,update_time) values
('wang','王',1,now(),now()),
('li','李',1,now(),now()); **-- 以逗号分隔:**
更新数据:update
语法:update 表名 set 字段1 = 值1,字段2 = 值2,......[where 条件];
例1:
- 将 tb_emp 表的ID为1的员工 姓名name字段更新为 '张三'
update tb_emp set name = '张三',update_time=now() where id=1;
例2:
- 将 tb_emp 表的所有员工的入职日期更新为 '2010-01-01'
update tb_emp set entry_date='2010-01-01',update_time=now(); 不需要 where限制条件了
删除数据:delete
语法: delete from 表名 [where 条件];
例1:
1.删除 tb_emp 表中 ID为1的员工
语句:delete from tb_emp where id=1;
例2:
2.删除整张表的数据
delete from tb_emp;
DQL:数据查询语言
一、DQL的基本查询语句
-- 1. 查询指定字段 name,entrydate 并返回
-- 查询多个字段:****select 字段1,字段2,字段3 from 表名;
语法:select name,entrydate from tb_emp;
-- 2.查询所有字段(通配符):select * from 表名;
-- 查询所有字段:****select * from 表名:
语法:select * from tb_emp; -- 不推荐 不直观,性能低 更推荐全部写出来的那种
-- 3. 查询所有员工的 name,entrydate,并起别名(姓名,入职日期)
-- 设置别名:select 字段1 [as 别名1],字段2 [as 别名2] from 表名;
**select tb_emp.name as 姓名 , tb_emp.entrydate as 入职日期 from tb_emp; **
-- 注:如果别名里面有空格,可以加上引号 当做一个整体 这里的as 可以省略
-- 4. 查询已有的员工关联了哪几种职位(不要重复) distinct 关键字
-- 去除重复记录:****select distinct 字段列表 from 表名;
select distinct job from tb_emp;
二、DQL的条件查询语句
-- 1. 查询 姓名 为 杨逍 的员工
select * from tb_emp where name = '杨逍';
-- 2. 查询 id小于等于5 的员工信息
select * from tb_emp where id<=5;
-- 3. 查询 没有分配职位的员工信息
select * from tb_emp where job is null; -- 查询字段为空的信息不要用 ==null 而是用 is null
-- 4. 查询有职位的员工信息
select * from tb_emp where job is not null;
-- 5. 查询 密码不等于 ’123456‘ 的员工信息
select * from tb_emp where password != '123456'; -- 不等于: != 和 <> 都可以
-- 6. 查询 入职日期 在 ’2000-01-01‘ 到 ’2010-01-01‘ 之间的员工信息
select * from tb_emp where entrydate between '200001-01' and '2010-01-01'; -- 左闭右闭
-- 7. 查询 入职时间 在 ’2000-01-01‘ 到 ’2010-01-01‘ 之间 并且 性别为 女 的员工信息
**select * from tb_emp where entrydate between '200001-01' and '2010-01-01' and gender=2; **
-- and 可以替换为 &&
-- 8. 查询 职位是2,3,4 的员工信息
select * from tb_emp where job =2 or job =3 or job =4;
select * from tb_emp where job in (2,3,4); -- in 多选一
-- 9. 查询姓名是两个字的员工信息
select * from tb_emp where name like '_'; -- like 模糊匹配 _ 匹配单个字符,%匹配任意个字符 名字是两个字就是两个
-- 10. 查询姓张的员工
select * from tb_emp where name like '张%';
三、DQL的分组查询语句
-- 1.聚合函数count()
-- 1.统计该企业员工数量 -- count
-- A. count(字段)
select count(id) from tb_emp;
select count(tb_emp.username) from tb_emp;
select count(job) from tb_emp; -- 对于null 不做统计
-- B. count(*)
select count(*) from tb_emp;
-- 2.求最小值 -- min()
-- 统计该企业最早入职的员工:
select min(tb_emp.entrydate) from tb_emp;
select max(tb_emp.entrydate) from tb_emp;
-- 3. 求平均值 --avg()
select avg(id) from tb_emp;
-- 4. 求和 --sum()
select sum(id) from tb_emp;
四、DQL的分组查询语句
分组查询语法:
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
-- 1.根据性别分组,统计男性和女性员工的数量 -count(*)
select tb_emp.gender,count(*) from tb_emp group by gender;
-- 2. 先查询入职时间在 '2015-01-01'(包含)以前的员工,并对结果根据职位分组,获取员工数量大于等于2的职位
select job,count(*) from tb_emp where entrydate <= '2015-01-01' group by job having count(*)>=2;
-- 分组之后的过滤 不要写在where后面 要在最后加上having关键字
注:where 和 having 区别
** 1. 执行时机不同:where是分组之前进行过滤,不满足where条件的不参与分组;而having是分组之后对结果进行过滤;**
** 2. 判断条件不同:where不能对聚合函数进行判断,而having可以。**
注意事项:
- ** 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。**
- ** 执行顺序:where > 聚合函数 > having**
五、DQL的排序查询语句
排序查询语法:
select 字段列表 from 表名 [where 条件] [ group by ] order by 字段1 排序方式1,字段2 排序方式2...;
-- 排序方式:ASC:升序(默认值) DESC:降序
-- 1. 根据入职时间,对员工进行升序排序 -asc
select * from tb_emp order by entrydate asc; -- asc可省略
select * from tb_emp order by entrydate desc;
-- 2. 根据 入职时间 对员工进行 升序排序 入职时间相同的按照 更新时间 进行降序排序
select * from tb_emp order by entrydate , update_time desc ;
六、DQL的分页查询语句
-- 分页查询语法:
select 字段列表 from 表名 limit 起始索引,查询记录数;
-- 1. 从 起始索引 为0开始查询员工数据,每页展示5条记录
select * from tb_emp limit 0,5;
-- 2. 查询第一页的5条数据
select * from tb_emp limit 0,5;
-- 3. 查询第二页的5条数据
select * from tb_emp limit 5,5; -- 索引从0开始
-- 流程控制函数 if(条件表达式,true取值,false取值)
-- 流程控制函数 case 表达式语法:
when 值1 then 结果1 when 值2 then 结果2 ... else ... end
未完待续...
“若以色见我,以音声求我,是人行邪道,不能见如来。”——《金刚经》
版权归原作者 誓则盟约 所有, 如有侵权,请联系我们删除。