MySQL තාවකාලික වගු පැහැදිලි කිරීම: නිර්මාණය, භාවිතය, ඉවත් කිරීම + හොඳම ක්‍රම (SQL උදාහරණ සමඟ)

目次

1. (ආරම්භක-හිතකාමී) MySQL තාවකාලික වගුවක් කියන්නේ කුමක්ද? සාමාන්‍ය වගු වලින් වෙනස්කම්

හැඳින්වීම

MySQL සමඟ දත්ත කළමනාකරණය කරන විට, දත්ත තාවකාලිකව සුරකින්න අවශ්‍ය වන අවස්ථා ඇත. උදාහරණයක් ලෙස, විශාල දත්ත කට්ටලයක් සැකසීමේදී, ඔබ වැඩ කරන අතර මධ්‍යස්ථ ප්‍රතිඵල සුරකින්න අවශ්‍ය විය හැක. එවැනි අවස්ථා වල, තාවකාලික වගුව (Temporary Table) ඉතා ප්‍රයෝජනවත් වේ.

මෙම ලිපියේ, MySQL තාවකාලික වගු들의 මූලික ක්‍රියාකාරිත්වය සහ ඒවා සාමාන්‍ය වගු වලින් කෙසේ වෙනස් වනදැයි පැහැදිලි කරමු.

1-1. තාවකාලික වගුවක් කියන්නේ කුමක්ද?

තාවකාලික වගුවක් යනු දත්ත ගබඩා සැසිය (සම්බන්ධතාව) තුළ පමණක් පවතින විශේෂ වගුවකි.
සාමාන්‍ය වගුවක් වඩා, සැසිය අවසන් වන විට එය ස්වයංක්‍රීයව ඉවත් කරනු ලැබේ, එය තාවකාලික දත්ත සුරැකීමට ඉතා සුදුසු වේ.

තාවකාලික වගු들의 ප්‍රධාන ලක්ෂණ

  • සැසිය අනුව වෙන් කර ඇත තාවකාලික වගුවක් එය නිර්මාණය කළ සැසිය තුළ පමණක් ප්‍රවේශය ලබා ගත හැක. අනෙකුත් සැසි එය යොමු කළ නොහැක.
  • සැසිය අවසන් වන විට ස්වයංක්‍රීයව ඉවත් වේ ඔබ එය පැහැදිලිව ඉවත් නොකරත්, සැසිය අවසන් වන විට තාවකාලික වගු ස්වයංක්‍රීයව අතුරුදන් වේ.
  • ඔබට එකම නාමයෙන් තාවකාලික වගු නිර්මාණය කළ හැක සාමාන්‍ය වගු වලට වඩා, විවිධ සැසි තුළ එකම නාමයෙන් තාවකාලික වගු නිර්මාණය කළ හැක.

1-2. සාමාන්‍ය වගු වලින් වෙනස්කම්

තාවකාලික වගු සහ සාමාන්‍ය වගු පහත පරිදි වෙනස් වේ.

ComparisonTemporary TableRegular Table
Data retentionValid only during the session (automatically removed)Stored permanently
Access scopeOnly within the session that created itAccessible to all users (subject to privileges)
Name conflictsYou can create temporary tables with the same nameYou cannot create another table with the same name in the same database
Required privilegesRequires the CREATE TEMPORARY TABLES privilegeRequires the standard CREATE TABLE privilege
IndexesSupportedSupported
PerformanceOften created in memory and can be fastStored on disk; performance can degrade as data grows

ඔබට කුමන එක භාවිතා කළ යුතුද?

  • ඔබට දත්ත තාවකාලිකව පමණක් අවශ්‍ය වන අතර සැකසීමෙන් පසු එය ඉවත් කළ හැකි නම්තාවකාලික වගුව
  • ඔබට දත්ත ස්ථිරව සුරකිමින් පසු භාවිතා කිරීමට අවශ්‍ය නම්සාමාන්‍ය වගුව

උදාහරණයක් ලෙස, විශාල පරිමාණ දත්ත විශ්ලේෂණය හෝ තාවකාලික එකතු කිරීම වැනි කාර්යයන් සඳහා තාවකාලික වගු ඉතා ප්‍රයෝජනවත් වේ.

1-3. ඔබට තාවකාලික වගුවක් අවශ්‍ය වන අවස්ථා

MySQL තාවකාලික වගු පහත සඳහන් අවස්ථා වල විශේෂයෙන් ප්‍රයෝජනවත් වේ.

1) විමසුම් කාර්යක්ෂමතාව වැඩි කිරීම

උදාහරණයක් ලෙස, සංකීර්ණ JOIN ක්‍රියාකාරකම් සිදු කරන විට, මධ්‍යස්ථ දත්ත පෙර සුරැකීමට තාවකාලික වගුවක් නිර්මාණය කිරීමෙන් සැකසුම් කාලය අඩු කළ හැක.

උදාහරණය: JOIN පූර්වභාරය අඩු කිරීම
CREATE TEMPORARY TABLE temp_users AS
SELECT id, name FROM users WHERE status = 'active';

ඉලක්ක දත්ත පළමුව තාවකාලික වගුවේ සුරැකීමෙන් පසු JOIN ක්‍රියාත්මක කිරීමෙන් කාර්යක්ෂමතාව වැඩි විය හැක.

2) දත්ත තාවකාලිකව සුරකින්න

අයදුම්පතක් දත්ත තාවකාලිකව කළමනාකරණය කළ යුතු අවස්ථාවල තාවකාලික වගු ප්‍රයෝජනවත් වේ.
උදාහරණයක් ලෙස, පරිශීලකයෙකු සෙවූ දත්ත තාවකාලික වගුවේ සුරැකිය හැකි අතර සැසිය අවසන් වූ පසු එය ඉවත් කරනු ලැබේ.

3) කණ්ඩායම් සැකසීම සඳහා මධ්‍යස්ථ වගු

විශාල ප්‍රමාණයේ දත්ත සැකසීමේදී, මධ්‍යස්ථ වගු ලෙස තාවකාලික වගු භාවිතා කිරීමෙන් ක්‍රියාවලියේ ස්ථායීත්වය වැඩි විය හැක.

1-4. තාවකාලික වගු들의 සීමා

තාවකාලික වගු පහසු වුවද, කිහිපයක් සීමා ඇත.

1) සැසිය අවසන් වන විට ස්වයංක්‍රීයව ඉවත් වේ

තාවකාලික වගු සැසිය අවසන් වන විට ස්වයංක්‍රීයව ඉවත් වන බැවින්, ඒවා ස්ථිරව දත්ත සුරැකීමට සුදුසු නොවේ.

2) අනෙකුත් සැසි වලින් ප්‍රවේශය නොලැබේ

තාවකාලික වගු නිර්මාණය කළ සැසිය තුළ පමණක් භාවිතා කළ හැකි බැවින්, අනෙකුත් පරිශීලකයන් හෝ ක්‍රියාවලීන් සමඟ ඒවා බෙදාගත නොහැක.

3) එකම නාමයේ සාමාන්‍ය වගුවක් සමඟ ඇති විය හැකි ගැටුම

එකම නාමයේ සාමාන්‍ය වගුවක් පවතින විට, ඒ නාමයෙන් තාවකාලික වගුවක් නිර්මාණය කිරීමෙන් සාමාන්‍ය වගුව තාවකාලිකව නොපෙනෙන බවට පත්වේ, එබැවින් අවධානයෙන් සිටින්න.

CREATE TEMPORARY TABLE users (id INT, name VARCHAR(255));
SELECT * FROM users; -- This query references the temporary table data

ඉහත පෙන්වා ඇති පරිදි, තාවකාලික වගුවක් නිර්මාණය වූ පසු, තාවකාලික වගුව ඉවත් වන තුරු එකම නාමයේ සාමාන්‍ය වගුවට ප්‍රවේශය නොලැබේ. වගු නාම තේරීමේදී සැලකිලිමත් වන්න.

සාරාංශය

