简体   繁体   中英

How to have a distinct Primary Key based off of 2 Foreign Keys

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.

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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM