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


207

বর্তমানে আমি নিম্নলিখিত মাইএসকিউএল টেবিলটি নিচ্ছি: Employees (empID, empName, department);

আমি টেবিলটি নিম্নলিখিতটিতে পরিবর্তন করতে চাই: Employees (empID, department, empName);

ALTERবিবৃতি ব্যবহার করে এটি কীভাবে করা যায় ?

দ্রষ্টব্য: আমি কেবল কলামের অবস্থান পরিবর্তন করতে চাই।


আমি কি জিজ্ঞেস করতে পারি কেন? কলামের
ক্রমটি

6
@ মনে করুন সম্ভবত না - এটি একটি SELECT *বিবৃতিতে মানগুলির ক্রম সংজ্ঞায়িত করে । (মঞ্জুর, মানগুলির ক্রমটি যদি গুরুত্বপূর্ণ হয় তবে তাদের বিবৃতিতে স্পষ্টভাবে তালিকাভুক্ত করা উচিত, তবে সম্ভবত এখানে
ওপির

1
আমি জানি এটি কোনও কিছুই প্রভাবিত করে না। আমার আসল টেবিলটিতে অনেকগুলি কলাম রয়েছে তাই আমি কেবল সর্বশেষে যুক্ত হওয়া 3 টি কলাম যুক্ত করেছি। কিন্তু আমি তাদের অবস্থানের সময়ে প্রদর্শন করে 3-4-5 ব্যবহার আরাম করতে চান SELECTবিবৃতি
সুমিত

6
@ iSumitG: এছাড়াও নোট করুন যে পাশাপাশি AFTER columnব্যবহার করা যেতে পারে ALTER TABLE ADD column। (পরের বারের জন্য আপনি কিছু ক্ষেত্র যুক্ত করুন))
ypercubeᵀᴹ

2
যদি কোনও মাইএসকিএল ডাম্প লোড করা হয় তবে এটি মানগুলিতে সন্নিবেশ ব্যবহার করে। সুতরাং যদি আপনি উদাহরণস্বরূপ, আপনি প্রোড থেকে ডেভ মধ্যে ডেটা লোড করছেন এবং কলামগুলি বিন্যস্ত হয়, আপনি একটি ত্রুটি পাবেন। যে কারণে কেউ এটি করতে চাইবে।
হুরয় আই এম

উত্তর:


344

যদি এম্পনামটি ভ্রচার (50) কলাম হয়:

ALTER TABLE Employees MODIFY COLUMN empName VARCHAR(50) AFTER department;

সম্পাদনা

মন্তব্যগুলি অনুযায়ী, আপনি এটি করতে পারেন:

ALTER TABLE Employees CHANGE COLUMN empName empName VARCHAR(50) AFTER department;

নোট করুন যে এর পুনরাবৃত্তি empNameইচ্ছাকৃত। আপনাকে মাইএসকিউএলকে বলতে হবে যে আপনি একই কলামের নাম রাখতে চান।

আপনার সচেতন হওয়া উচিত যে উভয় বাক্য গঠনই মাইএসকিউএল-র সাথে সুনির্দিষ্ট। তারা পোস্টগ্র্রেএসকিউএল বা অন্যান্য অনেক ডিবিএমএসে উদাহরণস্বরূপ কাজ করবে না।

অন্য সম্পাদনা: @ লুইস রসিকে একটি মন্তব্যে উল্লেখ করা অনুসারে, আপনাকে পরিবর্তিত কলাম সংজ্ঞাটি পুরোপুরি AFTERপরিবর্তকের ঠিক আগে নির্দিষ্ট করতে হবে । উপরের উদাহরণগুলিতে কেবল রয়েছে VARCHAR(50), তবে আপনার যদি অন্যান্য বৈশিষ্ট্যগুলি (যেমন NOT NULLবা কোনও ডিফল্ট মান) প্রয়োজন হয় তবে আপনাকে সেগুলিও অন্তর্ভুক্ত করতে হবে। আরও তথ্যের জন্য দস্তাবেজের সাথেALTER TABLE পরামর্শ করুন


6
কেবলমাত্র একটি দ্রষ্টব্য: সংস্করণ 4 পর্যন্ত মোডিফাই সমর্থনযোগ্য নয়
এরে এফে

4
আপনাকে কলামের নামটি পুনরাবৃত্তি করতে হবে কারণ সিনট্যাক্স ধরেছে যে আপনি কলামের নাম পরিবর্তন করতে পারেন। উদাহরণস্বরূপ: টেবিল কর্মচারী পরিবর্তিত কলম কর্মপরিচয় নাম নামকরণ বর্ণনাকারী (৫০) এর পরে বিভাগ;
ব্রায়ানজকোহেন

মনে রাখবেন যে পরিবর্তিত ক্রমটি ডাটাবেস এসকিউএল ডাম্পগুলিতে প্রতিফলিত হবে না।
স্কালে

3
@ সালেহেনামশহাগ - হ্যাঁ, ডক্স অনুসারে , COLUMNকীওয়ার্ডটি ALTER TABLEবিবৃতিতে optionচ্ছিক । আমি এটি ব্যবহার করতে পছন্দ করি কারণ আমার ধারণা এটি বিবৃতিটি আরও পঠনযোগ্য করে তোলে।
টেড হপ

1
আমার পক্ষে কাজ করে, আমার ক্ষেত্রে আমার এই কলামটি সংজ্ঞায়িত করা দরকার ছিল NOT NULL DEFAULT 1, উদাহরণের কলামের টাইপের পরে এটি করা হয়েছিলVARCHAR(50)
লুইজ রসি