MySQL තාවකාලික වගු තාවකාලික දත්ත සුරැකීම සහ විමසුම් සුදානම සඳහා පහසු ලක්ෂණයකි.
සාමාන්‍ය වගු වලින් ඒවා කෙසේ වෙනස් වනදැයි අවබෝධ කරගෙන, නිසි ලෙස භාවිතා කිරීමෙන්, ඔබට දත්ත වැඩි කාර්යක්ෂමතාවෙන් සැකසිය හැක.

✔ කෙටි සාරාංශය

  • සැසිය අවසන් වන විට අනුකම්පිත වගු ස්වයංක්‍රීයව ඉවත් කර ගනී
  • සාමාන්‍ය වගුවලින් වෙනස්ව, ඒවා සැසියකට පමණක් සීමා වේ
  • අනුකම්පිත ගබඩාව සඳහා හොඳින් සහ ප්‍රශ්න විසඳුම් කාර්ය සාධනය වැඩිදියුණු කිරීම සඳහා යෝග්‍ය
  • ස්ථිර ගබඩාව සඳහා සුදුසු නොවේ මන්ද සැසිය අවසන් වන විට දත්ත නැති වේ
  • වෙනත් සැසිවලින් ප්‍රවේශ විය නොහැකි අතර, එකම නමකින් යුත් සාමාන්‍ය වගු සමඟ ගැටලු ඇති විය හැක

2. (නියැඩි කේත සමඟ) MySQL හි අනුකම්පිත වගුවක් නිර්මාණය කරන්නේ කෙසේද

හැඳින්වීම

පෙර කොටසේදී, අපි අනුකම්පිත වගුවල මූලික සංකල්පය සහ ඒවා සාමාන්‍ය වගුවලින් වෙනස් වන්නේ කෙසේද යන්න පැහැදිලි කළෙමු.
මෙම කොටසේදී, අපි අනුකම්පිත වගුවක් නිර්මාණය කරන්නේ කෙසේද සහ එහි දත්ත සමඟ වැඩ කරන්නේ කෙසේද යන්න පියවරෙන් පියවර පැහැදිලි කරන්නෙමු.

අනුකම්පිත වගුවක් නිර්මාණය කිරීම සරලයි, නමුත් නිවරදි ව්‍යාකරණය භාවිතා නොකළහොත්, එය අපේක්ෂිත පරිදි ක්‍රියා නොකළ හැක. මෙම කොටස මූලික ව්‍යාකරණය, පවතින වගුවකින් නිර්මාණය කිරීම සහ අනුකම්පිත වගු තහවුරු කිරීම පිළිබඳ විස්තරාත්මකව පැහැදිලි කරයි.

2-1. අනුකම්පිත වගුවක මූලික ව්‍යාකරණය

අනුකම්පිත වගුවක් නිර්මාණය කිරීමට, CREATE TEMPORARY TABLE ප්‍රකාශය භාවිතා කරන්න.

මූලික ව්‍යාකරණය

CREATE TEMPORARY TABLE table_name (
    column_name data_type [constraints],
    column_name data_type [constraints],
    ...
);

ව්‍යාකරණය CREATE TABLE එකට ආසන්න වශයෙන් සමානයි, නමුත් TEMPORARY එකතු කිරීමෙන් එය අනුකම්පිත වගුවක් බවට පත් වේ.

උදාහරණය: පරිශීලක තොරතුරු අනුකම්පිත වගුවක ගබඩා කිරීම

CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    email VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

මෙම temp_users වගු වර්තමාන සැසියේ පමණක් වලංගු වන අතර, සැසිය අවසන් වන විට ස්වයංක්‍රීයව ඉවත් කර ගනී.

2-2. පවතින වගුවක දත්ත මත පදනම්ව අනුකම්පිත වගුවක් නිර්මාණය කිරීම

ඔබට පවතින වගුවක දත්ත මත පදනම්ව අනුකම්පිත වගුවක් නිර්මාණය කළ හැක.

ව්‍යාකරණය

CREATE TEMPORARY TABLE temp_table_name AS
SELECT * FROM existing_table WHERE condition;

උදාහරණය: සක්‍රීය පරිශීලකයින් පමණක් අනුකම්පිත වගුවක ගබඩා කිරීම

CREATE TEMPORARY TABLE active_users AS
SELECT id, name, email FROM users WHERE status = 'active';

මෙම ක්‍රමය users වගුවෙන් status = 'active' තත්ත්වය ඇති පරිශීලකයින් පමණක් ඉවත් කර active_users නම් නව අනුකම්පිත වගුවක ගබඩා කරයි.

ප්‍රධාන කරුණු
  • පවතින වගුවකින් දත්ත පිටපත් කර ගනී
  • තීරු දත්ත වර්ග ස්වයංක්‍රීයව සකස් කර ගනී
  • ** සුචි නොපිටපත් වේ**, අවශ්‍ය නම් ඒවා පැහැදිලිව එකතු කරන්න

2-3. අනුකම්පිත වගු දත්ත පරීක්ෂා කිරීමේ ක්‍රමය

වගු ලැයිස්තුගත කිරීම

SHOW TABLES;

කෙසේ වෙතත්, සාමාන්‍ය SHOW TABLES වෙතින් අනුකම්පිත වගුව ලැයිස්තුගත නොවේ.

අනුකම්පිත වගුවක ව්‍යුහය පරීක්ෂා කිරීම

DESC temp_users;

හෝ

SHOW CREATE TABLE temp_users;

මෙයින් අනුකම්පිත වගුවේ තීරු ව්‍යුහය සහ සීමාවන් පරීක්ෂා කළ හැක.

2-4. අනුකම්පිත වගුවකට දත්ත ඇතුළත් කිරීම

අනුකම්පිත වගුවකට දත්ත ඇතුළත් කිරීම සාමාන්‍ය වගුවකට සමානයි.

දත්ත ඇතුළත් කිරීම

INSERT INTO temp_users (name, email) VALUES 
('Taro Tanaka', 'tanaka@example.com'),
('Hanako Sato', 'sato@example.com');

දත්ත පරීක්ෂා කිරීම

SELECT * FROM temp_users;

මෙයින් අනුකම්පිත වගුවේ දත්ත ගබඩා වී ඇති බව තහවුරු වේ.

2-5. අනුකම්පිත වගු නිර්මාණය කිරීමේදී සැලකිලිමත් විය යුතු කරුණු

1) වගු නම් ගැටලු සඳහා සැලකිලිමත් වන්න

ඔබ සාමාන්‍ය වගුවකට එකම නමකින් අනුකම්පිත වගුවක් නිර්මාණය කළහොත්, අනුකම්පිත වගුවට ප්‍රමුඛත්වය ලැබෙන අතර, සාමාන්‍ය වගුව තාවකාලිකව ප්‍රවේශ විය නොහැකි වේ.

CREATE TEMPORARY TABLE users (id INT, name VARCHAR(50));
SELECT * FROM users; -- This returns data from the temporary table

මේ නිසා, අනුකම්පිත වගු නම් සඳහා “temp_” වැනි පෙදෙසක් භාවිතා කිරීම යෝජනා කෙරේ.

2) සුචි ස්වයංක්‍රීයව උරුම වන්නේ නැත

පවතින වගුවකින් දත්ත පිටපත් කරන විට, සුචි ස්වයංක්‍රීයව යෙදෙනු නැත.
අවශ්‍ය නම්, ඔබ ඒවා පැහැදිලිව එකතු කළ යුතුය.

ALTER TABLE temp_users ADD INDEX (email);

3) ඔබට තාවකාලික වගු සෑදීමට අවශ්‍ය අධිකාරිය තිබිය යුතුය

තාවකාලික වගුවක් සෑදීමට, ඔබට CREATE TEMPORARY TABLES අධිකාරිය අවශ්‍ය වේ.

GRANT CREATE TEMPORARY TABLES ON database_name.* TO 'user'@'localhost';

මෙම අධිකාරිය නොමැතිව, ඔබට තාවකාලික වගු සෑදීමට නොහැක.

සාරාංශය

