duanhu7615 2016-11-20 20:52
浏览 14
已采纳

如何根据2个外键使用不同的主键

So I have a table in MySQL that has the rows Date, Username, and Hours. What I want to be able to do is to generate a Primary key based off two foreign key values being Date and Username referenced from another table

Since a User can only work X hours on a certain day, but can obviously work many days. Then of course multiple Users can work on the same day. But what would distinguish them is their Username. And what would distinguish each particular user apart from himself is the days that they worked.

What I want to be able to do with this generated PK field is have a SQL query like

INSERT INTO Shift (`Date`, `Username`, `Hours`)
VALUES('$Date', '$username', 5) 
ON DUPLICATE Key UPDATE `Date` = '$today', `Username`= '$username', Hours= $TotalHr

I've considered just making a SQL Query in PHP to test if it the Username and Date are in the table, and either doing an insert or update from there. But that seems like an Ugly work around, surely there has to be a way to achieve this.

  • 写回答

1条回答 默认 最新

  • dongliao3450 2016-11-20 22:10
    关注

    A combined primary key is also called a composite key. An example table with these keys would be:

    CREATE TABLE Shift(
       Date DATETIME,
       Username VARCHAR(75),
       Hours INT(11),
       PRIMARY KEY (Date, Username)
    ) 
    

    You could ofcourse also alter your table with a query.

    ALTER TABLE Shift
    ADD PRIMARY KEY (Date, Username)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据