如何在两个值不唯一的表之间设置外键?

时间:2021-03-19 19:19:53

标签: mysql mysql-workbench

CREATE TABLE visits (
    id INTEGER AUTO_INCREMENT PRIMARY KEY, 
    page_id INTEGER(30), 
    user_id INTEGER,
    server_date datetime,
    _source VARCHAR(30)

INSERT INTO visits (page_id, user_id, server_date, _source ) 
VALUES 
(5135611, 10091422, '2017-03-04 23:45:46.000', 'android'  ),
(5135612, 10091422, '2017-03-04 23:46:46.000', 'IOS'  ),    
(5135613, 10091422, '2017-03-05 23:45:46.000', 'android'  ),
(5135614, 10091423, '2017-03-05 23:45:46.000', 'IOS'  ),
(5135615, 10091424, '2017-03-06 23:45:46.000', 'android'  ),
(5135616, 10091425, '2017-03-07 23:45:46.000', 'android'  );

CREATE TABLE Purchases (
    id INTEGER AUTO_INCREMENT PRIMARY KEY, 
    transaction_id INTEGER(30), 
    user_id INTEGER,
    purchase_date  datetime,
    product_type VARCHAR(30),
    price INTEGER   ,
    );

 INSERT INTO Purchases (transaction_id , user_id, purchase_date, product_type, price ) 
VALUES 
(5135611, 10091422, '2017-03-04 23:45:46.000', 'lfl', 150  ),
(5135612, 10091427, '2017-03-04 23:46:46.000', 'sdgw', 2000  ),
(5135613, 10091426, '2017-03-05 23:45:46.000', 'whgwb', 100  ),
(5135614, 10091423, '2017-03-05 23:45:46.000', 'wgwg', 2500  ),
(5135615, 10091424, '2017-03-06 23:45:46.000', 'vas', 2000  ),
(5135616, 10091425, '2017-03-07 23:45:46.000', 'wgw',  300 );*/

所以现在我很困惑这两个表中的主键和前键应该是什么。我认为 user_id 应该是购买表的外键,但那里的值不是唯一的。不知道如何组织正确的连接。

1 个答案:

答案 0 :(得分:0)

您需要创建一个单独的字典表。像这样

create table users(
    id int unsigned not null auto_increment,
    username varchar(100) not null defaul '',
    primary key(id)
);

并使用表中的外键引用此表。

INT 必须为 auto_increment 无符号,

int(30) 没有意义 参数表示要打印的位数,int值不能大于10 使用默认值

相关问题