Friday, September 11, 2026

.::: Store Procedure: Enlarge Table & Database MariaDB to 1,000,000 Rows :::.

 
 
correlation with https://teguhth.blogspot.com/2019/04/study-kasus-praktis-belajar-query-mysql.html

1. table barang 

ALTER TABLE barang MODIFY KODE_BARANG CHAR(10) NOT NULL;

DELIMITER //

CREATE PROCEDURE generate_barang(IN jumlah INT)
BEGIN
    DECLARE i INT;
    DECLARE mulai INT;

    SELECT COALESCE(
        MAX(CAST(SUBSTRING(KODE_BARANG, 5) AS UNSIGNED)),
        0
    )
    INTO mulai
    FROM barang
    WHERE KODE_BARANG LIKE 'ELK-%';
 
    SET i = mulai + 1;

    WHILE i <= mulai + jumlah DO

        INSERT INTO barang
        (
            KODE_BARANG,
            NAMA_BARANG,
            SATUAN_BARANG,
            STOK_BARANG
        )
        VALUES
        (
            CONCAT('ELK-', LPAD(i, 6, '0')),

            CASE MOD(i - 1, 6)
                WHEN 0 THEN 'RICE COOKER'
                WHEN 1 THEN 'LEMARI ES'
                WHEN 2 THEN 'TELEVISI'
                WHEN 3 THEN 'RADIO/TAPE'
                WHEN 4 THEN 'KOMPUTER'
                WHEN 5 THEN 'KIPAS ANGIN'
            END,

            CASE MOD(i - 1, 6)
                WHEN 0 THEN 'BUAH'
                WHEN 1 THEN 'UNIT'
                WHEN 2 THEN 'UNIT'
                WHEN 3 THEN 'BUAH'
                WHEN 4 THEN 'UNIT'
                WHEN 5 THEN 'BUAH'
            END,

            MOD(i - 1, 50) + 1
        );

        SET i = i + 1;

    END WHILE;
END//

DELIMITER ;
 
CALL generate_barang(1000000);


2. table suplier

ALTER TABLE suplier MODIFY KODE_SUPLIER CHAR(10) NOT NULL;

DELIMITER //

CREATE PROCEDURE generate_suplier(IN jumlah INT)
BEGIN
    DECLARE i INT DEFAULT 1;

    WHILE i <= jumlah DO

        INSERT INTO suplier
        (
            KODE_SUPLIER,
            NAMA_SUPLIER,
            ALAMAT_SUPLIER,
            KOTA_SUPLIER,
            TELEPON_SUPLIER
        )
        VALUES
        (
            CONCAT('SUP-', LPAD(i, 6, '0')),

            CONCAT('PT SUPLIER ', i),

            CONCAT('JL INDUSTRI ', MOD(i, 100) + 1),

            CASE MOD(i, 5)
                WHEN 0 THEN 'JAKARTA'
                WHEN 1 THEN 'BANDUNG'
                WHEN 2 THEN 'BOGOR'
                WHEN 3 THEN 'TANGERANG'
                WHEN 4 THEN 'BEKASI'
            END,

            CONCAT('(021) 8', LPAD(MOD(i, 10000000), 7, '0'))
        );

        SET i = i + 1;

    END WHILE;
END//

DELIMITER ;

CALL generate_suplier(1000000);


3. table customer 

ALTER TABLE customer
MODIFY KODE_CUSTOMER CHAR(10);

DELIMITER //

DROP PROCEDURE IF EXISTS generate_customer;

DELIMITER //

