2017-07-26 84 views
0

我有一个表叫benificiaries与下面的列问题与mysql命令

custid varchar 
accno varchar primarykey 
name varchar 

我在表值

101 
12345 
john 

一个记录现在,我需要插入另一客户ID记录,但相同accno

var data={"custid":"102","accno":"12345","name":"john"}; 
con.query('insert into benificiaries set ?',data) 

但它不允许,因为accno是主键。所以我怎么能插入thino s?我可以有相同的accountno一次不同的custid ..任何想法?

+0

如果可以有多个条目具有相同的accno,那么accno不是主键。从accno和custid中制作[复合主键](https://en.wikipedia.org/wiki/Compound_key),并且应该设置。 –

+0

@ConCave然后会是什么查询来创建该表?我不知道这个 – user7350714

回答

0

那是不可能的,你必须做出登录号和客户ID为复合键

+0

那么在这种情况下如何创建表? – user7350714

+0

查看ConCave的帖子,它有样本表 – Kisoma

0

你根本就做不到这一点,因为你已经登录号作为主键定义。主键就是 - 记录的主键。这是一个独特的价值,可以肯定地识别该记录并且只记录该记录。如果您无法保证每条记录的数据都是唯一的,那么它就不能成为您的主键。

这个表看起来像一个映射表,对我来说。是吗? 如果是这样,它确实不需要主键。如果你绝对必须给它一个主键,出于某种原因,那么只需使用一个自动增量整数列为该表赋予一个代理键,并将该表作为该表的主键。

该表如何使用? 我想说一个主键,只是在accno和custid列(如果你做每个查询)索引。

如果accno和custid的组合是唯一的(可能是,考虑到此表似乎是什么),那么您可以将您的主键定义为accno和custid的组合。

如果出于某种原因需要能够为这两个字段使用相同值的多条记录,那么您无论如何都无法在该表中使用自然键。

+0

我不能有一个custid相同的accountno。如果有custid 1和accno 12345 ...那么我不能有相同的accno custid 1,但另一个custid可以有accno 12345 ...那么我们可以使用什么查询在这种情况下创建表 – user7350714

+0

关于在这种情况下如何创建表的任何想法? – user7350714

0

因为可以有多个条目具有相同的accno,所以accno不是主键。从accno和custid中创建一个复合主键,并且应该设置。

CREATE TABLE beneficiaries (
    custid INT, 
    accno INT, 
    name varchar 
    PRIMARY KEY (custid, accno) 
) 
+1

accno必须从主键约束中移除,并且请在代码末尾提供varchar()参数和分号。 –

1

退房你的MySQL代码在这里:

CREATE TABLE beneficiaries (
custid INT PRIMARY KEY, 
accno INT, 
name varchar(30) 
); 


设置CUSTID作为主键,观察我用每列的数据类型。