重新开始第7天
分组函数
sum 求和
avg 平均值
max 最大值
min 最小值
count 计算个数
sum ,avg一般用于处理数值型
max,min,count可以处理任何类型
以上分组函数都忽略NULL值
DML语言
增
insert into 表名(列名,。。。) values(值。。。)
insert into 表名 set 列名=值,。。。。
改
update 表名 set 列=新值, 。。。。where 筛选条件;
update 表 别名 , 表2 别名 set 列=值,。。。where 连接条件 and 筛选条件;(92)
update 表 别名 inner|left|right join 表 别名 on 链接条件 set 列 =值 where 筛选条件;(99)
删除
delete from 表名 where 筛选条件
delete 需要删除的别名 from 表 表名,表2 别名 where 链接条件 and 筛选条件;(92)
delete 表1的别名,表2的别名 inner|left|right join 表2 别名 on 连接条件 where 筛选条件;(99)
truncate table 表名 ;
DDL语言
创建
create database 库名
修改
alter table 表名 add|drop|modify|change|rename to(重命名) column 列名 [列类型,约束]
alter database books character set gbk;
修改列名
alter table book change(改列名) column publishdate pubDate datetime;
修改列的类型或约束
alter table book modify (修改) column pubdate timestamp;
添加新列
alter table author add(添加) column annual double;
删除
drop database if exists books;
drop database fi exists 旧库名;
create database 新库名;
drop table if exists 旧库名;
create tabel 表名();
表的复制
insert into author values
create table 创建的表名 like author;//复制表的结构
create table 创建的表名 select * from 被复制表名;//复制表的结构+数据
cretat table 创建表名 select 需要拷贝的内数据 from 表名 ;//只复制部分数据
常见的数据类型
数值型:
整形
小数
定点数
浮点型
字符型:
较短的文本:char, varchar
较长的文本: text , blob(较长的二进制数据)
日期型 :
整形
分类:
tinyint , smallint , mediumint, int/integer, bigint
如果不设置无符号还是有符号。默认是有符号,如果想设置成无符号,需要添加unsigned
如果插入的数值超过了整数的范围,会报 out of range异常,并且插入临界值
小数
分类:
1 浮点型
float(M,D)
double(M,D)
2 定点型
dec (M,D)
decimal(M,D)
特点
M:整数部位+小数部位的总长度
D:小数部位小数点后?位
M,D都可以省略 如果是decimal,则M默认为10,D默认为0
如果是float 和double,则会根据插入的数值的精度来决定精度
字符型
分类:
较短的文本:
char
varchar
较长的文本
text
blob(较大的二进制)
特点:
写法 M的意思 特点 空间的耗费 效率
char char(M) 最大的字符数,可以省略 固定长度的字符 比较耗费 高
varchar varchar(M) 最大的字符数 不可省略 可变长度的字符 比较节省 低
日期型
分类:
date只保存日期
time只保存时间
year只保存年
datetime 保存日期+时间
timesatmp 保存日期加时间
特点:
字节 范围 时区等影响
datetime 8 1000到9999 不受
timestamp 4 1970到2038 受
常见约束
含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性
分类:六大约束
NOT NULL:非空,用于保证字段的值不能为空
default:默认,用于保证该字段有默认值
primary key:主键,用于保证该字段的值具有唯一性,并且非空
unique:唯一,用于保证该字段的值具有唯一性,可以为空
check:检查约束(mysql中不支持)
foreign key:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列值
在从表添加外键约束,用于引用主表中某列的值
标识列
有称为自增长列
含义:可以不用手动的插入值,系统提供默认的序列值
auto_increment//自增
索引
主键和具有unique约束的数字段自动添加索引
根据主键查询效率较高。尽量根据主键索引
create index 索引对象 on 表名(字段名);//创建索引
比如:create index emp_ename_index on emp(ename);
drop index 索引名称 on 表名;
索引底层原理采用的数据结构是:B+tree
索引的实现原理?
通过B Tree缩小扫描范围,底层索引进行了排序,分区,索引会携带数据在表中的“物理地址”,最终通过索引检索到数据之后,获取到关联的物理地址,通过无力地址定位表中的数据,效率是最高的
索引什么时候失效?
模糊查询的时候,第一个通配符使用的是%,这个时候索引是失效的。
视图
视图可以隐藏表的实现细节,保密级别较高的系统,数据库只对提供相关的视图,java程序员
只对视图对象进行CRUD
DBA命令
将数据库当中的数据导出
在windows dos命令窗口执行(导出整个库)
mysqldump 库 >D:\xxx.sql -uroot -pxxx
在windows dos命令串口中执行(导出制定数据库当中的制定表)
mysqldump 库 库里面的表> D:\xxx.sql -uroot -pxxx
导入数据
create database xxx;
use xxx;
source 把包拖进来
数据库设计三范式
什么是设计范式?
设计表的一句,按照这个三范式设计的表不会出现数据冗余
第一范式:任何一张表都应该有主键,并且每一个字段原子性不可再分。
第二范式:建立在第一范式的基础之上,所有非主键字段完全依赖主键,不能产生部分依赖。
多对多?三张表,关系表两个外键
第三范式:建立在第二范式的基础之上,所有非主键字段直接依赖主键,不能产生传递依赖
一对多?两张表,多的表加外键一对多?两张表,多的表加外键
在实际的开发中,以满足客户的需求为主,有的时候会拿冗余换执行速度。
一对一设计?
一对一设计有两种方案:主键共享
外键唯一