खोज…


वाक्य - विन्यास

  • बनाएँ तालिका तालिका_नाम (column_name1 data_type (size), column_name2 data_type (size), column_name3 data_type (size), ....); // बेसिक टेबल निर्माण

  • बनाएँ तालिका तालिका_नाम [अगर नहीं हो रहा है] (column_name1 data_type (size), column_name2 data_type (size), column_name3 data_type (size), ....); // टेबल निर्माण जाँच मौजूदा

  • बनाएँ [थीम] टेबल टेबल_नाम [अगर नहीं हो रहा है] (column_name1 data_type (size), column_name2 data_type (size), column_name3 data_type (size), ....); // अस्थायी तालिका निर्माण

  • TATE new_tbl [AS] का चयन करें * orig_tbl से; // टेबल क्रिएट सेलेक्ट

टिप्पणियों

एक ENGINE विनिर्देश के साथ CREATE TABLE विवरण समाप्त होना चाहिए:

CREATE TABLE table_name ( column_definitions ) ENGINE=engine;

कुछ विकल्प हैं:

  • InnoDB : (5.5.5 संस्करण के बाद से डिफ़ॉल्ट) यह एक ट्रांज़िशन-सेफ़ (ACID कंप्लेंट) इंजन है। इसमें ट्रांजेक्शन कमिट और रोल-बैक और क्रैश-रिकवरी क्षमताएं और रो-लेवल लॉकिंग हैं।
  • MyISAM : (संस्करण 5.5.5 से पहले डिफ़ॉल्ट) यह एक सादा-तेज़ इंजन है। यह लेन-देन का समर्थन नहीं करता है, न ही विदेशी चाबियाँ, लेकिन यह डेटा-वेयरहाउसिंग के लिए उपयोगी है।
  • Memory : रैम के सभी डेटा को बहुत तेज़ संचालन के लिए संग्रहीत करता है, लेकिन डेटाबेस पुनरारंभ पर तालिका की तारीख खो जाएगी।

अधिक इंजन विकल्प यहाँ

मूल तालिका निर्माण

क्रिएट CREATE TABLE स्टेटमेंट का उपयोग MySQL डेटाबेस में टेबल बनाने के लिए किया जाता है।

CREATE TABLE Person (
    `PersonID`      INTEGER NOT NULL PRIMARY KEY,
    `LastName`      VARCHAR(80),
    `FirstName`     VARCHAR(80),
    `Address`       TEXT,
    `City`          VARCHAR(100)
) Engine=InnoDB;