මෙම කොටසේ, අපි තාවකාලික වගු සෑදීමේ ක්‍රමය පැහැදිලි කළෙමු.

✔ ඉක්මන් සාරාංශය

  • CREATE TEMPORARY TABLE භාවිතයෙන් තාවකාලික වගුවක් සෑදීම
  • ඔබට පවතින වගුවකින් දත්ත පිටපත් කර තාවකාලික වගුවක් සෑදිය හැක
  • සැසිය අවසන් වන විට ස්වයංක්‍රීයව ඉවත් වේ
  • සුචක (Indexes) ස්වයංක්‍රීයව යෙදෙන්නේ නැත—ඉතා සැලකිලිමත් වන්න
  • නම ගැටළු වලින් වැළැක්වීමට “temp_” වැනි උපසර්ගයක් භාවිතා කරන්න
  • ඔබට නිසි අධිකාරිය (CREATE TEMPORARY TABLES) අවශ්‍ය වේ

3. MySQL තාවකාලික වගුවක දත්ත කළමනාකරණය (INSERT, UPDATE, DELETE) කෙසේද

හැඳින්වීම

පෙර කොටසේ, අපි MySQL හි තාවකාලික වගුවක් සෑදීමේ ක්‍රමය පැහැදිලි කළෙමු.
මෙම කොටසේ, අපි විශේෂ SQL විධාන භාවිතා කර තාවකාලික වගුවක දත්ත ඇතුළත් කිරීම, යාවත්කාලීන කිරීම, මකා දැමීම කෙසේද යන්න පැහැදිලි කරමු.

තාවකාලික වගු සාමාන්‍ය වගු මෙන්ම ඒම දත්ත මෙහෙයුම් සහය දක්වයි, නමුත් සැලකිලිමත් විය යුතු වැදගත් සටහන් කිහිපයක් ඇත, ඒවාද අපි කවරා කරමු.

3-1. තාවකාලික වගුවකට දත්ත ඇතුළත් කිරීම (INSERT)

තාවකාලික වගුවකට දත්ත එක් කිරීමට, සාමාන්‍ය වගුවක් මෙන් INSERT INTO ප්‍රකාශනය භාවිතා කරන්න.

මූලික ව්‍යවස්ථාව

INSERT INTO temp_table_name (column1, column2, ...) 
VALUES (value1, value2, ...);

උදාහරණය: පරිශීලක තොරතුරු එක් කිරීම

CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    email VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO temp_users (name, email) 
VALUES 
('Taro Tanaka', 'tanaka@example.com'),
('Hanako Sato', 'sato@example.com');

INSERT…SELECT භාවිතයෙන් පවතින දත්ත ඇතුළත් කිරීම

ඔබට පවතින වගුවකින් දත්ත ලබාගෙන තාවකාලික වගුවකට ඇතුළත් කළ හැක.

INSERT INTO temp_users (id, name, email)
SELECT id, name, email FROM users WHERE status = 'active';

මෙම ක්‍රමය ඔබට ක්‍රියාත්මක පරිශීලකයන් පමණක් තාවකාලික වගුවක සුරකින්න ඉඩ දේ.

3-2. තාවකාලික වගුවේ දත්ත යාවත්කාලීන කිරීම (UPDATE)

තාවකාලික වගුවේ දත්ත වෙනස් කිරීමට, UPDATE ප්‍රකාශනය භාවිතා කරන්න.

මූලික ව්‍යවස්ථාව

UPDATE temp_table_name 
SET column_name = value
WHERE condition;

උදාහරණය: පරිශීලක නාමය යාවත්කාලීන කිරීම

UPDATE temp_users 
SET name = 'Ichiro Tanaka'
WHERE email = 'tanaka@example.com';

තත්ත්වයක් සමඟ ගැලපෙන පේළි සඳහා සමූහ යාවත්කාලීන කිරීම

උදාහරණයක් ලෙස, ඔබට නියමිත ඩොමේනයක් යටතේ ඊමේල් ලිපින example.jp ලෙස වෙනස් කිරීමට අවශ්‍ය නම්, ඔබට මෙසේ ලියන්න පුළුවන්:

UPDATE temp_users 
SET email = REPLACE(email, 'example.com', 'example.jp')
WHERE email LIKE '%@example.com';

3-3. තාවකාලික වගුවේ දත්ත මකා දැමීම (DELETE)

දත්ත මකා දැමීමට, DELETE ප්‍රකාශනය භාවිතා කරන්න.

මූලික ව්‍යවස්ථාව

DELETE FROM temp_table_name WHERE condition;

උදාහරණය: නියමිත පරිශීලකගේ දත්ත මකා දැමීම

DELETE FROM temp_users WHERE email = 'tanaka@example.com';

සියලු පේළි මකා දැමීම (TRUNCATE වලින් වෙනස්කම)

ඔබට සියලු පේළි මකා දැමීමට අවශ්‍ය නම්, මෙසේ ලියන්න:

DELETE FROM temp_users;

එයට විරුද්ධව, සාමාන්‍ය වගු සඳහා, ඔබට TRUNCATE TABLE භාවිතා කර සියලු පේළි ඉක්මනින් මකා දැමිය හැක. නමුත් MySQL හි තාවකාලික වගුවකට TRUNCATE භාවිතා කළ නොහැක.

TRUNCATE TABLE temp_users; -- Error (cannot be used on temporary tables in MySQL)

ඒ නිසා, තාවකාලික වගුවක සියලු පේළි ඉවත් කිරීමට, ඔබට DELETE භාවිතා කළ යුතුය.

3-4. තාවකාලික වගුවක දත්ත කළමනාකරණය කිරීමේ සටහන්

1) සැසිය අවසන් වන විට දත්ත අතුරුදහන් වේ

තාවකාලික වගුව සැසිය (සම්බන්ධතාවය) අවසන් වන විට ස්වයංක්‍රීයව ඉවත් වේ, එබැවින් ස්ථිර දත්ත ගබඩා අවශ්‍ය වන භාවිතයන් සඳහා එය සුදුසු නොවේ.

2) අනෙකුත් සැසි වලින් ප්‍රවේශ නොලැබේ

තාවකාලික වගුව එය සෑදූ සැසිය තුළ පමණක් වලංගු වේ, අනෙකුත් සැසි වලින් ප්‍රවේශ විය නොහැක.

SELECT * FROM temp_users;

ඔබ මෙම SQL වෙනත් සැසියක ධාවනය කළහොත්, ඔබට “Table ‘temp_users’ doesn’t exist” දෝෂය ලැබේ.

3) Indexes on temporary tables are not applied automatically

CREATE TEMPORARY TABLE ... AS SELECT ... භාවිතා කර වගුවක් සෑදුවහොත්,
මුල් වගුවේ ඉන්ඩෙක්ස් උරුම නොකරයි. අවශ්‍ය නම්, ALTER TABLE භාවිතා කර ඉන්ඩෙක්ස් අතින් එකතු කරන්න.

ALTER TABLE temp_users ADD INDEX (email);

සාරාංශය

මෙම කොටසේ, අපි තාවකාලික වගු සඳහා දත්ත සැකසීම (INSERT, UPDATE, DELETE) ආවරණය කළෙමු.

✔ ඉක්මන් සාරාංශය

  • INSERT භාවිතා කරන්න දත්ත එක් කිරීමට (INSERT INTO ... VALUES / INSERT INTO ... SELECT)
  • UPDATE භාවිතා කරන්න දත්ත වෙනස් කිරීමට (කොන්දේසිමය යාවත්කාලීන සහ REPLACE() භාවිතා කිරීම)
  • DELETE භාවිතා කරන්න දත්ත මකා දැමීමට (DELETE FROM ... WHERE; TRUNCATE අනුමත නොවේ)
  • සැසිය අවසන් වන විට තාවකාලික වගුව ඉවත් කරයි
  • වෙනත් සැසි වලින් ප්‍රවේශ නොලබයි
  • ඉන්ඩෙක්ස් ස්වයංක්‍රීයව උරුම නොකරයි; අවශ්‍ය නම් අතින් එකතු කරන්න

