MySQL数据库

概述

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语句

常见关系

一对一. 丈夫和妻子

一对多. 用户和订单 分类和商品

多对多. 订单和商品 学生和课程

你可能感兴趣的:(MySQL数据库)