概述
DB中的表(类)、字段(属性)、函数(方法)、记录(对象)。
关系型DB:存放实体与实体之间关系的DB
非关系型DB:存放的是对象(redisNO-sql)
分类:定义DDL、操作DML、控制DCL、查询DQL
字符尽量使用单引号。
innodb引擎:支撑数据库运行的核心代码区
MySQL中的数据类型
Java数据类型和MySql数据类型对应表
mysql没有布尔类型,boolean默认为tinyint(小整数)类型。
BLOB 类型区分大小写.
舍弃空间,保性能。开发过程中优先使用char.
集合:likes SET('AUGA3', 'AKM', 'M4A1', 'Kar98k')用二进制调用
INSERT INTO testSet(likes) VALUES(7);
INSERT INTO testSet(likes) VALUES(15);
主键使用条件:非空+唯一
基本指令
show database DB名;
drop database DB名;
查看表结构:desc 表名;
查看正在使用的DB:select database();
修改密码:mysqladmin -u用户名 -p旧密码 password 新密码
CRUD
插入到哪,从哪删除,修改表格,从哪查找。
增
创建表:create table sort(id int,username varchar );
增列:alter table 表名 add 列名 类型(长度) 约束;
第一个位置添加可加first,指定之后可加after。
增行:insert into 表名(列名1,列名2...) value (列值1,列值2...);
删
删列:alter table 表名 drop 列名
删行:delete/truncate from 表名 where 条件;
delete、truncate和drop的区别:
DROP用于删除表,数据库等.
TRUNCATE和DELETE都是删除表数据.
delete from 表名;
truncate table 表名;
delete一条一条的删,主键不清空;DML
truncate一次性删除,主键清零;DDL
改
改列名:alter table 表名 change 旧列名 新列名 类型 约束;
改类型:alter table 表名 modify 列名 类型 约束;
改表名:rename table 旧表名 to 新表名;
改行:update 表名 set 字段名=字段值 where 条件;
***查
查所有列:select * from 表名;
查指定列:select 列名 from 表名;
去除重复记录:select distinct 列名 from 表名;
设置别名:select * from 表名 as 别名;
select ... from 表名 where 条件 group by 按 分组 order by age ase|desc按age升降序
约束
主键自动增长:id int primary key auto_increment;
查询
类型
where 条件 group by:分组 order by:排序 like:模糊 limit:分页
聚合函数
忽略null值,对一列进行运算
统计n条记录:select count(*) from products;
count参数一般为*
sum(),avg(),max(),min(),count();
round(avg(price),2):四舍五入保留两位
【注意】不推荐使用,会降低执行效率,一般获取到数据,通过Java代码进行操作。
group by分组
group需与统计函数一起使用,注意函数与括号之间不能有空格。
看到每就是分组
模糊查询
"龙" 值为龙
"龙%" 值以"龙"开头
"%龙" 值以"龙"结尾
"%龙%" 值包含"龙"
"_"查询含有一个字符的内容
如果a是%,则需要转义: %
分页查询
limit m,n:m表示从哪开始,n表示展示几条数据
查询第4到第6条数据
limit 3,5 == limit 5 offset 3
limit 1:默认省略m=0,表示查询第一条数据
offset表示偏移量
子查询
一个查询语句中嵌套另一个查询语句
where子查询
查询价格最高的商品信息
select good_info from good where(select max(price) from good)
注意事项
subselect中不包含order by,一个select中只能有一个order by且在主select中
子查询必须放括号中,且放右边增强可读性
联表查询
笛卡尔积:交叉相乘(a,b) (c,d) ac ad bc bd
左外联查询:db1 left outer join db2 on 1.id=2.id
左外联等于左联
左边所有记录全部查询
内联查询:inner join on
共有的记录
SELECT * FROM USER u,role r WHERE u.id
=r.uid
也为内联
右外联查询:right outer join on
右边所有记录全部查询
作用:可以将多张表信息全查询出来
全连接
union
union用于合并两个结果集并消除重复行
语法
SELECT * FROM USER u,role r WHERE u.id
=r.uid
union all
union all不消除重复行
语法
SELECT * FROM USER u,role r WHERE u.id
=r.uid
条件语句where
条件语句having
where和having的区别
WHERE的查询速度要比HAVING的查询速度快
where 语句中不能使用聚合函数,having可以
where放在group by之前,having放在group by之后
DOS中乱码
在mysql安装目录下有my.ini文件
default-character-set=gbk 客户端编码设置
character-set-server=utf8 服务器端编码设置
注意事项
要注意别名:select price+10 新价格 from products;as可以省略
设计主外键关联时要把外键设置成casecade,这样删除王一的同时对应的、从表中的记录也一并删除
外键在开发中不建议使用,因为消耗数据库的性能。
group by一般来说不自己单独使用,而是和聚合函数配合使用
一个复杂的正确的sql,可以慢慢调试,通过不断的尝试修改完成最终的sql语句
常见关系
一对一. 丈夫和妻子
一对多. 用户和订单 分类和商品
多对多. 订单和商品 学生和课程