4. MySQL තාවකාලික වගු ස්වයංක්‍රීයව ඉවත් කරද? ඒවා අතින් ඉවත් කිරීමේ ක්‍රමය

හැඳින්වීම

සාමාන්‍ය වගු වලට වඩා, MySQL තාවකාලික වගුව (Temporary Table) සැසිය අවසන් වන විට ස්වයංක්‍රීයව ඉවත් කරයි. එහෙත්, ඔබට අතින් ඉවත් කිරීම අවශ්‍ය විය හැකි අවස්ථා ඇත.

මෙම කොටසේ, අපි ස්වයංක්‍රීය ඉවත් කිරීම කෙසේ ක්‍රියා කරයි සහ තාවකාලික වගු අතින් ඉවත් කිරීම කෙසේද විස්තරාත්මකව පැහැදිලි කරමු.

4-1. තාවකාලික වගු සඳහා ස්වයංක්‍රීය ඉවත් කිරීම කෙසේ ක්‍රියා කරයි

1) සැසිය අවසන් වන විට ස්වයංක්‍රීයව ඉවත් කරයි

MySQL තාවකාලික වගුව, එය සෑදූ සැසිය (දත්ත ගබඩා සම්බන්ධතාවය) අවසන් වන විට ස්වයංක්‍රීයව ඉවත් කරයි.
ඒ නිසා, ඔබට සාමාන්‍යයෙන් අතින් ඉවත් කිරීම අවශ්‍ය නොවේ.

උදාහරණය: සැසිය අවසන් වන විට ස්වයංක්‍රීය ඉවත් කිරීම
-- Create a temporary table in a new session
CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    email VARCHAR(100)
);

-- Insert data
INSERT INTO temp_users (name, email) VALUES ('Taro Tanaka', 'tanaka@example.com');

-- End the session (disconnect the MySQL client)
EXIT;

මෙම අවස්ථාවේ, තාවකාලික වගුව temp_users ස්වයංක්‍රීයව ඉවත් කර ඇත.

2) සැසිය දිගටම පවත්නා තුරු තාවකාලික වගුව රඳා පවතී

තාවකාලික වගු සැසිය අනුව කළමනාකරණය කරනු බැවින්, සැසිය විවෘතව පවතින තුරු ඒවා ඉවත් නොවේ.

SELECT * FROM temp_users; -- Data can be retrieved if the session is still active

අනෙක් වචනයෙන්, ඔබ MySQL ගනුදෙනුකරු (හෝ වැඩසටහන සම්බන්ධතාවය) වසා දක්වා තාවකාලික වගුව මතකයේ රඳා පවතී.

4-2. තාවකාලික වගුව අතින් ඉවත් කිරීමේ ක්‍රමය

ඔබට තාවකාලික වගු අතින්ද ඉවත් කළ හැක.
MySQL හි, තාවකාලික වගුව ඉවත් කිරීමට DROP TEMPORARY TABLE භාවිතා කරන්න.

1) DROP TEMPORARY TABLE භාවිතා කරන්න

DROP TEMPORARY TABLE temp_users;

මෙය තාවකාලික වගුව temp_users වහාම ඉවත් කරයි.

2) දෝෂ වලින් වැළැක්වීමට IF EXISTS එකතු කරන්න

වගුව නොමැති නම්, දෝෂයක් වැළැක්වීමට IF EXISTS භාවිතා කළ හැක.

DROP TEMPORARY TABLE IF EXISTS temp_users;

වගුව නොමැතිවූ පසුද මෙම වාක්‍ය රීතිය දෝෂ වැළැක්වයි.

3) සාමාන්‍ය DROP TABLE එකෙන් වෙනස්

සාමාන්‍ය DROP TABLE භාවිතා කර තාවකාලික වගුව ඉවත් කිරීමට උත්සාහ කළහොත්, පහත පරිදි දෝෂයක් පෙනෙන්නට හැක:

DROP TABLE temp_users;

දෝෂය:

ERROR 1051 (42S02): Unknown table 'temp_users'

MySQL සාමාන්‍ය වගු සහ තාවකාලික වගු වෙන වෙනම කළමනාකරණය කරන බැවින්, තාවකාලික වගුව ඉවත් කිරීමේදී DROP TEMPORARY TABLE භාවිතා කළ යුතුය.

4-3. තාවකාලික වගුව ඉවත් කර ඇති බව තහවුරු කිරීම

1) SHOW TABLES සමඟ තහවුරු කළ නොහැක

තාවකාලික වගුව SHOW TABLES ප්‍රතිඵලයේ පෙන්වනු නොලැබේ.

SHOW TABLES;

තාවකාලික වගු ලැයිස්තුගත නොවේ

2) INFORMATION_SCHEMA භාවිතා කර තහවුරු කිරීම

ඔබට INFORMATION_SCHEMA විමසීමෙන් තාවකාලික වගුවක් පවතිනදැයි පරීක්ෂා කළ හැක.

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = DATABASE() 
AND TABLE_NAME = 'temp_users';

මෙම විමසුම ප්‍රතිඵලයක් ලබා දුන්නේ නම්, එය තාවකාලික වගුව පවතින බව පෙන්වයි.

4-4. තාවකාලික වගු ඉවත් කිරීමේ සටහන්

1) තාවකාලික වගු සැසිය අනුව වෙනස් වේ

ඔබට එකම නාමයෙන් තාවකාලික වගු බහු සැසි වලදී සාදන්න පුළුවන්.
ඔබට වෙනත් සැසියකින් සාදන ලද තාවකාලික වගුවක් ඉවත් කළ නොහැක.

උදාහරණය
-- Created in session A
CREATE TEMPORARY TABLE temp_data (id INT);

-- Attempt to drop in session B
DROP TEMPORARY TABLE temp_data;

දෝෂයක් සිදුවේ:

ERROR 1051 (42S02): Unknown table 'temp_data'

තාවකාලික වගුවක් එය සාදන සැසියේ පමණක් ඉවත් කළ හැක.

2) එකම නාමයෙන් සාමාන්‍ය වගුවක් සමඟ ඇති විය හැකි ගැටළුව

තාවකාලික වගුවක් සාමාන්‍ය වගුවක් සමඟ එකම නාමයක් ඇත්නම්,
තාවකාලික වගුවට ප්‍රමුඛත්වය ලැබේ, සහ සාමාන්‍ය වගුව අඳුරු වේ.

උදාහරණය
-- A regular table (users) exists
SELECT * FROM users;

-- Create a temporary table with the same name
CREATE TEMPORARY TABLE users (id INT, name VARCHAR(50));

-- This now references the temporary table users
SELECT * FROM users;

** විසඳුම:**

  • තාවකාලික වගු සඳහා temp_ වැනි උපසර්ගයක් භාවිතා කර නාම ගැටළු වලින් වැළැක්වන්න.

සාරාංශය

මෙම කොටසේ, තාවකාලික වගු ඉවත් කිරීම කෙසේ ක්‍රියා කරයි සහ ඒවා ඉවත් කිරීමේ ක්‍රමය අපි පැහැදිලි කළෙමු.

✔ ඉක්මන් සාරාංශය

  • සැසිය අවසන් වන විට තාවකාලික වගු ස්වයංක්‍රීයව ඉවත් වේ
  • සැසිය ක්‍රියාත්මක වන තුරු ඒවා පවතිනවා
  • අතිරේකව ඉවත් කිරීමට, DROP TEMPORARY TABLE භාවිතා කරන්න
  • දෝෂ වලින් වැළැක්වීමට IF EXISTS එකතු කරන්න
  • ඔබට SHOW TABLES භාවිතා කර තාවකාලික වගු තහවුරු කළ නොහැක
  • ඔබට තාවකාලික වගුවක් එය සාදන සැසියේ පමණක් ඉවත් කළ හැක
  • එකම නාමයෙන් සාමාන්‍ය වගු සමඟ ගැටළු වලින් වැළැක්වීමට උපසර්ගයක් භාවිතා කරන්න

