Wie bekomme ich die nächste id in mysql, um sie in die Tabelle einzufügen?
INSERT INTO payments (date, item, method, payment_code)
VALUES (NOW(), '1 Month', 'Paypal', CONCAT("sahf4d2fdd45", id))
Verwenden Sie LAST_INSERT_ID()
aus Ihrer SQL-Abfrage.
Oder
Sie können auch mysql_insert_id()
verwenden, um PHP zu verwenden.
Sie können verwenden
SELECT AUTO_INCREMENT
FROM information_schema.tables
WHERE table_name = 'table_name'
AND table_schema = DATABASE( ) ;
oder wenn Sie information_schema nicht verwenden möchten, können Sie dies verwenden
SHOW TABLE STATUS LIKE 'table_name'
Sie können den Autoinkrementierungswert next folgendermaßen erhalten:
SHOW TABLE STATUS FROM tablename LIKE Auto_increment
/*or*/
SELECT `auto_increment` FROM INFORMATION_SCHEMA.TABLES
WHERE table_name = 'tablename'
Beachten Sie, dass Sie not verwenden sollten, um die Tabelle zu ändern. Verwenden Sie dazu automatisch eine auto_increment-Spalte.
Das Problem ist, dass last_insert_id()
rückblickend ist und somit innerhalb der aktuellen Verbindung garantiert werden kann.
Dieses Baby ist prospektiv und daher für jede Verbindung nicht eindeutig und nicht verlässlich.
Es würde nur in einer einzigen Verbindungsdatenbank funktionieren, aber einzelne Verbindungsdatenbanken haben heute die Gewohnheit, morgen mehrere Verbindungsdatenbanken zu werden.
Siehe: SHOW TABLE STATUS
Die oberste Antwort verwendet PHP MySQL_ für eine Lösung. Ich denke, ich würde eine aktualisierte PHP MySQLi_ -Lösung dafür freigeben. In diesem Beispiel gibt es keine Fehlerausgabe!
$db = new mysqli('localhost', 'user', 'pass', 'database');
$sql = "SHOW TABLE STATUS LIKE 'table'";
$result=$db->query($sql);
$row = $result->fetch_assoc();
echo $row['Auto_increment'];
Das nächste Auto-Inkrement wird in einer Tabelle angezeigt.
In PHP können Sie Folgendes versuchen:
$query = mysql_query("SELECT MAX(id) FROM `your_table_name`");
$results = mysql_fetch_array($query);
$cur_auto_id = $results['MAX(id)'] + 1;
OR
$result = mysql_query("SHOW TABLE STATUS WHERE `Name` = 'your_table_name'");
$data = mysql_fetch_assoc($result);
$next_increment = $data['Auto_increment'];
Dies gibt einen Auto-Inkrement-Wert für die MySQL-Datenbank zurück, und ich habe keine Überprüfung mit anderen Datenbanken durchgeführt. Bitte beachten Sie, dass die Abfragesyntax bei Verwendung einer anderen Datenbank unterschiedlich sein kann.
SELECT AUTO_INCREMENT
FROM information_schema.tables
WHERE table_name = 'your_table_name'
and table_schema = database();
Lösung:
CREATE TRIGGER `IdTrigger` BEFORE INSERT ON `payments`
FOR EACH ROW
BEGIN
SELECT AUTO_INCREMENT Into @xId
FROM information_schema.tables
WHERE
Table_SCHEMA ="DataBaseName" AND
table_name = "payments";
SET NEW.`payment_code` = CONCAT("sahf4d2fdd45",@xId);
END;
"DataBaseName" ist der Name unserer Datenbank
Eine einfache Abfrage würde SHOW TABLE STATUS LIKE 'table_name'
Sie können mysql trigger verwenden
Sie können die ID beim Einfügen nicht verwenden, und Sie benötigen sie auch nicht. MySQL kennt die ID nicht einmal, wenn Sie diesen Datensatz einfügen. Sie könnten einfach "sahf4d2fdd45"
in der payment_code
-Tabelle speichern und später id
und payment_code
verwenden.
Wenn Sie wirklich benötigen, dass Ihr Zahlungscode die ID enthält, aktualisieren Sie die Zeile nach der Einfügung, um die ID hinzuzufügen.
Ich schlage vor zu überdenken, was Sie tun. Ich habe nie einen einzigen Anwendungsfall erlebt, bei dem dieses spezielle Wissen erforderlich ist. Die nächste ID ist ein sehr spezielles Implementierungsdetail und ich würde nicht darauf zählen, dass es ACID-sicher ist.
Machen Sie eine einfache Transaktion, die Ihre eingefügte Zeile mit der letzten ID aktualisiert:
BEGIN;
INSERT INTO payments (date, item, method)
VALUES (NOW(), '1 Month', 'Paypal');
UPDATE payments SET payment_code = CONCAT("sahf4d2fdd45", LAST_INSERT_ID())
WHERE id = LAST_INSERT_ID();
COMMIT;
Wofür benötigen Sie die nächste inkrementelle ID?
MySQL erlaubt nur ein Auto-Increment-Feld pro Tabelle und es muss auch der Primärschlüssel sein, um die Eindeutigkeit zu gewährleisten.
Wenn Sie die nächste Einfügungs-ID erhalten, ist sie möglicherweise nicht verfügbar, wenn Sie sie verwenden, da der Wert, den Sie haben, nur im Bereich dieser Transaktion liegt. Abhängig von der Auslastung Ihrer Datenbank kann dieser Wert daher bereits verwendet werden, wenn die nächste Anforderung eingeht.
Ich würde vorschlagen, dass Sie Ihr Design überprüfen, um sicherzustellen, dass Sie nicht wissen müssen, welchen Auto-Increment-Wert Sie als Nächstes zuweisen möchten
verwenden Sie "mysql_insert_id ()". mysql_insert_id () wirkt auf die letzte ausgeführte Abfrage. Rufen Sie mysql_insert_id () sofort nach der Abfrage auf, die den Wert generiert.
Unten sehen Sie ein Anwendungsbeispiel:
<?php
$link = mysql_connect('localhost', 'username', 'password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');
mysql_query("INSERT INTO mytable VALUES('','value')");
printf("Last inserted record has id %d\n", mysql_insert_id());
?>
Ich hoffe das obige Beispiel ist nützlich.
Sie müssen zuerst eine Verbindung zu MySQL herstellen und eine Datenbank auswählen
$table_name = "myTable";
$query = mysql_query("SHOW TABLE STATUS WHERE name='$table_name'");
$row = mysql_fetch_array($query);
$next_inc_value = $row["AUTO_INCREMENT"];
mit der antwort von ravi404:
CREATE FUNCTION `getAutoincrementalNextVal`(`TableName` VARCHAR(50))
RETURNS BIGINT
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE Value BIGINT;
SELECT
AUTO_INCREMENT INTO Value
FROM
information_schema.tables
WHERE
table_name = TableName AND
table_schema = DATABASE();
RETURN Value;
END
verwenden Sie in Ihrer Einfügeabfrage, um einen SHA1-Hash zu erstellen. Ex.:
INSERT INTO
document (Code, Title, Body)
VALUES (
sha1( getAutoincrementalNextval ('document') ),
'Title',
'Body'
);
mysql_insert_id();
Das ist es :)
SELECT id FROM `table` ORDER BY id DESC LIMIT 1
Ich bezweifle zwar an seiner Produktivität, ist aber zu 100% zuverlässig
Für mich funktioniert es und sieht einfach aus:
$auto_inc_db = mysql_query("SELECT * FROM my_table_name ORDER BY id ASC ");
while($auto_inc_result = mysql_fetch_array($auto_inc_db))
{
$last_id = $auto_inc_result['id'];
}
$next_id = ($last_id+1);
echo $next_id;//this is the new id, if auto increment is on
Verbesserung von @ ravi404 für den Fall, dass Ihr Autoinkrement-Offset IS NICHT 1 ist:
SELECT (`auto_increment`-1) + IFNULL(@@auto_increment_offset,1)
FROM INFORMATION_SCHEMA.TABLES
WHERE table_name = your_table_name
AND table_schema = DATABASE( );
(auto_increment
- 1): Die DB-Engine scheint immer einen Versatz von 1 zu berücksichtigen. Daher müssen Sie diese Annahme aufheben und dann den optionalen Wert @@ auto_increment_offset oder den Standardwert 1 angeben: IFNULL (@@ auto_increment_offset, 1).