学习日记51--sql学习3

关联查询
  1. 分析过程
    1.确定实体间是否有关系
    2.确定是几对几的关系
    3.确定在哪个实体中建立字段
自关联
  1. 结构相同的又具有一对多关系的数据,放在一张表里,把自己表的id值当做外键,形成自关联。
  2. 物理上是一张表,逻辑上是多张表。通过连接查询将原来多个表合成一张大表。

    create table areas(
    id int primary key auto_increment not null,
    title varchar(20),
    pid int,
    foreign key(pid) references areas(id)
    );
  3. 查询包含省和下属市的表

    select pro.*,city.* from areas as pro
    inner join areas as city on pro.id=city.pid
    where pro.pid is null and pro.title='山西省';

    实测:pro.pid is null 不要也可以
  4. 适用条件
    有一个表的行数很有限,几个表的结构很相似,业务逻辑是相近的———>把他们存在一张表里
视图
  1. 视图本质是对查询的一个封装,简化了查询语句调用
  2. 用法: create/alter view 名字 as xxxx;
    xxxx为查询语句代码即select xxx from xxx where xxx
    create 为创建,alter为修改,选择一个即可
事务
  1. 当一个业务逻辑需要多个sql完成时,如果其中某条sql语句出错,则希望整个操作都退回
  2. 使用事务可以完成退回的功能,保证业务逻辑的正确性
  3. 事务四大特性(简称ACID)
    1. 原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行
    2. 一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致
    3. 隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的
    4. 持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障
  4. 要求:表的类型必须是innodb或bdb类型,才可以对此表使用事务
  5. 作用:保证业务逻辑的完整性
  6. 事务语句
    begin; // 启动事务
    操作语句
    commit; 或者 rollback; //提交或回滚
索引
  1. 查看索引:show index from 表名;
  2. 创建索引:create index indexName on 表名(列1,列2);
  3. 删除索引:drop index [indexName] on 表名;
  4. 索引的缺点:
    1. 虽然索引大大提高了查询速度,同时降低更新表的速度,如对表进行insert,update,delete。因为更新表时,mysql不仅要保存数据,还要保存索引文件
    2. 建立索引会占用磁盘空间的索引文件
补充
  1. alter table 表名 change|modify
    1,可以使用CHANGE old_col_name column_definition子句对列进行重命名。重命名时,需给定旧的和新的列名称和列当前的类型。
    2,如果您想要更改列的类型而不是名称, CHANGE语法仍然要求旧的和新的列名称,即使旧的和新的列名称是一样的。
    3,当需要修改字段名称时使用change;当需要修改字段类型时使用modify,毕竟modify还是比change少写个字段名称的,相对简单

  2. 聚合函数:count(*)计算总行数, max(列) , min(列), sum(列),avg(列) 可以与group by组合使用。

  3. 新建表的开销很大,在表添加数据的开销较小
  4. 开启运行时间监测:set profiling=1;
    执行语句;
    查看执行时间:show profiles;可查看之间所有执行语句的耗时
  5. 额外插入外键约束:
    alter table 表名 add constraint 约束名称 foreign key(列) references 关联表名(列);
  6. case when then函数

    //demo:
    case sex
    when '1' then '男'
    when '2' then '女’
    else '其他' end

你可能感兴趣的:(日记)