5. MySQL තාවකාලික වගු සඳහා ප්‍රායෝගික භාවිත 5 ක් (කාර්ය සාධන වැඩිදියුණු කිරීම ඇතුළත්)

හැඳින්වීම

MySQL තාවකාලික වගු ඔබට මධ්‍යස්ථ දත්ත සුරකින්න සහ සංකීර්ණ විමසුම් සරල කිරීමට ඉඩ දෙයි, එය දත්ත ගබඩා කාර්ය සාධනය වැඩිදියුණු කිරීමට උපකාරී වේ.

මෙම කොටසේ, තාවකාලික වගු සඳහා ප්‍රායෝගික භාවිත 5 ක් හඳුන්වා දෙමු.
ආදර්ශ SQL සමඟ ඒවා යථාර්ථ ජීවිත අවස්ථා වල කෙසේ භාවිතා කළ හැකිදැයි අපි පැහැදිලි කරමු.

5-1. විමසුම් කාර්ය සාධනය වැඩිදියුණු කිරීම (JOIN පූර්වභාරය අඩු කිරීම)

ගැටළුව

විශාල දත්ත කට්ටලයන් සැකසීමේදී, JOIN ක්‍රියාකාරකම් සෘජුවම ක්‍රියාත්මක කිරීම කාර්ය සාධනය අඩු කරයි.

විසඳුම

JOIN කිරීමේ පෙර, ඉලක්ක දත්ත පෙර-පෙරහන් කිරීම සඳහා තාවකාලික වගුවක් භාවිතා කර, සැකසුම් පූර්වභාරය අඩු කරන්න.

උදාහරණය: සක්‍රිය පරිශීලකයන් සඳහා ඇණවුම් දත්ත ලබා ගැනීම
-- First, store only active users in a temporary table
CREATE TEMPORARY TABLE temp_active_users AS
SELECT id, name FROM users WHERE status = 'active';

-- Perform JOIN using the temporary table
SELECT o.order_id, t.name, o.total_price
FROM orders o
JOIN temp_active_users t ON o.customer_id = t.id;
ලාභ
  • සම්පූර්ණ users වගුවට වඩා සක්‍රිය පරිශීලකයන් පමණක් ඉලක්ක කරගෙන JOIN වැඩබරය අඩු කරයි
  • ප්‍රධාන විමසුම සරල කරයි, කියවීමට පහසුකම් වැඩි කරයි

5-2. තාවකාලික එකතු කිරීමේ සැකසුම

ගැටළුව

එකම එකතු කිරීමේ විමසුම නැවත නැවත ක්‍රියාත්මක කිරීම කාර්ය සාධනය අඩු කරයි.

විසඳුම

එකවර තාවකාලික වගුවක එකතු කිරීමේ ප්‍රතිඵල සුරකිමින් අවශ්‍ය නොවන නැවත නැවත ගණනය කිරීමෙන් වැළැක්විය හැක.

උදාහරණය: මාසික විකුණුම් දත්ත තාවකාලික වගුවක සුරකින්න
-- Calculate monthly total sales and store in a temporary table
CREATE TEMPORARY TABLE temp_monthly_sales AS
SELECT DATE_FORMAT(order_date, '%Y-%m') AS month, SUM(total_price) AS total_sales
FROM orders
GROUP BY month;

-- Retrieve aggregated results
SELECT * FROM temp_monthly_sales WHERE total_sales > 100000;
ලාභ
  • එකතු කරන ලද දත්ත බහු වරක් නැවත භාවිතා කරන්න
  • අතිරේක ගණනයන් වලින් වැළැක්වීමෙන් කාර්ය සාධනය වැඩිදියුණු කරන්න

5-3. කණ්ඩායම් සැකසුම් සඳහා මධ්‍යස්ථ දත්ත සුරකින්න

ගැටළුව

බහු යාවත්කාලීන කිරීම් හෝ මකාදැමීම් සිදු කරන විට, සැකසීමේ දෝෂයන් දත්ත අසමතුලිත තත්ත්වයකට පත් කරනු ඇත.

Solution

අතරමංගල දත්ත සුරැකීමට තාවකාලික වගුවක් භාවිතා කර දත්ත සමතුලිතතාවය රැකගන්න.

Example: Update order data under specific conditions
-- Store target rows in a temporary table
CREATE TEMPORARY TABLE temp_orders AS
SELECT order_id, total_price FROM orders WHERE status = 'pending';

-- Perform update based on the temporary table
UPDATE orders o
JOIN temp_orders t ON o.order_id = t.order_id
SET o.total_price = t.total_price * 1.1; -- Increase price by 10%
Benefits
  • තෝරාගත් දත්ත පමණක් ආරක්ෂිතව යාවත්කාලීන කරන්න
  • යාවත්කාලීන කිරීමට පෙර සහ පසු දත්ත සත්‍යාපනය කිරීම පහසුය

5-4. පරිශීලක-අනුව තාවකාලික දත්ත කළමනාකරණය

Problem

තාවකාලික පරිශීලක-විශේෂ දත්ත සාමාන්‍ය වගුවක සුරැකුවහොත්, අවශ්‍ය නොවන දත්ත කාලයත් සමඟ එකතු විය හැක.

Solution

සැසිය අවසන් වන විට තාවකාලික වගු ස්වයංක්‍රීයව දත්ත ඉවත් කරයි, එමඟින් පරිපාලන පූර්ණභාරය ඉවත් කරයි.

Example: Store search results in a temporary table
-- Store user-specific search results
CREATE TEMPORARY TABLE temp_search_results AS
SELECT * FROM products WHERE category = 'electronics';

-- Display search results
SELECT * FROM temp_search_results;
Benefits
  • සැසිය අවසන් වන විට දත්ත ස්වයංක්‍රීයව ඉවත් වේ
  • තාවකාලික සෙවුම් ප්‍රතිඵල සැසිය තුළ නැවත භාවිතා කළ හැක

5-5. තාවකාලික වගු සහ දර්ශන අතර තේරීම

Problem

නිතර ක්‍රියාත්මක වන විමසුම් සුදානම් කිරීමේදී, තාවකාලික දත්ත ගබඩා අවශ්‍ය නම්, තාවකාලික වගුවක් හෝ VIEW එකක් භාවිතා කළ යුතුදැයි ඔබට සිතිය හැක.

Solution

  • දත්ත නිතර වෙනස් නොවන්නේ නම්දර්ශනයක් (VIEW) භාවිතා කරන්න
  • දත්ත නිතර වෙනස් වනවා හෝ ද්‍රව්‍යීකරණය අවශ්‍ය නම්තාවකාලික වගුවක් භාවිතා කරන්න
Example: Using a temporary table
CREATE TEMPORARY TABLE temp_high_value_customers AS
SELECT customer_id, SUM(total_price) AS total_spent
FROM orders
GROUP BY customer_id
HAVING total_spent > 50000;

SELECT * FROM temp_high_value_customers;
Example: Using a view
CREATE VIEW high_value_customers AS
SELECT customer_id, SUM(total_price) AS total_spent
FROM orders
GROUP BY customer_id
HAVING total_spent > 50000;
Benefits
  • තාවකාලික වගු දත්ත භෞතිකව සුරකිති, එය කාර්ය සාධනය වැඩිදියුණු කරයි
  • දර්ශන විමසුම් නැවත භාවිතා කිරීම සඳහා පහසුය, නමුත් විශාල දත්ත කට්ටල සමඟ කාර්ය සාධනය අඩුවිය හැක

Summary

මෙම කොටසේ, MySQL තාවකාලික වගු සඳහා ප්‍රායෝගික භාවිතා 5ක් හඳුන්වා දුන්නෙමු.

