精华内容
下载资源
问答
  • 一张表两个主键
    千次阅读
    2017-10-25 18:32:59
    @Entity
    @Table(name = "cm_user_organization_role")
    @IdClass(CmUserOrganizationRoleVo.class)
    @SuppressWarnings("serial")
    public class CmUserOrganizationRoleVo implements Serializable{
    	
    	@Id
    	@Column(name = "user_code")
    	private String userCode;
    
    	@Id
    	@Column(name = "organization_code")
    	private String organizationCode;
    
    	@Id
    	@Column(name = "group_code")
    	private String groupCode;



    将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并要重写equals和hashcode.最后在主类中(该类包含联合主键类中的字段)将联合主键字段都注解为@Id,并在该类上方将上这样的注解:@IdClass(联合主键类.class)

    1、数据库的每张表只能有一个主键,不可能有多个主键。

    2、所谓的一张表多个主键,我们称之为联合主键。

         注:联合主键:就是用多个字段一起作为一张表的主键。

    3、主键的主键的作用是保证数据的唯一性和完整性,同时通过主键检索表能够增加检索速度。


    更多相关内容
  • 在我们开发的过程中,总感觉一张表就一个主键。但是事情往往没有我们想象的那么简单,一张表其实也是可以有多个主键。 如上图所示,其实说多个主键也不对,可以说是复合主键。意思为 这2个字段都不是唯一的,2个...

    在我们开发的过程中,总感觉一张表就一个主键。但是事情往往没有我们想象的那么简单,一张表其实也是可以有多个主键。
    在这里插入图片描述
    如上图所示,其实说多个主键也不对,可以说是复合主键。
    如下添加数据:
    在这里插入图片描述
    提示违反唯一约束,意思说明两个主键字段不能同时一样。

    参考网址
    http://www.sohu.com/a/339355966_120047065
    https://www.cnblogs.com/CNty/p/10941398.html
    https://www.jianshu.com/p/8625b3b639b3

    这辈子坚持与不坚持都不可怕,怕的是独自走在坚持的道路上!!!

    欢迎加入技术群聊
    在这里插入图片描述

    展开全文
  • 一张表两个主键 在另外一张表中怎么用外键引用它? 麻烦帮忙解决一下。 非常感谢。
  • 一张表可以有多少个主键

    千次阅读 2021-01-19 05:33:29
    转自:http://blog.csdn.net/for12/article/details/49300843今天在共工作,做老项目维护的时候无意中发现一张表居然有三个主键。...2、所谓的一张表个主键,我们称之为联合主键。注:联合主键:就是用多个字段一起...

    转自:http://blog.csdn.net/for12/article/details/49300843

    今天在共工作,做老项目维护的时候无意中发现一张表居然有三个主键。吓死宝宝了,然后尝试着建表建主键,但是都不能成功。

    doubt.gif

    难道是我写的有问题,最后通过查资料总终于解决了。

    1、数据库的每张表只能有一个主键,不可能有多个主键。

    2、所谓的一张表多个主键,我们称之为联合主键。

    注:联合主键:就是用多个字段一起作为一张表的主键。

    3、主键的主键的作用是保证数据的唯一性和完整性,同时通过主键检索表能够增加检索速度。

    下面聊聊怎么创建联合主键:

    1、GUI中同时选中多列,点击设置为主键。

    2、sql语句将多列设置为主键:

    一种是在建表时就写出,语句如下:

    Create Table 表名 (字段名1 Int Not Null,

    字段名2 nvarchar(13) Not Null Primary Key (字段名1, 字段名2),

    字段名3…………

    字段名N………… )

    另一种是在建表后更改,语句如下:

    ALTER TABLE 表名 WITH NOCHECK ADD

    CONSTRAINT [PK_表名] PRIMARY KEY  NONCLUSTERED

    (

    [字段名1],

    [字段名2]

    )

    通过以上两种方式就解决了联合主键的问题。

    展开全文
  • 许多时候实现目标功能都会遇到一张表里两个外键指向同一个主键,即为用一个1关联另一个2,1里却使用了两个相同的外键去关联2的主键,但是指向2的事物是不同的,若不懂,直接看下列例子。



    前言

    前言:许多时候实现目标功能都会遇到一张表里两个外键指向同一个表的主键,即为用一个表1关联另一个表2,表1里却使用了两个相同的外键去关联表2的主键,但是指向表2的事物是不同的,若不懂,直接看下列例子。

    官方文档处理这类问题给的事例——文档链接
     




    一、事物例子

    Flask开发中,作者是在处理评论回复遇到的问题,回复评论表,需要被回复的用户id和用户的id,两个id都指向用户表,向用户表查询得到发出评论的用户和被回复的用户。

    class Reply_comment(db.Model):
        # 回复主评论表
        id = db.Column(db.Integer, primary_key=True, autoincrement=True)
        r_comment = db.Column(db.BLOB, nullable=False)
        r_comment_existence = db.Column(db.Integer, default=1)
        r_comment_time = db.Column(db.DateTime, default=datetime.now)
        comment_id = db.Column(db.Integer, db.ForeignKey('comment.id'))
         #关联同一一个表————用户表,下两行是主要需要我们处理的
        visitor_id = db.Column(db.Integer, db.ForeignKey('visitor.id')) 
        replied_visitor_id = db.Column(db.Integer, db.ForeignKey('visitor.id')) 
    
    class Visitor(db.Model):
        # 用户表,不用太在意,只是被上表作为关联主键id作用
        id = db.Column(db.Integer, primary_key=True, autoincrement=True)
        username = db.Column(db.String(15), nullable=False)
        email = db.Column(db.String(20), nullable=False)
        rdategtime = db.Column(db.DateTime, default=datetime.now)
        visitor_type = db.Column(db.Integer, default=3)
        icon = db.Column(db.String(100))

     面对两个外键 visitor_id 和 replied_visitor_id 指向同一表外键不做处理是不被允许的,强行运行就会报错,即使设置了普通的相关 relationship() 参照,报错会提示设置 foreign_keys 参数,只要根据报错提示处理即可。



    二、处理方法



    1.设置foreign_keys 参数

    代码如下:

    class Reply_comment(db.Model):
        # 回复主评论表
        id = db.Column(db.Integer, primary_key=True, autoincrement=True)
        r_comment = db.Column(db.BLOB, nullable=False)
        r_comment_existence = db.Column(db.Integer, default=1)
        r_comment_time = db.Column(db.DateTime, default=datetime.now)
        comment_id = db.Column(db.Integer, db.ForeignKey('comment.id'))
        visitor_id = db.Column(db.Integer, db.ForeignKey('visitor.id'))
        replied_visitor_id = db.Column(db.Integer, db.ForeignKey('visitor.id'))
        # 添加相关外键foreign_keys参数
        visitor = db.relationship('Visitor', backref='reply_comment', foreign_keys=[visitor_id])
        replied_visitor = db.relationship('Visitor', backref='replied_comment', foreign_keys=[replied_visitor_id])

    在评论表里添加了 visitorreplied_visitor 关系参照,用户表不修改,一般建立 relationship() 参照关系是不需要迁移同步,但添加了 foreign_keys 参数是需要在数据库里面进行建立他们之间关系,所以注意建立了 foreign_keys 参数必须把关系迁移同步到数据库


    2.注意!

    注意:建立了 foreign_keys 参数,必须迁移同步到数据库。 

    foreign_keys=[visitor_id]

    设置 foreign_keys 参数使用 [ ] 括号返回的值是一个对象,即使用 reply_comment.visitor  返回值是一个用户对象

    想获得其他类型,查看官方文档即可,给了相应的方法。




    总结

    总结:处理数据库还是令人恶心,人菜错误多,随便改一点错误又的喝一壶!

    面对此类问题:一个表多个外键关联同一个表的主键时,需要添加foreign_keys 参数,并且需要迁移同步其关系。

    追加总结:面对此处理表之间的关系时,一般是建立有名无实的外键关系,换言之就是:两个表之间是有关系,但是我们不在两表之间建立实质的外键关系,而是以我们自己懂的符号代表他们之间的关系。因为外键建立过多会影响数据库的查询速度,降低响应速度,有时还会带来一些其他的bug,因此在建立外键时,因谨慎考虑,尽量少建立或者不建立实质的外键关系。在使用时在后端自己查询再使用,比使用外键去查更快;比如本文的双外键也不应该建立实质的外键关系,而是建立他们之间的虚拟的外键关系,加快速度和避免互锁干死数据库。(21.10.4改)

    参考文章:

    Configuring how Relationship Joins — SQLAlchemy 1.4 Documentation

     SQLAchemy中处理两张表之间存在多个外键的情况_buptter的博客-CSDN博客

    展开全文
  • 更正一下数据库结构:A:id、name、one、two、threeB:id、name、parentid(B自关联)现在项目中的需求是,把全部的数据列表,每一条A记录占一行,A记录中onetwothree的位置显示为B中对应的name。请各位高手...
  • SELECT TF_SCHOOL_DORMITORY_INFO.*, tsi.STAFF_NAME “ceoName”, ts_staff_info.STAFF_NAME AS “houseMasterName” FROM ( SELECT * FROM ts_staff_info ) tsi right join TF_SCHOOL_DORMITORY_INFO ON tsi.STAFF...
  • 例如用户 user_id user_name 1 zhangsan ... 另一张money,表示了借钱的关系 id from to how 1 1 2 100 2 3 4 100 关联查询 select m.id,u1.use...
  • 1、复制库把db1的所有东西,复制到db2中...mysqldump db1 -uroot -p123456 --add-drop-table | mysql db2 -u root -p123456如果2mysql不是同一台服务器,可用 -h 参数mysqldump db1 -uroot -p123456 --add-drop-t...
  • 就是讲两个表的数据产生关联,就比如个人信息和部门之间,部门的部门id就可以作为一个外键存放于个人信息中,除此之外设定外键在父子中的维护关系,可以达到一个类似于级联的操作,就是当父级主键作为...
  • 我想要有两个表,所以我可以将旧记录移动到第二个,所以我保持主小,但仍然希望能够链接到两个表使用一个int首要的关键。 (我已经简化了这个例子,从我真正的表格...SQL,两个表,一个共享主键Sessions---------...
  • 关于数据库一张表有几个主键

    千次阅读 2021-09-15 22:20:55
    这时候就会出现一张表中有多个主键,我们称之为联合主键,多个字段放在一起作为作为一张表的主键,主键的主键的作用是保证数据的唯一性和完整性,同时通过主键检索能够增加检索速度。 Create TABLE SC( Sno char...
  • 1. 利用Oracle中系统自带的两个视图可以实现查看主键信息, 语句如下: select a.constraint_name, a.column_name from user_cons_columns a, user_constraints b where a.constraint_name = b.constraint_...
  • SQL--当一张表两个外键指向同一主键

    万次阅读 多人点赞 2017-11-26 18:54:54
    最近遇到了这样一个问题,当一张表中有两个外键同时执行了另外一种主键,如何建立一张视图,让这两个外键都找到相应的信息。来实例吧:第一张表,归还记录:第二张表,用户:问题就是,归还记录表里有两个字段,...
  • 今天在工作,做老项目维护的时候无意中发现一张表居然有三个主键。吓死宝宝了,然后尝试着建表建主键,但是都不能成功。 难道是我写的有问题,最后通过查资料总终于解决了。 1、数据库的每张只能有一个主键,不...
  • 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 server中设置两个主键

    千次阅读 2021-01-16 02:11:37
    展开全部主键是数据库的一重要属性,建立主键可以避免中存在完全相同的记录,也就是说主键一张32313133353236313431303231363533e4b893e5b19e31333365643661中的记录值是唯一的。建立主键种方法:一种...
  • oracle中查看一张表是否有主键主键在哪个字段上利用Oracle中系统自带的两个视图可以实现查看主键信息,语句如下:select a.constraint_name, a.column_name from user_cons_columns a ...Oracle中把一张表查询...
  • 数据库中有多主键

    千次阅读 2021-12-09 15:30:09
    数据库中的多个主键称为联合...sql 中一个设置两个主键是 将两个字段联合起来设置为主键 一个只能有一个主键 1.只有id为主键时 2.id和name这2个列一起构成为联合主键时 甚至可以全部字段设置为主键 ...
  • oracle
  • 尽管有人问过这问题,但...我有一个表:Customer_orders,将值插入到其中:insert into customer_order (order_date,delivered ,shipping_date,customer_number )values ( SUBDATE(NOW(), INTERVAL 17 DAY), 1, SU...
  • 之间有一对多、多对多的关系,只要涉及到之间的关联们就会涉及到外键和主键 知识点:   那么怎么设置外键呢? demo: 现在有,user(编号、姓名、职务、工种、部门)、kinds (工种、...
  • 如何在sql server中设置两个主键

    千次阅读 2020-12-21 20:37:04
    展开全部主键是数据库的一重要属性,建立主键可以避免中存在完全相同的记录,也就是说主键在e68a8462616964757a686964616f31333365633938一张表中的记录值是唯一的。建立主键种方法:一种是在数据库提供的...
  •   两个字段分别建立唯bai一约束,数据库单du独验证每个字段中值zhi的唯一性,两个字段一起建立唯一约dao束,数据库将两个字段值合并后验证唯一性。例如关系R(a,b)的两个记录r1(1,2)和r2(1,3),如果分别建立唯一...
  • mysql建表时怎么设置主键

    千次阅读 2021-03-04 02:44:07
    设置方法:在“CREATE TABLE”语句中,通过“PRIMARY KEY”关键字来指定主键,语法格式“字段名 数据类型 PRIMARY KEY [默认值]”或“...一般情况下,为了便于 DBMS 更快的查找到中的记录,都会在中设置一...
  • Django如何创建联合主键

    千次阅读 2019-11-16 15:19:51
    1、数据库中的每张只能有一个主键,不可能有多个主键 2、所谓一个个主键,我们称之为联合主键 3、主键的作用是保证数据的唯一性和完整性,同时通过主键检索增加检索速度 Django中如何创建联合主键 单张内...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 102,858
精华内容 41,143
关键字:

一张表两个主键