什么是mysql? database 数据仓库
DBNS 数据库管理系统 数据库通过这个创建和操作系统
SQL管理数据库语音
数据库管理系统。数据库是关系型
使用内核线程完全多线程,可以轻松使用多个CPU
每个表最多支持64个索引。每个索引可以包含1到16列或部分列。
数据库储存数据的特点:1需要将数据放在表里,在把表放在库里。
2 表示有特性的
3必须有返回值,sql语句
my.ni修改配置的地方
mysql启动 : net start mysql net stop mysql
怎么看库: show databases;
怎么看表;show tables;
show tables from 库民;看库里面的表
查看版本 select version(); mysql -V
insert 表名(id,name) into value(15,"dsad");
查看表结构: desc 表名
注释:-- 空格 或者是# 多行注释 / /
数据库中这个表示这是个列名,不是关键字
格式化F12
起别名 select 100*98 as 结果;
1 select name as 性,select age as 年龄 from 表名;
as起别名。去重重名。如果别名有特殊符号,如out #put,就加上"out # put".
2 去重 select distinct age as 年龄 from 表名;
不能有两个去重的东西,只能有一个列名
3 + 的作用 查询员和性连接成一个字段,并显示为姓名。
+号会把字符型转化成数值,成功就做加法运算。失败就变0.只要一方为null,结果就是null。
comcat中间有逗号隔开
拼接表名的写法: select concat(name,age) as 我多大了 from user;
注意字段中有一方为null,和任意字段结果都是null。有null和不为null,怎么办?
select concat(name,ifnull(age,0)as 我多大了 from user;
还有一个isnull,如果是0就是显示为1
字符型必须用单引号如a
.
4 模糊查询 %多个字符 _一个字符
select name from user where name like%a
;
select name from user where name like a___i_
;
查名字第一个为a,第五个为i的员工名
如果查询里面有下滑线的_,进行转义
select name from user where name likea/_
;
第二位数就是_这个。使用转义字符 escape 单引号
把年薪不存在的用别名表示
select , salary12(1+ifnull(commission,0)) as 年薪 from employess order by 年薪;
按姓名的长度进行排序
select length(name) 名字长度
,name,id ,age from user order by 名字长度。
排序的话,会遇到两个一样的数值,怎么按规定排序,不规定即是默认。直接在后面加
select length(name)as 名字长度,id,name,age from user order
by 名字长度,id;名字长度一样按升序排序
11数据库的一个汉字占3个字节,一个字母一个字节
length就是获取字节长度为几
12 substr截取 索引从1开始
select substr('阿珍爱上了啊强',2) 牛啊; 结果:珍爱上了啊强
select substr('阿珍爱上了啊强',2,3
) 牛啊; 结果:珍
如果是等于,可以把salary提取case的后面 就是2000then A
22分组函数
sum
select sum(age) from user
select avg(age) from user
select min(age) from user
select max(age) from user
select count(age) from user
SELECT SUM(age),AVG(age),MIN(age),MAX(age),COUNT(age) FROM user
可以保留小数,round
SELECT SUM(age),ROUND(AVG(age),2),MIN(age),MAX(age),COUNT(age) FROM user
sum avg 处理数值型
min max cound 可以任何类型
全部忽略null值
都distinct搭配,
23 分组查询
如果两个表都有这个列名,name就需要其别名
24 非等值连接
案例 查询出员工的工资和工资级别
用between and
22 自连接:自己一张表里面:
1查询员工名和上级名次
23语法 : select 查询列表
from 表1 别名 【连接类型】
join 表2 别名
on 连接条件
【where 筛选条件】
【group by 分组】
【having 筛选条件】
【order by 排序列表】
![image.png](/img/bVcHWFr)
![image.png](/img/bVcHWFv)
内连接 inner
左外 left
右外 right
交叉cross
非等值连接:between on
23子查询
出现在其他语句内部的select语句,称为子查询,或者内查询
按结果集的行列数不同
单行子查询 结果集只有一行一列,子查询只支持这种
列子查询,只有一列多行
行子查询 一行多列
表子查询 多行多列
24 分页查询
当现实的数据一页现实不全,需要分页提交请求
查询第11条到25条。 从第几条开始,索引是有0的,后面要显示几条
select * from user limit 11-1,25-(11-1)
如果是分页 page的时候
limit (page-1)*size,size
25 联合查询 union 查询部门编号大于90
查询的结果来自于多个表,而表之间是没有关系的
union会自动去重 变union all 会去重
乐观锁,数据库查询之前加个字段,之后加个字段,
28 删除 自增不需要'',直接写1,其他要单引号
1单表
29 DDL 数据对应语音对数据表,库的操作
创建库: create database user;
create database if not exists user;
Alter database user character set utf-8设置字符集
drop user if exists user;
30表的修改 都的加column
列的操作
1 修改列名
Alter table 表名 change 列名 新列名 类型(可以改,或者原来的,必须写)
2 修改列队的约束或者类型
Alter table 表名 modify 改的列名 改的类型
3 添加新列
Alter table 表名 add 新列名
4删除列
Alter table 表名 drop 列名
5 修改表名
Alter table 表名 rename to 新表名
删除表 drop table 表名
6 复制表的结构 create table cope like 已经在的表
30数据库的类型
date 只到日 datetime到秒 timestamp差不多
31JDK1.8日期新特性
localDatetime用的比较多
32 SQL性能下降的原因:
1 查询语句写的烂,各种子查询,建了索引,没建立索引
join少一点
2 索引失效: 建了没用。
单值索引:create index 建索引,比如name
比如买东西,品牌就会建立成索引。
复合索引:
3关联查询太多join
SQL执行顺序:手写:select
机读:from开始读
4服务器调优及各个参数设置