数据库存储数据的特点
1.将数据放到表中,表再放到库中。
2.一个数据库中可以有多个表,每个表都有一个唯一的名字,用来标识自己,表明具有唯一性
3.表具有一些特性,这些热性定义了数据在表中如何存储,类似java中“类”的设计。
4.表由列组成,我们也称为字段。所有表都是由一个或多个列组成的,每一列类似java中的“属性”
5.表中的数据是按行存储的,每一行类似于java中的对象。
MySQL服务的启动和停止
方式一:计算机-右击管理-服务
方式二:通过管理员身份运行
net start 服务名(启动服务)
net stop 服务名(停止服务)
MySQL服务的登录和退出
方式一:通过mysql自带的客户端
只限于root用户
方式二:通过window自带的客户端
登录: mysql【- h主机名 -P端口号】 -u用户名 -p密码
退出:exit或Ctrl+c
select
特点:
1.查询列表可以是:表中的字段、常量值、表达式、函数
2.查询的结果是一个虚拟的表格
给列起别名:
方式一:使用AS
如果别名中有特殊符号
去重:DISTINCT
“+”的作用:
concat连接字段名:
DESC 表名:查看表结构。
IFNULL:如果为空:
LIKE:模糊查询,,有特殊符号,需要自定义转义符(escape)
between and:
1.可以提高语句的简洁度
2.包含临界值
3.两个临界值不可以调换顺序
in:判断某字段的值是否属于in列表中的某一项
特点:
1.使用in提高语句简洁度
2.in列表的值类型必须一致或兼容
‘123’ 123
IS NULL:
=<>不能用于判断null值
is null 或者 is not null 可以判断null值
IS NULL VS <=>:
IS NULL:仅仅可以判断NULL值,可读性较高,建议使用
<=> :既可以判断NULL,又可以判断普通的数值,可读性较差。
order by:按照某字段排序
常见函数:将一组逻辑语句封装到方法体中,对外暴露方法名
好处:1、隐藏了实现细节。2、提高代码的重用性
调用:select 函数名(实参列表) 【from 表】;
分类:单行函数:如 concat、length、ifnull等
2、分组函数
功能:做统计使用
upper&&lower
substr&&substring
注意:索引从1开始
instr:返回子串第一次出现的索引,如果找不到返回0
trim:去掉字符串前和字符串后的空格或指定字符
lpad:用指定的字符实现左填充指定长度
rpad:用指定的字符实现右填充指定长度
replace:替换
数学函数:
round:四舍五入
ceil:向上取整,返回>=该参数的最小整数
floor:向下取整,返回<=该参数的最大整数
truncate:截断
mod:取余
日期函数:
now:返回当前系统日期+时间
curdate:返回当前系统日期,不包含时间
curtime:返回当前时间,不包含日期
str_to_date 将字符通过指定的格式转换成日期
流程控制函数:
if函数:if else 的效果
case的两种用法:
count函数详细介绍:
特点:
sum、avg一般用于处理数值型
max、min、count可以处理任何类型
2、以上分组函数都忽略null值
3、可以和distinct搭配实现去重的运算
4、count函数的单独介绍
一般使用count(*)用作统计行数
5、和分组函数一同查询的字段要求时group by后的字段
round:四舍五入并保留x位小数
difference:差距
group by分组:
having:用于分组后的条件筛选
特点:
1、分组函数做条件肯定是放在having字句中
2、能用分组前筛选的,就优先考虑用分组前的筛选
3、group by字句支持单个字段分组,多个字段分组(多字段用逗号隔开没有顺序要求),表达式函数
4、也可以添加排序(排序放在整个分组查询的最后)
连接查询:
又称多表查询,当查询的字段来着于多个表时,就会用到连接查询笛卡尔积现象:表1有m行,表2有n行,结果=m*n行
发生原因:没有有效的连接条件
避免:添加有效的连接条件
where
group by
having
order by
limit
等值连接,自连接:
表起了别名,select后也只能用别名
内连接:
特点:1、添加排序、分组、筛选
2、inner可以省略
3、筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读
4、inner join连接和sql192语法中的等值连接效果是一样的,都是查询多表的交集
非等值内连接:
外连接:
应用场景:用于查询一个表中有,另一个表中没有的记录
特点:
1、外连接的查询结果为主表中的所有记录
如果从表中有和和它匹配的,则显示匹配的值
如果从表中没有和和它匹配的,则显示null
外连接查询结果=内连接结果+主表中有而从表中没有的记录
2、左外连接,left join左边的是主表
右外连接,right join右边是主表
3、左外连接和右外交换两个表的顺序,可以实现同样的效果
左外连接和右外连接实例:
子查询:
比较子查询:IN/NOT IN EXISTS/NOT EXISTS
分页:
联合查询:union 合并:将多条查询语句的结果合并成一个结果
用于:要查询的结果来自多个表,且多个表没有直接的连接关系,但查询的信息一致
特点:1、要求多条查询语句的查询列数是一致的
2、要求多条查询语句查询的每一列的类型和顺序最好一致
insert插入的两种方式:
方式一支持子查询和多行查询
方式二不支持
修改表中记录:
修改多表的记录:
多表的删除:
delete PK truncate
1、delete可以加where条件,truncate不可以
2、truncate效率高一点点
3、假如删除的表中有自增长
delete删除,再插入数据,自增长从断电开始,truncate从1开始
4、truncate没有返回值,delete删除有返回值
5、truncate删除不能回滚,delete删除可以回滚
库的管理:
创建库:
库名的修改:
更改库的字符集:
库的删除:
创建表:
修改列名:
修改列的类型或约束:
添加新列:
删除列:
修改表名:
复制表结构:
仅仅复制表的结构:
复制表的结构+数据:
复制部分数据:
整型:tinyint smallint mediumint in/integer bigint
如果设置无符号的需要加上 unsigned关键字
如果不够最大宽度,左边用零填充,必须搭配zerofill使用