zoukankan      html  css  js  c++  java
  • mariadb索引、视图、关联查询、备份恢复、外键

    连接查询(两张表关联查询)

    在sql语句中,- - 代表注释

    内关联查询(查询两张表的交集)

    select * from 表1 inner join 表2 on 表1.id=表2.id(此处id是表1与表2相同的id);

    内关联查询显示指定字段

    select 表1.指定字段,表2.指定字段 from 表1 inner join 表2 on 表1.id=表2.id;

    左关联:以左边表为基准,如果右边的表内的记录匹配不到,就显示NULL

    select *from students left join classes on classes.id=students.cls_id

    右关联:以右边为基准,如果左边的表内记录匹配不到,就不会显示

    select *from students right join classes on classes.id=students.cls_id

    自关联:

    就是说有一张表,类似于这样:

    ##--省份
    insert into areas(aid,name,pid) values (1,'北京市',null);
    insert into areas(aid,name,pid) values (0,'天津市',null);
    insert into areas(aid,name,pid) values (0,'河北省',null);
    insert into areas(aid,name,pid) values (1,'山西省',null);
    
    ##--地级市
    insert into areas(aid,name,pid) values (0,'海淀区',1);
    insert into areas(aid,name,pid) values (0,'滨海区',2);
    insert into areas(aid,name,pid) values (0,'沧州区',3);
    insert into areas(aid,name,pid) values (0,'大同市',4);
    
    insert into areas(aid,name,pid) values (0,'朝阳区',1);
    insert into areas(aid,name,pid) values (0,'武清区',2);
    insert into areas(aid,name,pid) values (0,'石家庄',3);
    insert into areas(aid,name,pid) values (0,'太原市',4);
    
    ##--县级市
    insert into areas(aid,name,pid) values (0,'西二旗',5);
    insert into areas(aid,name,pid) values (0,'大港',6);
    insert into areas(aid,name,pid) values (0,'徐丘市',7);
    insert into areas(aid,name,pid) values (0,'清徐',8);
    
    insert into areas(aid,name,pid) values (0,'中关村',5);
    insert into areas(aid,name,pid) values (0,'汉沽',6);
    insert into areas(aid,name,pid) values (0,'河间市',7);
    insert into areas(aid,name,pid) values (0,'阳曲',8);

    在自关联的情况下,给表起别名来进行关联。

    格式:

    select * 表名 as 别名 inner join 表名 as 别名 on 别名.id=别名.关联id;  这是筛选出对应关系
    
    select * 表名 as 别名 inner join 表名 as 别名 on 别名.id=别名.关联id where 条件;这是从对应关系里指定筛选。
    
    select * from areas where pid=(select aid from areas where name='北京市');
    
    select * from areas where pid in (select aid from areas where name='北京市');

    表内的记录可以相互关联。

    如何在数据库中传文件和恢复数据库:

    先传到Linux系统中,而后source 文件名.sql,注意要在none这个当前路径下。

    数据的备份与恢复(shell终端下执行)

    #单个数据库备份
    mysqldump –uroot –proot - -databases 要备份的数据库名 > 文件名.sql
    
    #整个数据库备份
    mysqldump –uroot –proot   - -all-databases要备份的数据库名 > 文件名.sql
    
    #表的备份
    mysqldump –uroot –proot 数据库名 要备份的表名 > 文件名.sql
    
    #多个表的备份
    mysqldump –uroot –proot 数据库名 要备份的表名 要备份的表名 > 文件名.sql
    
    #在shell命令下运行sql语句(单个或多个)
    
    mysql –uroot –proot –e ‘sql语句;sql语句’

    视图(把两个有关联或没关联的表合并成一个视图)

    视图一般用来查询,不是用来更改,把两个表做成视图,注意不要有相同字段。

    create view(视图的关键字)v视图命名as select * from classes inner join students on classes.id=students.cls_id;
    
    drop view 视图名字; 删除视图

    事物

    事物的特性:

    原子性:就是把我输入的sql语句看成一个整体,要么全部执行成功,要么全部执行不成功。保证了数据不丢失。

    一致性:从一个状态变成另一个状态,前后状态要一致。

    隔离性:事物与事物之间是隔离的,不能相互干扰的。

    持久性:数据写入到磁盘当中。

    开启事务命令:

    start transaction;
    
    begin;

    结束事物命令:

    commit;提交所有事物(成功)
    
    rollback;回滚所有事物(不成功)

     

    默认提交事物

    autocomit 

    如何更改autocomit的on

    vim /etc/my.cnf.d/server.cnf

    把autocommit=1改成0即是关闭

    而后重启mariadb即可生效。

    查看数据库当前状态

    show status; 

    索引(适合于只用于查询的表,不适用于增删改多的表)

    索引相当于一本书的目录。

    约束:key (要索引的字段)   这个字段就变成了索引

    创建好的表上添加索引

    create index 索引命名 on 选择的表 (选择的字段); 

    删除索引 

    drop index 索引名称 on 表名;

    外键

    设外键一般在儿子表设,就是范围小的。

    格式一:

    alter table 表名add constraint 外键命名 foreign key (要设为外键的字段)references  classes(id);

    格式二:区别在于删除父表上的一条记录时,相对应子表上的所有的数据都没了。

    alter table 表名add constraint 外键命名 foreign key (要设为外键的字段)references  classes(id)on delete cascade;

    删除外键:

    alter table 表名 drop foreign key;
  • 相关阅读:
    Bootstrap 插件收集
    target和currentTarget
    微信小程序
    flex
    vue中使用icon和打包
    rem的使用
    vue中使用sass和compass
    vue父子组件传递参数
    weex
    常用软件&&网址
  • 原文地址:https://www.cnblogs.com/shuaiyin/p/10957267.html
Copyright © 2011-2022 走看看