যদি টেবিলটি ড্রপ টেবিলের উপস্থিত থাকে তবে এটি তৈরি করুন, এটি উপস্থিত না থাকলে কেবল এটি তৈরি করুন


151

আমি স্ট্যাম্পড হয়েছি, আমি কীভাবে এটি করব তা জানি না।

মূলত আমি কেবল একটি টেবিল তৈরি করতে চাই, তবে এটি উপস্থিত থাকলে এটি ফেলে দেওয়া এবং পুনরায় তৈরি করা দরকার, কাটা না, তবে এটি উপস্থিত না থাকলে কেবল এটি তৈরি করুন।

কেউ সাহায্য করতে সক্ষম হবে?

ধন্যবাদ, জর্জ


@ শোঃজ, তারা যা চেয়েছিল তবুও এই প্রশ্নের অস্তিত্ব এবং এই পৃষ্ঠায় 20k দর্শনগুলি প্রমাণ করে যে ইংরেজিকে গ্রীক ভাষায় রূপান্তর করার মতোই সহজ।
পেসারিয়ার

2
@Pacerier আর একমত করা যায়নি: διαγραφή πίνακα, εφόσον υπάρχει
Shomz

@ শমজ, ব্যাকরণের ত্রুটি আছে।
পেসারিয়ার

উত্তর:


298

শুধু DROP TABLE IF EXISTS `tablename`;আপনার CREATE TABLEবক্তব্য সামনে রাখুন ।

এই বিবৃতিটি যদি টেবিলটি উপস্থিত থাকে তবে এটি ড্রপ করে তবে তা না থাকলে কোনও ত্রুটি নিক্ষেপ করবে না।


1
ধন্যবাদ! এটি সারণী বা দর্শনগুলির তালিকার জন্যও কাজ করে! DROP TABLE IF EXISTS 'table1', 'table2';এবং DROP VIEW IF EXISTS 'view1', 'view2';পিএস- ইনলাইন কোডটিতে আপনি কী জাদুবিদ্যার ব্যবহার করেছেন !?
ক্যাম্পবেলন

2
@ ক্যাম্পবেলন কোড বিভাগের আগে এবং পরে ব্যাকটিকগুলি কেবল দ্বিগুণ করুন। একক ব্যাকটিকগুলি তখন ভারব্যাটিম দেখানো হয়।
r3mainer


8

আচ্ছা ... হু বছরের পর বছর ধরে কেউ একটি সূক্ষ্ম বিষয় উল্লেখ করেনি।

DROP TABLE IF EXISTS `bla`; CREATE TABLE `bla` ( ... );যুক্তিযুক্ত মনে হলেও , এটি এমন পরিস্থিতির দিকে নিয়ে যায় যখন পুরানো টেবিলটি ইতিমধ্যে চলে গেছে এবং নতুন একটি তৈরি করা হয়নি: কিছু ক্লায়েন্ট এই মুহূর্তে সাবজেক্ট টেবিলটি অ্যাক্সেস করার চেষ্টা করতে পারে।

সর্বোত্তম উপায় হ'ল একেবারে নতুন টেবিল তৈরি করা এবং এটি একটি পুরানো একটি দিয়ে সজ্জিত করা (টেবিলের বিষয়বস্তুগুলি হারিয়ে গেছে):

CREATE TABLE `bla__new` (id int); /* if not ok: terminate, report error */
RENAME TABLE `bla__new` to `bla`; /* if ok: terminate, report success */
RENAME TABLE `bla` to `bla__old`, `bla__new` to `bla`;
DROP TABLE IF EXISTS `bla__old`;
  • আপনার ফলাফলটি পরীক্ষা করা উচিত CREATE ...এবং ত্রুটির ক্ষেত্রে চালিয়ে যাওয়া উচিত নয় , কারণ ব্যর্থতার অর্থ অন্যান্য থ্রেড একই স্ক্রিপ্টটি শেষ করেনি: হয় কারণ এটি মাঝখানে ক্র্যাশ হয়েছে বা এখনও শেষ হয়নি - এটি ভাল ধারণা নিজের দ্বারা জিনিসগুলি পরীক্ষা করুন।
  • তারপরে, আপনার প্রথম ফলাফলটি পরীক্ষা করা উচিত RENAME ...এবং সাফল্যের ক্ষেত্রে অবিরত না হওয়া উচিত : পুরো অপারেশন সফলভাবে শেষ হয়েছে; আরও বেশি, পরের দিকে চালনা RENAME ...করা অনিরাপদ হতে পারে (এবং হবে) যদি অন্য থ্রেড ইতিমধ্যে একই ক্রম শুরু করে (আবরণ না করানোর চেয়ে এই কেসটি কভার করা ভাল, নীচে লকিং নোট দেখুন)।
  • দ্বিতীয়ত RENAME ...পরমাণুভাবে সারণি সংজ্ঞাটি প্রতিস্থাপন করে, বিশদগুলির জন্য মাইএসকিউএল ম্যানুয়ালটি দেখুন।
  • শেষ DROP ...অবধি, স্পষ্টতই, পুরানো টেবিলটি পরিষ্কার করুন।

