#mysql删除冗余的数据
#https://www.jb51.net/article/116677.htm
DELETE FROM stu WHERE (xh,ke_id)
IN
(SELECT xh,ke_id FROM stu GROUP BY xh,ke_id HAVING COUNT(1)>1)
AND id
NOT IN
(SELECT MIN(id) FEOM stu GROUP BY xh,ke_id HAVING COUNT(1)>1)
#用一条SQL语句 查询出每门课都大于80分的学生姓名
SELECT name FROM 成绩表GROUP BY name HAVING MIN(分数)>80#用一条SQL语句 查询出每门课的平均分都大于80分的学生姓名
SELECT name FROM 成绩表 GROUP BY name HAVING MAIN(分数)>80
1.MySQL数据库 在这里我们就单刀直入,不啰嗦哦~
1.概念
什么是数据库?
数据库佛百六就是,仓库。这里有小伙伴要问了。仓库!我知道!俺家就是送快递的,好几个仓库的!这样说的仓库和数据库有神马相同之处,可以类比?就依这小伙家的仓库做类比吧。仓库里有快递对吧,然后这小伙是负责管理在这个仓库里的快递,这样一来进一步类比,你把快递当作数据,把那小伙当作管理员,埃~搁到一块就是管理仓库。
这就叫数据库!!!!一句话:就是存储、管理数据的仓库!!
外日忒得!!!
1.1数据库的分类
1)关系型数据库:比如Oracle、MySQL、SQLServer
2)非关系型数据库:比如Redis、HBase、MongoDB
1.2数据库
1.MySQL服务端:是处理具体数据维护、保存到磁盘中
2.MySQL客户端:常用操作CRUD就是增删查改
2.1 .DOS窗口和可视化窗口
2.数据库结构 结构:数据库、表
SQL语句
定义:1.结构化查询语句
2.存储数据增删查改
3.管理数据库系统
4.数据库脚本文件的扩展名
5.一种标准的数据库语言
分类:1. DML 数据库的操纵语言。作用:增删查改
2. DDL 数据库定义语言。作用:创建表
3. DCL 数据库操纵语言。作用:grant、deny、revoke,只有管理员才有相应的权限
4. DQL 数据库查询语言。作用:查询
3.数据类型 1.命名规则
1.长度不管超过30
2.不能使用保留字
3.只能使用字母、数字、$、_
4.不区分大小写,习惯全小写
5.多个单词用下滑线隔开
2.字符
1.char()长度撑死2000字符如果不认识这个单词,可以用俺的方式记叫:插,插得时候一定要注意,别插的超过2000)
优点:查询快
缺点:浪费空间
2.varchar()长度撑死4000字符(如果不认识这个单词,可以用俺的方式记叫:我插,插得时候一定要注意,别插的超过4000)
优点:省空间
缺点:查询慢
3. utf-8中的汉字是占用3个字符的
3.数据类型
1.整型:tiny、int
2.小数类型:float、double
3.numberic(A,B) decimal(A,B) ,可以表示小数,A:表示总位数,B:保留的位数
4.日期
1.包含年月日:date
2.时分秒:time
3.年月日时分秒:datetime
4.时间戳:timestamp
5.图片
blod二进制数据,可以存储图片、声音、容量4G
6.字段、行
行就不解释了。。。字段就是 列。。
小伙伴们注意了!!!超级重点来了!!!不想风里来雨里去就好好记!!!
3.数据库常用操作
1.创建数据库:
create database 库名 默认字符集
默认字符集:default character set utf8;
#示例
createdatabaseadefault character set utf8;
强调一下!一定要加英文的分号,要不然不会结束
2.删除数据库:
drop database 库名;
#示例
drop database a;
3.查询所有数据库:
show databases;
#示例
show databases;
3.1表的操作
** 二话不说!上表!下面的示例会用此表ooooo**
文章图片
1.使用数据库: use 库名;
#示例
usehcf;
2.创建表: create table 表名(字段 字段类型(字段长度)…);
#示例
create tablehcf(id int(10),name varchar(20),high dauble(4,1));
3.修改(添加字段)表:alter table 表名 add column 字段名 字段类型(长度);
#示例
alter table hcf add column address varchar(33);
4.删除表:drop table 表名;只删除表里的内容
#示例
drop table hcf;
5.查看所有表:show tables;查看当前数据库中的所有表
#示例
show tables;
6.查看表结构:desc 表名;
#示例
desc hcf;
3.2表记录操作
1… 插入记录:insert into 表名 values (A); A:表示要和当前表中数据类型的位置对应,不可乱插哦
#示例
insert into hcf values(1000,’allow',185.5);
2.查询记录:select * from 表名;
#示例
select * from hcf;
3.修改记录:update 表名 set 字段名=新值;
#示例
update hcf set id=1001;
4.删除记录: delete from 表名;
#示例
delete from hcf;
3.3.字段约束
1.主键约束:primary key
特点:数据唯一性,非空性
#示例:
createtablehcf(id int(10) primary key;
1.1:主键自增策略 :primary key auto_increment
特点:1.可以按顺序自动递增。2.被删除的行不能再使用,只能按顺序添加
#示例
create table hcf(id int(10) )primary keyauto_increment;
2.非空性:not null
特点:数据不能为空
#示例
create table hcf(name varchar(20))not null;
3.唯一约束:unique
特点:数据不可以重复
#示例
create table hcf(id inta(10)) unique;
4.函数
- lower(字段) 数据转小写
#示例
selectname, lower(name) fromhcf;
2.upper(字段) 数据转大写
#示例
select name,upper(name) from hcf;
3.length(字段) 数据长度
#示例
select length(name) from hcf;
4.sudstr(字段,A,B) 截取数据。A:开始截的位置。B:要截取的长度
#示例
selectname , substr(name,1,3) from hcf;
5.concat(字段,A) 末尾拼接数据。A:要拼接的内容
#示例
select name,concat(name,love) from hcf;
6.replace(字段,A,B) 数据替换。 A:字段里的数据会被B替换。B:所要替换的内容。
#示例
selectname,replace(name,'w','acb') from hcf;
7.ifnull(字段,A) 为空替换。A:要替换的内容
#示例
select ifnull(name,'super') from hcf;
8.round(字段) 四舍五入
#示例
select high,round(high) from hcf;
9.ceil 向上取整
#示例
select high,ceil(high) from hcf;
10.floor 向下取整
#示例
select high ,floor(high) from hcf;
5.条件查询函数
- distinct 去除重复记录
#示例
select distinct name from hcf;
2.where 过滤记录。
#示例
select * from hcf where id=1000;
#过滤id为1000的
select * from hcf where id=1000 and name='allow';
#过滤id为1000,name为allow的,必须全满足。
select * from hcf where id=1000 or name='allows';
#过滤id为1000,name为allows的,满足一个即可。
select name,id from hcf where name in('allow',1000);
select name,id from hcf where name not in('allow',1000);
3.like 模糊查询 (以后再给小姐姐表白不要这么洋气了,说中文多好直抒胸臆。要不然小姐姐又要揣摩你的心意了,女生的心理男人不懂啊哈哈哈哈哈哈)
通配符:1. % 代表0到n个字符;2. 下划线_ 代表一个字符
#示例
select * from hcf wherename like 'o%';
#查询以o开头的
select * from hcf where name like '%o';
#查询以o结尾的
select * from hcf where name like '%o%';
#查询o在中间的
select * from hcf where name like ‘a__';
#查询共三个字符并以a开头的(这里有两个下划线)
4.null 过滤null字段的值
#示例
select * from hcf where name is null;#过滤掉字段值为空的
select * from hcf where name not null;#过滤掉字段值不为空的
5.limit A 查看条数。A:想查看几条。
limit A,B ; A:从n+1开始展示。B:总共展示几行
#示例
select * from hcf limit 3;
#查看3条
select * from hcf limit 1,2;
# 从第二条开始展示,共展示两行
6.order by 升排排列
order by 字段 desc 降序排列
扩展:1.字母按字母顺序排列。2.数字递增排列。3.汉字按utf-8的码表顺序排列
#示例
select * from hcf order by id;
#升序
select * from hcf order by name desc;
#降序
6.聚合函数 概述:求出字段中的最大值max(字段)、最小值min(字段)、平均值avg(字段)、求和sum(字段)、求个数count(字段\1*)
在这里就一起写了!!!!
#示例
select max(high) from hcf;
#最大值
select min(high) from hcf ;
#最小值
select avg(high) from hcf ;
#平均值
select sum(high) from hcf ;
#求和
#count()有三种方式
select count(*) from hcf;
#底层优化过
select count(1) from hcf ;
#和*效果一样
select count(id) from hcf;
#效率不高哦,只统计非NULL的,存在误差
文章图片
7.分组函数 1.group by 分组 语法:select 字段 A,max(字段B),avg(字段C) from 表名A group by 字段A;
解释:求出表名A的字段B和字段C的最大值与平均值,以字段A分组输出
2.having 过滤 语法:select 字段A,avg(字段B) from 表名A group by 字段A having avg(字段B)<100;
解释:求出表名A中的字段B的平均值并以字段A分组,然后判断输出平均值小于100的值
示例:
select high,avg(high)fromhcf
groupby high;
selecthigh,avg(high) from hcf
group by high
havingavg(high)>150;
8.事务 transaction 1.概述:单个逻辑工作单位执行的一系列 操作,要么全执行,要么全不执行
2.四大特性ACID:
1)原子性:所有的事务中要么全执行成功,要么全失败.
2)一致性:在各个程序中都能保持数据都是一样的
3)持久性:通过事务可以永久存到数据库中
4)隔离性:在高并发的情况下用户之间的操作互不影响
3.隔离级别
1)读未提交:安全性差,可能发生数据问题,性能最好
2)读已提交:Oracle默认的隔离级别
3)可读重复性:MySQL默认隔离级别,安全性较好,性能一般
4)串行化:表级锁,效率低,安全性高,能并发
4.MySQL的隔离级别
1)开启事务:start transaction
2)结束事务:
1.commit :提交事务 多条SQL语句做的影响会持久到数据库中
2.rollback:回滚事务 多条SQL语句做的操作都将被撤销
5.事务处理
1)可以维护数据的完整性
2)MySQL默认数据库的事务是开启的,执行后自动提交
3)手动提交:先开启,写完SQL后,再手动提交
4)使用innodb数据库引擎的数据库或表才支持事务
6. commit/rollback
begin; 语句;
commit/rollback
语句可以进行多条事务处理
7.外键约束 foreign key references
1.语法:foreign key(当前表主键) references 对方表名(对方主键);
tip:外键在哪里创建,哪里就是当前表
2.外键约束效果
1)子表的ID必须取自主表的ID
2)想要删除主表中的数据,必须先要删除子表中的数据
8.默认约束default : 值 字段类型() default 值
9.检查约束check : check(判断条件)
9.SQL优化 【MySQL|MySQL数据库:入门必备基础更新了哦~~~】查询要用字段代替 *
避免在where子句中使用or来连接条件:使用or可能会造成索引失效,扫描全表
使用varchar代替char:varchar可变储节省空间,char声明储存大小,不足用空格补充
尽量使用数字代替字符串类型
查询尽量避免返回大量数据
使用explain分析SQL执行计划
创建字段索引
避免在where中对字段进行表达式操作
避免在where子句中使用!= 或 <>操作符
去重是过滤的字段尽量减少
where中使用默认值代替null
推荐阅读
- MySQL|6000字总结MySQL最基础的增删查改命令
- mysql|搭建SSM框架并实现增删查改功能
- 面试题|分布式事务面试题 (史上最全、持续更新、吐血推荐)
- vue.js|学生信息管理 vue+Element UI+springboot 前后端分离
- linux|linux系统下安装并配置canal
- Java毕业设计项目实战篇|Java项目:网上花店商城系统(java+jsp+servlert+mysql+ajax)
- Java毕业设计项目实战篇|Java项目:在线点餐系统(java+Springboot+Maven+mybatis+Vue+mysql+Redis)
- 数据库|数据库 | MySQL Workbench创建数据库并使用JDBC连接数据库
- MySQL数据库|MySQL数据库 --- Java的JDBC编程