✔ ඉක්මන් සාරාංශය

  1. විමසුම් කාර්ය සාධනය සුදානම් කිරීම (JOIN පූර්ණභාරය අඩු කිරීම) → JOIN කිරීමේ පෙර අවශ්‍ය දත්ත පමණක් තාවකාලික වගුවක සුරකින්න
  2. තාවකාලික එකතු කිරීමේ සැකසීම → නැවත නැවත ගණනය කිරීම වැළැක්වීමට එකතු කළ ප්‍රතිඵල සුරකින්න
  3. කොටස් සැකසීම සඳහා අතරමංගල දත්ත → විශාල පරිමාණ යාවත්කාලීන කිරීම් ආරක්ෂිතව කළමනාකරණය කරන්න
  4. පරිශීලක-අනුව තාවකාලික දත්ත කළමනාකරණය → සැසිය අවසන් වන විට දත්ත ස්වයංක්‍රීයව ඉවත් වේ
  5. තාවකාලික වගු සහ දර්ශන අතර තේරීම → වෙනස් වන දත්ත සඳහා තාවකාලික වගු භාවිතා කරන්න, ස්ථාවර විමසුම් නැවත භාවිතා කිරීම සඳහා දර්ශන භාවිතා කරන්න

6. MySQL තාවකාලික වගු ආරක්ෂිතව භාවිතා කිරීමේදී සැලකිලිමත් විය යුතු තුන් වැදගත් අවධානම්

Introduction

MySQL තාවකාලික වගු සැසියකට අනුව ස්වතන්ත්‍රව ක්‍රියා කරයි සහ නියමිත කොන්දේසි යටතේ ස්වයංක්‍රීයව ඉවත් වේ, එය පහසු ලක්ෂණයක් වේ. නමුත්, අනිසි භාවිතය කාර්ය සාධනය අඩුවීම හෝ අනපේක්ෂිත දෝෂ ඇති කරනු ඇත.

මෙම කොටසේ, තාවකාලික වගු ආරක්ෂිතව භාවිතා කිරීම සඳහා තුන් වැදගත් අවධානම් පැහැදිලි කරමු.

6-1. අවධානම 1: ස්වයංක්‍රීය ඉවත් කිරීමේ මත අධිකව රැඳී සිටීම එපා

Problem

තාවකාලික වගු සැසිය අවසන් වන විට ස්වයංක්‍රීයව ඉවත් වන බැවින්, ඒවා ස්පෂ්ටව ඉවත් කිරීම අත්‍යවශ්‍ය නොවනු ඇතැයි සිතිය හැක. නමුත්, මෙය සමහරවිට අනිසි ගැටළු ඇති කරනු ඇත.

Examples of issues

  • දිගුකාලීන සම්බන්ධතා මතකය භාවිතා කිරීම දිගටම සිදු වේ
  • සැසිය විවෘතව තබා ගන්නේ නම්, තාවකාලික වගු පරිසරයෙන් ඉවත් නොවී දත්ත සමුදාය සම්පත් භාවිතා කිරීම දිගටම සිදු වේ.
  • පැහැදිලිව ඉවත් නොකිරීම නිර්මාණාත්මක දෝෂ ඇති කළ හැක
  • බැච් ක්‍රියාවලිය අනපේක්ෂිතව නැවත සම්බන්ධ වුවහොත්, තාවකාලික වගු අතුරුදහන් වී දෝෂ ඇති කළ හැක.

විසඳුම

  • අවශ්‍ය නොවන විට DROP TEMPORARY TABLE භාවිතා කරමින් තාවකාලික වගු පැහැදිලිව ඉවත් කරන්න
  • දිගුකාලීන සම්බන්ධතාවලදී (උදා: බැච් රැකියා), තාවකාලික වගු වාරකාලීනව ඉවත් කරන්න
උදාහරණය: තාවකාලික වගුවක් පැහැදිලිව ඉවත් කිරීම
DROP TEMPORARY TABLE IF EXISTS temp_users;

ප්‍රධාන කරුණ

  • IF EXISTS එකතු කිරීමෙන් වගුව නොමැති නම් දෝෂ වළක්වයි.

6-2. සැලකිල්ල 2: සාමාන්‍ය වගු සමඟ නම් ගැටලු වළක්වන්න

ගැටලුව

ඔබට සාමාන්‍ය වගුවකට එකම නමකින් තාවකාලික වගුවක් සාදන්න පුළුවන්. නමුත්, එවිට සාමාන්‍ය වගුව තාවකාලිකව අදෘශ්‍යමාන වේ.

ගැටලුවේ උදාහරණය

-- A regular users table exists
SELECT * FROM users;

-- Create a temporary table with the same name
CREATE TEMPORARY TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

-- This now returns data from the temporary table, not the regular one
SELECT * FROM users;

තාවකාලික වගුව පවතින තරම්, එකම නම සහිත සාමාන්‍ය වගුව සඟවා ඇත, එය අනපේක්ෂිත දත්ත ලබාගැනීමේ දෝෂවලට තුඩු දෙන්න පුළුවන්.

විසඳුම

  • තාවකාලික වගු නම් සඳහා “temp_” වැනි පෙදෙසක් භාවිතා කරන්න
  • තාවකාලික සහ සාමාන්‍ය වගු වෙන්කර හඳුනාගැනීමට පැහැදිලි නාමකරණ සම්ප්‍රදායක් භාවිතා කරන්න
උදාහරණය: ආරක්ෂිත තාවකාලික වගු සෑදීම
CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

වාසි

  • temp_ පෙදෙස භාවිතා කිරීමෙන් සාමාන්‍ය users වගු සමඟ ගැටලු වළක්වයි.
  • යෙදුම කේතයේ වගු වෙන්කර හඳුනාගැනීම පහසු කරයි.

6-3. සැලකිල්ල 3: සුචි සහ සීමාවන් ස්වයංක්‍රීයව උරුම නොවේ

ගැටලුව

CREATE TEMPORARY TABLE ... AS SELECT ... භාවිතා කරමින් වගුවක් සාදන්නේ නම්, මුල් වගුවෙන් සුචි සහ සීමාවන් උරුම නොවේ, එය කාර්ය සාධනය පහත වැටීමට හේතු විය හැක.

ගැටලුවේ උදාහරණය

-- Regular users table (with indexes)
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    email VARCHAR(100) UNIQUE,
    name VARCHAR(50)
);

-- Create temporary table (indexes are NOT inherited)
CREATE TEMPORARY TABLE temp_users AS
SELECT id, email, name FROM users;

මෙම අවස්ථාවේදී, PRIMARY KEY සහ UNIQUE සීමාවන් temp_users වෙත ගෙන එන්නේ නැත, එය සෙවීම් මන්දගාමී කරන අතර ද්විත්ව දත්ත ඉඩකර ගන්නා බවට හේතු විය හැක.

විසඳුම

  • තාවකාලික වගු සාදීමෙන් පසු සුචි පැහැදිලිව එකතු කරන්න
  • CREATE TEMPORARY TABLE භාවිතා කරමින් විශේෂයෙන් කොලම් නිර්වචනය කරන්නේ නම්, සෑදීමේදී සුචි නිර්දේශ කරන්න
උදාහරණය: සුචි අතින් එකතු කිරීම
CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    email VARCHAR(100) UNIQUE,
    name VARCHAR(50)
);

ALTER TABLE temp_users ADD INDEX idx_email (email);

මෙම ප්‍රවේශයෙන් ඔබට මුල් වගුවට සමාන සුචි සහිත තාවකාලික වගුවක් සාදන්න පුළුවන්.

සාරාංශය

මෙම කොටසේදී, අපි තාවකාලික වගු ආරක්ෂිතව භාවිතා කිරීම සඳහා වැදගත් සැලකිලි තුනක් පැහැදිලි කළෙමු.

