sql设置多个主键后,怎么实现建立关系

现在有两个表table1,table2,两个表都包含有a、b、c三个字段,现在把表table1的a、b、c设为主键,那么两表怎么建立关系,
alter table table2 add constraint fk_table1_table2 foreign key (a) references table1 (a)
像这样写会报错,怎么解

sql
0

7个回答

设置多个主键,就需要把多个主键都一起做外键关联

foreign key (a,b,c) references table1 (a,b,c)

1

要不就建个关系表存吧

1
 foreign  key(a,b,c) references table1(a,b,c));
1
    alter table table2 add constraint fk_table1_table2 foreign key (a,b,c) references table1 (a,b,c)
1

foreign key (a,b,c) references table1 (a,b,c),请采纳oyljerry用户的建议

1

a,b,c字段两张表都有,是不是因为这三个字段都是某个事物的一个属性,应该可以把这三个字段提取出来建个实体加个主键,这两张表引用这个主键。或者这两张表中,一张表本身就引用了另一张表的这三个字段,索性不要用复合主键,另外添个主键,其它表引用这个实体的时候,引用这个主键
select t1.* , t2.* from table1 t1 inner join table2 t2 on t1.a = t2.a and t1.b=t2.b and t1.c=t2.c

1

a,b,c字段两张表都有,是不是因为这三个字段都是某个事物的一个属性,应该可以把这三个字段提取出来建个实体加个主键,这两张表引用这个主键。或者这两张表中,一张表本身就引用了另一张表的这三个字段,索性不要用复合主键,另外添个主键,其它表引用这个实体的时候,引用这个主键
select t1.* , t2.* from table1 t1 inner join table2 t2 on t1.a = t2.a and t1.b=t2.b and t1.c=t2.c

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
1.17 表之间的关系(联合主键的一对一关系)
husband类和wife类为一对一关联关系,其中wife为联合主键。 1.wife类。id和name为联合主键 @Entity @IdClass(WifePK.class) public class Wife { private int id; private String name; private int age; public int getAge() { retur
使用PLSQL建立oracle主外键的步骤与小总结
使用PLSQL建立oracle主外键的步骤与小总结 1、为什么要使用主外键? 简化开发代码,提升代码维护的容易程度。我最近在做一个智能交通项目,在做一个资源配置的接口的时候出现了两张表:一张道路表:Road;一张断面表:Transection。断面大家可以把他理解为道路某处横着切开的一个面。所以一个断面它只可能属于一条道路。为了建立关联关系,我就把Road的Id主键作为Transectio...
SQL语句外键主键的一些笔记以及Mysql简单创建表
SQL的主键和外键的作用 SQL的主键和外键约束   SQL的主键和外键的作用:    外键取值规则:空值或参照的主键值。 (1)插入非空值时,如果主键表中没有这个值,则不能插入。 (2)更新时,不能改为主键表中没有的值。 (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。 (4)更新主键记录时,同样有级联更新和拒绝执行的选择。 简而言之,
mysql多对多的关系如何表示(主键也可做外键)
mysql> CREATE TABLE course ( -> course_NO INT PRIMARY KEY -> );Query OK, 0 rows affected (0.19 sec)mysql>mysql> CREATE TABLE teacher ( -> teacher_ID INT PRIMARY KEY -> );Query OK, 0
sql主键约束
数据字段属性:UNSIGNED :无符号的,声明该数据不允许为负数;ZEROFILL :0填充的,不足位数用0来填充  如  int(3),5      则005;AUTO_INCREMENT :自动增长的,通常用于设置主键,且为整数类型,可定义起始值和步长;NULL 、NOT NULL :空    和   非空DEFAULT :默认的,用于设置默认值 MySQL主键(Primary Key)是唯...
SQLserver中的视图与主外键的创建
一.背景 原来学过数据库的相关内容,只是形式上的,从来也没有实践过,徐徐飘过而已,如今在做机房时,很多知识需要用到视图,才开始去慢慢的实践。 视图:我理解的就是一张表,它把我们所需要的某个表或某几个表中的部分信息提取出来,形成了一张临时的表。 它主要有两个优点:1.简单,它呈现给我们的数据就是我们想要的数据,没有多余的。  2.安全,提供给用户它们权限范围内的数据 我为什么会用到视图?举
SQL语句,创建表,多个主键~
创建表,多个主键~ SQL语句如下:CREATE TABLE 表名(列名1 VARCHAR(2),列名2 INT,列名3 INT,列名4 VARCHAR(100)PRIMARY KEY(列名1,列名2,列名3));
SQL表多主键创建方法
按住CTRL键,然后鼠标点中要做为主键的字段,选择结束后,鼠标右键,设置主键即可。 最终结果
数据库一对多 联合主键
用户表 用户ID(主键), 用户名称…… 图片表 图片ID(主键), 图片名称, 图片保存位置…. 用户– 图片关系表 用户ID, 图片ID (用户ID和图片ID建联合主键), 序号(图片在该用户的显示顺序)…. 取图片如: 隔行取图片(取偶数行): SELECT A.图片ID, B.图片名称, …… FROM 用户– 图片关系表 A INNER JOIN 图片表 B...
mysql 创建 表 sql语句 带主键和外键
<br />本文示例使用 Birt 自带的 Sample 数据源,用到的数据基于图 1 所示的实体关系模型。从这个模型中可以看出,文中示例用到三张数据库表分别为 customers,orders 和 orderdetails。其中 customers 表的 customernumber 字段作为外键出现在 orders 表中,而 orders 表的 ordernumber 字段做为外键出现在 orderdetails 表中。<br /><br />create TABLE Customers(custome
mysql 添加主键和外键【深度解析】
1,主外键的定义 主关键字(primary key ): 是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录。   外关键字(foreign key) :  是用于建立或加强两个表数据之间的链接的一列或多列。 如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表(父表...
SQL语句在建表之后设置主键(转)
因为主键属于对表的一种约束,所以不能用添加字段的方式来添加,要使用添加约束的方法来设置,可按以下语句来设置:alter table xs add constraint [xs_p] primary key(学号) 注:xs是表名 其中的[xs_p]是给约束起的名字,可以随便起,但是[]必须要加上,上述语句就是将xs表的学号字段设为主键。 通过SQL查询分析器修改表的结构(设置主键)...
SQL语句中外键和主键的删除、添加方法
--删除外键  语法:alter table 表名 drop constraint 外键约束名  如:alter table s_student drop constraint fk_room;  --添加外键  语法:alter table 表名 add constraint 外键约束名 foreign key(列名) references 引用外键表(列名)  如:alter t
sql server创建复合主键
sql server创建复合主键   创建复合主键:    方法一:创建表之后,alter table table_name add primary key(字段1,字段2)        方法二:CREATE TABLE 表名 (字段名1 Int Not Null,                          字段名2 nvarchar(13) Not Null      
T-SQL学习之路之数据库完整性之参照完整性
表的一列或几列的组合的值在表中唯一地指定一行记录,择这样的一列或多列的组合作为主键可实现表的实体完整性,通过定义PRIMARY KEY约束来创建主键。        外键约束定义了表与表之间的关系,通过将一个表中一列或多列添加到另一个表中,创建两个表之间的连接,这个列就成为第二个表的外键,通过定义FOREIGN KEY约束来创建外键。       使用PRIMARY KEY约束或UNIQUE约
sql基础知识-----主外键、参照完整性
1.主键、外键------参照完整性 表A 的主键是表B 的中的字段,这个字段就是表B 的外键,而参照完整性也是由此而来。 其实很好理解,字需要去建两张表,按照上面的条件 CREATE TABLE Stores ( StoreCode char(4) NOT null primary key, Name varchar(40) not null , Address varchar(40
sqlserver设置两个及两个以上主键
** sqlserver设置两个及两个以上主键 ** 所谓主键是指能够当唯一标识出某条记录的某一列。 如果你想建立两个列及以上的列为主键,可能会发生错误。 首先要明确主键只有一个,但是我们可以设置主键组来设置主键。这样两个列就都是主键了。设置方法: 利用图形界面操作 选中方法。按住shift,再点击你要选中的列就ok了。 利用SQL语句 alter table tablename ...
表的主键和索引
出处:深入浅出索引原理 技术贴:索引建立、删除及使用 -------------------------------------------- 主键是啥 唯一标识一条记录,不能有重复的,不允许为空。 索引是啥 索引就像书的目录, 通过书的目录就准确的定位到了书籍具体的内容 这句话描述的非常正确, 但说了跟没说一样,所以还是要看原理。想要理解索引原理必须清楚一种数据结构「平衡树」(...
数据库中一个表中如何设置两个主键
如何设置多个主键
SQL Server 添加主外键 字段自增长
1.新建一个表[Student](先不考虑主外键 自增长) 可以使用SQL Server工具直接建立,右击’‘表’'选择新建表,如下: 也可以使用SQL语句直接建表,SQL语句如下: USE [BlogDemo] --使用BlogDemo数据库 CREATE TABLE [dbo].[Student]( ID int NOT NULL, StudentID int NOT ...
sql------创建主键、外键、联合主键
主键、外键、联合主键的创建
浅谈数据库主键和外键及索引
1、主键: 若某一个属性组(注意是组)能唯一标识一条记录,该属性组就是一个主键。主键不能重复,且只能有一个,也不允许为空。定义主键主要是为了维护关系数据库的完整性。 2、外键: 外键用于与另一张表的关联,是能确定另一张表记录的字段。外键是另一个表的主键,可以重复,可以有多个,也可以是空值。定义外键主要是为了保持数据的一致性。 3、索引: 索引是对表中一个或多个列的值进行排
sql 中设置联合主键怎么设
ALTER TABLE 表名字 ADD CONSTRAINT pk_表名字 PRIMARY KEY( SNumber, SDate ); SNumberSDate必须不能为空字段
DB2建表设置联合主键的方法
1.使用工具DbVisualizer 2.表名TABLE_USER 3.主键1:NAME_ID 主键2:VERSION 建表语句: create table DATA_STD ( NAME_ID varchar(10) NOT NULL, THEME varchar(100), VERSION varchar(7) NOT NULL ); 联合...
数据库为何要有复合主键(多主键)
为啥需要复合主键?
sql 中一个表设置两个主键是 将两个字段联合起来设置为主键 一个表只能有一个主键
CREATE TABLE orderitems ( order_num int(11) NOT NULL, order_item int(11) NOT NULL, prod_id char(10) NOT NULL, quantity int(11) NOT NULL, item_price decimal(8,2) NOT NULL, PRIMARY KEY (order_num,orde...
SQL主键约束和外键约束
主键约束 SQL PRIMARY KEY 约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录。 主键必须包含唯一的值。 主键列不能包含 NULL 值。 每个表都应该有一个主键,并且每个表只能有一个主键。 CREATE TABLE 时的 SQL PRIMARY KEY 约束 下面的 SQL 在 “Persons” 表创建时在 “P_Id” 列上创建 PRIMARY
SQL--当一张表的两个外键指向同一主键
最近遇到了这样一个问题,当一张表中有两个外键同时执行了另外一种表的主键,如何建立一张视图,让这两个外键都找到相应的信息。来实例吧:第一张表,归还记录:第二张表,用户表:问题就是,归还记录表里有两个字段,applicantUserID, operUserID,分别是申请人和操作人,他们作为外键同时指向了用户表的user ID,现在想通过这两个外键获取他们各个ID对应的姓名,即userName.分析:当
数据库外键:一对多/多对多关系
数据库事务四大特性ACID: 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) 基于原子性对存在重复数据的表进行拆分 一对多: # 用户表 一 class User(db.Model): __tablename__ = &quot;t_user&quot; id = db.Column(db.Integer, pri...
MySQL建表,主键,外键
1.创建表 MySql中,创建表是通过SQL语句create table实现的。语法形式如下: create table 表名( 属性名 数据类型[完整性约束条件],            属性名 数据类型[完整性约束条件], 伦理片 http://www.dotdy.com/             属性名 数据类型);     其中,“表名”参数表示要创建的表名
SQL数据库中主键和外键的应用实例
  数据库 什么是数据库主键(Primary Key)? 数据库主键(Primary Key):指的是一个列或多列的属性组合,其属性值能唯一标识一条记录,通过它可强制表的实体完整性。   例如: (tb_Book 表:BookName、Author、Publishing、ISBN、BookClass、Count......) 其中每本图书的ISBN号是唯一的,ISBN即可为...
一对一关联关系(基于外键映射和基于主键映射两种方式)
终于讲到了一对一的关联关系,好了,不用再讲年级和学生的“故事”了。我们来讲讲经理和部门的故事吧。 现在存在两个这样的持久化类: Manager: public class Manager { private int mgrId; private String mgrName; private Department department; // 省略构造方法和set、get方法......
关于联合外键
1.联合外键的定义语法:       ALTER TABLE 外键表名 ADD CONSTRAINTS/CONSTRAINT  外键名 FOREIGN KEY (外键列名1,外键列名2,外键列名3,......) REFERENCES 主键表名 (主键列名1,主键列名2,主键列名3,......); 外键列名:作为外键的列的名称。 主键列名:作为主键的列的名称。 2.联合外键定义时的注意事...
父表、子表、主键、外键的关系
相信初学数据库的学员来说,父表和子表、主键和外键这两对关系的理解肯定比较模糊,其实这个四者可以放一起理解。 简单的讲:当两个表建立一对多关系的时候,"一"的那一端是父表,"多"的那一端是子表. 父表设置一个主键 子表设置一个外键 外键与主键相关联  B表引用A表的字段作为外键,那么A表是主表,B表是从表。就像A是B的父亲一样,儿子可以继承父亲的遗产,可以将父亲的东西拿来自己用。用
sqlserver为已存在的表添加主键和索引默认值
添加主键 alter table 表名 add  主键列名 int identity(1,1) primary key --主键列名不存在时- alter table 表名 add constraint  主键名(主键名字不能重复) primary key(主键列名)        --主键列明存在时- 添加默认值 alter table 表名 add  默认名(不能重复) default...
关于数据库主键和外键,索引
一、什么是主键、外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 课程表(课程编号,课程名,学分) 其中课程编号是唯一的,课程编号就是一个主键 成绩表(学号,课程号,成绩) 成绩表中单一一个属性无法唯一标识一条...
主键索引的创建
主键索引 当一张表,把某个列设为主键的时候,则该列就是主键索引 1:添加索引 1:主键索引(创建表时添加) CREATE TABLE Primary_key( id INT UNSIGNED COMMENT '无符号' PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(32) NOT NULL DEFAULT ' ');
关于数据库主键和外键(终于弄懂啦)
一、什么是主键、外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键  比如   学生表(学号,姓名,性别,班级)  其中每个学生的学号是唯一的,学号就是一个主键  课程表(课程编号,课程名,学分)  其中课程编号是唯一的,课程编号就是一个主键  成绩表(学号,课程号,成绩)  成绩表中单一一个属性无法唯一标识
sql 关于一表多个主键唯一性的约束
1.对于一般的表,我们只需设一个主键,防止重复,但是我们如果设置多个主键,是每个主键都有唯一性吗?还是多个主键组合起来具有唯一性 2.答案肯定是多个主键合起来具有唯一性,话说太多,现在上例子 3.例如,我建了有三个主键的表,如图: 4.我可以如下图所示添加数据,说明各个主键的唯一性不是单独的,如果是单独的,肯定无法添加了 5.但是我不可如下图,插入数据:  ...
SQL Server中多对多关系的实现
多对多的关系必须另外添加一张表来表示 --班级 create table banji ( banji_id int constraint PK_banji primary key, --主键 banji_num int not null, banji_name nvarchar(20) ) --教师 create table jiaoshi ( jiaoshi_id int con
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 怎么建立课程表数据库 怎么建立课程表数据库