CREATE PROCEDURE generate_customer(IN jumlah INT)
BEGIN
    DECLARE current_count INT DEFAULT 0;
    DECLARE nomor INT DEFAULT 1;

    SELECT COUNT(*)
    INTO current_count
    FROM customer;

    SET nomor = current_count - 6 + 1;

    WHILE current_count < jumlah DO
        INSERT INTO customer
        (
            KODE_CUSTOMER,
            NAMA_CUSTOMER,
            ALAMAT_CUSTOMER,
            KOTA_CUSTOMER,
            TELEPON_CUSTOMER
        )
        VALUES
        (
            CONCAT('C-', LPAD(nomor, 7, '0')),
            CONCAT('TOKO CUSTOMER ', nomor),
            CONCAT('JL ABC ', MOD(nomor, 999) + 1),
            CASE MOD(nomor, 5)
                WHEN 0 THEN 'JAKARTA'
                WHEN 1 THEN 'BANDUNG'
                WHEN 2 THEN 'BOGOR'
                WHEN 3 THEN 'TANGERANG'
                WHEN 4 THEN 'BEKASI'
            END,
            CONCAT('(021) 8', LPAD(MOD(nomor, 10000000), 7, '0'))
        );

        SET nomor = nomor + 1;
        SET current_count = current_count + 1;
    END WHILE;
END//

DELIMITER ;

CALL generate_customer(1000000);


4. table pasok 

DELIMITER //

CREATE PROCEDURE generate_pasok(IN jumlah INT)
BEGIN
    DECLARE i INT DEFAULT 1;

    WHILE i <= jumlah DO

        INSERT INTO pasok
        (
            KODE_PASOK,
            KODE_BARANG,
            KODE_SUPLIER,
            TANGGAL_PASOK,
            JUMLAH_PASOK
        )
        VALUES
        (
            CONCAT('PAS-', LPAD(i, 6, '0')),

            CONCAT(
                'ELK-',
                LPAD(MOD(i - 1, 6) + 1, 2, '0')
            ),

            CASE MOD(i - 1, 6)
                WHEN 0 THEN 'EJ-01'
                WHEN 1 THEN 'EJ-02'
                WHEN 2 THEN 'EB-01'
                WHEN 3 THEN 'EB-02'
                WHEN 4 THEN 'EB-03'
                WHEN 5 THEN 'EB-04'
            END,

            DATE_ADD(
                '2002-01-01',
                INTERVAL MOD(i - 1, 365) DAY
            ),

            MOD(i - 1, 20) + 1
        );

        SET i = i + 1;

    END WHILE;
END//

DELIMITER ;

CALL generate_pasok(1000000);


5. table pembelian

set session max_statement_time = 0;CALL generate_pembelian(1000000);

DELIMITER //

CREATE PROCEDURE generate_pembelian(IN jumlah INT)
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE kode_barang CHAR(6);
    DECLARE kode_customer CHAR(6);

    WHILE i <= jumlah DO

        -- Pilih barang secara berulang
        SET kode_barang = CASE MOD(i, 4)
            WHEN 0 THEN 'ELK-01'
            WHEN 1 THEN 'ELK-02'
            WHEN 2 THEN 'ELK-03'
            WHEN 3 THEN 'ELK-04'
        END;

        -- Pilih customer secara berulang
        SET kode_customer = CASE MOD(i, 4)
            WHEN 0 THEN 'J-0001'
            WHEN 1 THEN 'J-0002'
            WHEN 2 THEN 'B-0001'
            WHEN 3 THEN 'B-0002'
        END;

        INSERT INTO pembelian
        (
            KODE_PEMBELIAN,
            KODE_BARANG,
            KODE_CUSTOMER,
            TANGGAL_PEMBELIAN,
            JUMLAH_PEMBELIAN
        )
        VALUES
        (
            CONCAT('BEL-', LPAD(i, 6, '0')),
            kode_barang,
            kode_customer,
            DATE_ADD('2002-01-01', INTERVAL MOD(i, 365) DAY),
            MOD(i, 20) + 1
        );

        SET i = i + 1;

    END WHILE;
END//

DELIMITER ;

CALL generate_pembelian(1000000);
 

 

No comments:

Post a Comment

Popular Posts