✔ වේගවත් සාරාංශය

  1. ස්වයංක්‍රීය ඉවත් කිරීම මත අධික රඳා නොසිටින්න
  • DROP TEMPORARY TABLE භාවිතා කරමින් තාවකාලික වගු පැහැදිලිව ඉවත් කරන්න
  • දිගුකාලීන සැසිවලදී ඒවා වාරකාලීනව ඉවත් කරන්න
  1. සාමාන්‍ය වගු සමඟ නම් ගැටලු වළක්වන්න
  • එකම නම සහිත සාමාන්‍ය වගුවක් පවතින්නේ නම්, තාවකාලික වගුවට ප්‍රමුඛත්වය ලැබේ
  • temp_ වැනි පෙදෙසක් භාවිතා කරමින් පැහැදිලිව වෙන්කර හඳුනාගන්න
  1. සුචි සහ සීමාවන් ස්වයංක්‍රීයව උරුම නොවේ
  • CREATE TEMPORARY TABLE ... AS SELECT ... භාවිතා කිරීමෙන්, සුචි අහිමි වේ
  • සෑදීමෙන් පසු සුචි අතින් එකතු කරන්න

මෙම කරුණු මතක තබා ගැනීමෙන්, ඔබට MySQL තාවකාලික වගු ආරක්ෂිතව භාවිතා කරමින් දත්ත සමුදාය කාර්ය සාධනය වැඩිදියුණු කළ හැක.

7. MySQL තාවකාලික වගු පිළිබඳ 10 නිතර අසන ප්‍රශ්න (FAQ)

හැඳින්වීම

මෙම කොටසේ, MySQL තාවකාලික වගු පිළිබඳ නිතර අසන 10 ප්‍රශ්න වලට පිළිතුරු දෙනු ඇත.
අපි එය කෙසේ ක්‍රියා කරයි, එහි සීමා, කාර්ය සාධන සැලකිලි, සහ ප්‍රායෝගික අවස්ථා වලදී ගැටළු විසඳීම යන කරුණු ආවරණය කරමු.

7-1. මූලික විශේෂණයන් පිළිබඳ ප්‍රශ්න

Q1. තාවකාලික වගුවක් වෙනත් සැසියකින් ප්‍රවේශය කළ හැදේද?

A. නැත, එය කළ නොහැක.
තාවකාලික වගුව එය නිර්මාණය කළ සැසිය තුළ පමණක් වලංගු වන අතර, වෙනත් සැසි වලින් ප්‍රවේශය කළ නොහැක.

-- Created in Session A
CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

-- Attempt to access from Session B (results in error)
SELECT * FROM temp_users;

දෝෂය:

ERROR 1146 (42S02): Table 'temp_users' doesn't exist

ඔබට දත්ත සැසි අතර බෙදා ගැනීමට අවශ්‍ය නම්, සාමාන්‍ය වගුවක් භාවිතා කළ යුතුය.

Q2. තාවකාලික වගු තැටිය මත සුරැකේද?

A. ඒවා සාමාන්‍යයෙන් මතකයේ (memory) සුරැකේ, නමුත් නියමිත කොන්දේසි යටතේ තැටියට (disk) ගෙන යා හැක.
වගුවේ ප්‍රමාණය tmp_table_size හෝ max_heap_table_size ඉක්මවා ගියහොත්, MySQL InnoDB හෝ MyISAM භාවිතා කර තාවකාලික වගුව තැටියට (disk) සාදයි.

SHOW VARIABLES LIKE 'tmp_table_size';

කාර්ය සාධනය වැඩිදියුණු කිරීම සඳහා, tmp_table_size නිසි ලෙස සකසන්න.

Q3. තාවකාලික වගුවකට සූචක (index) නිර්මාණය කළ හැදේද?

A. ඔව්, ඔබට කළ හැක.
ඔබට PRIMARY KEY හෝ INDEX සාමාන්‍ය වගුවක් වැනි පරිදි නිර්වචනය කළ හැක.

CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    email VARCHAR(100) UNIQUE,
    name VARCHAR(50)
);

ALTER TABLE temp_users ADD INDEX idx_email (email);

කෙසේ වෙතත්, ඔබ CREATE TEMPORARY TABLE ... AS SELECT ... භාවිතා කරන විට, සූචක (indexes) උරුම නොවේ, එබැවින් ඔබට ඒවා අතිරේකව එක් කළ යුතුය.

7-2. කාර්ය සාධනය සහ හැසිරීම පිළිබඳ ප්‍රශ්න

Q4. MySQL 8.0 හි තාවකාලික වගු වල වෙනස්කම් තිබේද?

A. MySQL 8.0 WITH වාක්‍යය භාවිතා කරන Common Table Expressions (CTEs) හඳුන්වා දී ඇත.
MySQL 8.0 සිට, ඔබට තාවකාලික ප්‍රතිඵල කට්ටල (temporary result sets) CTEs භාවිතා කර, තාවකාලික වගුවක් නිර්මාණය නොකර සකස් කළ හැක.

WITH temp_users AS (
    SELECT id, name FROM users WHERE status = 'active'
)
SELECT * FROM temp_users;

CTEs භාවිතා කිරීම තාවකාලික වගු වෙනුවට විමසුම් (queries) සරල කර, මතක භාවිතය අඩු කරයි.

Q5. තාවකාලික වගුවක් සහ MEMORY වගුවක් අතර වෙනස කුමක්ද?

A. MEMORY වගුවක් සැසියක් අවසන් වීමෙන් පසුද පවත්නා අතර, තාවකාලික වගුවක් එසේ නොවේ.
තාවකාලික වගුව සැසිය අවසන් වූ විට ඉවත් කරයි, එත් MEMORY වගුව සේවාදායකය නැවත ආරම්භ වන තුරු (හෝ ඔබ එය අත්පොතෙන් ඉවත් කරන තුරු) පවත්නා වේ.

CREATE TABLE memory_table (
    id INT PRIMARY KEY,
    name VARCHAR(50)
) ENGINE=MEMORY;

කවදා භාවිතා කළ යුතුද?

  • තාවකාලික වගුව: කෙටි කාලීන, සැසිය-සීමාගත සැකසීම
  • MEMORY වගුව: සේවාදායක මට්ටමේ පවත්නා, ඉහළ වේගයේ ප්‍රවේශය

7-3. මකා දැමීම සහ ගැටළු විසඳීම පිළිබඳ ප්‍රශ්න

Q6. DROP TABLE භාවිතා කර තාවකාලික වගුවක් මකා දැමිය හැදේද?

A. නැත, ඔබට DROP TEMPORARY TABLE භාවිතා කළ යුතුය.
තාවකාලික වගුවක් ඉවත් කරන විට DROP TEMPORARY TABLE යොදා ගන්න.

DROP TEMPORARY TABLE temp_users;

සාමාන්‍ය DROP TABLE භාවිතා කිරීම දෝෂයක් ඇති කරයි.

Q7. SHOW TABLES තාවකාලික වගු පෙන්වන්නේ නැති වීමට හේතුව කුමක්ද?

A. තාවකාලික වගු SHOW TABLES මගින් ලැයිස්තුගත නොවේ.
ඔවුන්ගේ පවතිම පරීක්ෂා කිරීමට, INFORMATION_SCHEMA විමසන්න.

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = DATABASE() 
AND TABLE_NAME = 'temp_users';

ප්‍රතිඵලයක් නොලැබුනහොත්, තාවකාලික වගුව දැනටමත් ඉවත් කර ඇති බවක් වේ.

සාරාංශය

මෙම කොටසේ, MySQL තාවකාලික වගු පිළිබඳ නිතර අසන 10 ප්‍රශ්න ආවරණය කර ඇත.

✔ ඉක්මන් සාරාංශය

  1. තාවකාලික වගු වෙනත් සැසියන්ගෙන් ප්‍රවේශය නොලැබේ
  2. මතකයේ නිර්මාණය කරයි, නමුත් විශාල නම් තැටියට (ඩිස්ක්) ගමන් කරයි
  3. AS SELECT භාවිතා කරන විට ඉන්ඩෙක්ස් අතින් අතිරේකව නිර්වචනය කළ යුතුය
  4. CTE (WITH) MySQL 8.0+ හි ලබා ගත හැක
  5. MEMORY වගු වලට වඩා, තාවකාලික වගු සැසිය අවසන් වන විට අතුරුදන් වේ
  6. DROP TEMPORARY TABLE භාවිතා කර එය ඉවත් කරන්න
  7. SHOW TABLES තාවකාලික වගු පෙන්වන්නේ නැත

