-
2021-03-07 10:56:48
在进行多表的联接查询前,我们需要对多表进行相关的处理,比方说确定主从关系,建立外键,联接时确定中间表等操作.
一般情况下,建表时先建主表,再建从表(插入数据时也是一样的),那怎么确定主从关系呢,进一步建立外键约束?
比方说,有三个表,customers表(customerid--pk) --对于 orders表和orderitems表来说是主表,反过来后两个为从表
orders表(orderid--pk;customerid--fk) --对于orderitems表来说是主表
orderitems表(orderitemid---pk;bookid,quantity,orderid---fk),
注意:一张表只能有一个主键,但可以有多个外键
从这三张表来看,orders表的customerid列为外键,它来自表customers的主键列customerid,因此这就是我们常说的外键引用主键,被引用的表为主表,引用的表为从表.即customers表为主表,orders表为从表;同样的道理下,orderitems表中的orderid列为外键,来自于(引用)表orders的主键列orderid,故针对这两个表来说,orders表为主表,而orderitems表为从表.
对于删表的顺序,刚好与建表的次序相反,先删从表再删主表,即对于上面三个表来说,先删表orderitems,再删表orders,最后才能删掉customers表.
在进行多表联接的查询操作时,我们可以以orders表作为中间表,因为他和其他两个表都有关系.即:
select * from orders a join customers c
on a.customerid=c.customerid
join orderitem t
on t.orderid=a.orderid
更多相关内容 -
主从表主键外键
2021-03-07 10:56:03A表的主键在B表中充当外键,谁是主表,谁是子表?A为主表B为从表个人认为:外键是约束的一种。不存在主从关系,只存在引用关系,如部门表与员工表。每个员工都属于某个部门,必须与某个部门资料对应。主从表的情况:...A表的主键在B表中充当外键,谁是主表,谁是子表?
A为主表
B为从表
个人认为:
外键是约束的一种。不存在主从关系,只存在引用关系,如部门表与员工表。
每个员工都属于某个部门,必须与某个部门资料对应。
主从表的情况:类似于订单表与订单明细表的关系。
希望以上有所帮助.
有两个表 A表中的C字段里面的内容是B表中的主键,并且值有多个,请问数据库该怎么设计啊?
create table B
(
C char(6) primary key,
C_Name varchar(50) not null
)
go
create table A
(
A_ID char(6) primary key,
A_Name varchar(100) not null,
C char(6) references B(C) --将A表中C字段设置外键
)
go
从表的外键与主表的主键的列名必须相同吗?值呢?
列名不一定要相同,但是外键的取值要么从主键的域中取要么取空值,这在数据库中叫做参照完整性规则。
主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响。
必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。而主键和外键的结构是这个设计过程的症结所在。一旦将所设计的数据库用于了生产环境,就很难对这些键进行修改,所以在开发阶段就设计好主键和外键就是非常必要和值得的。
主键:
关系数据库依赖于主键---它是数据库物理模式的基石。主键在物理层面上只有两个用途:
1. 惟一地标识一行。
2. 作为一个可以被外键有效引用的对象。
基于以上这两个用途,下面给出了我在设计物理层面的主键时所遵循的一些原则:
1. 主键应当是对用户没有意义的。如果用户看到了一个表示多对多关系的连接表中的数据,并抱怨它没有什么用处,那就证明它的主键设计地很好。
2. 主键应该是单列的,以便提高连接和筛选操作的效率。
注:使用复合键的人通常有两个理由为自己开脱,而这两个理由都是错误的。其一是主键应当具有实际意义,然而,让主键具有意义只不过是给人为地破坏数据库提
供了方便。其二是利用这种方法可以在描述多对多关系的连接表中使用两个外部键来作为主键,我也反对这种做法,理由是:复合主键常常导致不良的外键,即当连
接表成为另一个从表的主表,而依据上面的第二种方法成为这个表主键的一部分,然,这个表又有可能再成为其它从表的主表,其主键又有可能成了其它从表主键的
一部分,如此传递下去,越靠后的从表,其主键将会包含越多的列了。
3. 永远也不要更新主键。实际上,因为主键除了惟一地标识一行之外,再没有其他的用途了,所以也就没有理由去对它更新。如果主键需要更新,则说明主键应对用户无意义的原则被违反了。
注:这项原则对于那些经常需要在数据转换或多数据库合并时进行数据整理的数据并不适用。
4. 主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。
5. 主键应当有计算机自动生成。如果由人来对主键的创建进行干预,就会使它带有除了惟一标识一行以外的意义。一旦越过这个界限,就可能产生认为修改主键的动机,这样,这种系统用来链接记录行、管理记录行的关键手段就会落入不了解数据库设计的人的手中。
-
mysql 外键的使用,以及主从表的区别
2020-04-03 18:19:43目的:演示mysql的外键的创建、删除、外键的级联操作 使用mysql创建2张表:按顺序依次创建班级class表和学生表students 创建外键时,可以为外键起个名字(constraint后面紧挨的字符串为),该名字在删除外键时会被...目的:演示mysql的外键的创建、删除、外键的级联操作
使用mysql创建2张表:按顺序依次创建班级class表和学生表students
创建外键时,可以为外键起个名字(constraint后面紧挨的字符串为),该名字在删除外键时会被使用。
注意:如果先创建学生表students并同时创建外键指向班级表class,会报错,因为class表不存在。
要想删除表class里面1班的数据,同时删除学生表students里面小明的数据,则要设置students表的外键的on delete cascade
先删除原来的外键。
on update和on delete的方法类似。
注意:
- 班级表class为主表,学生表students为从表。
- 主从表区别,看外键在哪个表,外键在学生表,则学生表students为从表,班级表class为主表。
on delete、on update表示事件触发限制,可设参数
外键的级联操作的类型包括:-
restrict(限制外表中的外键改动):默认值,抛异常。on delete | update restrict
代表在主表进行删除和更新时,会查看是否存在外键依赖,如果有则不允许删除 -
cascade(级联,跟随外键改动):在主表进行操作时,如果主表的记录删除掉,如果有外键依赖,那么则删除子表中相关联的那条记录
-
set null:
在主表进行操作时 如果有外键依赖 那么将子表中的数据设置为null -
no action:什么都不做
总结:分清主从表,因为当删除从表时一条数据时,对主表没有影响。当删除主表的一条数据,如有外键依赖,则会连从表的相关数据一起删除。
删除从表测试如下:
删除主表测试:
-
数据库主从表、关系;主、外键关系和作用(转)
2021-01-19 17:07:06主外键的关系结构:1,一对一,不用引用主外键,把它们放一个表中即可例如:一个学生只能有一个卡号,那么学生跟卡号放在一个表中即可2,一对多,引用主外键,‘一’相当于主键,‘多’即是引用主键的外键。...从数据库是主数据库的备份,当主数据库变化时从数据库要更新,这些数据库软件可以设计更新周期。这是提高信息安全的手段。主从数据库服务器不在一个地理位置上,当发生意外时数据库可以保存。
主外键的关系结构:
1,一对一,不用引用主外键,把它们放一个表中即可
例如:一个学生只能有一个卡号,那么学生跟卡号放在一个表中即可
2,一对多,引用主外键,‘一’相当于主键,‘多’即是引用主键的外键。
例如:一个班级可以有多个学生,并且一个学生只能属于一个班级,这就是一对多的关系;
3,多对多关系,需要创建一个表,表中需要两个字段,分别是引用,两个多对多字段主键的外键。
例如:
学生表(学号,姓名,…………)主键:学号
课程表(课程号,课程名,…………)主键:课程号
一个学生能选多门课,一个课可以由多个学生选,即是多对多关系,
那么成绩表就是它们之间关系的体,
即引用成绩表(学号,课程号,成绩)。这里学号和课程号,分别是学生表和课程表中学号和课程号的外键
在我们现在这个阶段中,主要还是使用,主外键间的一对多的关系
主键Primary key,唯一标示一个实体。是保证数据库的实体完整性,保证数据中数据的正确性和合理性,取值非空唯一。
外键Foreign,是用来使表与表之间联系。用来保证数据库的参照完整性,外键的取值必须来自参照表参照列的值,可以为空也可不为空。
外键的作用:
保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值!
一、什么是主键、外键
关系型数据库中的一条记录中有若干个属性若其中某一个属性组(注意是
组)能唯一标识一条记录该属性组就可以成为一个主键
比如
学生表(学号姓名性别班级)
其中每个学生的学号是唯一的学号就是一个主键
课程表(课程编号,课程名,学分)
其中课程编号是唯一的,课程编号就是一个主键
成绩表(学号,课程号,成绩)
成绩表中单一一个属性无法唯一标识一条记录学号和课程号的组合才可
以唯一标识一条记录所以学号和课程号的属性组是一个主键
成绩表中的学号不是成绩表的主键但它和学生表中的学号相对应并且
学生表中的学号是学生表的主键则称成绩表中的学号是学生表的外键
同理成绩表中的课程号是课程表的外键
定义主键和外键主要是为了维护关系数据库的完整性总结一下
1.主键是能确定一条记录的唯一标识比如一条记录包括身份正号姓
名年龄。
身份证号是唯一能确定你这个人的其他都可能有重复所以身份证号
是主键。
2.外键用于与另一张表的关联。是能确定另一张表记录的字段用于保持
数据的一致性。
比如A表中的一个字段是B表的主键那他就可以是A表的外键。
二、主键、外键和索引的区别
主键、外键和索引的区别?
主键外键索引
定义唯一标识一条记录不能有重复的不允许为空表的外键是另一表
的主键,外键可以有重复的,可以是空值该字段没有重复值但可以有一个空值
作用用来保证数据完整性用来和其他表建立联系用的是提高查询排序的
速度
个数主键只能有一个一个表可以有多个外键一个表可以有多个惟一索引
聚集索引和非聚集索引的区别?
聚集索引一定是唯一索引。但唯一索引不一定是聚集索引。
聚集索引在索引页里直接存放数据而非聚集索引在索引页里存放的是
索引这些索引指向专门的数据页的数据。
三、数据库中主键和外键的设计原则
主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。主键和外
键的设计对物理数据库的性能和可用性都有着决定性的影响。
必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。而主键和
外键的结构是这个设计过程的症结所在。一旦将所设计的数据库用于了生产环
境就很难对这些键进行修改所以在开发阶段就设计好主键和外键就是非常
必要和值得的。
主键
系数据库依赖于主键---它是数据库物理模式的基石。
主键在物理层面上只有两个用途
1.惟一地标识一行。
2.作为一个可以被外键有效引用的对象。
基于以上这两个用途下面给出了我在设计物理层面的主键时所遵循的一
些原则
1.主键应当是对用户没有意义的。如果用户看到了一个表示多对多关系的
连接表中的数据并抱怨它没有什么用处那就证明它的主键设计地很好。
2.主键应该是单列的以便提高连接和筛选操作的效率。
注使用复合键的人通常有两个理由为自己开脱而这两个理由都是错误
的。其一是主键应当具有实际意义然而让主键具有意义只不过是给人为地
破坏数据库提供了方便。其二是利用这种方法可以在描述多对多关系的连接表
中使用两个外部键来作为主键我也反对这种做法理由是复合主键常常导
致不良的外键即当连接表成为另一个从表的主表而依据上面的第二种方法
成为这个表主键的一部分然这个表又有可能再成为其它从表的主表其主
键又有可能成了其它从表主键的一部分如此传递下去越靠后的从表其主
键将会包含越多的列了。
3.永远也不要更新主键。实际上因为主键除了惟一地标识一行之外再
没有其他的用途了所以也就没有理由去对它更新。如果主键需要更新则说
明主键应对用户无意义的原则被违反了。
注这项原则对于那些经常需要在数据转换或多数据库合并时进行数据整
理的数据并不适用。
4.主键不应包含动态变化的数据如时间戳、创建时间列、修改时间列等。
5.主键应当有计算机自动生成。如果由人来对主键的创建进行干预就会
使它带有除了惟一标识一行以外的意义。一旦越过这个界限就可能产生认为
修改主键的动机这样这种系统用来链接记录行、管理记录行的关键手段就
会落入不了解数据库设计的人的手中。
四、数据库主键选取策略
我们在建立数据库的时候需要为每张表指定一个主键所谓主键就是能
够唯一标识表中某一行的属性或属性组一个表只能有一个主键但可以有多
个候选索引。因为主键可以唯一标识某一行记录所以可以确保执行数据更新、
删除的时候不会出现张冠李戴的错误。当然其它字段可以辅助我们在执行这
些操作时消除共享冲突不过就不在这里讨论了。主键除了上述作用外常常
与外键构成参照完整性约束防止出现数据不一致。所以数据库在设计时主
键起到了很重要的作用。
常见的数据库主键选取方式有
·自动增长字段
-
mysql之sequelize主从表关联
2022-03-18 14:35:56建立连表关系 Blog.belongsTo(User, { foreignKey: 'userid' }) belongsTo:属于 用belongsTo来关联两张表,foreignKey设置外键。 Blog属于user User.hasMany(Blog, { foreignKey: 'userid' }); hasMany:有多个 ... -
关于mysql数据库主从同步报表主外键约束错误
2015-04-17 14:46:081. 因为配置数据库主从关系,需要数据库表结构一样,可能会出现下列情况: a. 直接把需要同步的表从主服务器的库表拖到从服务器的,这个时候因为主服务器的一些表有主外键联系,也会一并在从服务器,当主服务器的... -
MySQL外键(详解)
2021-11-17 17:13:28MySQL外键(详解) 什么是外键: 外键是指引用另外一个表中的一列或多列数据,被引用的列应该具有主键约束或者唯一性约束(简单来说外键是另一个表的主键或者唯一约束)。外键可以有重复的, 可以是空值,用来... -
MySQL更新主键的同时更新其他表的外键
2021-12-01 20:16:00要根据条件更新user表中的主键Id,同时也要更新其他表中的外键userId。 【描述】 根据查询出来的条件,去更新tb_user表中的主键Id,同时更新tb_organization_user和tb_tenant_product_user表中的外键userId, 其他... -
mysql外键无法删除数据的情况
2021-02-08 05:46:29最近碰到一次在msyql主从删除数据,居然报错delete from pt_game_server where id=2;ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`wonder_center`.`pt_server_area... -
MYSQL INNODB 外键约束 主表和从表
2021-01-27 15:27:56外键中主表与从表的定义主表(父表)在数据库中建立的表格即Table,其中存在主键(primary key)用于与其它表相关联,并且作为在主表中的唯一性标识。从表(子表)以主表的主键(primary key)值为外键 (Foreign Key)的表,... -
MySQL: 4、多表、外键、数据库设计
2021-01-18 22:45:36一、多表1、主键:用来唯一标识一条记录,不能有重复的,不允许为空,用来保证数据的完整性,并且主键只能有一个2、外键:表的外键是另一个表的主键,外键可以重复,可以为空,但是为空数据就跟与之相关联的表没关系... -
mysql中设置外键约束及主表从表的关系
2021-01-19 03:31:11alter table stu5 add constraint 编号 foreign key (bh) ...说明:stu2和stu5是两张表,“编号”为字段bh的约束名(是stu5表中的一个属性),bh是stu2表中的主键,而bh并不是stu5的主键,那么则称stu2为主表,stu5为... -
MySQL - 多表&外键&数据库设计
2021-01-18 22:45:33MySQL - 多表&外键&数据库设计1 多表1.1 多表的意义实际开发中,一个项目通常需要很多张表才能完成。例如一个商城项目的数据库,需要有很多张表:用户表、分类表、商品表、订单表....1.2 单表的缺点1.2.1 ... -
02_01_MySQL多表&外键&数据库设计
2021-02-08 15:44:23上个阶段 进入数据库阶段 学习MySQL阶段 mysql基础与sql语句 多表 多表简述 实际开发中,一个项目通常需要很多张表才能完成。 例如一个商城项目的数据库,需要有很多张表:用户表、分类表、商品表、订单表… 单表的... -
mysql如何建立外键
2021-04-21 00:43:20mysql如何建立外键一个主表blog博客表,DROP TABLE IF EXISTS `blog`;CREATE TABLE `blog` (`id` int(11) NOT NULL auto_increment,`title` varchar(11) default NULL,`content` varchar(11) default NULL,PRIMARY ... -
mysql外键总结
2021-10-24 11:36:18MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。 外键用来建立主表与从表... -
Linux_MySQL 表的约束(主键,唯一键,外键,主表,从表)
2022-04-18 19:37:19MySQL本质是一套存储数据的方案,除了解决基本的数据存储外,还需要一定的约束条件,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性,减少用户的误操作可能性。 约束是MySQL通过限制用户操作的方式,来... -
[MySQL/主从同步同步1452主外键错误]
2021-01-27 20:08:13大家MySQL主从同步的时候最头痛的莫过于 code 1452的状态码,这个原因是你的主从数据不一致导致主外键错误,解决也很简单,但是有些朋友没有深入了解MySQL的话 会对主外键陌生,导致无法正确的再从上面插入主数据,... -
Mysql外键约束设置使用方法
2021-02-07 10:39:15Cannot add foreign key constraint (foreign keys)检查 主从表两个字段的属性是否一致如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的,不同的... -
MySQL中的外键是什么、有什么作用
2021-01-30 08:07:01近期自学数据库MySQL。然后有个疑问。一直不得其解。查询了相关资料。最后还是没有解决。我的疑问是 "使用外键约束" ,然后我对 "外键" 这个词不是非常理解。查询相关资料都是讲一些术语。说外键的主要作用是:保持... -
Mysql主键约束与外键约束
2021-09-01 20:49:17声明了外键约束的列,插入的值必须在另一个表中出现过才行;外键列要和对应的主键列类型要保持一致 目的就是为了让两个表之间产生关联 foreign key(外键列) references 另一个表 (主键列) auto_increment 自动增长... -
MySQL中的外键是什么、有什么做用
2021-02-11 21:57:18最近自学数据库MySQL,而后有个疑问,一直不得其解,...关于外键,我有本身的一些理解,可是不晓得是否正确,举个例子来表达个人见解:假如如今须要创建一个表,一个什么样的表呢?一个班级的学生我的信息表:mysq... -
mysql为何不建议使用外键
2022-04-13 09:51:21mysql为何不建议使用外键_为什么很多mysql课程不推荐用物理外键? 大机灵聪明绝顶 于 2021-01-18 21:21:46 发布 1408 收藏 文章标签: mysql为何不建议使用外键 版权 刚好今晚有师弟问我这个问题,就来搜搜。以前我... -
关于用C#数据库控件进行主从表增加记录的外键值的问题
2021-02-07 14:15:23现象:当主表和从表都没有一条记录时(数据库为空),主从表一起保存后得到从表的外键值为0,没有与主表的主键对应起来.2.问题环境:A)SQLserver2000数据库,VS.net2005, 主表标识字段(自增长)为主键M_ID,从表没有与主表... -
MySQL 语句外键 连接
2019-02-27 14:26:46外键 定义: 外键是指引用另一个表中的一列或多列,被引用的列具有主键约束或唯一约束。 目的: 外键用于建立和加强两个...在MySql中只有 InooDB 类型的表才支持外键。 (2)定义外键名时,不能加引号。 如 constrai... -
MySQL数据库的扩展,主从表
2021-07-07 23:19:41这里写目录标题一级目录复制表结构复制表数据删除表内容 一级目录 if not exists: 表示检测要创建的表是否已存在,如果不存在就创建。 int(4) zerofill: 表示若数值不满4位数,则前面要用“0”填充,例如:0001. ... -
在MySQL中如何设置主键和外键
2021-02-01 20:01:18展开全部工具/原料袭电脑 MySQL方法/步骤2113设置主键:1、通5261过4102终端进入到mysql命令行工具。2、通过use关键字进行到目标数据库1653里。3、如原表已有主键,先把原来的主键删除掉,通过DROP PRIMARY KEY命令... -
MySQL外键约束(FOREIGN KEY)是什么?
2020-05-16 18:02:40对MySQL中的外键约束从基础知识开始,说明了创建外键约束的原则,语法及特性,用案例的方式对外键约束进行解说。 -
MYSQL主从复制 一主一备
2021-01-18 20:42:141、主服务器创建,允许从服务器访问mysql二进制文件的用户。登录mysql执行下面 grant语句。MariaDB [(none)]> grant replication slave , replication client on *.* to rep1@'%' identified by 'rep123456';解析...