U moet specifiek zijn over de kolommen die u selecteert. Als uw user
tabel had vier kolommen id, name, username, opted_in
u moet precies die vier kolommen uit de query selecteren. De syntaxis ziet er als volgt uit:
INSERT INTO user (id, name, username, opted_in)
SELECT id, name, username, opted_in
FROM user LEFT JOIN user_permission AS userPerm ON user.id = userPerm.user_id
Er lijkt echter geen reden te zijn om lid te worden tegen user_permission
hier, aangezien geen van de kolommen uit die tabel zou worden ingevoegd in user
. In feite is deze INSERT
lijkt onvermijdelijk te mislukken met schendingen van de uniciteit van de primaire sleutel.
MySQL ondersteunt geen invoegingen in meerdere tabellen tegelijk. U moet ofwel twee INSERT
instructies in uw code, met behulp van de laatste invoeg-ID van de eerste query, of maak een AFTER INSERT
trigger op de primaire tafel.
INSERT INTO user (name, username, email, opted_in) VALUES ('a','b','c',0);
/* Gets the id of the new row and inserts into the other table */
INSERT INTO user_permission (user_id, permission_id) VALUES (LAST_INSERT_ID(), 4)
Of gebruik een trigger :
CREATE TRIGGER creat_perms AFTER INSERT ON `user`
FOR EACH ROW
BEGIN
INSERT INTO user_permission (user_id, permission_id) VALUES (NEW.id, 4)
END