Cara mendapatkan id berikutnya di mysql untuk memasukkannya ke dalam tabel
INSERT INTO payments (date, item, method, payment_code)
VALUES (NOW(), '1 Month', 'paypal', CONCAT("sahf4d2fdd45", id))
Cara mendapatkan id berikutnya di mysql untuk memasukkannya ke dalam tabel
INSERT INTO payments (date, item, method, payment_code)
VALUES (NOW(), '1 Month', 'paypal', CONCAT("sahf4d2fdd45", id))
Jawaban:
Gunakan LAST_INSERT_ID()
dari kueri SQL Anda.
Atau
Anda juga bisa menggunakannya mysql_insert_id()
untuk mendapatkannya menggunakan PHP.
LAST_INSERT_ID()
.
mysqli_insert_id
Kamu bisa memakai
SELECT AUTO_INCREMENT
FROM information_schema.tables
WHERE table_name = 'table_name'
AND table_schema = DATABASE( ) ;
atau jika Anda tidak ingin menggunakan information_schema, Anda dapat menggunakan ini
SHOW TABLE STATUS LIKE 'table_name'
TABLES.AUTO_INCREMENT
-cache dev.mysql.com/doc/refman/8.0/en/… . Blog Mysql juga memiliki beberapa posting tentang itu, tetapi sistem yang mereka sebutkan tampaknya sudah ketinggalan zaman: mysqlserverteam.com/… mysqlserverteam.com/…
Anda bisa mendapatkan nilai kenaikan otomatis berikutnya dengan melakukan:
SHOW TABLE STATUS FROM tablename LIKE Auto_increment
/*or*/
SELECT `auto_increment` FROM INFORMATION_SCHEMA.TABLES
WHERE table_name = 'tablename'
Perhatikan bahwa Anda tidak boleh menggunakan ini untuk mengubah tabel, gunakan kolom auto_increment untuk melakukannya secara otomatis.
Masalahnya adalah last_insert_id()
retrospektif dan dengan demikian dapat dijamin dalam koneksi saat ini.
Bayi ini prospektif dan oleh karena itu tidak unik per sambungan dan tidak dapat diandalkan.
Hanya dalam satu database koneksi yang akan berfungsi, tetapi database koneksi tunggal hari ini memiliki kebiasaan menjadi beberapa database koneksi besok.
Lihat: SHOW TABLE STATUS
insert into table_name (field1, field2) select 'constant', auto_increment from information_schema.tables where table_name = 'table_name'
? Saya akan menggunakan pemutakhiran di after insert
trigger dan last_insert_id()
, meskipun ...
UPDATE
jika aku juga. Tapi saya lebih suka menggabungkan keduanya pada waktu tampilan, dan menghemat semua kerumitan.
SHOW TABLE STATUS
berharap untuk melihat database name
setelah FROM
dan 'table name pattern'
sesudah LIKE
.
Ini akan mengembalikan nilai kenaikan otomatis untuk database MySQL dan saya tidak memeriksa dengan database lain. Harap dicatat bahwa jika Anda menggunakan database lain, sintaks kueri mungkin berbeda.
SELECT AUTO_INCREMENT
FROM information_schema.tables
WHERE table_name = 'your_table_name'
and table_schema = 'your_database_name';
SELECT AUTO_INCREMENT
FROM information_schema.tables
WHERE table_name = 'your_table_name'
and table_schema = database();
Jawaban teratas menggunakan PHP MySQL_ untuk solusinya, saya pikir saya akan membagikan solusi PHP MySQLi_ yang diperbarui untuk mencapai ini. Tidak ada keluaran kesalahan dalam contoh ini!
$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'];
Menendang kenaikan Otomatis berikutnya yang muncul di tabel.
Di PHP Anda dapat mencoba ini:
$query = mysql_query("SELECT MAX(id) FROM `your_table_name`");
$results = mysql_fetch_array($query);
$cur_auto_id = $results['MAX(id)'] + 1;
ATAU
$result = mysql_query("SHOW TABLE STATUS WHERE `Name` = 'your_table_name'");
$data = mysql_fetch_assoc($result);
$next_increment = $data['Auto_increment'];
Larutan:
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" adalah nama dari Data Base kami
Anda dapat menggunakan pemicu mysql
payment_code
dalam after insert
memicu tampaknya menjadi pilihan terbaik.
Anda tidak dapat menggunakan ID saat memasukkan, Anda juga tidak membutuhkannya. MySQL bahkan tidak mengetahui ID saat Anda memasukkan catatan itu. Anda bisa menyimpan "sahf4d2fdd45"
di payment_code
tabel dan menggunakan id
dan payment_code
nanti.
Jika Anda benar-benar membutuhkan payment_code Anda untuk memiliki ID di dalamnya, UPDATE baris setelah sisipkan untuk menambahkan ID.
information_schema.tables
tabel.
SELECT ... CONCAT(payment_code, id)
, atau dalam kode aplikasi Anda. Anda bahkan bisa membungkusnya dengan SELECT
a VIEW
, sehingga Anda selalu mengembalikan nilai yang benar, tanpa mengkhawatirkan CONCAT di setiap SELECT dari aplikasi Anda.
Untuk apa Anda memerlukan ID inkremental berikutnya?
MySQL hanya mengizinkan satu bidang kenaikan otomatis per tabel dan itu juga harus menjadi kunci utama untuk menjamin keunikan.
Perhatikan bahwa ketika Anda mendapatkan ID penyisipan berikutnya, ID tersebut mungkin tidak tersedia saat Anda menggunakannya karena nilai yang Anda miliki hanya dalam cakupan transaksi itu. Oleh karena itu, bergantung pada beban pada database Anda, nilai tersebut mungkin sudah digunakan pada saat permintaan berikutnya masuk.
Saya menyarankan agar Anda meninjau desain Anda untuk memastikan bahwa Anda tidak perlu mengetahui nilai kenaikan otomatis mana yang akan ditetapkan selanjutnya
Saya menyarankan untuk memikirkan kembali apa yang Anda lakukan. Saya tidak pernah mengalami satu pun kasus penggunaan yang membutuhkan pengetahuan khusus itu. Id berikutnya adalah detail implementasi yang sangat khusus dan saya tidak berharap mendapatkannya aman dari ACID.
Lakukan satu transaksi sederhana yang memperbarui baris yang Anda masukkan dengan id terakhir:
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;
Anda harus terhubung ke MySQL dan memilih database sebelum Anda dapat melakukan ini
$table_name = "myTable";
$query = mysql_query("SHOW TABLE STATUS WHERE name='$table_name'");
$row = mysql_fetch_array($query);
$next_inc_value = $row["AUTO_INCREMENT"];
gunakan "mysql_insert_id ()". mysql_insert_id () bertindak pada kueri yang terakhir dilakukan, pastikan untuk memanggil mysql_insert_id () segera setelah kueri yang menghasilkan nilai.
Di bawah ini adalah contoh penggunaan:
<?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());
?>
Semoga contoh di atas bermanfaat.
mysql_insert_id();
Itu dia :)
SELECT id FROM `table` ORDER BY id DESC LIMIT 1
Meski saya ragu dengan produktivitasnya tapi 100% bisa diandalkan
menggunakan jawaban 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
menggunakan kueri sisipkan Anda, untuk membuat Hash SHA1. ex.:
INSERT INTO
document (Code, Title, Body)
VALUES (
sha1( getAutoincrementalNextval ('document') ),
'Title',
'Body'
);
Peningkatan @ ravi404, jika offset penambahan otomatis Anda BUKAN 1:
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): db engine tampaknya selalu mempertimbangkan offset 1. Jadi, Anda perlu membuang asumsi ini, lalu menambahkan nilai opsional @@ auto_increment_offset, atau default ke 1: IFNULL (@@ auto_increment_offset, 1)
Bagi saya ini berfungsi, dan terlihat sederhana:
$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
$last_id
berulang-ulang bila Anda bisa saja DESC
. while
Blok Anda melakukan banyak pekerjaan yang tidak berguna.
auto_increment
kolom