67

কলামের অবস্থান পরিবর্তন করুন:

ALTER TABLE Employees 
   CHANGE empName empName VARCHAR(50) NOT NULL AFTER department;

আপনি যদি এটিকে প্রথম অবস্থানে নিয়ে যেতে চান তবে আপনাকে ALTER TABLE CHANGE [COLUMN] ক্যোয়ারির শেষে FIRST শব্দটি ব্যবহার করতে হবে:

ALTER TABLE UserOrder 
   CHANGE order_id order_id INT(11) NOT NULL FIRST;

24
কীভাবে এটিকে প্রথম অবস্থানে নিয়ে যাওয়া যায় তা উল্লেখ করা বেশ উপকারী
ত্রিস্টিয়ান

2
কোনও বৃহত টেবিলে এটি কীভাবে সম্পাদন করবে কোনও ধারণা? এটি কি কেবল কিছু মেটাডেটা পরিবর্তন করছে, বা এটি কি আসলে ডিস্কে ডেটা পুনর্গঠন করতে হবে?
কিপ

6
কিছুই নয়, আমার নিজের প্রশ্নের উত্তরটি 3.9M সারি সহ আমার একটি টেবিলে চেষ্টা করে দেখেছি, এটি প্রায় 2 মিনিট সময় নেয়। সুতরাং এটি অবশ্যই কিছু মেটাটাটা অদলবদলের চেয়ে আরও বেশি কিছু করছে।
কিপ

14

phpMyAdmin এটির জন্য একটি টেবিলের কাঠামোর দৃশ্যের মধ্যে একটি জিইউআই সরবরাহ করে। আপনি যে কলামটি স্থানান্তর করতে চান তা নির্বাচন করতে এবং কলাম তালিকার নীচে পরিবর্তিত ক্রিয়াটি ক্লিক করতে চেক করুন। তারপরে আপনি সমস্ত কলামের বৈশিষ্ট্য পরিবর্তন করতে পারবেন এবং আপনি পর্দার ডানদিকে ডানদিকে 'মুভ কলাম' ফাংশনটি পাবেন।

অবশ্যই এটি পুরোপুরি ভাল শীর্ষ উত্তরে অনুসন্ধানগুলি তৈরি করছে তবে জিইউআই অনুরাগীরা বিকল্পটির প্রশংসা করতে পারে।

আমার পিএইচপিএমওয়াই অ্যাডমিন সংস্করণটি 4.1.7


1
প্রশ্নটি বিশেষত জিজ্ঞাসা করে "ALTER স্টেটমেন্ট ব্যবহার করে এটি কীভাবে করা যায়"। মাইএসকিউএল চালানো প্রত্যেকে পিএইচপিএমইএডমিন ব্যবহার করে না।
কালেব

3
আমি পিপিপিএমআইএডমিনের মতো জিইউআই সরঞ্জামগুলি থেকে কোয়েরি আউটপুট পর্যবেক্ষণ করে আজকাল একটি কমান্ড লাইনে যা করি তা থেকে আমি অনেক কিছু শিখি। আমি পিপিএল যতগুলি ডাউনওয়েটকে এই ভিত্তিতে ফিট দেখতে পেয়েছি তার জন্য আমি খুশি: 1 জন ব্যক্তি এটি দেখবে, এমন পরিবেশে তাদের কাজটি সম্পন্ন করবে যা তারা স্বাচ্ছন্দ্য বোধ করে, কিছুটা শিখবে এবং এগিয়ে যাবে।

এই ক্রিয়াটির জন্য phpmyadmi কমান্ডটি অ্যাকশনটি দেখায় না। এটি খুঁজে পাওয়া যায় নি
তেবে

2
বাহ, বিকল্প সমাধানের জন্য এতটা ক্ষোভ যা কৌশলটি করে এবং উত্তরগুলি একটি বিকল্প এসকিউএল এর জন্য অনুরোধ করে যা প্রশংসা করে।
ইওয়েন

1

10+ টেবিলগুলিতে একটি পণ্যের পরবর্তী পর্যায়ে প্রবর্তিত কলামের জন্য আমাকে এটি চালাতে হয়েছিল। সুতরাং সমস্ত 'প্রাসঙ্গিক' টেবিলের জন্য পরিবর্তিত কমান্ড তৈরি করতে এই দ্রুত খালি স্ক্রিপ্টটি লিখেছেন।

SET @NeighboringColumn = '<YOUR COLUMN SHOULD COME AFTER THIS COLUMN>';

SELECT CONCAT("ALTER TABLE `",t.TABLE_NAME,"` CHANGE COLUMN `",COLUMN_NAME,"` 
`",COLUMN_NAME,"` ", c.DATA_TYPE, CASE WHEN c.CHARACTER_MAXIMUM_LENGTH IS NOT 
NULL THEN CONCAT("(", c.CHARACTER_MAXIMUM_LENGTH, ")") ELSE "" END ,"  AFTER 
`",@NeighboringColumn,"`;")
FROM information_schema.COLUMNS c, information_schema.TABLES t
WHERE c.TABLE_SCHEMA = '<YOUR SCHEMA NAME>'
AND c.COLUMN_NAME = '<COLUMN TO MOVE>'
AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
AND c.TABLE_NAME = t.TABLE_NAME
AND t.TABLE_TYPE = 'BASE TABLE'
AND @NeighboringColumn IN (SELECT COLUMN_NAME 
    FROM information_schema.COLUMNS c2 
    WHERE c2.TABLE_NAME = t.TABLE_NAME);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.