Mit Auto-Inkrement-Wert in der MYSQL-Insert-Trigger?
Der Benutzer-Tabelle:
CREATE TABLE `users` (
`id` int(8) unsigned NOT NULL AUTO_INCREMENT,
`email` varchar(45) DEFAULT NULL,
`username` varchar(16) DEFAULT NULL,
`salt` varchar(16) DEFAULT NULL,
`password` varchar(128) DEFAULT NULL,
`lastlogin` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`joined` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`loggedin` tinyint(1) unsigned NOT NULL DEFAULT '0',
`sessionkey` varchar(60) DEFAULT NULL,
`verifycode` varchar(16) DEFAULT NULL,
`verified` tinyint(1) unsigned NOT NULL DEFAULT '0',
`banned` tinyint(1) unsigned NOT NULL DEFAULT '0',
`locked` tinyint(1) unsigned NOT NULL DEFAULT '0',
`ip_address` varchar(45) DEFAULT NULL,
`failedattempts` tinyint(1) unsigned NOT NULL DEFAULT '0',
`unlocktime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;
Den user_records Tabelle:
CREATE TABLE `user_records` (
`id` int(8) unsigned NOT NULL AUTO_INCREMENT,
`userid` int(8) unsigned DEFAULT NULL,
`action` varchar(100) DEFAULT NULL,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;
Den before-insert-trigger auf die Tabelle Benutzer:
USE `gknet`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` TRIGGER `before_create_user` BEFORE INSERT ON `users` FOR EACH ROW BEGIN
INSERT INTO user_records (action, userid, timestamp)
VALUES ('CREATED', ID, NOW() );
END
Im Grunde genommen mein problem hier ist, dass auf den trigger, wenn ich versuche die id des Benutzer, der automatisch zugewiesen wird, die durch MySQL (PK, NN -, Auto-Increment), es legt einfach in 0 für die userid auf dem user_records Tabelle. Wie würde ich es tun, so würde es wählen Sie die id, die dem Benutzer zugewiesen wird, die von SQL, und legen Sie es in als userid auf die Datensätze-Eintrag (wo die ID richtig ist, nach 'CREATED')?
Auch, wenn Sie irgendwelche anderen Optimierungen gemacht werden könnte, dass auf den Tischen, fühlen Sie sich frei, mich wissen zu lassen 😀
Du musst angemeldet sein, um einen Kommentar abzugeben.
Finden Sie aktuelle
auto_increment
Wert, der zugewiesen werden zu einem neuen Datensatz.Und verwenden die gleichen in der
before
trigger als übergeordneten Benutzer-id füruser_records
Tabelle.Sie müssen die Abfrage
information_schema.tables
Tabelle um den Wert zu finden.Beispiel:
Den trigger so ändern
after insert
stattbefore insert
und verwendenNEW
um die Letzte eingefügte idNicht machen auto_increment jede Spalte, die Sie ändern möchten ausdrücklich. Das kann verwirren, ein Motor und schwerwiegende Probleme verursachen. Wenn keine Spalte zum Primärschlüssel mit auto_increment, die Sie tun können, was Sie wollen mit Ihnen über Trigger. Sicher generierten Werte werden zurückgewiesen, wenn Sie nicht gegen die zwingenden uniqness der Primärschlüssel.