আমি কীভাবে মাইএসকিউএলে টেবিলগুলি অদলবদল করব?


51

মনে করুন, আমার কাছে একটি টেবিল fooরয়েছে, যার মধ্যে কিছু পরিসংখ্যান রয়েছে যা এখন এবং পরে গণনা করা হয়। এটি অন্যান্য প্রশ্নের দ্বারা ভারী ব্যবহৃত হয়।

এই কারণেই আমি আরও সাম্প্রতিক পরিসংখ্যানগুলিতে গণনা করতে চাইছি foo_newএবং যখন গণনা প্রস্তুত হবে তখন সেগুলি স্যুপ করব।

আমি কাজ করতে পারে

ALTER TABLE foo RENAME foo_tmp;
ALTER TABLE foo_new RENAME foo;

তবে fooকোনও টেবিল না থাকাকালীন যদি কোনও প্রশ্নের জন্য এই দুটি লাইনের মধ্যবর্তী টেবিলের প্রয়োজন হয় foo? আমার ধারণা আমি কোনওভাবে এটি লক করতে হবে ... বা এটি করার অন্য কোনও উপায় আছে?

উত্তর:


79

এই একটি আদেশ ব্যবহার করুন:

RENAME TABLE foo TO foo_old, foo_new To foo;

এটি একটি পারমাণবিক অপারেশন হল: উভয় টেবিল একসঙ্গে লক (এবং খুব স্বল্প সময়ের জন্য) তাই কোনো এক্সেস পারেন আগে বা পরে হয় RENAME



2
tableXএটির সাথে একটি সমস্যা হ'ল, যদি আমার কাছে থাকে তবে পিতামাতার প্রতিবন্ধকতা উল্লেখ রয়েছে foo। এই নামকরণের পরে এটি এখন রেফারেন্সিং হবে foo_oldতবে রেফারেন্সিংয়ের ক্ষেত্রে যদি কোনও বাধা না থাকে fooতবে আপনার উচিত ঠিক আছে ...
মার্সিন ওয়াসিলুক

@ মার্সিনওয়াসিলুক - এর আরও একটি অপূর্ণতা FOREIGN KEYs
রিক জেমস

2
এ বিষয়ে সচেতন হওয়াও জরুরী যে রেইমাম টেবিলটি কার্যকর করা সম্ভব না হওয়া অবধি টেবিলে বিদ্যমান প্রশ্নের সমাপ্তির জন্য অপেক্ষা করতে হবে। এটি ঠিক আছে, তবে এটি RENAME হওয়ার জন্য অপেক্ষা করার সময় অন্যান্য অনুসন্ধানগুলিও লক করে দেয়! এটি আপনার ডাটাবেস টেবিলগুলিকে গুরুতরভাবে লকআপের কারণ হতে পারে (এটি আমাদের জন্য রয়েছে)। এটি ইনোডাবের জন্য প্রযোজ্য!
জন হান্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.