Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में स्टोर्ड प्रोसीजर और प्रिपेयर्ड स्टेटमेंट का उपयोग करके डायनामिक टेबल बनाना

MySQL में स्टोर्ड प्रोसीजर, PREPARE, EXECUTE, और डायनामिक SQL का उपयोग करके रनटाइम पर टेबल नाम निर्दिष्ट करके टेबल बनाएं।

स्टोर्ड प्रोसीजर बनाना

mysql> DELIMITER $$
mysql> CREATE PROCEDURE creatingDynamicTableDemo(yourTableName VARCHAR(200))
    -> BEGIN
    ->     SET @name = yourTableName;
    ->     SET @st = CONCAT('
    ->         CREATE TABLE IF NOT EXISTS `', @name, '` (
    ->             `StudentId` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    ->             `StudentName` VARCHAR(20) NOT NULL,
    ->             PRIMARY KEY (`StudentId`)
    ->         )
    ->     ');
    ->     PREPARE myStatement FROM @st;
    ->     EXECUTE myStatement;
    ->     DEALLOCATE PREPARE myStatement;
    -> END $$
Query OK, 0 rows affected (0.16 sec)

mysql> DELIMITER ;

मुख्य तत्व:

  • CONCAT() - डायनामिक SQL स्ट्रिंग बनाता है
  • बैकटिक (`) - पहचानकर्ताओं को उद्धृत करता है (SQL इंजेक्शन/सिंटैक्स त्रुटि रोकता है)
  • PREPARE - स्ट्रिंग से स्टेटमेंट तैयार करता है
  • EXECUTE - तैयार स्टेटमेंट चलाता है
  • DEALLOCATE PREPARE - स्टेटमेंट हैंडल मुक्त करता है (महत्वपूर्ण!)

प्रोसीजर कॉल करके टेबल बनाना

mysql> CALL creatingDynamicTableDemo('DemoTable');
Query OK, 0 rows affected, 1 warning (0.65 sec)

बनी टेबल की संरचना देखना

mysql> DESC DemoTable;

आउटपुट

+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| StudentId   | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| StudentName | varchar(20)      | NO   |     | NULL    |                |
+-------------+------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

सुरक्षा चेतावनी: डायनामिक SQL में उपयोगकर्ता इनपुट सीधे उपयोग करने से SQL इंजेक्शन का खतरा होता है। हमेशा:

  • पहचानकर्ताओं को बैकटिक में लपेटें: CONCAT('`', REPLACE(input, '`', ''), '`')
  • सफेद सूची (व्हाइटलिस्ट) से मान्य करें
  • संभव हो तो डायनामिक DDL से बचें

उपयोग के मामले: शार्डिंग, पार्टीशनिंग, मल्टी-टेनेंट एप्लिकेशन जहां टेबल नाम रनटाइम पर तय होता है।

  1. - MySQL में SHOW CREATE TABLE का उपयोग करके टेबल संरचना देखना

    MySQL में SHOW CREATE TABLE स्टेटमेंट का उपयोग करके टेबल की पूर्ण CREATE स्टेटमेंट देखें, जिसमें इंडेक्स, कॉलम परिभाषाएं, इंजन, चार्टसेट आदि शामिल हैं। सिंटैक्स SHOW CREATE TABLE yourTableName; उदाहरण: जटिल टेबल बनाना mysql> CREATE TABLE DemoTable ( -> Id INT NOT NULL AUTO_INCREMENT PR

  1. - MySQL स्टोर्ड प्रोसीजर में CREATE TEMPORARY TABLE का उपयोग करके अस्थायी टेबल बनाना

    MySQL स्टोर्ड प्रोसीजर के अंदर CREATE TEMPORARY TABLE का उपयोग करके सत्र-विशिष्ट अस्थायी टेबल बनाएं और डेटा डालें। सिंटैक्स CREATE PROCEDURE yourProcedureName() BEGIN CREATE TEMPORARY TABLE yourTemporaryTableName SELECT yourValue; END उदाहरण: अस्थायी टेबल बनाने वाली प्रोसीजर mysql> DELIMI

  1. - MySQL में CREATE TABLE में AUTO_INCREMENT प्रारंभ मान मैन्युअल सेट करें

    CREATE TABLE स्टेटमेंट में AUTO_INCREMENT = N टेबल विकल्प का उपयोग करके ऑटो-इन्क्रीमेंट काउंटर का प्रारंभ मान सेट करें। टेबल बनाएं (प्रारंभ 100) mysql> CREATE TABLE DemoTable1907 ( UserId INT NOT NULL AUTO_INCREMENT, UserName VARCHAR(20), UserAge INT, UserCountryName VARCHAR(20),