mysql 基本操作2

  • 八、关系表
    • 1.表的关系有三种  一对一,一对多,多对多
      • 关系通过关系字段(外键) 建立
      • 如果A表和B表是一对一关系  关系字段可以设计在A或B表中
      • 如果A表和B表是一对多关系  关系字段设计在B表中
      • 如果A表和B表是多对多关系  新建一张表,存储A表和B表的关系
    • 2.关系表的创建
      • 创建表的时候添加关系字段与外键约束(添加上外键约束,当在关系字段中插入A表中不存在的id会报错)
      • 关系字段 int,
      • foreign key(关系字段) references A表名(id));
      • 也可以后期添加外键约束
      • alter table 关系表 add constraint 名字 foreign key(关系字段) references A表名(id)
    • 3.关系表的查询
      • 1.内连接
        • 1.select 表1.字段 as 别名,表2.字段 as 别名,表3.字段 as 别名 from 表3
        • inner join 表1 on 表3.关系字段=表1.id
        • inner join 表2 on 表3.关系字段=表2.id
        • 把表1某列和表2某列 通过各自id=表3的关系字段 的关系 和表3 某列连接在一起组成,表3为关系表
        • 2.select 表1.字段 as 别名,表2.字段 as 别名,表3.字段 as 别名 from 表1
        • inner join 表3 on 表3.关系字段=表1.id
        • inner join 表2 on 表3.关系字段=表2.id
        • 以非关系表建立连接,必须先和关系表建立连接(表三)
        • 比如分数表(关系表) 与 学生表 和 学科表
      • 2.左连接和右连接
        • 表1 lift join 表2   相当于 表2 right join 表1
        • 表示:表1与表2匹配的行会出现在结果中,外加表1中独有的数据,B表未对应的数据使用null填充
  • 九、自关联
    • 自关联,表中的某一列,关联了这个表中的另外一列,但是它们的业务逻辑含义是不一样的,城市信息的pid引用的是省信息的id
    • (如果两个表的字段相同,而且每种信息的数据量有限)
    • 例如创建自关联的省城市表
    • create table areas(
    • id int auto_increment primary key not null,
    • atitle varchar(20),
    • pid int,
    • foreign key(pid) references areas(id)
    • );
    • 查询
    • select city.atitle,province.atitle from areas as city
    • inner join areas as province on province.id = city.pid
    • where province.atitle = "山西省";
    • 必须给areas表起别名    通过市的pid与省的id相同‘链接’表
  • 十、视图
    • 1.本身是对sql查询语句的封装  方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性;
    • 视图的用途就是简化查询
    • 2.意义:
      • 1.对于复杂的sql查询语句维护不方便
      • 2.从不同的角度存在不同的数据形式
    • 3.视图的特性
      • 试图本身并没有确切的数据,他的数据来源于定义查询语句时候的基本表
      • 当基本表发生变化时,调用视图所得的结果也会发生改变
    • 4.使用
      • 1.show tables 查看视图
      • 2.create view 视图名 as sql查询语句
      • 3.alter view 视图名 as sql查询语句
      • 4.rename view 原视图名 to 新视图名
      • 5.drop view 视图名 删除视图
    • 5.可以在简化sql查询语句的视图上继续使用where 过滤
      • create view  v_age   select * from 表名 where age > 18;
      • select * from  v_age where name="张三";
  • 十一、索引
    • 1.意义:当数据量大,查询数据会变慢,可以使用索引提高访问的性能 主键和唯一索引提高查询速度
    • 2.使用 (检测添加索引后的效率)
      • 1.set profiling=1   开启运行时间检测
      • 2.在大数据表中 执行sql 查询语句 例如 select name from students;
      • 3.create index 索引名 on 表名(字段名)   给查询的字段添加索引    create index indexname on students(name);
      • 4.再次执行2步骤
      • 5.show profiles 查看检测的时间
    • 3.拓展
      • create index 索引名 on 表名(字段1,字段2) 组合索引  当查询两个字段时,使用组合索引,才能提高效率
      • show index from 表名  查看索引
      • drop index 索引名 on 表名  删除索引
    • 4.缺点
      • 降低了更新表速度,比如添加,修改,删除数据 ,因为不仅保存sql数据,还要保存索引文件
  • 十二、事务
    • 1.保证一个复杂业务逻辑的完整性和准确性
      • 当一个业务逻辑需要多个sql完成时,如果其中某条sql语句出错,则希望整个操作都退回
      • 使用事务可以完成退回的功能,保证业务逻辑的正确性;
    • 2.查看引擎 show engines     查看创建表的相关信息  show create table 表名
      • 支持事务的引擎   innodb
    • 3.操作
      • 1. begin;  开启事务
      • 2. 数据更改 比如 update,insert,delete
      • 3. rollback;  当数据更改反悔时可以回退
      • 4. commit    提交并关闭事务

猜你喜欢

转载自blog.csdn.net/qq_41654985/article/details/80542831