为什么需要三张表之一对一表结构设计?

为什么需要三张表?这得从表结构的设计来说起。关于表结构的设计,一般有三种方式:
1)一对一
2)一对多
3)多对多
其中最后两种是常用的,一对一基本上不用了,所以下面对于一对一表结构的介绍,大家仅作了解,后面2种要着重了解,因为答案就在里面。

先说一对一这种设计表的方式,它是这样的一种场景,假如说咱们现在有一张表叫公司表,然后公司表里边有公司的ID,名称;还有一张地址表,这个地址表也有一个字段ID,还有一个地址。完了我们如何让这两张表做一个一对一的关系?

通常这么做就可以了,我们只需要把这2张表的主键设成相同,那他们就会产生一个一对一的效果,我们看下图:
在这里插入图片描述

什么叫把主键相同呢?假如公司表里面有一个1号的公司,名称为千锋教育,法人为**;
为了让公司表和公司地址表产生一对一的效果,我们就可以给这个公司地址表也设一个’公司ID’的主键,那么在插入数据时,如果插入的是千锋相关数据,那’公司ID’就是1,然后其他的按照相关内容来填就可以了,这就是主键相同的一种对应方式(如下图);
在这里插入图片描述

这么看,只要公司ID为1,大家就知道它表示的就是千锋,法人是***,公司地址在北京,公司成立时间是2000年。

同样的道理,如果我们再来插入一个阿里巴巴公司。阿里巴巴咱们给它的公司ID来个2,那当我们往公司地址表里插入阿里巴巴公司地址时,公司ID自然也只能为2,这就叫主键唯一对应的一种一对一的方式。两张表搞一个主键一对一,这里边这张数据对应后面这一段数据对不对?这是一个一对一的表结构设计。

为什么说现在一对一表结构设计很少用呢?因为它很麻烦,其实这两张表把它们搞成一张表就ok了,直接把地址表做成公司表里面的一个属性就可以了,也就是加个字段就ok了,如下图:
在这里插入图片描述

说完一对一的表结构设计,咱们下一篇再来聊什么是一对多表结构设计。

### 回答1: MySQL 会锁是因为在执行某些操作时需要保证数据的一致性和完整性。这就意味着在一个事务中对的修改操作需要暂时阻止其他事务对的访问或修改,以避免并发冲突。 MySQL 支持多种类型的锁,包括共享锁(S锁)和排他锁(X锁)。共享锁允许多个事务并发访问,但不能修改数据。排他锁则禁止其他事务对进行任何访问,直到该锁被释放。 通常情况下,MySQL 会在执行以下操作时锁: - 使用 `SELECT … FOR UPDATE` 或 `SELECT … LOCK IN SHARE MODE` 语句查询数据时。 - 使用 `INSERT`、`UPDATE` 或 `DELETE` 语句修改数据时。 - 使用 `ALTER TABLE` 语句修改结构时。 - 使用 `TRUNCATE TABLE` 语句清空数据时。 另外,MySQL 还支持手动加锁的功能,可以使用 `GET_LOCK()` 和 `RELEASE_LOCK()` 函数来获取和释放锁。 常见的锁策略包括: - 行锁:在修改行数据时加锁,锁定的是特定的行。 - 页锁:在修改页数据时加锁,锁定的是特定的页。 - 锁:在修 ### 回答2: MySQL会对进行锁定的原因有多种,主要包括以下几个方面: 1. 数据库事务:MySQL中的事务是一组对数据库操作的逻辑单元,保证了数据的一致性和完整性。在事务执行期间,MySQL会为被操作的数据加上锁定,以确保数据的一致性。 2. 并发处理:当多个用户同时对同一个进行读写操作时,可能会引发数据的不一致性。为了避免这种情况发生,MySQL会对进行锁定,以保证操作的原子性。 3. 数据库备份和恢复:在进行数据库备份和恢复时,MySQL需要确保备份数据的一致性。为了防止其他用户对备份数据的修改,MySQL会对备份涉及的进行锁定。 4. 数据库优化和索引:MySQL在进行数据库优化和索引构建时,需要进行锁定以避免数据的修改和删除。这样可以保证优化的准确性和索引的正确性。 总的来说,MySQL进行锁定是为了保证并发操作的数据一致性和完整性,防止数据的不一致和损坏。同时,锁定也是为了在数据库的备份、恢复、优化和索引构建过程中保证数据的正确性和完整性。 ### 回答3: MySQL中,锁是一种数据库锁定机制,用于控制对数据库的并发访问。 MySQL之所以会锁,主要原因如下: 1. 保持数据的一致性:为了保证数据的完整性和一致性,MySQL在执行修改操作时,会对涉及的进行锁定,防止其他并发操作对数据产生干扰。例如,当有一个事务正在对某张进行更新操作时,不希望其他事务同时对该进行读取或写入,以免出现脏读、不可重复读等问题。 2. 避免冲突:当多个事务同时对同一张进行写操作时,可能会导致数据冲突,为了避免这种情况的发生,MySQL采用锁机制来保证事务的隔离性,每个事务在访问表之前都需要获取相应的锁,只有获得锁的事务才能对进行修改操作,其他事务需要等待锁的释放。 3. 提高并发性能:MySQL采用锁的方式可以减少一些锁粒度更小的并发冲突,锁定整个可以减少锁的竞争和开销,从而提高数据库的并发性能。 需要注意的是,MySQL锁是粗粒度锁,并发操作较多的场景下,锁可能导致其他事务的等待时间较长,影响系统性能,因此在设计数据库时,需要综合考虑并发访问的策略和业务需求,适当选择合适的锁机制。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值