精华内容
下载资源
问答
  • 关系的分类(假设是A表和B表) 第一种分类: 一对一 (详述一对一关系及其实现)(一对...第二种分类:一对多 (详述一对多关系及其实现)一对多事怎么实现的? 表A(一)与表B(多)(我们现在希望,表A中的一条...

    关系的分类(假设是A表和B表)


    第一种分类: 一对一 (详述一对一关系及其实现)
    (一对一,几乎不使用。所以,我们就一句话带过。)

    一对一的实现:既可以把表A的主键充当表B的外键,也可以把表B的主键充当表A的外键。

    一对多 和 多对多 才是我们学习的重点。

     

    第二种分类:一对多 (详述一对多关系及其实现)
    一对多事怎么实现的?

    表A(一)与表B(多)(我们现在希望,表A中的一条记录对应表B中的多条记录)之间要是有关系,就必须要有外键。把表A的主键添加到表B里面,充当表B的外键。

    一对多的实现:在多的一方的表里面,添加外键。

    • 学生表(学号,姓名,性别,班级) 
    • 其中每个学生的学号是唯一的,学号就是一个主键 
    • 成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键 

    第三种分类:多对多 (详述多对多关系及其实现)
    现实中,什么事物和什么事物之间是多对多的关系?

    班级和老师的关系。(一个班级有很多老师上课,一个老师可以去很多班级上课。)

    多对多其实就是:一对多 和 多对一 的一个组合。

    多对多的实现:多对多 必须要通过单独的一张表来表示。

    班级是一张表
    教师是一张表
    班级和教师的关系也是一张表

    banji

    Alt text

    jiaoshi

    Alt text

    banji_jiaoshi_mapping

    Alt text

    转载于:https://www.cnblogs.com/double-orange/p/10216286.html

    展开全文
  • 一对多关系、多对一关系 多对多关系 2、多表关联关系的实现 可以通过添加外键来实现。 2.1 一对一 主键共享 两张表的主键,建立外键约束。 -- 建立一对一关系:一夫一妻 mysql> create table husband( -> ...

    1、多表关联关系的分类

    既然数据库是存储项目中的数据的,项目中的数据主要是类型创建的对象,项目中类型和类型之间是有关系的,数据库中怎么体现出来?
    不论是生活中,还是抽象出来的软件中,描述生活中的多个类型之间的关系,总结如下:

    • 一对一关系
    • 一对多关系、多对一关系
    • 多对多关系

    2、多表关联关系的实现

    可以通过添加外键来实现。

    2.1 一对一
    • 主键共享
      两张表的主键,建立外键约束。
    -- 建立一对一关系:一夫一妻
    mysql> create table husband(
        -> hid int primary key auto_increment comment '丈夫编号',
        -> hname varchar(20) not null comment '丈夫姓名'
        -> );
    Query OK, 0 rows affected (0.03 sec)
    
    mysql> create table wife(
        -> wid int primary key auto_increment comment '妻子编号',
        -> wname varchar(20) not null comment '妻子姓名'
        -> ,foreign key(wid) references husband(hid)
        -> );
    Query OK, 0 rows affected (0.02 sec)
    
    -- 测试数据
    mysql> insert into husband(hname) values('邓超');
    Query OK, 1 row affected (0.01 sec)
    mysql> insert into husband(hname) values('张若昀');
    Query OK, 1 row affected (0.01 sec)
    mysql> insert into wife(wname) values('孙俪');
    Query OK, 1 row affected (0.01 sec)
    mysql> insert into wife(wname) values('唐艺昕');
    Query OK, 1 row affected (0.00 sec)
    mysql> insert into wife(wname) values('孙怡');
    ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`power`.`wife`, CONSTRAINT `wife_ibfk_1` FOREIGN KEY (`wid`) REFERENCES `husband` (`hid`))
    
    • 外键唯一
      子表添加一个新的字段并给该字段添加唯一约束和外键约束,然后关联父表主键字段。
    -- 建立一对一关系:一夫一妻
    mysql> create table wife(
        -> wid int primary key auto_increment comment '妻子编号',
        -> wname varchar(20) not null comment '妻子姓名',
        -> w_hid int unique, 
        -> foreign key (w_hid) references husband(hid));
    Query OK, 0 rows affected (0.03 sec)
    -- 测试数据:可以不按顺序插入,只要丈夫编号对应即可
    mysql> insert into wife(wname,w_hid) values('唐艺昕',2);
    Query OK, 1 row affected (0.01 sec)
    
    mysql> insert into wife(wname,w_hid) values('孙俪',1);
    Query OK, 1 row affected (0.01 sec)
    
    mysql> select * from wife;
    +-----+--------+-------+
    | wid | wname  | w_hid |
    +-----+--------+-------+
    |   1 | 唐艺昕 |     2 |
    |   2 | 孙俪   |     1 |
    +-----+--------+-------+
    2 rows in set (0.00 sec)
    
    2.2 一对多
    • 外键添加在多的一方,关联一的主键。
    -- 建立一对多关系:一个学生有多门课程
    mysql> create table stu(
        -> id int primary key auto_increment,
        -> sname  varchar(20) not null);
    Query OK, 0 rows affected (0.02 sec)
    mysql> create table course(
        -> id int primary key auto_increment,
        -> cname varchar(50) not null,
        -> score int default 0,
        -> sid int,
        -> foreign key (sid) references stu(id)
        -> );
    Query OK, 0 rows affected (0.03 sec)
    -- 测试数据
    mysql> insert into stu (sname) values('zhangsan');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> insert into course(cname,score,sid) values('math',98,1);
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into course(cname,score,sid) values('chinese',99,1);
    Query OK, 1 row affected (0.01 sec)
    
    mysql> insert into course(cname,score,sid) values('english',111,1);
    Query OK, 1 row affected (0.01 sec)
    
    mysql> select * from course;
    +----+---------+-------+------+
    | id | cname   | score | sid  |
    +----+---------+-------+------+
    |  1 | math    |    98 |    1 |
    |  2 | chinese |    99 |    1 |
    |  3 | english |   111 |    1 |
    +----+---------+-------+------+
    3 rows in set (0.00 sec)
    
    2.3 多对多
    • 外键:两张表的普通字段,直接建立关联关系(不推荐)
    • 中间表:创建一个中间表,中间表的两个普通字段分别关联另两张表的主键。
    -- 建立多对多关系:一个学生有多个老师,一个老师有多个学生
    -- 我这里之前已经创建过学生表
    mysql> desc stu;
    +-------+-------------+------+-----+---------+----------------+
    | Field | Type        | Null | Key | Default | Extra          |
    +-------+-------------+------+-----+---------+----------------+
    | id    | int         | NO   | PRI | NULL    | auto_increment |
    | sname | varchar(20) | NO   |     | NULL    |                |
    +-------+-------------+------+-----+---------+----------------+
    2 rows in set (0.01 sec)
    
    mysql> create table teacher(
        -> tid int primary key auto_increment,
        -> tname varchar(10));
    Query OK, 0 rows affected (0.03 sec)
    
    -- 中间表
    mysql>  create table stu_tea(
        -> id int primary key auto_increment,
        -> sid int,
        -> tid int,
        -> foreign key(sid) references stu(sid),
        -> foreign key(tid) references teacher(tid));
    Query OK, 0 rows affected (0.02 sec)
    

    总结

    • 中小型项目中的数据表,为了避免垃圾数据的出现,强制添加外键约束
      项目规模和项目本身对于数据的安全性约束较少,容易产生垃圾数据
    • 大型项目并且对数据查询性能较高的数据表,约定的方式关联(不额外添加外键)
      项目规模和项目本身对于数据安全性约束较多,不容易产生垃圾数据
      不需要额外添加外键提高查询数据时的性能消耗
    展开全文
  • 因为自己写了个基于jfinal的web系统,想在后端用Java来实现数据库多用户访问。这样做有可行性吗?希望大牛们教教我该怎么写。
  • 、添加jdbc请求并设置变量,获取数据库多个字段值 1、添加好JDBC Connection Configuration并做好数据库连接配置 2、导入mysql驱动jar包 以上1、2操作不详细整理了,参考之前博文“Jmeter 如何把数据库的数据依次...

    一、添加jdbc请求并设置变量,获取数据库多个字段值

    1、添加好JDBC Connection Configuration并做好数据库连接配置

    2、导入mysql驱动jar包

    以上1、2操作不详细整理了,参考之前博文“Jmeter 如何把数据库的数据依次获取作为参数传入下一个请求?” 非常详细

    3、添加线程组–>右键线程组–>添加jdbc request,并做好设置

    在这里插入图片描述
    4、添加查看结果树并运行;得到以下结果
    在这里插入图片描述
    在这里插入图片描述
    ps:这里为了举例方便,并未获取密码的值,如果工作中有需要查库获取密码,那么需要找对应开发将密码加密解密的代码部分导出一个jar包,并添加到jmeter的lib/ext下;另外自己添加BeanShell PostProcessor写代码进行密码解密

    二、添加另一个jdbc请求,用于获取member中的用户总数

    1、右键线程组–>添加一个jdbc请求,并设置变量count
    在这里插入图片描述
    2、运行,确认下用户总数
    在这里插入图片描述

    三、添加循环控制器、计数器,实现循环读取库的多个字段信息,并传递到下一个登录请求

    1、添加循环控制器,用于所有用户的循环运行
    在这里插入图片描述
    2、在循环控制器之下,添加计数器
    在这里插入图片描述
    3、在循环控制器之下,添加登录请求,并进行嵌套变量引用
    在这里插入图片描述

    • nn1{n}:这里n为计数器得出的值,从1到{count_1},即值为1~25
    • _V函数: 若KaTeX parse error: Expected group after '_' at position 2: {_̲_V(phone_{n})}中n=2,{n}=2, 则{__V(phone_2)}返回phone_2的值

    4、点击运行,所有用户全部进行了登录执行
    在这里插入图片描述
    在这里插入图片描述
    点赞关注~~持续分享,加入我们,了解更多。642830685,免费领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!技术大牛解惑答疑,同行一起交流。

    展开全文
  • 数据库的锁有哪几种?语句怎么实现

    千次阅读 2019-09-17 09:01:34
    1 为什么需要锁   数据库用户...为了解决这个问题,加锁是个非常重要的技术,对实现数据库并发控制是个好的方案。简单来说,当执行SQL语句事物前,应向数据库发出请求,你访问的记录加锁。在这个事...

    1 为什么需要锁

      数据库是一个多用户共享的资源,当多个用户并发的存储数据时,数据库就会产生多个事物同时存储同一数据的情况。若对并发操作不加控制就可能读取或存取不正确的数据,破坏数据的不正确性(脏读,不可重复读,幻读等),可能产生死锁。为了解决这个问题,加锁是一个非常重要的技术,对实现数据库并发控制是一个好的方案。简单来说,当执行SQL语句事物前,应向数据库发出请求,对你访问的记录加锁。在这个事物释放锁之前,其他事物不能对这个数据进行更新操作。

    2 有哪些锁

      MySQL数据库中的锁有共享锁、排他锁、行锁、表级锁、行级锁以及页面锁。

    2.1 共享锁(Shared Lock,也叫S锁)

      共享锁(S)表示对数据进行读操作,因此多个事物可以同时为一个对象加锁。这个事物释放锁之前,其他事物不能对该对象进行更新操作。产生共享锁的语句是:

    select * from t_user lock in share mode;
    

    2.2 排他锁(Exclusive Lock,也叫X锁)

      排他锁表示对数据进行写操作,如果一个事物给一个对象添加了排他锁,其他事物就不能给他加其他锁。产生排他锁的SQL语句如下:

    select * from ad_plan for update;
    

    2.3 行锁

      行锁表示对一条记录加锁,只影响一条记录。通常用在DML语句中,如INSERT, UPDATE, DELETE等。
      InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。
      InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!

    2.4 锁的密度

      根据锁的级别或密度来划分,MySQL有三种锁的级别:页级、表级、行级。

    2.4.1 表级锁

      表级别的锁定是MySQL各存储引擎中最大颗粒度的锁定机制。该锁定机制最大的特点是实现逻辑非常简单,带来的系统负面影响最小。所以获取锁和释放锁的速度很快。由于表级锁一次会将整个表锁定,所以可以很好的避免困扰我们的死锁问题。
      当然,锁定颗粒度大所带来最大的负面影响就是出现锁定资源争用的概率也会最高,致使并大度大打折扣。
      使用表级锁定的主要是MyISAM,MEMORY,CSV等一些非事务性存储引擎。

    2.4.2 行级锁

      行级锁定最大的特点就是锁定对象的颗粒度很小,也是目前各大数据库管理软件所实现的锁定颗粒度最小的。由于锁定颗粒度很小,所以发生锁定资源争用的概率也最小,能够给予应用程序尽可能大的并发处理能力而提高一些需要高并发应用系统的整体性能。
      虽然能够在并发处理能力上面有较大的优势,但是行级锁定也因此带来了不少弊端。由于锁定资源的颗粒度很小,所以每次获取锁和释放锁需要做的事情也更多,带来的消耗自然也就更大了。此外,行级锁定也最容易发生死锁。
      使用行级锁定的主要是InnoDB存储引擎。

    2.4.3 页面锁

      页级锁定是MySQL中比较独特的一种锁定级别,在其他数据库管理软件中也并不是太常见。页级锁定的特点是锁定颗粒度介于行级锁定与表级锁之间,所以获取锁定所需要的资源开销,以及所能提供的并发处理能力也同样是介于上面二者之间。另外,页级锁定和行级锁定一样,会发生死锁。
      在数据库实现资源锁定的过程中,随着锁定资源颗粒度的减小,锁定相同数据量的数据所需要消耗的内存数量是越来越多的,实现算法也会越来越复杂。不过,随着锁定资源颗粒度的减小,应用程序的访问请求遇到锁等待的可能性也会随之降低,系统整体并发度也随之提升。
      使用页级锁定的主要是BerkeleyDB存储引擎。

    展开全文
  • 学习数据库以用法为主,原理为辅,通过sql语句完成对数据库的操作,使用java代码来操作数据库,理解数据库中数据存储结构,以及一些重要特性的实现原理。 学习数据库的使用,没啥难点,关键是要熟练。 传统的关系型...
  • 怎么写好设计模式让读者看懂真的要讲究一下技巧,不能单纯的贴代码并代码作解释,我觉的《大话设计模式》就是本讲设计模式很好的书,那本书通过故事的形式讲解让人联想思考下去。  由于水平有限,所有这篇文章...
  • UNITE数据库怎么

    2021-04-13 12:39:10
    UNITE数据库怎么用首先,从UNITE官网下载数据库,得到个压缩包拿到后,要将其转化Qiime2可用的,用下面的代码就可以实现:但是,我在做的时候发现,这样注释出来的有很unassigned,所以,需要这个库进行训练:...
  • 这只是概念上的关系,但是在真实的关系数据库中,我们只有外键,并没有这三种关系,那么我们就来说一说在关系数据库管理系统中,怎么实现这三种关系。 一对多 这里先讲解一对多,因为这个关系最简单。一对多和多对一...
  • 问题分解可以这样:我们简化难度,首先我们先实现随机从一张表中抽取条数据,并把它存储在个临时变量中,我们可以重复以上工作,对多张表进行随机抽取条数据并存储在临时变量,重点:我们把这些临时变量值组合...
  • 那么怎么使用mybatis进行一对多和多对一查询呢? 首先先在数据库中创建两个表 teacher表 student表 接下来进行多对一查询 在pojo包下创建实体类 之后在mybatis-config.xml中配置typeAliases元素 然后创建学生...
  • 加锁是实现数据库并 发控制的个非常重要的技术。在实际应用中经常会遇到的与锁相关的异常情况,当两个事务需要组有冲突的锁,而不能将事务继续下去的话,就会出现死锁,严 重影响应用的正常执行。 在数据库...
  • 这只是概念上的关系,但是在真实的关系数据库中,我们只有外键,并没有这三种关系,那么我们就来说一说在关系数据库管理系统中,怎么实现这三种关系。一对多这里先讲解一对多,因为这个关系最简单。一对多和多对一是...
  • 具体来说,数据库查询层面怎么实现?恰好最近在做的项目中也有这个功能,于是进行了一些探索和尝试。 功能分析 搜索框一般是对一个或个字段进行模糊/精确匹配的个功能。最简单的搜索框是对一个字段进行精确匹配...
  • 那么的实体类,个DAO就能够实现主要的数据库操作了。于是我用的不亦乐乎,但究竟是怎么做的,从来没有考虑过。如今用这些框架已经有段时间了,原谅我脑洞大开,想自己实现一下这样的类似的功能: ...
  • Qt对数据库的简单操作

    千次阅读 2016-12-25 21:49:39
    1.问:数据库的操作一般是指什么? 答:我觉得任何一门语言对数据库的简单操作无非就是增、...所以对于数据量大的存储,我觉得如果不使用线程的话,尽量使用存储过程实现对数据库的操作。 2.问:Qt对数据库怎么操作
  • 文本框本身不是带了个MaxLength 的属性么, 怎么还有长度控制的问题? 可能有人会这样想, 可是它是把汉字当做个字节来计算的, 而数据库中则把汉字认为是两字节, 这样就会存在问题. 当然,我首先是建议把数据库的...
  • 从.java到.class再到类加载执行的过程SQL语句进行先编译再执行,时间有限,,只有 星期时间,细节方面没考虑很,代码也没怎么重构,看起来有点凌乱。。。 1.执行过程思路:先根据sql语法把sql字符串切割成...
  • 在实际开发中,数据库里面一对多的形式是普遍的事情,比如本次业务中,是一个举报模块,首先需要填写举报人信息,然后可以举报多个员工或者合作伙伴,那么这里就是一个举报人对应多个员工或者合作伙伴。 在后台管理...
  • 大部分DBMS提供数据定义语言DDL(Data Definition Language)和数据操作语言DML(Data Manipulation Language),供用户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作。 数据库管理系统是数据库...
  • Qt提升SQLite数据库的读写速度

    千次阅读 2017-01-04 17:04:12
    1.问:数据库的操作一般是指什么? 答:我觉得任何一门语言对数据库的简单操作无非就是增、...所以对于数据量大的存储,我觉得如果不使用线程的话,尽量使用存储过程实现对数据库的操作。 2.问:Qt对数据库怎么操作

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 789
精华内容 315
关键字:

数据库一对多怎么实现