-
关系的存储
实体与实体有三种对应关系
一对一,一对多和多对多
一般情况下:
1当A表与B表中的数据为1对1的关系时,字段可以建立在A和B任意一张表中。
2当A表对B表为1对N时,数据存储在 B 表中,在B表中建立字段对应A。
3当A表与B表为N对N时,可以利用一定办法处理(还不是很懂,先占位置) -
自关联
数据库新建一张表的开销比在一张表中存储更多的数据开销更大,因此当两张表内容所具有的字段相似又具有一定逻辑关系时,可利用一个或几个字段存储它们之间的逻辑关系,将其存储在一张物理表中,但逻辑上仍为多张表,达到节省开销的目的。
例:省份和市在行政上属于从属关系
create table areas(
id int primary key,
title varchar(20),
parent_id int,
foreign key(parent_id) references areas(id) #即自己的字段作外键
);
在插入数据时,如果是省,则parent_id=NULL,如果是市,则parent_id=对应省份id。
按照上述操作,可以将省、市放在同一张表中,记录之间又有逻辑上的关联。 -
视图
一些查询经常用到,且查询语句相对复杂,这时候可以利用视图,将查询进行封装,类似函数,形成一个特殊的表。
相关操作:
创建视图
create view 视图名 as
select * from 表名;
查看
select * from 视图名;#以后只要写这一句,相当于写了很大一串查询语句 -
事务
为保证一个业务逻辑完整性而提出的。
支持事务的engine:innodb或者dbd
事务的过程:begin,commit,rollback
使用事务的情况:当表被改动时,如update,insert,delete时。
使用举例:如要修改学生id为1的姓名
begin;#开启事务
update student set name=‘Bob’ where id = 1;
接下来commit和rollback二选一结束事务
commit; #将结果提交
rollback;#将刚才的结果撤销 -
索引
一般的应用系统,读写比例在10:1左右,而写操作和更新操作很少遇到性能问题,性能问题常常在查询时出现,因此优化查询是非常重要的。索引可以提高访问性能。主键就是一个特殊的索引。
索引使用的原则:
选择列的数据类型,越小的数据类型越好。
尽量避免null,尽量指定列为not null,mysql中,含有null的很难优化。对这种情况,可选择用0或者其他特殊值来表示null。
在写where +or 组合时,尽量将有确定值的条件写在前面。
索引相关操作
查看某个表的索引
show index from 表名;
创建索引
create index 索引名 on 表名(字段名(长度)); #长度是指对字段内容里多长的内容建立索引,如果是数字或者datetime等,可以不指定。
删除索引
drop index 索引名 on 表名; -
监测命令使用的时间
set profiling=1; #开启监测
执行命令
show profiles; #显示在开启监测后的命令所用的时间
set profiling=0; #关闭监测