সব কিছু বিবৃতি যেমন কিছু দিয়ে SELECT GET_LOCK('__upgrade', -1); ... DO RELEASE_LOCK('__upgrade');মুড়িয়ে ফেলা ত্রুটি যাচাই না করে কেবলমাত্র যথাযথভাবে সমস্ত বিবৃতি চাওয়ার অনুমতি দেয়, তবে আমি মনে করি এটি ভাল ধারণা নয়: মাইএসকিউএলে জটিলতা বৃদ্ধি এবং লকিং ফাংশন বিবৃতি-ভিত্তিক প্রতিলিখনের জন্য নিরাপদ নয়।

যদি টেবিলের ডেটা টেবিল সংজ্ঞা আপগ্রেড থেকে বেঁচে থাকে ... সাধারণ ক্ষেত্রে এটি পার্থক্যগুলি খুঁজে পেতে এবং সঠিক ALTER ...বিবৃতি প্রদানের জন্য সারণী সংজ্ঞা তুলনা করার তুলনায় আরও জটিল গল্প , যা সর্বদা স্বয়ংক্রিয়ভাবে সম্ভব হয় না, যেমন কলামগুলির নাম পরিবর্তন করা হয়।

পার্শ্ব নোট 1: আপনি একই পদ্ধতির সাহায্যে মতামত মোকাবেলা করতে পারেন, এক্ষেত্রে CREATE/DROP TABLEকেবল অপরিবর্তিত CREATE/DROP VIEWথাকাকালীন RENAME TABLEপরিবর্তিত হয়। আসলে আপনি এমনকি টেবিলটিকে দেখুন এবং বিপরীতে পরিণত করতে পারেন।

CREATE VIEW `foo__new` as ...; /* if not ok: terminate, report error */
RENAME TABLE `foo__new` to `foo`; /* if ok: terminate, report success */
RENAME TABLE `foo` to `foo__old`, `foo__new` to `foo`;
DROP VIEW IF EXISTS `foo__old`;

পার্শ্ব নোট 2: মারিয়াডিবি ব্যবহারকারীদের সাথে খুশি হওয়া উচিত CREATE OR REPLACE TABLE/VIEW, যা ইতিমধ্যে বিষয় সমস্যা সম্পর্কে যত্নশীল এবং এটি সূক্ষ্ম পয়েন্টগুলি।


1

আমার একটি টেবিল ফেলে রাখা এবং ভিউ থেকে একটি ডেটা দিয়ে পুনরায় তৈরি করা দরকার। আমি দর্শনের বাইরে একটি টেবিল তৈরি করছিলাম এবং আমি এটিই করেছি:

DROP TABLE <table_name>;
CREATE TABLE <table_name> AS SELECT * FROM <view>;

উপরেরগুলি আমার জন্য মাইএসকিউএল মারিয়াডিবি ব্যবহার করে কাজ করেছে।


টেবিলের টেবিলের নাম রেখে দিন; ভিউ থেকে নির্বাচন করুন হিসাবে টেবিল তৈরি করুন;
sirskoy

আপনি যদি মারিয়াডিবিতে রয়েছেন (মাইএসকিউএল এটির অভাব রয়েছে) তবে আপনি সহজেই করতে পারেনCREATE OR REPLACE <table_name> AS SELECT * FROM <view>;
অ্যালেক্স অফশোর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.