हर क्षेत्र की परिभाषा होनी चाहिए:

  1. फ़ील्ड नाम: एक मान्य फ़ील्ड नाम। `-चरों में नामों को अंकित करना सुनिश्चित करें। यह सुनिश्चित करता है कि आप फ़ील्ड नाम में स्थान-वर्ण का उपयोग कर सकते हैं।
  2. डेटा प्रकार [लंबाई]: यदि फ़ील्ड CHAR या VARCHAR , तो फ़ील्ड की लंबाई निर्दिष्ट करना अनिवार्य है।
  3. विशेषताएँ NULL | NOT NULL : यदि NOT NULL निर्दिष्ट किया जाता है, तो एक स्टोर करने के लिए किसी भी प्रयास NULL उस क्षेत्र में मूल्य असफल हो जायेगी।
  4. डेटा प्रकार और उनकी विशेषताओं के बारे में अधिक देखें यहाँ

Engine=... तालिका के भंडारण इंजन को निर्दिष्ट करने के लिए उपयोग किया जाने वाला एक वैकल्पिक पैरामीटर है। यदि कोई संग्रहण इंजन निर्दिष्ट नहीं है, तो सर्वर के डिफ़ॉल्ट टेबल स्टोरेज इंजन (आमतौर पर InnoDB या MyISAM) का उपयोग करके तालिका बनाई जाएगी।

चूक स्थापित करना

इसके अतिरिक्त, जहां यह समझ में आता है कि आप DEFAULT का उपयोग करके प्रत्येक क्षेत्र के लिए एक डिफ़ॉल्ट मान सेट कर सकते हैं:

CREATE TABLE Address (
    `AddressID`   INTEGER NOT NULL PRIMARY KEY,
    `Street`      VARCHAR(80),
    `City`        VARCHAR(80),
    `Country`     VARCHAR(80) DEFAULT "United States",
    `Active`      BOOLEAN DEFAULT 1,
) Engine=InnoDB;

यदि आवेषण के दौरान कोई Street निर्दिष्ट नहीं की जाती है, तो पुनर्प्राप्त किए जाने पर वह फ़ील्ड NULL होगी। जब कोई Country सम्मिलित करने पर निर्दिष्ट नहीं होता है, तो यह "संयुक्त राज्य" के लिए डिफ़ॉल्ट होगा।

आप BLOB , TEXT , GEOMETRY और JSON फ़ील्ड्स को छोड़कर , सभी कॉलम प्रकारों के लिए डिफ़ॉल्ट मान सेट कर सकते हैं।

प्राथमिक कुंजी के साथ तालिका निर्माण

CREATE TABLE Person (
    PersonID     INT UNSIGNED NOT NULL,
    LastName     VARCHAR(66) NOT NULL,
    FirstName    VARCHAR(66),
    Address      VARCHAR(255),
    City         VARCHAR(66),
    PRIMARY KEY (PersonID)
);

एक प्राथमिक कुंजी एक NOT NULL सिंगल या एक बहु-स्तंभ पहचानकर्ता है जो विशिष्ट रूप से एक तालिका की एक पंक्ति की पहचान करता है। एक इंडेक्स बनाया गया है, और यदि स्पष्ट रूप से NOT NULL घोषित NOT NULL , तो MySQL उन्हें चुपचाप और अंतर्निहित रूप से घोषित करेगा।

एक तालिका में केवल एक PRIMARY KEY , और प्रत्येक तालिका में एक होने की सिफारिश की जाती है। InnoDB स्वचालित रूप से इसकी अनुपस्थिति में एक बना देगा, (जैसा कि MySQL प्रलेखन में देखा गया है ) हालांकि यह कम वांछनीय है।

अक्सर, एक AUTO_INCREMENT INT जिसे "सरोगेट कुंजी" के रूप में भी जाना जाता है, का उपयोग पतली सूचकांक अनुकूलन और अन्य तालिकाओं के साथ संबंधों के लिए किया जाता है। जब भी कोई नया रिकॉर्ड जोड़ा जाता है, तो यह मान (सामान्य रूप से) 1 से बढ़ जाता है, 1 के डिफ़ॉल्ट मान से शुरू होता है।

हालांकि, इसके नाम के बावजूद, यह गारंटी देना इसका उद्देश्य नहीं है कि मूल्य वृद्धिशील हैं, केवल यह कि वे अनुक्रमिक और अद्वितीय हैं।

जब तक तालिका TRUNCATE TABLE स्टेटमेंट का उपयोग करके तालिका को छोटा नहीं किया जाता है, तब तक एक ऑटो-इंक्रीमेंट INT मान इसके डिफ़ॉल्ट प्रारंभ मान पर रीसेट नहीं होगा।

प्राथमिक कुंजी के रूप में एक कॉलम को परिभाषित करना (इनलाइन परिभाषा)

यदि प्राथमिक कुंजी में एक एकल स्तंभ होता है, तो PRIMARY KEY खंड को स्तंभ परिभाषा के साथ इनलाइन रखा जा सकता है:

CREATE TABLE Person (
    PersonID     INT UNSIGNED NOT NULL PRIMARY KEY,
    LastName     VARCHAR(66) NOT NULL,
    FirstName    VARCHAR(66),
    Address      VARCHAR(255),
    City         VARCHAR(66)
);

कमांड का यह रूप छोटा और पढ़ने में आसान है।

एकाधिक-स्तंभ प्राथमिक कुंजी को परिभाषित करना

एक से अधिक कॉलम वाली प्राथमिक कुंजी को परिभाषित करना भी संभव है। यह एक विदेशी कुंजी संबंध के बच्चे की मेज पर किया जा सकता है। एक बहु-स्तंभ प्राथमिक कुंजी को एक अलग PRIMARY KEY खंड में भाग लेने वाले स्तंभों को सूचीबद्ध करके परिभाषित किया गया है। इनलाइन सिंटैक्स की अनुमति यहां नहीं है, क्योंकि केवल एक कॉलम को PRIMARY KEY इनलाइन घोषित किया जा सकता है। उदाहरण के लिए:

CREATE TABLE invoice_line_items (
    LineNum      SMALLINT UNSIGNED NOT NULL,
    InvoiceNum   INT UNSIGNED NOT NULL,
    -- Other columns go here
    PRIMARY KEY (InvoiceNum, LineNum),
    FOREIGN KEY (InvoiceNum) REFERENCES -- references to an attribute of a table
);

ध्यान दें कि प्राथमिक कुंजी के कॉलम को तार्किक क्रम क्रम में निर्दिष्ट किया जाना चाहिए , जो उस क्रम से अलग हो सकता है जिसमें स्तंभ परिभाषित किए गए थे, जैसा कि ऊपर दिए गए उदाहरण में है।

बड़े अनुक्रमणिका में अधिक डिस्क स्थान, मेमोरी और I / O की आवश्यकता होती है। इसलिए कुंजियाँ यथासंभव छोटी होनी चाहिए (विशेष रूप से रचित कुंजियों के संबंध में)। InnoDB में, हर index सेकंडरी इंडेक्स ’में PRIMARY KEY के कॉलम की एक कॉपी शामिल होती है।

विदेशी कुंजी के साथ तालिका निर्माण

CREATE TABLE Account (
    AccountID     INT UNSIGNED NOT NULL,
    AccountNo     INT UNSIGNED NOT NULL,
    PersonID    INT UNSIGNED,
    PRIMARY KEY (AccountID),
    FOREIGN KEY (PersonID) REFERENCES Person (PersonID)
) ENGINE=InnoDB;

विदेशी कुंजी: एक विदेशी कुंजी ( FK ) या तो एक एकल स्तंभ, या बहु-स्तंभ स्तंभों की एक समग्र तालिका है, एक संदर्भ तालिका में। यह FK संदर्भित तालिका में मौजूद होने की पुष्टि करता है। यह अत्यधिक अनुशंसित है कि FK पुष्टि करने वाली संदर्भित तालिका कुंजी एक प्राथमिक कुंजी है, लेकिन यह लागू नहीं है। इसका उपयोग एक संदर्भित संदर्भ में फास्ट-लुकअप के रूप में किया जाता है जहां इसे अद्वितीय होने की आवश्यकता नहीं होती है, और वास्तव में वहां एक बाएं-सबसे सूचकांक हो सकता है।

विदेशी कुंजी रिश्तों में एक मूल तालिका शामिल होती है जो केंद्रीय डेटा मूल्यों को रखती है, और समान मूल्यों वाले एक बच्चे की तालिका अपने माता-पिता को वापस इंगित करती है। बच्चे की तालिका में प्रमुख कुंजी खंड निर्दिष्ट है। पैरेंट और चाइल्ड टेबल को एक ही स्टोरेज इंजन का उपयोग करना चाहिए। वे मंदिर तालिकाएँ नहीं होनी चाहिए।

विदेशी कुंजी में संदर्भित कॉलम और संदर्भित कुंजी में समान डेटा प्रकार होना चाहिए। पूर्णांक प्रकारों का आकार और संकेत समान होना चाहिए। स्ट्रिंग प्रकारों की लंबाई समान होने की आवश्यकता नहीं है। गैर-चरित्र (वर्ण) स्ट्रिंग कॉलम के लिए, वर्ण सेट और टकराव समान होना चाहिए।

नोट: विदेशी-प्रमुख बाधाओं को InnoDB भंडारण इंजन (MyISAM या MEMORY नहीं) के तहत समर्थित है। अन्य इंजनों का उपयोग करते हुए डीबी सेट-अप इस CREATE TABLE स्टेटमेंट को स्वीकार करेगा लेकिन विदेशी-कुंजी बाधाओं का सम्मान नहीं करेगा। (हालांकि नए MySQL संस्करण InnoDB लिए डिफ़ॉल्ट हैं, लेकिन यह स्पष्ट होना अच्छा अभ्यास है।)

किसी मौजूदा तालिका का क्लोनिंग

एक तालिका को निम्नानुसार दोहराया जा सकता है:

CREATE TABLE ClonedPersons LIKE Persons;

नई तालिका में इंडेक्स और कॉलम विशेषताओं सहित मूल तालिका के समान संरचना होगी।

मैन्युअल रूप से तालिका बनाने के साथ-साथ, किसी अन्य तालिका से डेटा का चयन करके तालिका बनाना भी संभव है:

CREATE TABLE ClonedPersons SELECT * FROM Persons;

जैसे ही आप जाते हैं डेटा को संशोधित करने के लिए आप किसी SELECT स्टेटमेंट की सामान्य विशेषताओं का उपयोग कर सकते हैं:

CREATE TABLE ModifiedPersons
SELECT PersonID, FirstName + LastName AS FullName FROM Persons
WHERE LastName IS NOT NULL;

प्राथमिक कुंजी और सूचियों को जब से तालिका बनाने संरक्षित नहीं किए जाएंगे SELECT । आपको उन्हें पुनः प्राप्त करना होगा:

CREATE TABLE ModifiedPersons (PRIMARY KEY (PersonID))
SELECT PersonID, FirstName + LastName AS FullName FROM Persons
WHERE LastName IS NOT NULL;

चयन से समय सारणी बनाएँ

आप एक जोड़कर एक-दूसरे टेबल बना सकते हैं SELECT के अंत में बयान CREATE TABLE बयान:

CREATE TABLE stack (
    id_user INT,
    username VARCHAR(30),
    password VARCHAR(30)
);

उसी डेटाबेस में एक तालिका बनाएँ:

-- create a table from another table in the same database with all attributes
CREATE TABLE stack2 AS SELECT * FROM stack;

-- create a table from another table in the same database with some attributes
CREATE TABLE stack3 AS SELECT username, password FROM stack;

विभिन्न डेटाबेस से तालिकाएँ बनाएँ:

-- create a table from another table from another database with all attributes
CREATE TABLE stack2 AS SELECT * FROM second_db.stack;

-- create a table from another table from another database with some attributes
CREATE TABLE stack3 AS SELECT username, password FROM second_db.stack;

एनबी

किसी अन्य डेटाबेस में मौजूद किसी अन्य तालिका की तालिका बनाने के लिए, आपको इस तरह डेटाबेस का नाम निर्दिष्ट करना होगा:

FROM NAME_DATABASE.name_table

तालिका संरचना दिखाएं

यदि आप अपनी तालिका की स्कीमा जानकारी देखना चाहते हैं, तो आप निम्न में से किसी एक का उपयोग कर सकते हैं:

SHOW CREATE TABLE child; -- Option 1

CREATE TABLE `child` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fullName` varchar(100) NOT NULL,
  `myParent` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `mommy_daddy` (`myParent`),
  CONSTRAINT `mommy_daddy` FOREIGN KEY (`myParent`) REFERENCES `parent` (`id`) 
      ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