8. සාරාංශය: MySQL තාවකාලික වගු ප්‍රභාවී ලෙස භාවිතා කිරීමේ මූලික කරුණු

හැඳින්වීම

MySQL තාවකාලික වගු මධ්‍යස්ථ දත්ත ගබඩා කිරීම සහ විමසුම් කාර්ය සාධනය වැඩිදියුණු කිරීම සඳහා බලවත් මෙවලමක් වේ.
මෙහි, අපි මෙම මාර්ගෝපදේශය පුරා සාකච්ඡා කළ මූලික කරුණු සාරාංශ කරමු.

8-1. MySQL තාවකාලික වගු මූලික සංකල්ප

තාවකාලික වගුවක් කියන්නේ කුමක්ද?

  • සැසියකට අනුව ස්වතන්ත්‍රව පවතී
  • සැසිය අවසන් වන විට ස්වයංක්‍රීයව ඉවත් වේ
  • සාමාන්‍ය වගුවක් මෙන් INSERT, UPDATE, සහ DELETE සහය දක්වයි

මූලික නිර්මාණ වාක්‍ය රීතිය

CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    email VARCHAR(100)
);

ප්‍රධාන භාවිතා අවස්ථා

  • තාවකාලික දත්ත ගබඩා කිරීම
  • විමසුම් කාර්ය සාධනය වැඩිදියුණු කිරීම
  • කණ්ඩායම් සැකසීම සඳහා මධ්‍යස්ථ වගු
  • පරිශීලක-අනුව තාවකාලික දත්ත කළමනාකරණය

8-2. තාවකාලික වගු වල වාසි

1) විමසුම් කාර්ය සාධනය වැඩිදියුණු කිරීම

  • JOIN වැඩබරය අඩු කිරීම
  • නැවත නැවත ගණනය කිරීම් අඩු කිරීම සඳහා පෙර එකතු කිරීම සිදු කිරීම
  • අවශ්‍ය නොවන දත්ත ඉවත් කිරීමෙන් විමසුම් සරල කිරීම
උදාහරණය: JOIN වැඩබරය අඩු කිරීම
CREATE TEMPORARY TABLE temp_active_users AS
SELECT id, name FROM users WHERE status = 'active';

SELECT o.order_id, t.name, o.total_price
FROM orders o
JOIN temp_active_users t ON o.customer_id = t.id;

2) තාවකාලික ගබඩා කිරීම සහ සැසිය-අධාරිත කළමනාකරණය

  • සැසිය අවසන් වන විට ස්වයංක්‍රීයව ඉවත් වේ
  • කෙටි කාලීන දත්ත ගබඩා කිරීම සඳහා සුදුසු
  • අනෙකුත් සැසි වලට බලපා නොමැතිව ස්වතන්ත්‍ර දත්ත සැකසීම
උදාහරණය: සෙවුම් ප්‍රතිඵල තාවකාලික ගබඩා කිරීම
CREATE TEMPORARY TABLE temp_search_results AS
SELECT * FROM products WHERE category = 'electronics';

SELECT * FROM temp_search_results;

3) ආරක්ෂිත දත්ත යාවත්කාලීන කිරීම

  • කණ්ඩායම් සැකසීමේ මධ්‍යස්ථ වගුවක් ලෙස ප්‍රයෝජනවත්
  • දත්ත යාවත්කාලීන කිරීමේදී උපස්ථයක් ලෙස භාවිතා කළ හැක
  • පරීක්ෂණ දත්ත කට්ටල නිර්මාණයට ප්‍රයෝජනවත්
උදාහරණය: ආරක්ෂිත දත්ත යාවත්කාලීන කිරීම
CREATE TEMPORARY TABLE temp_orders AS
SELECT order_id, total_price FROM orders WHERE status = 'pending';

UPDATE orders o
JOIN temp_orders t ON o.order_id = t.order_id
SET o.total_price = t.total_price * 1.1;

8-3. අවාසි සහ අවධානම්

1) සැසිය අවසන් වන විට දත්ත අතුරුදන් වේ

  • ස්ථිර ගබඩා කිරීම සඳහා සුදුසු නොවේ
  • දිගුකාලීන පවත්නාකම සඳහා සාමාන්‍ය වගු භාවිතා කරන්න

2) සැසි අතර බෙදාගත නොහැක

  • අනෙකුත් සම්බන්ධතා වලින් ප්‍රවේශය නොලැබේ
  • පරිශීලකයන් අතර දත්ත බෙදාගැනීමට සාමාන්‍ය වගු භාවිතා කරන්න

3) ඉන්ඩෙක්ස් සහ සීමා ස්වයංක්‍රීයව උරුම නොගනී

  • CREATE TEMPORARY TABLE ... AS SELECT ... ඉන්ඩෙක්ස් නිර්මාණය නොකරයි
  • අවශ්‍ය නම් ඉන්ඩෙක්ස් අතින් එක් කරන්න
    ALTER TABLE temp_users ADD INDEX idx_email (email);
    

8-4. ආරක්ෂිත භාවිතය සඳහා හොඳ පුරුදු

අවශ්‍ය නොවූ විට පැහැදිලිව ඉවත් කරන්න

DROP TEMPORARY TABLE IF EXISTS temp_users;

සාමාන්‍ය වගු සමඟ නාමකරණ ගැටළු වලින් වැළකී සිටින්න

  • temp_ උපසර්ගයක් භාවිතා කරන්න
    CREATE TEMPORARY TABLE temp_users (...);
    

කාර්ය සාධනය සැලකිල්ලට ගෙන සැලසුම් කරන්න

  • වගුව විශාල වී තැටියට ගමන් කරන්නේ නම් tmp_table_size සකස් කිරීම ගැන සිතන්න
    SHOW VARIABLES LIKE 'tmp_table_size';
    

8-5. තාවකාලික වගු vs විකල්ප (දසුන් සහ CTEs)

තාවකාලික වගු භාවිතා කිරීමේදී දසුන් (VIEW) හෝ CTE (Common Table Expressions) සමඟ කවදා භාවිතා කළ යුතුද යන්න සලකා බැලීමත් වැදගත් වේ.

MethodCharacteristicsBest Use Case
Temporary tableRemoved at session endWhen you need to store intermediate data
View (VIEW)Data retrieved in real time; performance may degrade with large datasetsSave and reuse frequently referenced queries
CTE (WITH clause)Virtual table valid only within a single queryHandle temporary data without creating a table

සාරාංශය

මෙම මාර්ගෝපදේශයේ, MySQL තාවකාලික වගු සම්බන්ධ සියලුම මූලික කරුණු අපි ආවරණය කර ඇත.

✔ ඉක්මන් සාරාංශය

  • තාවකාලික වගු සැසිය අවසන් වන විට ස්වයංක්‍රීයව ඉවත් කරයි
  • JOIN සහ එකතු කිරීමේ පූර්වභාරය අඩු කිරීමෙන් ඒවා කාර්ය සාධනය වැඩිදියුණු කිරීමට උදව් කරයි
  • කණ්ඩායම් සැකසීම, තාවකාලික සෙවුම් ප්‍රතිඵල, සහ පරීක්ෂණ දත්ත සඳහා ප්‍රයෝජනවත් වේ
  • සැසි අතර ඒවා බෙදා ගත නොහැකි අතර, අවශ්‍ය විට ඉන්ඩෙක්ස් අතින් එකතු කළ යුතුය
  • තාවකාලික වගු, දර්ශන, සහ CTE අතර තේරීම සවිස්තරාත්මක දත්ත කළමනාකරණය සක්‍රිය කරයි

ඔබ දැන් MySQL තාවකාලික වගු මාර්ගෝපදේශයේ සියලු කොටස් සම්පූර්ණ කර ඇත! 🎉
ඔබේ MySQL ව්‍යාපෘතිවල තාවකාලික වගු ප්‍රභාවී ලෙස භාවිතා කිරීමට මෙම යොමුකිරීම භාවිතා කරන්න.