كيفية تحديد ما إذا كان العمود غير موقع?
-
11-12-2019 - |
سؤال
أحاول حاليا سرد جميع أعمدة جدول معين وتحديد ما إذا كان كل عمود غير موقع أم لا.
هنا ، مثال على بلدي اختبار لاعبا اساسيا:
CREATE TABLE ttypes
(
cbiginteger BIGINT UNSIGNED,
cinteger INT UNSIGNED,
csmallinteger SMALLINT UNSIGNED
) ENGINE = InnoDB;
من أجل سرد كافة أعمدة جدول معين ، لقد وجدت احتمالين:
SHOW FULL COLUMNS
FROM ttypes;
وفقا ل الوثائق, ، هذا الاستعلام بإرجاع هذه الحقول:الحقل ، النوع ، فارغ ، افتراضي ، إضافي وتعليق.لا يسمح لي أي منهم بتحديد ما إذا كان العمود غير موقع أم لا.
بعد ذلك ، أنظر إلى information_schema.columns
وهو الجدول الأساسي المستخدم من قبل SHOW COLUMNS
الاستعلام.
SELECT ...
FROM information_schema.columns
WHERE table_name = 'ttypes';
لسوء الحظ ، لا يسمح لي أي من حقول النتائج بتحديد ما إذا كان العمود غير موقع أم لا.
المحلول
بقدر ما أستطيع أن أقول ، المكان الوحيد الذي يتم تخزين هذه السمات فيه COLUMN_TYPE
في INFORMATION_SCHEMA.COLUMNS
.
يجب تضمين ذلك في الإخراج من SHOW COLUMNS
(ضمن Type
):
mysql> show columns from ttypes;
+---------------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+----------------------+------+-----+---------+-------+
| cbiginteger | bigint(20) unsigned | YES | | NULL | |
| cinteger | int(10) unsigned | YES | | NULL | |
| csmallinteger | smallint(5) unsigned | YES | | NULL | |
+---------------+----------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
لسوء الحظ ، يجب عليك تحليل محتويات Type
وتجد unsigned
, ، أم لا unsigned
هناك - لا يضع أي شيء في الأعمدة الموقعة.
نصائح أخرى
جرب هذا السحر:
select COLUMN_NAME,
COLUMN_TYPE,
IS_NULLABLE,
IF(COLUMN_TYPE LIKE '%unsigned', 'YES', 'NO') as IS_UNSIGNED
from information_schema.COLUMNS where TABLE_NAME='record1'
الناتج
COLUMN_NAME COLUMN_TYPE IS_NULLABLE IS_UNSIGNED
----------- ---------------- ----------- -----------
id int(10) unsigned NO YES
recordID varchar(255) YES NO
لتحديد نوع لجميع المتغيرات في جدول يمكنك تشغيل استعلام مثل هذا:
select COLUMN_NAME,COLUMN_TYPE from information_schema.COLUMNS where TABLE_NAME='ttypes' and COLUMN_TYPE LIKE '%unsigned%'
بعد ذلك يمكنك بسهولة تحديد نوع لمتغير معين (على سبيل المثال سينترجر) مع استعلام مثل هذا:
select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='ttypes' and COLUMN_TYPE LIKE '%unsigned%' and COLUMN_NAME LIKE 'cinteger'
سيعيد الرمز أعلاه اسم المتغير الذي تم البحث عنه فقط إذا كان غير موقع.
في الماضي يمكن الخاص بك باستخدام حلقة الخلية ، الإجراء أو لغة البرمجة المفضلة لديك لاستخدام هذه النتيجة و/أو مواصلة البحث المتغيرات الأخرى.