মাইএসকিউএল ডাটাবেস থেকে সীমাবদ্ধতার তালিকা


92

আমি কীভাবে একটি নির্দিষ্ট ডাটাবেস থেকে সমস্ত সীমাবদ্ধতার একটি তালিকা পেতে পারি?


4
মাইএসকিউএলে একাধিক ধরণের প্রতিবন্ধকতা রয়েছে। আপনি কোনটি বোঝাতে চান? আপনি যে ধরণের জিনিসটি সন্ধান করছেন তার উদাহরণ দিতে পারেন?
মার্ক বাইয়ার্স

উত্তর:


146

information_schema.table_constraintsপ্রতিটি টেবিলের উপর নির্ধারিত সীমাবদ্ধতার নাম পেতে সারণীটি ব্যবহার করুন :

select *
from information_schema.table_constraints
where constraint_schema = 'YOUR_DB'

information_schema.key_column_usageএই সীমাবদ্ধতার প্রত্যেকটিতে ক্ষেত্রগুলি পেতে টেবিলটি ব্যবহার করুন :

select *
from information_schema.key_column_usage
where constraint_schema = 'YOUR_DB'

পরিবর্তে আপনি যদি বিদেশী কী বাধা সম্পর্কে কথা বলছেন তবে ব্যবহার করুন information_schema.referential_constraints:

select *
from information_schema.referential_constraints
where constraint_schema = 'YOUR_DB'

4
এই তালিকায় কেবল অনন্য, প্রাথমিক কী বা বিদেশী কী বাধা অন্তর্ভুক্ত করা হবে। চেক সম্ভব, তবে প্রয়োগ করা হয়নি। ডিফল্ট সীমাবদ্ধতা এই কোয়েরিটি ব্যবহার করে দৃশ্যমান হবে না।
ওএমজি পনিজ

মাইএসকিউএল চেক সীমাবদ্ধতা সঞ্চয় করে না। যদি আপনি কোনওটিকে সংজ্ঞায়িত করার চেষ্টা করেন তবে এটি পার্স করে এবং নিঃশব্দে এটিকে ত্যাগ করে।
বিল কারভিন

4
ডিফল্ট মান কোনও সীমাবদ্ধতা হিসাবে গণনা করে না। এটা তোলে সংরক্ষিত রয়েছে information_schema.columns.column_default
বিল কারভিন

22

@ সেনসুলফুলের দুর্দান্ত উত্তর।

যারা কেবলমাত্র বাধা নামগুলির তালিকা খুঁজছেন (এবং অন্যান্য বিবরণ / কলাম নয়) তাদের জন্য আমি সংশোধিত ক্যোয়ারী উপস্থাপন করছি:

SELECT DISTINCT(constraint_name) 
FROM information_schema.table_constraints 
WHERE constraint_schema = 'YOUR_DB' 
ORDER BY constraint_name ASC;

4
আপনি যদি এটা একবারের আপনি তা খুঁজে পেতে একটি বিলোপ করতে হবে, এখানে দেখতে stackoverflow.com/a/838412/2401804
r3wt

9

আপনি যদি ওপরে এবং বিদেশী কী বাধাগুলির পাশাপাশি ওএন_আপডে এবং ওএন_ডিএলটি এবং কলাম এবং বিদেশী কলামের নামগুলি একসাথে সমস্ত নিয়মগুলি দেখতে চান তবে এটি সত্যিই সহায়তা করে:

SELECT tc.constraint_schema,tc.constraint_name,tc.table_name,tc.constraint_type,kcu.table_name,kcu.column_name,kcu.referenced_table_name,kcu.referenced_column_name,rc.update_rule,rc.delete_rule

FROM information_schema.table_constraints tc

inner JOIN information_schema.key_column_usage kcu
ON tc.constraint_catalog = kcu.constraint_catalog
AND tc.constraint_schema = kcu.constraint_schema
AND tc.constraint_name = kcu.constraint_name
AND tc.table_name = kcu.table_name

LEFT JOIN information_schema.referential_constraints rc
ON tc.constraint_catalog = rc.constraint_catalog
AND tc.constraint_schema = rc.constraint_schema
AND tc.constraint_name = rc.constraint_name
AND tc.table_name = rc.table_name

WHERE tc.constraint_schema = 'my_db_name'

এমনকি আপনি এই কলামগুলি সম্পর্কে আরও কিছু তথ্য যুক্ত করতে চাইতে পারেন, কেবল এটি এসকিউএলে যুক্ত করুন (এবং আপনি যে কলামগুলি চান তা নির্বাচন করুন):

LEFT JOIN information_schema.COLUMNS c
ON kcu.constraint_schema = c.table_schema
AND kcu.table_name = c.table_name
AND kcu.column_name = c.column_name

-3

নির্বাচন করুন * থেকে USER_CONSTRAINTS যেখানে ট্যাবেল্ক = "ট্যাবনাম";


4
এটি মাইএসকিউএল নয়, ওরাকলটিতে রয়েছে যতদূর আমি জানি।
প্রদ্যোম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.