মাইএসকিউএল: কলাম না থাকলে কীভাবে তৈরি করবেন?


14

আমি আমার টেবিলের অস্তিত্ব না থাকলে কেবল একটি কলাম তৈরি করার চেষ্টা করছি। আমি অনেক গবেষণা করেছি কিন্তু এখনও কোন সমাধান পাইনি।

শর্তসাপেক্ষে কলাম তৈরি করা কি এটি সম্ভব?


আমি কৌতূহলী ... কলামটি ইতিমধ্যে উপস্থিত থাকলে কেবলমাত্র ভুলকে ভুলকে ব্যর্থ হতে দেওয়াতে কী সমস্যা?
ডেরেক ডাউনি

আসলে আমার ক্লায়েন্টকে .sql ফাইল সরবরাহ করা দরকার যাতে ডিবি কাঠামোর পরিবর্তন সম্পর্কিত সমস্ত প্রশ্ন থাকবে। আমি তাদের পুরো ডাটাবেস পাঠাতে পারি না। আমি কেবল তাদের ডিবি পরিবর্তনগুলি প্রেরণ করতে চাই। স্কয়ার ফাইলটিতে আরও অনেক প্রশ্ন রয়েছে। কলাম তৈরির বিষয়ে যদি এই ক্যোয়ারী ব্যর্থ হয় তবে তা সমস্ত প্রশ্নের ব্যর্থ হবে। সুতরাং কলামটি তৈরি করতে আমি যদি শর্তটি ব্যবহার করতে চাই।
zzzzz

যদি আপনার ডাটাবেস এটি সমর্থন করে আপনি একটি ট্রিগার ব্যবহার করতে পারেন। প্রবেশের আগে।
সাইবারনার্ড

উত্তর:


8

মাইএসকিউএল ALTER TABLEনেই IF EXISTSনির্দিষ্টকরণ।

আপনি যদি নিয়মিতভাবে যা করতে হবে এমন কিছু হয় তবে আপনি কোনও সঞ্চিত প্রোক বা প্রোগ্রামিং ভাষা ব্যবহার করে নিম্নলিখিতগুলি করতে পারেন:

সুডোকোড:

  • নীচে এসকিউএল ব্যবহার করে কলামটি বিদ্যমান কিনা তা সন্ধান করুন:

    column_name থেকে নির্বাচন করুন INFORMATION_SCHEMACOLUMNS যেখানে TABLE_SCHEMA= [ডাটাবেসের নাম] এবং TABLE_NAME= [সারণীর নাম];

  • যদি উপরের ক্যোয়ারী কোনও ফলাফল দেয় তবে এর অর্থ কলামটি বিদ্যমান, অন্যথায় আপনি এগিয়ে গিয়ে কলাম তৈরি করতে পারেন।


মাইএসকিউএল / মারিয়াডিবিতে আমি সেই ক্যোয়ারীটি ব্যবহার করে একটি ত্রুটি পেয়েছি, উল্লেখ করে যে column_nameএটি বিদ্যমান নেই। আমি ক্যোয়ারীটিকে এখানে সংশোধন করেছি:SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' and column_name='[Column_name]';
যীশু অ্যালোনসো آباد

2
মাইএসকিউএল এবং (আমি মনে করি) উভয়ই মারিয়াডিবিতে একটি সাধারণ 0 বা 1 উত্তরের জন্য:SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
পিয়োজো

14

প্রকৃতপক্ষে এখন মারিয়া ডিবি 10.219 এর জন্য বিদ্যমান

ALTER TABLE test ADD COLUMN IF NOT EXISTS column_a VARCHAR(255);

বোনাস, এটি মোডেফাইয়ের জন্যও কাজ করে

ALTER TABLE test MODIFY IF EXISTS column_a VARCHAR(255);

3
> "MYSQL 5.5.5"? এটি সঠিক নয়, এটি কেবল মারিয়া ডিবি বৈশিষ্ট্য।
এক্সালিবাল

1
সংশোধনের জন্য ধন্যবাদ
পারুফ্কি

6

আপনি ইতিমধ্যে অন্য স্ট্যাকওভারফ্লো পোস্টে উল্লিখিত এই সমাধানটি ব্যবহার করতে পারেন: (রেফারেন্স: https://stackoverflow.com/a/31989541/ )

মাইএসকিউএল - একটি কলামটি উপস্থিত না থাকলে সংযোজন টেবিল:

SET @dbname = DATABASE();
SET @tablename = "tableName";
SET @columnname = "colName";
SET @preparedStatement = (SELECT IF(
  (
    SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
    WHERE
      (table_name = @tablename)
      AND (table_schema = @dbname)
      AND (column_name = @columnname)
  ) > 0,
  "SELECT 1",
  CONCAT("ALTER TABLE ", @tablename, " ADD ", @columnname, " INT(11);")
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;

2

এটি নীচে আমার জন্য কাজ করেছে:

    SELECT count(*)
    INTO @exist
    FROM information_schema.columns
    WHERE table_schema = 'mydatabase'
    and COLUMN_NAME = 'mycolumn'
    AND table_name = 'mytable' LIMIT 1;

    set @query = IF(@exist <= 0, 'ALTER TABLE mydatabase.`mytable`  ADD COLUMN `mycolumn` MEDIUMTEXT NULL',
    'select \'Column Exists\' status');

    prepare stmt from @query;

    EXECUTE stmt;

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