जवाबों:
आप इस क्वेरी का उपयोग करके सभी तालिका डेटा प्राप्त कर सकते हैं:
SHOW TABLE STATUS FROM `DatabaseName` WHERE `name` LIKE 'TableName' ;
आप इस प्रश्न का उपयोग करके ठीक-ठीक जानकारी प्राप्त कर सकते हैं:
SELECT `AUTO_INCREMENT`
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName'
AND TABLE_NAME = 'TableName';
DATABASE()
स्पष्ट डेटाबेस नाम के बजाय भी उपयोग कर सकते हैं ।
SELECT MAX(id) FROM table_name
?
मेरा मानना है कि आप MySQL के LAST_INSERT_ID () फ़ंक्शन की तलाश कर रहे हैं । यदि कमांड लाइन में, बस निम्नलिखित चलाएं:
LAST_INSERT_ID();
आप एक चयनित क्वेरी के माध्यम से भी यह मान प्राप्त कर सकते हैं:
SELECT LAST_INSERT_ID();
यदि आप किसी क्वेरी में इसे प्राप्त करने के बजाय केवल संख्या जानना चाहते हैं, तो आप इसका उपयोग कर सकते हैं:
SHOW CREATE TABLE tablename;
आपको नीचे की ओर auto_increment देखना चाहिए
1
।
भले ही मथाई आप मैन्युअल रूप से क्वेरी चलाते हैं, का उत्तर सही है, एक समस्या तब होती है जब 2 समवर्ती लेनदेन / कनेक्शन वास्तव में उत्पादन में रनटाइम पर इस उदाहरण को निष्पादित करते हैं (उदाहरण के लिए)।
केवल 2 कनेक्शन के साथ MySQL कार्यक्षेत्र में मैन्युअल रूप से आज़माया गया:
CREATE TABLE translation (
id BIGINT PRIMARY KEY AUTO_INCREMENT
);
# Suppose we have already 20 entries, we execute 2 new inserts:
लेनदेन 1:
21 = SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName' AND TABLE_NAME = 'translation';
insert into translation (id) values (21);
लेनदेन 2:
21 = SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName' AND TABLE_NAME = 'translation';
insert into translation (id) values (21);
# commit transaction 1;
# commit transaction 2;
लेनदेन 1 सम्मिलित करना ठीक है: लेनदेन 2 सम्मिलित करना त्रुटि में है: त्रुटि कोड: 1062. कुंजी 'प्राथमिक' के लिए '21' की डुप्लिकेट प्रविष्टि।
एक अच्छा समाधान jvdub का उत्तर होगा क्योंकि प्रति लेनदेन / कनेक्शन 2 आवेषण होंगे:
लेनदेन 1:
insert into translation (id) values (null);
21 = SELECT LAST_INSERT_ID();
लेनदेन 2:
insert into translation (id) values (null);
22 = SELECT LAST_INSERT_ID();
# commit transaction 1;
# commit transaction 2;
लेकिन हमें last_insert_id () निष्पादित करना होगा सम्मिलित करने के बाद ! और हम उस आईडी को अन्य तालिकाओं में डालने के लिए फिर से उपयोग कर सकते हैं जहां एक विदेशी कुंजी अपेक्षित है!
इसके अलावा, हम निम्नलिखित 2 प्रश्नों का निष्पादन नहीं कर सकते हैं:
insert into translation (id) values ((SELECT AUTO_INCREMENT FROM
information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE()
AND TABLE_NAME='translation'));
क्योंकि हम वास्तव में उस आईडी को अन्य तालिका में हड़पने / पुन: उपयोग करने या वापस करने के इच्छुक हैं!
last_insert_id()
AUTO_INCREMENT
मूल्य को पुनः प्राप्त करना है ।
mysqli निष्पादन योग्य नमूना कोड:
<?php
$db = new mysqli("localhost", "user", "password", "YourDatabaseName");
if ($db->connect_errno) die ($db->connect_error);
$table=$db->prepare("SHOW TABLE STATUS FROM YourDatabaseName");
$table->execute();
$sonuc = $table->get_result();
while ($satir=$sonuc->fetch_assoc()){
if ($satir["Name"]== "YourTableName"){
$ai[$satir["Name"]]=$satir["Auto_increment"];
}
}
$LastAutoIncrement=$ai["YourTableName"];
echo $LastAutoIncrement;
?>
यदि स्तंभ को sql सर्वर में स्वचालित किया गया है, तो वर्तमान स्वतः-मूल्य मान को देखने के लिए, और यदि आप उस स्तंभ के लिए उस मान को संपादित करना चाहते हैं, तो निम्न क्वेरी का उपयोग करें।
-- to get current value
select ident_current('Table_Name')
-- to update current value
dbcc checkident ('[Table_Name]',reseed,"Your Value")
दिए गए स्कीमा के सभी तालिकाओं के लिए AUTO_INCREMENT के प्रतिशत "उपयोग" की जांच करने की क्वेरी: (टाइप बिगिन अहस्ताक्षरित कॉलम को छोड़कर ):
SELECT
c.TABLE_NAME,
c.COLUMN_TYPE,
c.MAX_VALUE,
t.AUTO_INCREMENT,
IF (c.MAX_VALUE > 0, ROUND(100 * t.AUTO_INCREMENT / c.MAX_VALUE, 2), -1) AS "Usage (%)"
FROM
(SELECT
TABLE_SCHEMA,
TABLE_NAME,
COLUMN_TYPE,
CASE
WHEN COLUMN_TYPE LIKE 'tinyint(1)' THEN 127
WHEN COLUMN_TYPE LIKE 'tinyint(1) unsigned' THEN 255
WHEN COLUMN_TYPE LIKE 'smallint(%)' THEN 32767
WHEN COLUMN_TYPE LIKE 'smallint(%) unsigned' THEN 65535
WHEN COLUMN_TYPE LIKE 'mediumint(%)' THEN 8388607
WHEN COLUMN_TYPE LIKE 'mediumint(%) unsigned' THEN 16777215
WHEN COLUMN_TYPE LIKE 'int(%)' THEN 2147483647
WHEN COLUMN_TYPE LIKE 'int(%) unsigned' THEN 4294967295
WHEN COLUMN_TYPE LIKE 'bigint(%)' THEN 9223372036854775807
WHEN COLUMN_TYPE LIKE 'bigint(%) unsigned' THEN 0
ELSE 0
END AS "MAX_VALUE"
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE EXTRA LIKE '%auto_increment%'
) c
JOIN INFORMATION_SCHEMA.TABLES t ON (t.TABLE_SCHEMA = c.TABLE_SCHEMA AND t.TABLE_NAME = c.TABLE_NAME)
WHERE
c.TABLE_SCHEMA = 'YOUR_SCHEMA'
ORDER BY
`Usage (%)` DESC;
मैं उसी की तलाश कर रहा था और एक हेल्पर वर्ग के अंदर एक स्थिर विधि बनाकर समाप्त हो गया (मेरे मामले में मैंने इसे ऐप्पल हेल्पर्स डेटाबेस का नाम दिया)।
विधि
/**
* Method to get the autoincrement value from a database table
*
* @access public
*
* @param string $database The database name or configuration in the .env file
* @param string $table The table name
*
* @return mixed
*/
public static function getAutoIncrementValue($database, $table)
{
$database ?? env('DB_DATABASE');
return \DB::select("
SELECT AUTO_INCREMENT
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = '" . env('DB_DATABASE') . "'
AND TABLE_NAME = '" . $table . "'"
)[0]->AUTO_INCREMENT;
}
विधि को कॉल करने और MySql AUTO_INCREMENT प्राप्त करने के लिए बस निम्नलिखित का उपयोग करें:
$auto_increment = \App\Helpers\Database::getAutoIncrementValue(env('DB_DATABASE'), 'your_table_name');
आशा है ये मदद करेगा।