উত্তর:
আপনি এই কোয়েরিটি ব্যবহার করে টেবিলের সমস্ত ডেটা পেতে পারেন:
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
?
আমি বিশ্বাস করি আপনি মাইএসকিউএল এর LAST_INSERT_ID () ফাংশনটি সন্ধান করছেন। কমান্ড লাইনে থাকলে, কেবল নিম্নলিখিতটি চালান:
LAST_INSERT_ID();
আপনি এই নির্বাচনটি একটি নির্বাচন জিজ্ঞাসার মাধ্যমেও পেতে পারেন:
SELECT LAST_INSERT_ID();
আপনি যদি কোনও ক্যোয়ারিতে না গিয়ে নম্বরটি জানতে চান তবে আপনি এটি ব্যবহার করতে পারেন:
SHOW CREATE TABLE tablename;
আপনি নীচে অটো_সন্ধি দেখতে হবে
1
।
যদিও আপনি ম্যানুয়ালি নিজেই ক্যোয়ারি চালাচ্ছেন যদি মেথাইয়ের উত্তর সঠিক হয়, তবে সমস্যা হয় যখন 2 সমবর্তী লেনদেন / সংযোগগুলি বাস্তবে উত্পাদনের রানটাইমের সময় এই কোয়েরিটি সম্পাদন করে (উদাহরণস্বরূপ)।
মাইএসকিউএল ওয়ার্কব্যাঞ্চে দু'টি সংযোগের সাথে একই সাথে খোলার চেষ্টা করা হয়েছে:
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. কী 'PRIMARY' এর জন্য সদৃশ এন্ট্রি '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;
তবে sertোকানোর ঠিক পরে আমাদের সর্বশেষ_সাইন্ট_আইডি () চালাতে হবে ! এবং আমরা সেই আইডিটিকে অন্য টেবিলগুলিতে beোকাতে পুনরায় ব্যবহার করতে পারি যেখানে বিদেশী কী প্রত্যাশিত হয়!
এছাড়াও, আমরা নিম্নলিখিত হিসাবে 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;
?>
যদি কলামটি স্কেল সার্ভারে স্বতঃসংশোধিত হয় তবে বর্তমান স্বয়ত্তিবোধক মানটি দেখতে এবং যদি আপনি এই কলামটির জন্য সেই মানটি সম্পাদনা করতে চান তবে নীচের ক্যোয়ারীটি ব্যবহার করুন।
-- to get current value
select ident_current('Table_Name')
-- to update current value
dbcc checkident ('[Table_Name]',reseed,"Your Value")
একটি প্রদত্ত স্কিমা ( সমস্ত স্বাক্ষরযুক্ত টাইপযুক্ত কলাম বাদে ) সমস্ত টেবিলের জন্য আউটপুট ক্রিমেন্টের শতাংশ "ব্যবহার" পরীক্ষা করার জন্য জিজ্ঞাসা :
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;
}
পদ্ধতিটি কল করতে এবং মাইএসকিউএল আউটপুট ক্রিমেন্টটি পেতে কেবল নিম্নলিখিতটি ব্যবহার করুন:
$auto_increment = \App\Helpers\Database::getAutoIncrementValue(env('DB_DATABASE'), 'your_table_name');
আশা করি এটা সাহায্য করবে.