精华内容
下载资源
问答
  • 1)如果更新的主键(倘若遵循关系数据库的原则,即主键应当是不可变的,这种情况就很少见),由于外键上没有索引,所以子会被锁住。 2) 如果删除中的一行,整个子也会被锁住(由于外键上没有索引...
    根据我的经验,导致死锁的头号原因是外键未加索引(第二号原因是表上的位图索引遭到并发更新)。在以下两种情况下,Oracle在修改父表后会对子表加一个全表锁:
    1)如果更新了父表的主键(倘若遵循关系数据库的原则,即主键应当是不可变的,这种情况就很少见),由于外键上没有索引,所以子表会被锁住。
    2) 如果删除了父表中的一行,整个子表也会被锁住(由于外键上没有索引)。
     
    除了全表锁外,在以下情况下,未加索引的外键也可能带来问题:
    1) 如果有ON DELETE CASCADE,而且没有对子表加索引:例如,EMP是DEPT的子表,DELETE DEPTNO = 10应该CASCADE(级联)至EMP。如果EMP中的DEPTNO没有索引,那么删除DEPT表中的每一行时都会对EMP做一个全表扫描。这个全表扫 描可能是不必要的,而且如果从父表删除多行,父表中每删除一行就要扫描一次子表。
    2) 从父表查询子表:再次考虑EMP/DEPT例子。利用DEPTNO查询EMP表是相当常见的。如果频繁地运行以下查询(例如,生成一个报告),你会发现没有索引会使查询速度变慢:
    ? select * from dept, emp
    ? where emp.deptno = dept.deptno and dept.deptno = :X;
     
    那么,什么时候不需要对外键加索引呢?答案是,一般来说,当满足以下条件时不需要加索引:
    1) 没有从父表删除行。
    2) 没有更新父表的惟一键/主键值(当心工具有时会无意地更新主键!)。
    3) 没有从父表联结子表(如DEPT联结到EMP)。
     
    转载:http://blog.itpub.net/24104518/viewspace-716784/

    转载于:https://www.cnblogs.com/cainiao-Shun666/p/6888712.html

    展开全文
  • 通过将理论融入数据库实践,清晰地讲解了关系型数据库的设计原则,完整地展示了如何进行良好的关系型数据库设计,深入揭示了 sql server 2008的技术细节。.  本书浓缩了作者作为 sql server数据库架构师多年来丰富...
  • mybatis的嵌套查询为之间的关联提供支持,通过嵌套查询可以轻松达到一种查询A的同时把B也关联查询出来,数据库中也不用创建外键。话不多说,直接上教程。 首先需要确定关系,我这里的例子是用户,...

    mybatis的嵌套查询为两个表之间的关联提供了支持,通过嵌套查询可以轻松达到一种查询A的同时把B也关联查询出来,数据库中也不用创建外键。话不多说,直接上教程。

    首先需要确定两个表的关系,我这里的例子是用户表,订单表。用户对订单是一对多的关系。

    表字段

    在这里插入图片描述
    图1 订单表字段

    在这里插入图片描述
    图2 用户表字段

    实体类

    建立完表后,我们接下来编写实体类

    public class User implements Serializable {
        private Integer user_id;
        private String nickname;
        private String phonenumber ;
    
        public Integer getUser_id() {
            return user_id;
        }
    
        public void setUser_id(Integer user_id) {
            this.user_id = user_id;
        }
    
      public Getter and Setter(){
    	..................
    	}
    }
    

    用户实体类(User)

    public class Order implements Serializable {
      private Integer orderId;
    
      private Integer userId;
    
      private Integer pId;
    
      private String createtime;
    
      private String price;
    
      private String remarks;
    
      private User user;
    
      public Getter and Setter(){
    	..................
    	}
    }
    

    订单实体类(Order),这里需要注意的是在属性中加入了user,后面会通过该对象获取到查询的user信息。

    Mapper文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.biyesheji.schoolka.mapper.UserMapper">
      <resultMap id="BaseResultMap" type="com.biyesheji.schoolka.bean.User">
        <result column="user_id" jdbcType="INTEGER" property="user_id" />
        <result column="nickname" jdbcType="VARCHAR" property="nickname" />
        <result column="phonenumber" jdbcType="VARCHAR" property="phonenumber" />
      </resultMap>
      <select id="selectAll" resultMap="BaseResultMap">
        select user_id, nickname, phonenumber
        from user
      </select>
      
      <select id="selectById" resultMap="BaseResultMap" parameterType="java.lang.Integer">
        SELECT * FROM user
        WHERE user_id= #{id}
      </select>
    </mapper>
    

    UserMappeer.xml记录了用户表到实体类的映射

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.biyesheji.schoolka.mapper.OrderMapper">
        <resultMap id="BaseResultMap" type="com.biyesheji.schoolka.bean.Order">
            <result column="order_id" jdbcType="INTEGER" property="orderId"/>
            <result column="user_id" jdbcType="INTEGER" property="userId"/>
            <result column="p_id" jdbcType="INTEGER" property="pId"/>
            <result column="createtime" jdbcType="VARCHAR" property="createtime"/>
            <result column="price" jdbcType="VARCHAR" property="price"/>
            <result column="remarks" jdbcType="VARCHAR" property="remarks"/>
            <!--
            property:在对应实体类中的属性名称,这里是user
            column:在表中要关联的字段名,这里是user_id
            select:填入要调用的sql语句id(可以填入其她命名空间中的id,例如com.biyesheji.schoolka.mapper.UserMapper.selectById)
            -->
            <association property="user" column="user_id" select="getUser"
                         javaType="com.biyesheji.schoolka.bean.User">
            </association>
        </resultMap>
        <select id="selectAll" resultMap="BaseResultMap">
        select order_id, user_id, p_id, createtime, price, remarks
        from `order`
      </select>
        <select id="getUser" parameterType="java.lang.Integer"
                resultMap="com.biyesheji.schoolka.mapper.UserMapper.BaseResultMap">
        SELECT * FROM user WHERE user_id=#{user_id}
      </select>
        <select id="selectByUser" parameterType="java.lang.Integer" resultMap="BaseResultMap">
        SELECT * FROM `order` WHERE user_id=#{id}
      </select>
    </mapper>
    

    OrderMapper.xml中要关联查询出来的对象user,单独使用标签,在标签的select属性有两种填法,当时我第一次用的是按照上文的的填法,但是一直报错,所以我用了第二种,按照“命名空间+id”的方式填入,测试成功运行。如下图

    <association property="user" column="user_id" select="com.biyesheji.schoolka.mapper.UserMapper.selectById"
                         javaType="com.biyesheji.schoolka.bean.User">
            </association>
    

    测试

    在这里插入图片描述
    在这里插入图片描述

    如有问题可在下方留言,感谢阅读。

    展开全文
  • 6.3.4 建立表之间的关系 163 6.3.5 创建索引 166 6.3.6 创建约束 167 6.3.7 设置数据所在文件组 169 6.4 用T-SQL语言创建 170 6.4.1 基本语法 170 6.4.2 参数说明 170 6.4.3 创建新 175 6.4.4 ...
  • 9.5.1 个数据的关联 178 9.5.2 3个或更多个数据的关联 179 9.6 合并查询结果(UNION) 181 9.7 分组查询,统计函数(GROUP BY) 181 9.7.1 统计函数 182 9.7.2 统计函数GROUP_CONCAT() 183 9.7.3 对多...
  • 二是D上的关系,它反映数据元素之间的前后件关系,通常记为R。一个数据结构可以表示成:B=(D,R) 其中,B表示数据结构。为了反映D中各数据元素之间的前后件关系,一般用二元组来表示。 例如,如果把一年四季看作一...
  • bearcat-dao 在类(model)和数据库之间建立了一个额外的中间层,这就为如何在类和数据库之间建立映射关系带来了更大的灵活性,使得在不用改变数据模型或者对象模型的情况下改变它们的映射关系成为可能。...
  • 2009达内SQL学习笔记

    2010-02-10 19:46:58
    有相同字段时必须加前缀,列名前需加表名和“.”,如“s_emp.id”。 1、用法:SELECT columns,prod2,prod3<列> FROM Table1,table2<表名> 分号结束 如: select id from s_emp; select last_name,name ...
  • oracle数据库经典题目

    2011-02-17 15:05:20
    19.视图是一个表示的数据的数据库对象,它允许用户从一个或一组通过一定的查询语句建立一个“虚”。 20.序列是一种可被多个用户使用的用于产生一系列唯一数字的数据库对象。尤其适合多用户环境中,可以...
  • 在创建时,经常会创建该的主键、外键、唯一约束、Check约束等  语法结构 create table 表名( [字段名] [类型] [约束] ……….. CONSTRAINT fk_column FOREIGN KEY(column1,column2,…..column_n) ...
  • CruiseYoung提供的带有详细书签的电子书籍目录 ... Oracle 9i & 10g编程艺术:深入数据库体系结构(09年度畅销榜TOP50)(08年度畅销榜TOP50) 基本信息 ...第10章介绍各种类型的,其中最重要的是堆组织...
  • 9. 敏感信息处理:对于客户隐私均在备注栏内做注解,分为“隐私,暂不取”、“隐私,银行机构变形”种情况。对于“隐私,暂不取”数据项,保留在银行机构,作为可追索数据项;对于“隐私,银行机构变形”数据项...
  • 在本书第1版出版时隔4年,Thomas Kyte及时了解大家的这一迫切需求,根据他的实战经验以及人们最关心的问题对这本书做全面补充和调整,以涵盖11g最受关注的多项特性。例如11g引入dbms_parallel_execute包来帮助...
  •  《Java Web开发实战1200例》分为I、II卷共计1200个例子,包括开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第II卷,以...
  • jdbc基础和参考

    2014-01-08 13:04:17
    Component:数据库中采用一张的设计,java中采用个类的设计 ----------------------------------- Employee: id name salary award amount table id name salary award formula: --------------------------...
  • Java开发实战1200例.第2卷.part3

    热门讨论 2013-05-08 22:46:34
    实例098 查询SQL Server数据中的3条数据 175 实例099 查询MySQL数据中的前3条数据 176 实例100 查询MySQL数据中的3条数据 177 4.2 排序与分组函数的应用 178 实例101 按照字母顺序对留学生进行排序 178 ...
  • Java开发实战1200例.第2卷.part2

    热门讨论 2013-05-08 22:45:35
    实例098 查询SQL Server数据中的3条数据 175 实例099 查询MySQL数据中的前3条数据 176 实例100 查询MySQL数据中的3条数据 177 4.2 排序与分组函数的应用 178 实例101 按照字母顺序对留学生进行排序 178 ...
  • Java开发实战1200例.第2卷.part1

    热门讨论 2013-05-08 22:44:13
    实例098 查询SQL Server数据中的3条数据 175 实例099 查询MySQL数据中的前3条数据 176 实例100 查询MySQL数据中的3条数据 177 4.2 排序与分组函数的应用 178 实例101 按照字母顺序对留学生进行排序 178 ...
  • 实例135 使用DataAdapter填充多个(利用关系) 实例136 强类型DataSet与SqlDataAdapter搭配查询 实例137 用TableAdapter创建DataTable定义及查询 实例138 用DataView排序供求信息数据 实例139 使用DataView...
  • 实例284 使用触发器删除相关联的两表间的数据 7.5 事务的使用 实例285 使用事务同时提交多个数据表 实例286 使用隐式事务实现多表提交数据 实例287 使用事务批量删除生产单信息 实例288 在事务中的表级锁定 实例289 ...
  • 所使用的应用服务器是jboss 5.1和weblogic 11g,详细介绍种应用服务器的安装和使用,以及如何在大主流服务器上安装、部署java ee应用。  本书内容主要包括三部分,第一部分介绍java ee开发的基础知识,...

空空如也

空空如也

1 2
收藏数 21
精华内容 8
关键字:

两表通过外键建立了关系后