19.数据库表间关系:创建外键约束(用来描述表和表之间的关系,创建表时直接创建):语法如下;

                                  foreign key(当前表的列名x) references 外表名(列名y),只有在外表中存在的值才可以插入或修改;

                                  外键的级联操作:当删除一个表的数据时,如果在另一个表中有外键与之连接则要进行级联操作处理,默                                      认是会抛出异常(当然,使用逻辑删除可以避免这个问题),级联操作可以在创建表时指定,也可以在创                                      建后修改,类型主要有:restrict(限制):默认值,抛异常;

                                                                          cascade(级联):若主表记录删除,则从表相关联的数据都将被删除;

                                                                          set null:将外键设置为空;

                                                                          no action:什么都不做;

20.连接查询:通过外键约束,可以将多个表的数据在同一个结果集中显示,这就需要连接查询,关键字是join,类型有三种:

表A inner join 表B:结果集只会显示表A和表B相匹配的行;

表A left/right join 表B:表A和表B相匹配的结果会出现在结果中,同时表A/B中独有的数据也会显示出来,未对应的数据使用null来填充;

语法如下(以inner为例);

                       select  表1.列x,表2.列y,表3.列z

                       from 表3(此处随便选择一个表,只要能保证所有的表都可以连接到一起就可以)

                       inner join 表1 on 表3.外键约束列a=表1.对应列

                       inner join 表2 on 表3.外键约束列b=表2.对应列(这里也可以写表1和表2的关系,保证所有表连接到一起即可);

21.导入数据库文件(一般给表导入数据):source  xxxx.sql;

22.数据库的自关联:用外键方式将某列关系到本表的一个列(自己关系自己);

23.  视图:对查询的一个封装,可以直接调用,避免重复的复杂查询,定义:

                  create view xxxx as

                  select ........(正常的查询语句);

                  需要用时:select  *  from xxxx(其实和查询表是一样的,本质上视图就是查询结果集);

                  对视图的操作和表是一样的;

24.事务:当一个业务逻辑需要多个sql操作完成时,如果其中某条sql语句出错,则希望整个操作都退回,事务就是用来完成回退                  功能,以保证业务逻辑的正确性;事务的四大特性:原子性(全部操作不可分割,要么全部完成要么都不执行);一                    致性:并行执行的事务结果必须与串行执行结果一致;隔离性:事务不受其他事务影响,中间结果互相透明;持久                        性:事务对数据库的修改不被丢失,哪怕数据库故障;

               事务的要求是表的类型必须是innodb或者bdb类型,才可以使用事务;

               语句:开启begin(这时候对表修改,数据库会将对应的表(innodb貌似只锁改动的行)锁起来,创建一个内存级的临                 时表(行));提交:commit(将改动更新到表中);回滚rollback(恢复到begin之前);

25.数据物理存储上是按照主键来存储的,尽量避免null,应该指定列为no null,因为在mysql中,null很难进行查询优化,会使索       引变得复杂,可以用0,特殊值或者空串来代替null;

26.索引:分为单列索引和组合索引,单列索引是一个索引只包含一个列,一个表可以有多个单列索引;组合索引是一个索引包         含多个列;

     查看索引:show index from table 表名;

     创建索引:create index 索引名 on 表名(列名1(length),列名2(length)......);(字符串类型需要指定length,而int等                         则不需要)

     删除索引:drop index  索引名 on 表名;

     但是索引虽然可以提高查询的速度,但是会降低插入,增加,删除的速度,因为数据库还要额外对索引进行操作;

27.查询时,where筛选时:范围条件尽量放到最后(大于小于等等);尽量用and不用or(影响效率);

28.查看数据库操作执行的时间:开启运行时间检测:set  profiling=1;

                                                   执行相应的操作;

                                                   查看执行时间:show profiles;

29.内置函数:待补充(需要了解有但不必全记住)