什么是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 单引号
5 between and
select age from user where age between 20 and 30;
这个是包含20和30的,顺序不能换。
6 使用in,判断某字段的值,是否符合某一字段。列表的值必须统一
select age from user where age in(18
,22
,26
)
7 查询名字为空的或者没有名字的员工年龄.is not null
select age from user where name is null;
8 <>就是等于的意思,可以代替7里的is
select name from where age <> 10;找年纪不为10岁的名字
9 注意如果问的是有哪些编号,记得要去重!!distinct
10排序查询 处理limit 就是这个在最后面
select * from user order by age desc;从高到低排序,降序
select name,age order by age asc;从低到高排序,升序。默认
查询id>10的名字,要求按年龄大小排序
SELECT name
,id,age FROM USER WHERE id>10 ORDER BY age; 如果查询工信息和年薪,按年薪高低进行排序。年薪不在表格里
把年薪不存在的用别名表示
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
) 牛啊; 结果:珍
13 instr 出现索引的第一次的位置,找不到就为0;
SELECT INSTR('阿珍爱上了阿强','爱上了') ;
显示为3
14 trim去除空格,只能去除前后,不能去除中间
SELECT TRIM('aa' FROM 'aaa阿森aaaaa') 这个只能去除aa,不是去除a。
15 lpad 左填充
select lpad('我牛批无敌',8,'$');显示 我牛批无敌$$$
16 rpad 右边填充
17 replace 替换
select replace('我无敌牛批','无敌牛批','菜鸡真菜');
我菜鸡真菜
18 round 四舍五入
select round(2.369,2)小数点后取几位,2.36
19 时间函数 str_to_date -这个可以变/区别就是会加上0
y一定要大写!! 第二个后面的%可自己去定义。
如果日期格式不是常规的模式,要找到特定的入职时间
20date formact 用年月日的写法
select date_formact('1998-4-3','%Y年%m月%d日')
21 case 多重设定
select 显示的东西 case 工资 when 30 then 工资*1.1
when 40 then 1.2 end from 表名
如果是等于,可以把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搭配,
count可以统计行数
myisam count速度最快
innodb count*和count(1)差不多 一般不用count加字段
因为查询出来基本上是一行,所有注意不能再查询一排,对应表格的格式
最大入职时间和最小入职时间的相差天数
23 分组查询
分解出来写,在合上去,看原有表里面有没有
有就放在where那里
分组查询可以分为两类: 主要根据数据,一个是数据表里已经有的,一个是通过自己的函数创造出来的
分组前: 放在group by 前面 where后面
以及分组后: 在having 后面
多表查询的时候,起了别名,查询的字段就不能用表名了
加查询条件用and,奖金不为0.
如果两个表都有这个列名,name就需要其别名
24 非等值连接
案例 查询出员工的工资和工资级别
用between and
22 自连接:自己一张表里面:
1查询员工名和上级名次
23语法 : select 查询列表
from 表1 别名 【连接类型】
join 表2 别名
on 连接条件
【where 筛选条件】
【group by 分组】
【having 筛选条件】
【order by 排序列表】


内连接 inner
左外 left
右外 right
交叉cross
非等值连接:between on
外连接
一样的只有部分,分主从表
特点:以主表为主
主表中有匹配的,则显示配的值,没有就显示null
外查询的结果=内连接结果+主表中有而从表中没有的记录
左外 左边主表 left
选谁为主表,看最终显示的信息。
后面的查询信息,所添加的条件不需要看前面要求。最好用从表的主键,也没事
select 需要查看的字段 from 主表
left join 从表表 on 连接条件 where 连接完成之后显示的数据,还需要进行的筛选
23子查询
出现在其他语句内部的select语句,称为子查询,或者内查询
按结果集的行列数不同
单行子查询 结果集只有一行一列,子查询只支持这种
列子查询,只有一列多行
行子查询 一行多列
表子查询 多行多列
子查询是优先于主查询进行的,因为主查询要利用子查询的结果
注意子查询只能一条数据!!!!><=
24 分页查询
当现实的数据一页现实不全,需要分页提交请求
最后使用limit offset,size。
查询第11条到25条。 从第几条开始,索引是有0的,后面要显示几条
select * from user limit 11-1,25-(11-1)
如果是分页 page的时候
limit (page-1)*size,size
25 联合查询 union 查询部门编号大于90
查询的结果来自于多个表,而表之间是没有关系的
查询多条列数必须是一致的
union会自动去重 变union all 会去重
26 insert
批量插入
乐观锁,数据库查询之前加个字段,之后加个字段,
27 修改语句
1 修改单表
2 修改多表
28 删除 自增不需要'',直接写1,其他要单引号
1单表
2多表 delete 第一个跟的是要删除的数据那张表
3 使用delete删除如果是自增的,删除了5条,往里面加入,从6开始
delete删除可以回滚
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 已经在的表
只复制部分数据
create table cope cope4 select id ,name where nation="条件"
30数据库的类型
设置无符号 加 unsigned 这个意思就是无符号了
设置了无符号,如果超出范围,显示临界值,比如int 设置了,
加个负数则显示为0
浮点型 设置float 后,小数点后保留几位。而前面那个数表示整个长度不能超过5位。 double随便插
char 表示的是固定的字符
varchar 表示的是可变的字符
如果 char(10) varchar(10)都插入中国两个字,2个字符
char还是开10个长度(效率高,耗时),varchar只会开2个长度
char有默认值,可以不用设置
只能插入一个数,有范围
31日期
date 只到日 datetime到秒 timestamp差不多
31JDK1.8日期新特性
localDatetime用的比较多
localdatetime没有偏移量,直接设置就行
32 SQL性能下降的原因:
1 查询语句写的烂,各种子查询,建了索引,没建立索引
join少一点
2 索引失效: 建了没用。
单值索引:create index 建索引,比如name
比如买东西,品牌就会建立成索引。
复合索引:
3关联查询太多join
SQL执行顺序:手写:select
机读:from开始读
4服务器调优及各个参数设置
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。