यदि mysql कमांडलाइन टूल से उपयोग किया जाता है, तो यह कम क्रिया है:

SHOW CREATE TABLE child \G

तालिका संरचना दिखाने का कम वर्णनात्मक तरीका:

mysql> CREATE TABLE Tab1(id int, name varchar(30));
Query OK, 0 rows affected (0.03 sec)

mysql> DESCRIBE Tab1; -- Option 2 

+-------+-------------+------+-----+---------+-------+ 
| Field | Type        | Null | Key | Default | Extra |  
+-------+-------------+------+-----+---------+-------+ 
| id    | int(11)     | YES  |     | NULL    |       | 
| name  | varchar(30) | YES  |     | NULL    |       |  
+-------+-------------+------+-----+---------+-------+ 

DESCRIBE और DESC दोनों एक ही परिणाम देते हैं।

एक बार में डेटाबेस में सभी तालिकाओं पर प्रदर्शन किए गए DESCRIBE को देखने के लिए, यह उदाहरण देखें।

अंतिम अपडेट दिखाने के लिए टाइमस्टैम्प कॉलम के साथ तालिका बनाएं

TIMESTAMP कॉलम दिखाएगा जब पंक्ति अंतिम बार अपडेट की गई थी।

CREATE TABLE `TestLastUpdate` (
    `ID` INT NULL,
    `Name` VARCHAR(50) NULL,
    `Address` VARCHAR(50) NULL,
    `LastUpdate` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
COMMENT='Last Update'
;


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow