Free tutorials & notes in Hindi & English · Clean code examples · Mobile friendly learning
MySQL + SQL · Lesson 36

CREATE DATABASE और CREATE TABLE

कुछ भी बनाने से पहले

Database design command से नहीं, requirements से शुरू होना चाहिए। तय करें कि एक row किस वस्तु को दर्शाती है, कौन-सी values अनिवार्य हैं, row को unique पहचान क्या देगी और table का दूसरी tables से क्या संबंध होगा। इस lesson में एक row एक student को दर्शाती है।

Learning schema: सभी छह foundation lessons coding_school database और students table का उपयोग करते हैं। Same schema रखने से INSERT, SELECT, WHERE, UPDATE और DELETE के results दोहराए जा सकते हैं।

MySQL account के पास आवश्यक CREATE privilege होना चाहिए। Managed hosting में control panel database और user बना सकता है; ऐसी स्थिति में host द्वारा दिया database name उपयोग करें।

CREATE DATABASE Step by Step

CREATE DATABASE IF NOT EXISTS coding_school
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_0900_ai_ci;

USE coding_school;

IF NOT EXISTS समान नाम पहले से होने पर error रोकता है, पर schema compare नहीं करता। utf8mb4 पूरा Unicode support करता है। Collation comparison और sorting rules तय करती है; utf8mb4_0900_ai_ci MySQL 8.x में उपलब्ध case-insensitive और accent-insensitive collation है।

सामान्य result Query OK, 1 row affected Database changed

Active database और उसकी definition जाँचें:

SELECT DATABASE() AS current_database;
SHOW CREATE DATABASE coding_school;
Hosting note: यदि provider पुराना MySQL या MariaDB देता है, तो SHOW COLLATION LIKE 'utf8mb4%'; से supported collation चुनें। Unsupported collation को copy न करें।

Students Table बनाएँ

CREATE TABLE IF NOT EXISTS students (
  student_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  full_name  VARCHAR(80) NOT NULL,
  class_name VARCHAR(10) NOT NULL,
  marks      DECIMAL(5,2) DEFAULT NULL,
  status     VARCHAR(10) NOT NULL DEFAULT 'Active',
  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (student_id),
  CONSTRAINT chk_students_marks
    CHECK (marks IS NULL OR marks BETWEEN 0 AND 100),
  CONSTRAINT chk_students_status
    CHECK (status IN ('Active', 'Inactive'))
) ENGINE = InnoDB;
सामान्य result Query OK, 0 rows affected

Statement storage के साथ data-quality rules भी तय करता है। AUTO_INCREMENT अगली numeric ID बनाता है। DECIMAL(5,2) 88.50 जैसे marks exact रखता है। NULL mark का अर्थ “अभी record नहीं हुआ” है; वह zero नहीं है। Current MySQL versions CHECK constraints के बाहर की value reject करते हैं।

हर Column और Constraint समझें

Definitionकारण
student_id INT UNSIGNEDNon-negative numeric ID; primary key इसे unique और non-NULL बनाती है।
AUTO_INCREMENTINSERT में column छोड़ने पर MySQL key generate करता है।
full_name VARCHAR(80)सही maximum वाला variable-length name; NOT NULL इसे required बनाता है।
class_name VARCHAR(10)X-A जैसे label को number मानने की गलती के बिना store करता है।
marks DECIMAL(5,2)CHECK rule के अंतर्गत 0.00 से 100.00 exact fixed-point value।
status ... DEFAULT 'Active'Column omit करने पर valid default देता है।
created_at TIMESTAMPInsert का समय automatically record करता है।
ENGINE = InnoDBTransactions, row-level locking और foreign keys वाला default MySQL engine।

Invalid data किसी भी application से स्वीकार नहीं होना चाहिए तो constraint database में रखें। Application validation user experience सुधारती है; database constraint stored truth बचाता है।

Structure की जाँच

SHOW TABLES;
DESCRIBE students;
SHOW CREATE TABLE students;

SHOW TABLES object का अस्तित्व confirm करता है। DESCRIBE columns, types, nullability, keys और defaults की compact list देता है। SHOW CREATE TABLE MySQL में सुरक्षित complete reconstruction statement लौटाता है।

DESCRIBE students — छोटा रूप Field | Type | Null | Key | Default | Extra student_id | int unsigned | NO | PRI | NULL | auto_increment full_name | varchar(80) | NO | | NULL | class_name | varchar(10) | NO | | NULL | marks | decimal(5,2) | YES | | NULL | status | varchar(10) | NO | | Active | created_at | timestamp | NO | | CURRENT_TIMESTAMP |

Exact display MySQL release के अनुसार थोड़ा बदल सकता है। मुख्य जाँच यह है कि type, NULL rule, default और key design से match करें।

सामान्य Design गलतियाँ

  • Primary key न रखना: दिखने में duplicate rows को safely update करना और relationships बनाना कठिन होता है।
  • हर column के लिए VARCHAR: dates और numbers उचित validation, sorting और arithmetic behavior खो देते हैं।
  • Exact marks या money के लिए FLOAT: binary floating-point representation surprises दे सकता है; fixed-point के लिए DECIMAL लें।
  • NULL को zero या empty string मानना: NULL missing या unknown value है, numeric zero नहीं।
  • IF NOT EXISTS का अधिक उपयोग: गलत structure वाली पुरानी table छिप सकती है। Creation के बाद inspect करें।
  • order या group जैसे names: reserved words quoting माँगते हैं। Clear names चुनें।
  • Backup बिना live schema बदलना: Migration पहले rehearse करें, data protect करें और scripts version control में रखें।

अभ्यास कार्य

  1. utf8mb4 वाला अलग library_lab database बनाएँ।
  2. Auto-increment key, required title, optional price, status default और created timestamp वाली books table बनाएँ।
  3. Price negative न हो, इसके लिए CHECK rule जोड़ें।
  4. DESCRIBE और SHOW CREATE TABLE से हर decision verify करें।
  5. समझाएँ कि ISBN arithmetic number के स्थान पर text क्यों होना चाहिए।

students table में consistent sample rows जोड़ने के लिए अगला lesson INSERT INTO पढ़ें।

त्वरित सारांश

  • CREATE DATABASE database namespace बनाता और USE session के लिए उसे चुनता है।
  • CREATE TABLE columns, types, defaults, keys और constraints define करता है।
  • नए design में utf8mb4, primary key और meaningful data types लें।
  • DESCRIBE और SHOW CREATE TABLE से verify करें।
  • Real project में privileges, hosting version और migration safety महत्त्वपूर्ण हैं।

Official संदर्भ

References 14 August 2026 को review किए गए। Destructive schema changes केवल backup या practice database पर चलाएँ।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

CREATE DATABASE और CREATE TABLE में क्या अंतर है?
CREATE DATABASE एक named database namespace बनाता है। CREATE TABLE चुने गए database के भीतर columns, data types और constraints वाली structured table बनाता है।
MySQL table में primary key क्यों होनी चाहिए?
Primary key प्रत्येक row को unique पहचान देती है। इससे reliable updates, relationships और indexing आसान होते हैं; InnoDB table data को इसके आधार पर व्यवस्थित करता है।
IF NOT EXISTS क्या करता है?
समान नाम का database या table पहले से होने पर error रोकता है। यह existing object का structure आपके intended design जैसा है या नहीं, यह verify नहीं करता।
MySQL में utf8 के स्थान पर utf8mb4 क्यों लें?
utf8mb4 supplementary characters और emoji सहित पूरा Unicode range support करता है। नए MySQL applications के लिए यह recommended character set है।
Table की exact definition कैसे देखें?
SHOW CREATE TABLE table_name चलाएँ। DESCRIBE compact column view देता है, जबकि SHOW CREATE TABLE keys और options सहित complete stored definition लौटाता है।
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.