कॉलम को कैसे बदलें और डिफ़ॉल्ट मान को कैसे बदलें?


190

स्तंभ के डेटा प्रकार को बदलने और एक नया डिफ़ॉल्ट मान सेट करने के दौरान मुझे निम्न त्रुटि मिली:

ALTER TABLE foobar_data ALTER COLUMN col VARCHAR(255) NOT NULL SET DEFAULT '{}';

त्रुटि 1064 (42000): आपके एसक्यूएल सिंटैक्स में एक त्रुटि है; पंक्ति 1 पर 'VARCHAR (255) NOT NULL SET DEFAULT' {} '' के पास उपयोग करने के लिए सही सिंटैक्स के लिए आपके MySQL सर्वर संस्करण से मेल खाती पुस्तिका की जाँच करें


मुझे नहीं लगता कि आपको DEFAULT से पहले सेट की आवश्यकता है
जोनास टी।

जवाबों:


274
ALTER TABLE foobar_data MODIFY COLUMN col VARCHAR(255) NOT NULL DEFAULT '{}';

दूसरी संभावना जो वही करती है (juergen_d के लिए धन्यवाद):

ALTER TABLE foobar_data CHANGE COLUMN col col VARCHAR(255) NOT NULL DEFAULT '{}';

9
columnवैकल्पिक है। आप बस उपयोग ALTER TABLE foobar_data MODIFY col VARCHAR(255) NOT NULL DEFAULT '{}';कर सकते हैं या ALTER TABLE foobar_data CHANGE col col VARCHAR(255) NOT NULL DEFAULT '{}';परिणाम समान होगा।
कप्पड़

1
यह डिफ़ॉल्ट स्ट्रिंग है जिसे ओपी पूछ रहा था। जब आप किसी पंक्ति को सम्मिलित करते समय इस स्तंभ के लिए कोई मान निर्दिष्ट नहीं करते हैं, तो मान बन जाता है {}
फैंसीपैंट

1
क्या colएक दूसरे के बगल में दो एस लिखना सही है? (इस तरह col col)
शफीज़ादेह

4
@ शफिजादे हां, यह है। यह एक स्तंभ का नाम बदलने की संभावना प्रदान करता है। पहला मूल नाम है, दूसरा नया नाम है।
फैंसीपैंट

3
यदि आपको केवल DEFAULTमान बदलने की आवश्यकता है, तो इसका उपयोग न करें । यह बिना कुछ लिए तालिका की सभी पंक्तियों को संसाधित करेगा (विशाल तालिकाओं पर बहुत लंबा)। इसके बजाय ALTER TABLE <table_name> ALTER COLUMN <column_name> SET DEFAULT <value>जो तत्काल है उसका उपयोग करें ।
dolmen

114

एक अनुवर्ती के रूप में, यदि आप बस एक डिफ़ॉल्ट सेट करना चाहते हैं, तो सुनिश्चित करें कि आप ALTER .. SET सिंटैक्स का उपयोग कर सकते हैं। बस वहाँ में अन्य सभी सामान मत डालो। यदि आप कॉलम की शेष परिभाषा रखने जा रहे हैं, तो स्वीकृत उत्तर के अनुसार MODIFY या CHANGE सिंटैक्स का उपयोग करें।

वैसे भी, कॉलम डिफॉल्ट सेट करने के लिए ALTER सिंटैक्स, (जब से मैं यहाँ आया था, तब मैं यही देख रहा था):

ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT 'literal';

जिसके लिए 'शाब्दिक' भी एक संख्या हो सकती है (उदा ...SET DEFAULT 0)। मैं इसके साथ कोशिश नहीं की है, ...SET DEFAULT CURRENT_TIMESTAMPलेकिन क्यों नहीं एह?


5
अगर उद्धृत किया गया तो भी current_timestamp मेरे लिए काम नहीं कर रहा था। मुझे निम्नलिखित का उपयोग करना था:ALTER TABLE table_name MODIFY COLUMN column_name TIMESTAMP NOT NULL DEFAULT current_timestamp;
नेरिस

7
+1 मेरे लिए सर्वश्रेष्ठ उत्तर, इस तरह से मुझे कॉलम के प्रकार और अन्य चीजों को निर्दिष्ट करने की आवश्यकता नहीं है जो नहीं बदलेगी!
user2342558

2
यह केवल DEFAULTमूल्य बदलने के लिए कुशल उत्तर है ।
डॉल्मेन

1
आप डिफ़ॉल्ट मान डालने, उपयोग के समय होना चाहते हैं NOW()या current_timestamp()@Malaise @Nereis
BlueCacti

16

यदि आप पहले से निर्मित कॉलम के लिए डिफ़ॉल्ट मान जोड़ना चाहते हैं, तो यह मेरे लिए काम करता है:

ALTER TABLE Persons
ALTER credit SET DEFAULT 0.0';

2
यह सबसे अच्छा उत्तर है क्योंकि आपको मौजूदा क्षेत्र विनिर्देश को कॉपी करने की आवश्यकता नहीं है।
rjh

4

DEFAULT CURRENT_TIMESTAMP के लिए:

ALTER TABLE tablename
 CHANGE COLUMN columnname1 columname1 DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
 CHANGE COLUMN columnname2 columname2 DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

कृपया डबल कॉलमनाम घोषणा पर ध्यान दें

DEFAULT CURRENT_TIMESTAMP निकाल रहा है:

ALTER TABLE tablename
 ALTER COLUMN columnname1 DROP DEFAULT,
 ALTER COLUMN columnname2 DROPT DEFAULT;

डबल कॉलम नाम क्यों?
MKJ

2
अन्य टेबल टैब्लेनाम CHANGE COLUMN पुराने कॉल्मनाम न्यूकोलनाम कॉलमशर्त
लियोनार्ड लेपाडातू

1

स्वीकृत उत्तर अच्छा काम करता है।

NULL मान त्रुटि के अमान्य उपयोग के मामले में , NULL मानों पर, सभी शून्य मानों को उस स्तंभ में डिफ़ॉल्ट मान में अद्यतन करें और फिर परिवर्तन करने का प्रयास करें।

UPDATE foobar_data SET col = '{}' WHERE col IS NULL;

ALTER TABLE foobar_data MODIFY COLUMN col VARCHAR(255) NOT NULL DEFAULT '{}';

मुझे क्या चाहिए धन्यवाद
arslion

0

मामले में उपरोक्त आपके लिए काम नहीं करता है (यानी: आप नए SQL या Azure के साथ काम कर रहे हैं ) निम्नलिखित प्रयास करें:

1) मौजूदा स्तंभ बाधा (यदि कोई हो) को छोड़ें:

ALTER TABLE [table_name] DROP CONSTRAINT DF_my_constraint

2) एक नया बनाएं:

ALTER TABLE [table_name] ADD CONSTRAINT DF_my_constraint  DEFAULT getdate() FOR column_name;

0

इसे इस्तेमाल करे

ALTER TABLE `table_name` CHANGE `column_name` `column_name` data_type  NULL DEFAULT '';

इस तरह

ALTER TABLE `drivers_meta` CHANGE `driving_license` `driving_license` VARCHAR(30) NULL DEFAULT '';
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.