MySQL
तालिका में परिवर्तन
खोज…
वाक्य - विन्यास
- ALTER [ध्यान न दें] टेबल tbl_name [alter_specification [, alter_specification] ...] [partition_options]
टिप्पणियों
alter_specification: table_options
| ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name ]
| ADD [COLUMN] (col_name column_definition,...)
| ADD {INDEX|KEY} [index_name] [index_type] (index_col_name,...) [index_option] ...
| ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...) [index_option] ...
| ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...) [index_option] ...
| ADD FULLTEXT [INDEX|KEY] [index_name] (index_col_name,...) [index_option] ...
| ADD SPATIAL [INDEX|KEY] [index_name] (index_col_name,...) [index_option] ...
| ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) reference_definition
| ALGORITHM [=] {DEFAULT|INPLACE|COPY}
| ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
| CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]
| LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}
| MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]
| DROP [COLUMN] col_name
| DROP PRIMARY KEY
| DROP {INDEX|KEY} index_name
| DROP FOREIGN KEY fk_symbol
| DISABLE KEYS
| ENABLE KEYS
| RENAME [TO|AS] new_tbl_name
| RENAME {INDEX|KEY} old_index_name TO new_index_name
| ORDER BY col_name [, col_name] ...
| CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
| [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name]
| DISCARD TABLESPACE
| IMPORT TABLESPACE
| FORCE
| {WITHOUT|WITH} VALIDATION
| ADD PARTITION (partition_definition)
| DROP PARTITION partition_names
| DISCARD PARTITION {partition_names | ALL} TABLESPACE
| IMPORT PARTITION {partition_names | ALL} TABLESPACE
| TRUNCATE PARTITION {partition_names | ALL}
| COALESCE PARTITION number
| REORGANIZE PARTITION partition_names INTO (partition_definitions)
| EXCHANGE PARTITION partition_name WITH TABLE tbl_name [{WITH|WITHOUT} VALIDATION]
| ANALYZE PARTITION {partition_names | ALL}
| CHECK PARTITION {partition_names | ALL}
| OPTIMIZE PARTITION {partition_names | ALL}
| REBUILD PARTITION {partition_names | ALL}
| REPAIR PARTITION {partition_names | ALL}
| REMOVE PARTITIONING
| UPGRADE PARTITIONING
index_col_name: col_name [(length)] [ASC | DESC]
index_type: USING {BTREE | HASH}
index_option: KEY_BLOCK_SIZE [=] value
| index_type
| WITH PARSER parser_name
| COMMENT 'string'
table_options: table_option [[,] table_option] ... (see
टेबल बनाएं options)
partition_options: (see
तालिका options)
बनाएं options)
रेफरी: MySQL 5.7 संदर्भ मैनुअल / ... / वैकल्पिक टेबल सिंटेक्स / 14.1.8 टेबल टेबल सिंटैक्स
भंडारण इंजन बदलना; पुनर्निर्माण तालिका; file_per_table बदलें
उदाहरण के लिए, यदि t1
वर्तमान में एक InnoDB तालिका नहीं है, तो यह कथन इसके संग्रहण इंजन को InnoDB में बदल देता है:
ALTER TABLE t1 ENGINE = InnoDB;
यदि तालिका पहले से ही InnoDB है, तो यह तालिका और उसके अनुक्रमणिका को फिर से OPTIMIZE TABLE
और OPTIMIZE TABLE
समान प्रभाव OPTIMIZE TABLE
। आप कुछ डिस्क स्थान सुधार प्राप्त कर सकते हैं।
यदि t1
निर्माण के समय innodb_file_per_table
का मान वर्तमान में मूल्य से अलग है, तो यह file_per_table में परिवर्तित हो जाएगा।
सारणी के अन्य रंग
CREATE DATABASE stackoverflow;
USE stackoverflow;
Create table stack(
id_user int NOT NULL,
username varchar(30) NOT NULL,
password varchar(30) NOT NULL
);
ALTER TABLE stack ADD COLUMN submit date NOT NULL; -- add new column
ALTER TABLE stack DROP COLUMN submit; -- drop column
ALTER TABLE stack MODIFY submit DATETIME NOT NULL; -- modify type column
ALTER TABLE stack CHANGE submit submit_date DATETIME NOT NULL; -- change type and name of column
ALTER TABLE stack ADD COLUMN mod_id INT NOT NULL AFTER id_user; -- add new column after existing column
अन्य तालिका INDEX जोड़ें
प्रदर्शन में सुधार करने के लिए कोई अनुक्रमणिका को स्तंभों में जोड़ना चाह सकता है
ALTER TABLE TABLE_NAME ADD INDEX `index_name` (`column_name`)
समग्र (एकाधिक स्तंभ) अनुक्रमित जोड़ने के लिए बदल रहा है
ALTER TABLE TABLE_NAME ADD INDEX `index_name` (`col1`,`col2`)
ऑटो-इंक्रीमेंट वैल्यू बदलें
जब आप एक बड़े पैमाने पर विलोपन के बाद AUTO_INCREMENT कॉलम में गैप नहीं चाहते हैं, तो ऑटो-इन्क्रीमेंट वैल्यू बदलना उपयोगी है।
उदाहरण के लिए, आपको अपनी तालिका में बहुत सी अवांछित (विज्ञापन) पंक्तियाँ मिलीं, आपने उन्हें हटा दिया, और आप ऑटो-इंक्रीमेंट मानों के अंतर को ठीक करना चाहते हैं। मान लें कि AUTO_INCREMENT कॉलम का अधिकतम मान अभी 100 है। ऑटो-इंक्रीमेंट मान को ठीक करने के लिए आप निम्न का उपयोग कर सकते हैं।
ALTER TABLE your_table_name AUTO_INCREMENT = 101;
प्राथमिक कुंजी कॉलम के प्रकार को बदलना
ALTER TABLE fish_data.fish DROP PRIMARY KEY;
ALTER TABLE fish_data.fish MODIFY COLUMN fish_id DECIMAL(20,0) NOT NULL PRIMARY KEY;
प्राथमिक कुंजी को छोड़ने के बिना इस कॉलम के प्रकार को संशोधित करने का प्रयास करने के परिणामस्वरूप त्रुटि हो जाएगी।
कॉलम परिभाषा बदलें
एक db कॉलम की परिभाषा को बदल दें, नीचे दी गई क्वेरी उदाहरण के लिए उपयोग की जा सकती है, अगर हमारे पास यह db स्कीमा है
users (
firstname varchar(20),
lastname varchar(20),
age char(2)
)
age
कॉलम के प्रकार को char
से int
बदलने के लिए, हम नीचे दिए गए क्वेरी का उपयोग करते हैं:
ALTER TABLE users CHANGE age age tinyint UNSIGNED NOT NULL;
सामान्य प्रारूप है:
ALTER TABLE table_name CHANGE column_name new_column_definition
MySQL डेटाबेस का नाम बदलना
MySQL डेटाबेस का नाम बदलने के लिए कोई एकल आदेश नहीं है, लेकिन बैकअप और रीस्टोर करके इसे प्राप्त करने के लिए एक साधारण वर्कअराउंड का उपयोग किया जा सकता है:
mysqladmin -uroot -p<password> create <new name>
mysqldump -uroot -p<password> --routines <old name> | mysql -uroot -pmypassword <new name>
mysqladmin -uroot -p<password> drop <old name>
कदम:
- ऊपर की पंक्तियों को एक पाठ संपादक में कॉपी करें।
- प्रासंगिक मूल्यों के साथ सभी संदर्भों को
<old name>
,<new name>
और<password>
(एक अलग उपयोगकर्ता का उपयोग करने के लिए वैकल्पिक रूप सेroot
को बदलें। - कमांड लाइन पर एक-एक करके निष्पादित करें (MySQL "बिन" फ़ोल्डर को पथ में है और जब संकेत दिया जाता है "y" दर्ज करें)।
वैकल्पिक चरण:
प्रत्येक तालिका को एक db से दूसरे में बदलें (स्थानांतरित करें)। प्रत्येक तालिका के लिए ऐसा करें:
RENAME TABLE `<old db>`.`<name>` TO `<new db>`.`<name>`;
आप कुछ ऐसा करके उन बयानों को बना सकते हैं
SELECT CONCAT('RENAME TABLE old_db.', table_name, ' TO ',
'new_db.', table_name)
FROM information_schema.TABLES
WHERE table_schema = 'old_db';
चेतावनी। फाइलसिस्टम पर बस फाइलों को इधर-उधर घुमाकर किसी भी प्रकार का टेबल या डेटाबेस बनाने का प्रयास न करें। यह सिर्फ MyISAM के पुराने दिनों में ठीक काम करता था, लेकिन इनोबीडी और टेबलस्पेस के नए दिनों में, यह काम नहीं करेगा। खासकर जब "डेटा डिक्शनरी" को फाइल सिस्टम से सिस्टम इनोबीडी टेबल में ले जाया जाता है, तो संभवत: अगले प्रमुख रिलीज में। बढ़ते (के रूप में बस के लिए विरोध DROPping
) एक PARTITION
एक InnoDB तालिका के "परिवहनीय टेबलस्पेस" का उपयोग की आवश्यकता है। निकट भविष्य में, यहां तक पहुंचने के लिए एक फ़ाइल भी नहीं होगी।
दो MySQL डेटाबेस के नाम स्वैपिंग
निम्नलिखित आदेशों का उपयोग दो MySQL डेटाबेस ( <db1>
और <db2>
) के नाम स्वैप करने के लिए किया जा सकता है:
mysqladmin -uroot -p<password> create swaptemp
mysqldump -uroot -p<password> --routines <db1> | mysql -uroot -p<password> swaptemp
mysqladmin -uroot -p<password> drop <db1>
mysqladmin -uroot -p<password> create <db1>
mysqldump -uroot -p<password> --routines <db2> | mysql -uroot -p<password> <db1>
mysqladmin -uroot -p<password> drop <db2>
mysqladmin -uroot -p<password> create <db2>
mysqldump -uroot -p<password> --routines swaptemp | mysql -uroot -p<password> <db2>
mysqladmin -uroot -p<password> drop swaptemp
कदम:
- ऊपर की पंक्तियों को एक पाठ संपादक में कॉपी करें।
- प्रासंगिक मानों के साथ सभी संदर्भों को
<db1>
,<db2>
और<password>
(एक अलग उपयोगकर्ता का उपयोग करने के लिए वैकल्पिक रूप सेroot
) बदलें। - कमांड लाइन पर एक-एक करके निष्पादित करें (MySQL "बिन" फ़ोल्डर को पथ में है और जब संकेत दिया जाता है "y" दर्ज करें)।
MySQL टेबल का नाम बदलना
तालिका का नामकरण एकल आदेश में किया जा सकता है:
RENAME TABLE `<old name>` TO `<new name>`;
निम्नलिखित सिंटैक्स बिल्कुल वैसा ही करता है:
ALTER TABLE `<old name>` RENAME TO `<new name>`;
यदि एक अस्थायी तालिका का नाम बदला जा रहा है, तो सिंटैक्स के ALTER TABLE
संस्करण का उपयोग किया जाना चाहिए।
कदम:
- प्रासंगिक मूल्यों के साथ ऊपर की पंक्ति में
<old name>
और<new name>
बदलें। नोट: यदि तालिका को किसी भिन्न डेटाबेस में ले जाया जा रहा है, तोdbname
।tablename
सिंटैक्स का उपयोग<old name>
और / या<new name>
लिए किया जा सकता है। - इसे MySQL कमांड लाइन में संबंधित डेटाबेस या MySQL कार्यक्षेत्र जैसे क्लाइंट पर निष्पादित करें। नोट: उपयोगकर्ता के पास पुराने टेबल पर ALTER और DROP विशेषाधिकार होने चाहिए और नए पर CREATE और INSERT होंगे।
MySQL तालिका में एक कॉलम का नाम बदलना
एक कॉलम का नामकरण एक ही बयान में किया जा सकता है, लेकिन साथ ही नए नाम के साथ, "कॉलम परिभाषा" (यानी इसके डेटा प्रकार और अन्य वैकल्पिक गुण जैसे कि अशक्तता, ऑटो वेतन वृद्धि आदि) को भी निर्दिष्ट किया जाना चाहिए।
ALTER TABLE `<table name>` CHANGE `<old name>` `<new name>` <column definition>;
कदम:
- MySQL कमांड लाइन या MySQL Workbench जैसे क्लाइंट को खोलें।
- निम्न कथन को चलाएं:
SHOW CREATE TABLE <table name>;
(संबंधित मान के साथ<table name>
प्रतिस्थापित करना)। - स्तंभ का नाम बदलने के लिए संपूर्ण स्तंभ परिभाषा का एक नोट बनाएं (यानी वह सब कुछ जो स्तंभ के नाम के बाद दिखाई देता है, लेकिन अल्पविराम से पहले इसे अगले स्तंभ नाम से अलग करता है) ।
- संबंधित मानों के साथ ऊपर दी गई पंक्ति में
<old name>
,<new name>
और<column definition>
बदलें।