mysql表创建中的问题

时间:2017-07-27 07:08:12

标签: mysql sql

我需要创建一个名为benificiaries的表,其中我有三列

customerid
accountno
bank

条件应该是一个customerid只能有一个唯一accountno。但是另一个customerid可以具有相同的accountno和相同的唯一(仅一次)。所以我不能给accountno主键。即使对于customerid,我也无法提供主键,因为一个customerid可以包含多个具有唯一accountno的记录。

在这种情况下我们如何创建表格?有什么想法吗?

5 个答案:

答案 0 :(得分:5)

您可以使用多列唯一索引。

CREATE TABLE YOUR_TABLE (
    id         INT NOT NULL AUTO_INCREMENT,
    customerid         INT NOT NULL,
    accountno  INT NOT NULL,
    bank INT NOT NULL,
    PRIMARY KEY (id),
    UNIQUE INDEX name (customerid,accountno)
);

此处的文档。

https://dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html

答案 1 :(得分:-1)

如果一个customerid只能拥有一个唯一的帐号,那么您对该表中客户ID的重复怎么看?

答案 2 :(得分:-1)

您只需将主键设置为另一列,并使customerid唯一。我想这就是你想拥有的。现在每个customerid都是唯一的,但许多costomerids可以拥有相同的accountno。

CREATE TABLE benificiaries(
  id INT PRIMARY KEY,
  customerid INT NOT NULL UNIQUE,
  accountno  INT NOT NULL,
  bank INT NOT NULL
);

答案 3 :(得分:-1)

数据库无法管理数据模型中的所有业务约束。对于这种情况,您可以使用索引解决基本约束(customerid的多列索引,accountno和accountno的简单列索引以相反的方式执行搜索),添加自动增量ID并在代码中处理业务约束。

答案 4 :(得分:-1)

只需将您的customer_id设置为主键,然后再考虑只有两个customer_id可以拥有相同帐号的概念,这取决于您的应用或系统的流程。

CREATE TABLE `tmpr_map`.`tbl_example` 
(`customer_id` INT(11) NOT NULL AUTO_INCREMENT, 
`account_number` VARCHAR NOT NULL , `bank_amount` DECIMAL(11,2) NOT NULL ,
PRIMARY KEY (`customer_id`)) ENGINE = InnoDB;