Jedwali za Muda za MySQL Zimeelezwa: Unda, Tumia, Futa + Miongozo Bora (Kwa Mifano ya SQL)

目次

1. (Rafiki wa Mwanzo) Je, Jedwali la Muda la MySQL ni Nini? Tofauti na Jedwali la Kawaida

Utangulizi

Unaposhughulikia data kwa MySQL, kuna nyakati unahitaji kuhifadhi data kwa muda. Kwa mfano, unapochakata seti kubwa ya data, unaweza kutaka kuhifadhi matokeo ya kati wakati wa kazi. Katika hali hizo, jedwali la muda (Temporary Table) ni muhimu sana.

Katika makala hii, tutaelezea taratibu za msingi za jedwali la muda la MySQL na jinsi zinavyotofautiana na jedwali la kawaida.

1-1. Jedwali la Muda ni Nini?

Jedwali la muda ni jedwali maalum linalopatikana tu wakati wa kikao cha hifadhidata (muunganisho). Tofauti na jedwali la kawaida, linaondolewa kiotomatiki wakati kikao kinamalizika, na hivyo kuwa bora kwa kuhifadhi data ya muda.

Sifa Kuu za Jedwali la Muda

  • Imepangwa kwa kila kikao Jedwali la muda linaweza kupatikana tu ndani ya kikao kilicholiunda. Vikao vingine haviwezi kulirejelea.
  • Linaondolewa kiotomatiki wakati kikao kinamalizika Jedwali la muda linaondoka kiotomatiki wakati kikao kinamalizika, hata kama haujalii kwa makusudi.
  • Unaweza kuunda jedwali la muda kwa jina lile lile Tofauti na jedwali la kawaida, inawezekana kuunda jedwali la muda kwa jina lile lile katika vikao tofauti .

1-2. Tofauti na Jedwali la Kawaida

Jedwali la muda na jedwali la kawaida zinatofautiana kwa njia zifuatazo.

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

Ni ipi unapaswa kutumia?

  • Kama unahitaji data kwa muda tu na inaweza kutupwa baada ya usindikajiJedwali la muda
  • Kama unataka kuhifadhi data kwa kudumu na kuitumia tena baadayeJedwali la kawaida

Kwa mfano, jedwali la muda ni muhimu sana kwa kazi kama uchambuzi wa data kwa kiwango kikubwa au muungano wa muda.

1-3. Wakati Unapohitaji Jedwali la Muda

Jedwali la muda la MySQL ni muhimu hasa katika hali zifuatazo.

1) Boresha utendaji wa hoja

Kwa mfano, unapofanya operesheni ngumu za JOIN, unaweza kupunguza muda wa usindikaji kwa kuunda jedwali la muda kuhifadhi data ya kati mapema.

Mfano: Punguza mzigo wa JOIN
CREATE TEMPORARY TABLE temp_users AS
SELECT id, name FROM users WHERE status = 'active';

Kwa kuhifadhi data lengwa katika jedwali la muda kwanza kisha ukifanya JOIN, utendaji unaweza kuboreshwa.

2) Hifadhi data kwa muda

Jedwali la muda pia ni muhimu wakati programu inahitaji kudhibiti data kwa muda. Kwa mfano, unaweza kuhifadhi data ambayo mtumiaji alitafuta katika jedwali la muda na kuiondoa baada ya kikao kumalizika.

3) Jedwali la kati kwa usindikaji wa batch

Unapochakata kiasi kikubwa cha data, kutumia jedwali la muda kama jedwali la kati kunaweza kuboresha uthabiti wa mchakato.

1-4. Vizuizi vya Jedwali la Muda

Jedwali la muda ni rahisi kutumia, lakini kuna vikwazo vichache.

1) Linaondolewa kiotomatiki wakati kikao kinamalizika

Kwa sababu jedwali la muda linaondolewa kiotomatiki wakati kikao kinamalizika, haliwezi kutumika kuhifadhi data kwa kudumu.

2) Haiwezi kufikiwa kutoka vikao vingine

Jedwali la muda linaweza kutumika tu ndani ya kikao kilicholiunda, hivyo haliwezi kushirikiwa na watumiaji au michakato mingine.

3) Mgogoro unaowezekana na jedwali la kawaida lenye jina lile lile

Kama jedwali la kawaida lenye jina lile lile lipo, kuunda jedwali la muda kwa jina hilo litafanya jedwali la kawaida liwe lisionekane kwa muda, hivyo kuwa mwangalifu.

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

Kama ilivyoonyeshwa hapo juu, mara tu jedwali la muda linapoanzishwa, huwezi kufikia jedwali la kawaida lenye jina lile hadi jedwali la muda litakoma. Chagua majina ya jedwali kwa umakini.

Muhtasari

Jedwali la muda la MySQL ni kipengele rahisi kwa ajili ya kuhifadhi data ya muda na kuboresha hoja. Kwa kuelewa jinsi zinavyotofautiana na jedwali la kawaida na kuzitumia ipasavyo, unaweza kuchakata data kwa ufanisi zaidi.

✔ Muhtasari wa Haraka

  • Jedwali za muda huondolewa kiotomatiki wakati kikao kinamalizika
  • Kinyume na jedwali za kawaida, zimegawanyika kwa kila kikao
  • Nzuri kwa uhifadhi wa muda na kuboresha utendaji wa maswali
  • Haitumiki kwa uhifadhi wa kudumu kwa sababu data inatoweka wakati kikao kinamalizika
  • Haiwezi kufikiwa kutoka kwa vikao vingine, na inaweza kuingiliana na jedwali za kawaida zenye jina sawa

2. (Kwa Msimbo wa Mfano) Jinsi ya Kuunda Jedwali la Muda katika MySQL

Utangulizi

Katikati ya awali, tulielezea dhana ya msingi ya jedwali za muda na jinsi zinavyotofautiana na jedwali za kawaida.
Katika sehemu hii, tutapitia jinsi ya kuunda jedwali la muda na jinsi ya kushughulikia data ndani yake.

Kuunda jedwali la muda ni rahisi, lakini ikiwa hutumii sarufi sahihi, huenda lisifanye kama inavyotarajiwa. Sehemu hii inaelezea sarufi ya msingi, kuunda kutoka kwa jedwali lililopo, na jinsi ya kuthibitisha jedwali za muda kwa undani.

2-1. Sarufi ya Msingi kwa Jedwali la Muda

Ili kuunda jedwali la muda, tumia agizo la CREATE TEMPORARY TABLE.

Sarufi ya Msingi

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

Sarufi ni karibu sawa na CREATE TABLE, lakini kuongeza TEMPORARY inafanya iwe jedwali la muda.

Mfano: Hifadhi taarifa za mtumiaji katika jedwali la muda

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

Jedwali hili temp_users ni halali tu katika kikao cha sasa na huondolewa kiotomatiki wakati kikao kinamalizika.

2-2. Unda Jedwali la Muda Kutokana na Data kutoka kwa Jedwali lililopo

Unaweza pia kuunda jedwali la muda kutokana na data kutoka kwa jedwali lililopo.

Sarufi

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

Mfano: Hifadhi watumiaji walio hai pekee katika jedwali la muda

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

Njia hii inachukua watumiaji tu wenye status = 'active' kutoka kwenye jedwali users na kuziweka katika jedwali jipya la muda linaloitwa active_users.

Vidokezo Muhimu
  • Inanakili data kutoka kwa jedwali lililopo bila mabadiliko
  • Aina za data za safu huwekwa kiotomatiki
  • Faharasa hazinakiliwi, hivyo ziweke wazi ikiwa inahitajika

2-3. Jinsi ya Kuthibitisha Data ya Jedwali la Muda

Orodha Jedwali

SHOW TABLES;

Hata hivyo, jedwali la muda halitaonekana katika orodha kutoka SHOW TABLES ya kawaida.

Angalia muundo wa jedwali la muda

DESC temp_users;

au

SHOW CREATE TABLE temp_users;

Hii inakuwezesha kuangalia muundo wa safu na vikwazo vya jedwali la muda.

2-4. Ingiza Data katika Jedwali la Muda

Kuingiza data katika jedwali la muda ni sawa na kwenye jedwali la kawaida.

Ingiza data

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

Angalia data

SELECT * FROM temp_users;

Hii inathibitisha kuwa data imehifadhiwa katika jedwali la muda.

2-5. Vidokezo Wakati wa Kuunda Jedwali la Muda

1) Jihadhari na migogoro ya majina ya jedwali

Kama utaunda jedwali la muda lenye jina sawa na jedwali la kawaida, jedwali la muda litachukua kipaumbele, na jedwali la kawaida litakuwa lisilipatikana kwa muda.

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

Kwa sababu hii, inashauriwa kutumia kiambishi awali kama “temp_” kwa majina ya jedwali la muda.

2) Faharasa hazirithiwi kiotomatiki

Unapo nakili data kutoka kwa jedwali lililopo, faharasa hazitekelezwa kiotomatiki.
Ukihitaji, lazima uongeze faharasa wazi.

ALTER TABLE temp_users ADD INDEX (email);

3) Unahitaji ruhusa ya kuunda jedwali la muda

To create a temporary table, you need the CREATE TEMPORARY TABLES privilege.

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

Without this privilege, you cannot create temporary tables.

Muhtasari

In this section, we explained how to create temporary tables.

✔ Muhtasari wa haraka

  • Unda jedwali la muda kwa kutumia CREATE TEMPORARY TABLE
  • Unaweza pia kuunda moja kwa kunakili data kutoka jedwali lililopo
  • Inafutwa kiotomatiki wakati kikao kinamalizika
  • Faharasa hazitekelezwa kiotomatiki—kuwa mwangalifu
  • Tumia kiambishi awali kama “temp_” ili kuepuka migongano ya majina
  • Unahitaji ruhusa sahihi (CREATE TEMPORARY TABLES)

3. Jinsi ya Kushughulikia Data katika Jedwali la Muda la MySQL (INSERT, UPDATE, DELETE)

Utangulizi

Katika sehemu iliyopita, tumeelezea jinsi ya kuunda jedwali la muda katika MySQL.
Katika sehemu hii, tutaelezea jinsi ya kuingiza, kusasisha, na kufuta data katika jedwali la muda kwa kutumia amri maalum za SQL.

Jedwali la muda linaunga mkono shughuli za data sawa na jedwali la kawaida,
ilaikuwa na baadhi ya maelezo muhimu ya kukumbuka, ambayo pia tutayashughulikia.

3-1. Ingiza data katika jedwali la muda (INSERT)

To add data to a temporary table, use the INSERT INTO statement, just like with a regular table.

Sarufi ya msingi

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

Mfano: Ongeza taarifa za mtumiaji

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');

Ingiza data iliyopo kwa kutumia INSERT…SELECT

Unaweza pia kuchukua data kutoka jedwali lililopo na kuilaingiza kwenye jedwali la muda.

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

This method lets you store only active users in a temporary table.

3-2. Sasisha data katika jedwali la muda (UPDATE)

To change data in a temporary table, use the UPDATE statement.

Sarufi ya msingi

UPDATE temp_table_name 
SET column_name = value
WHERE condition;

Mfano: Sasisha jina la mtumiaji

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

Sasisha kwa wingi safu ambazo zinaendana na sharti

For example, if you want to change email addresses under a specific domain to example.jp, you can write:

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

3-3. Futa data kutoka jedwali la muda (DELETE)

To delete data, use the DELETE statement.

Sarufi ya msingi

DELETE FROM temp_table_name WHERE condition;

Mfano: Futa data ya mtumiaji maalum

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

Futa safu zote (tofauti na TRUNCATE)

If you want to delete all rows, you can write:

DELETE FROM temp_users;

In contrast, for regular tables, you can often delete all rows faster using TRUNCATE TABLE. However, you cannot use TRUNCATE on a temporary table in MySQL.

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

Therefore, to remove all rows from a temporary table, you must use DELETE.

3-4. Maelezo wakati wa kushughulikia data katika jedwali la muda

1) Data hutoweka wakati kikao kinamalizika

A temporary table is automatically removed when the session (connection) ends,
so it is not suitable for use cases that require persistent data storage.

2) Haiwezi kufikiwa kutoka kikao kingine

A temporary table is valid only within the session that created it, and cannot be accessed from other sessions.

SELECT * FROM temp_users;

Ikiwa utakimbia SQL hii katika kikao tofauti, utapata kosa “Table ‘temp_users’ doesn’t exist”.

3) Fahirisi kwenye jedwali la muda hazitekelezwa kiotomatiki

Ikiwa unaunda jedwali kwa kutumia CREATE TEMPORARY TABLE ... AS SELECT ...,
fahirisi kutoka kwenye jedwali asili hazirithiwi. Ikiwa inahitajika, ongeza fahirisi kwa mikono ukitumia ALTER TABLE.

ALTER TABLE temp_users ADD INDEX (email);

Muhtasari

Katika sehemu hii, tulijifunza juu ya usindikaji wa data (INSERT, UPDATE, DELETE) kwa jedwali la muda.

✔ Muhtasari wa Haraka

  • Tumia INSERT kuongeza data ( INSERT INTO ... VALUES / INSERT INTO ... SELECT )
  • Tumia UPDATE kubadilisha data (usasaishaji wa masharti na kutumia REPLACE() )
  • Tumia DELETE kuondoa data ( DELETE FROM ... WHERE ; TRUNCATE hairuhusiwi)
  • Jedwali la muda linaondolewa wakati kikao kinamalizika
  • Haiwezi kufikiwa kutoka kwa vikao vingine
  • Fahirisi hazirithiwi kiotomatiki; ongeza kwa mikono ikiwa inahitajika

4. Je, Jedwali la Muda la MySQL Linaondolewa Kiotomatiki? Jinsi ya Kuliondoa kwa Mikono

Utangulizi

Kinyume na jedwali la kawaida, jedwali la muda la MySQL (Temporary Table) linondolewa kiotomatiki wakati kikao kinamalizika. Hata hivyo, kuna hali ambapo huenda ukahitaji kuliondoa kwa mikono.

Katika sehemu hii, tunaelezea jinsi utoaji kiotomatiki unavyofanya kazi na jinsi ya kuondoa jedwali la muda kwa mikono kwa undani.

4-1. Jinsi utoaji kiotomatiki unavyofanya kazi kwa jedwali la muda

1) Inondolewa kiotomatiki wakati kikao kinamalizika

Jedwali la muda la MySQL linondolewa kiotomatiki wakati kikao (muunganisho wa hifadhidata) kilichouunda linamalizika.
Kwa sababu hii, kwa kawaida huhitaji kuliondoa kwa mikono.

Mfano: Utoaji kiotomatiki wakati kikao kinamalizika
-- 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;

Katika hatua hii, jedwali la muda temp_users linondolewa kiotomatiki.

2) Jedwali la muda linaendelea mradi kikao kinaendelea

Kwa sababu jedwali la muda linaendeshwa kwa kila kikao, halitaletwa mradi kikao kimefungwa.

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

Kwa maneno mengine, jedwali la muda hubaki katika kumbukumbu hadi uifunge mteja wa MySQL (au programu itakatika).

4-2. Jinsi ya kuondoa jedwali la muda kwa mikono

Unaweza pia kuondoa jedwali la muda kwa mikono.
Katika MySQL, tumia DROP TEMPORARY TABLE kuondoa jedwali la muda.

1) Tumia DROP TEMPORARY TABLE

DROP TEMPORARY TABLE temp_users;

Hii inaondoa mara moja jedwali la muda temp_users.

2) Ongeza IF EXISTS kuepuka makosa

Kama jedwali halipo, unaweza kutumia IF EXISTS kuepuka kosa.

DROP TEMPORARY TABLE IF EXISTS temp_users;

Sintaks hii inazuia makosa hata kama jedwali halipo.

3) Tofauti na DROP TABLE ya kawaida

Kama ujaribu kuondoa jedwali la muda ukitumia DROP TABLE ya kawaida, unaweza kuona kosa kama ifuatayo:

DROP TABLE temp_users;

Kosa:

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

Kwa sababu MySQL inasimamia jedwali la kawaida na jedwali la muda kando, lazima utumie DROP TEMPORARY TABLE unapoondoa jedwali la muda.

4-3. Jinsi ya kuthibitisha jedwali la muda limeondolewa

1) Huwezi kuthibitisha kwa SHOW TABLES

Jedwali la muda halitaonekana katika matokeo ya SHOW TABLES.

SHOW TABLES;

Jedwali la muda halijaorodheshwa

2) Thibitisha kwa kutumia INFORMATION_SCHEMA

Unaweza kuangalia kama jedwali la muda lipo kwa kuuliza INFORMATION_SCHEMA.

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

Kama swali hili linarejesha matokeo, inaonyesha kuwa jedwali la muda lipo.

4-4. Maelezo kuhusu kufuta jedwali la muda

1) Jedwali la muda linatofautiana kwa kikao

Unaweza kuunda jedwali la muda kwa jina sawa katika vikao vingi.
Huwezi kufuta jedwali la muda lililoundwa na kikao kingine.

Mfano
-- Created in session A
CREATE TEMPORARY TABLE temp_data (id INT);

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

Hitilafu inatokea:

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

Jedwali la muda linaweza kufutwa tu katika kikao kilicholiunda.

2) Mgogoro unaowezekana na jedwali la kawaida lenye jina sawa

Kama jedwali la muda lina jina sawa na jedwali la kawaida, jedwali la muda linachukua kipaumbele, na jedwali la kawaida linafichika.

Mfano
-- 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;

Suluhisho:

  • Tumia kiambishi awali kama temp_ kwa jedwali la muda ili kuepuka migogoro ya majina.

Muhtasari

Katika sehemu hii, tumeelezea jinsi ufutaji wa jedwali la muda unavyofanya kazi na jinsi ya kulifuta.

✔ Muhtasari wa haraka

  • Jedwali la muda linaondolewa kiotomatiki wakati kikao kinamalizika
  • Linabaki mradi kikao bado kinafanya kazi
  • Ili kufuta kwa mikono, tumia DROP TEMPORARY TABLE
  • Ongeza IF EXISTS ili kuepuka hitilafu
  • Huwezi kuthibitisha jedwali la muda kwa SHOW TABLES
  • Unaweza kufuta jedwali la muda tu katika kikao kilicholiunda
  • Tumia kiambishi awali ili kuepuka migogoro na jedwali la kawaida lenye jina sawa

5. Matumizi 5 ya Kitaalamu ya Jedwali la Muda la MySQL (Ikijumuisha Uboreshaji wa Utendaji)

Utangulizi

Jedwali la muda la MySQL hukuruhusu kuhifadhi data ya kati na kurahisisha maswali tata, kusaidia kuboresha utendaji wa hifadhidata.

Katika sehemu hii, tunatambua matumizi 5 ya kitaalamu ya jedwali la muda.
Tunaelezea jinsi yanavyoweza kutumika katika hali halisi, pamoja na mfano wa SQL.

5-1. Boresha Utendaji wa Maswali (Punguza Mzigo wa JOIN)

Tatizo

Wakati wa kuchakata seti kubwa za data, kutekeleza operesheni za JOIN moja kwa moja kunaweza kupunguza utendaji.

Suluhisho

Tumia jedwali la muda kuchuja data lengwa mapema kabla ya kutekeleza JOIN, kupunguza mzigo wa usindikaji.

Mfano: Pata data ya maagizo kwa watumiaji hai
-- 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;
Manufaa
  • Inapunguza mzigo wa JOIN kwa kulenga watumiaji hai badala ya jedwali lote la users
  • Inarahisisha swali kuu, kuboresha usomaji

5-2. Usindikaji wa Mkusanyiko wa Muda

Tatizo

Kukimbia mara kwa mara swali hilo la mkusanyiko lile lile kunaweza kupunguza utendaji.

Suluhisho

Hifadhi matokeo ya mkusanyiko katika jedwali la muda mara moja ili kuepuka mahesabu yasiyohitajika yanayojirudia.

Mfano: Hifadhi data ya mauzo ya kila mwezi katika jedwali la muda
-- 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;
Manufaa
  • Tumia tena data iliyokusanywa mara nyingi
  • Boresha utendaji kwa kuepuka mahesabu yanayojirudia

5-3. Hifadhi Data ya Kati kwa Usindikaji wa Batch

Tatizo

When performing bulk updates or deletes, errors during processing can leave data in an inconsistent state.

Suluhisho

Tumia jedwali la muda mfupi kuhifadhi data ya kati na kudumisha uthabiti wa data.

Mfano: Sasisha data ya agizo chini ya hali maalum
-- 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%
Faida
  • Sasisha data iliyochaguliwa kwa usalama tu
  • Rahisi kuthibitisha data kabla na baada ya masasisho

5-4. Usimamizi wa Data ya Muda Mfupi kwa Kila Mtumiaji

Tatizo

Ikiwa data maalum ya mtumiaji ya muda mfupi inahifadhiwa katika jedwali la kawaida, data isiyo ya lazima inaweza kukusanyika kwa muda.

Suluhisho

Jadawali za muda mfupi huondoa data kiotomatiki wakati kikao kinapoisha, na hivyo kuondoa gharama za matengenezo.

Mfano: Hifadhi matokeo ya utafutaji katika jedwali la muda mfupi
-- 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;
Faida
  • Data inaondolewa kiotomatiki wakati kikao kinapoisha
  • Matokeo ya utafutaji ya muda mfupi yanaweza kutumika tena wakati wa kikao

5-5. Kuchagua Kati ya Jadawali za Muda Mfupi na Mawazo

Tatizo

Wakati wa kuboresha masuala yanayotekelezwa mara kwa mara, unaweza kujiuliza ikiwa kutumia jedwali la muda mfupi au VIEW, hasa ikiwa hifadhi ya data ya muda mfupi inahitajika.

Suluhisho

  • Ikiwa data haibadiliki mara kwa maraTumia mwonekano (VIEW)
  • Ikiwa data inabadilika mara kwa mara au inahitaji kuwekwa kimwiliTumia jedwali la muda mfupi
Mfano: Kutumia jedwali la muda mfupi
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;
Mfano: Kutumia mwonekano
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;
Faida
  • Jadawali za muda mfupi huhifadhi data kimwili, ambayo inaweza kuboresha utendaji
  • Mawazo ni rahisi kwa kutumia tena masuala, lakini utendaji unaweza kupungua na data kubwa

Muhtasari

Katika sehemu hii, tulianzisha matumizi matano ya vitendo kwa jadawali za muda mfupi za MySQL.

✔ Muhtasari mfupi

  1. Boresha utendaji wa masuala (punguza gharama za JOIN) → Hifadhi data inayohitajika tu katika jedwali la muda mfupi kabla ya kufanya JOIN
  2. Uchakataji wa mkusanyiko wa muda mfupi → Hifadhi matokeo yaliyokusanywa ili kuepuka hesabu zinazorudiwa
  3. Data ya kati kwa uchakataji wa kundi → Shughulikia masasisho makubwa kwa usalama
  4. Usimamizi wa data ya muda mfupi kwa kila mtumiaji → Data inaondolewa kiotomatiki wakati kikao kinapoisha
  5. Chagua kati ya jadawali za muda mfupi na mawazo → Tumia jadawali za muda mfupi kwa data inayobadilika, mawazo kwa kutumia tena masuala thabiti

6. Tahadhari tatu Muhimu Wakati wa Kutumia Jadawali za Muda Mfupi za MySQL Kwa Usalama

Utangulizi

Jadawali za muda mfupi za MySQL hufanya kazi bila kujitegemea kwa kila kikao na huondolewa kiotomatiki chini ya hali fulani, na hivyo kufanya kuwa kipengele rahisi. Hata hivyo, matumizi yasiyofaa yanaweza kusababisha kupungua kwa utendaji au makosa yasiyotarajiwa.

Katika sehemu hii, tunaeleza tahadhari tatu muhimu ili kuhakikisha matumizi salama ya jadawali za muda mfupi.

6-1. Tahadhari 1: Usitegemee Kupunguza Kiotomatiki

Tatizo

Kwa sababu jadawali za muda mfupi huondolewa kiotomatiki wakati kikao kinapoisha, inaweza kuonekana kuwa si lazima kuzidrop wazi. Hata hivyo, hii inaweza kusababisha matatizo yasiyokusudiwa wakati mwingine.

Mifano ya matatizo

  • Miunganisho mirefu inaendelea kutumia kumbukumbu
  • Ikiwa kikao kinabaki wazi, majedwali ya muda hayafutwi na yanaendelea kutumia rasilimali za hifadhidata.
  • Kushindwa kuondoa kwa dhahiri kunaweza kusababisha mapungufu ya muundo
  • Ikiwa mchakato wa batch unajitafutia upya bila kutarajiwa, jedwali la muda linaweza kutoweka na kusababisha makosa.

Suluhisho

  • Futa majedwali ya muda kwa dhahiri wakati hayahitajwi tena kwa kutumia DROP TEMPORARY TABLE
  • Katika miunganisho mirefu (kwa mfano, kazi za batch), futa majedwali ya muda kwa mara kwa mara
Mfano: Futa jedwali la muda kwa dhahiri
DROP TEMPORARY TABLE IF EXISTS temp_users;

Jambo kuu

  • Kuongeza IF EXISTS huzuia makosa ikiwa jedwali halipo.

6-2. Tahadhari 2: Epuka Migogoro ya Majina na Jedwali la Kawaida

Tatizo

Unaweza kuunda jedwali la muda kwa jina sawa na jedwali la kawaida. Hata hivyo, unapofanya hivyo, jedwali la kawaida linafanyika kwa muda lisionekane.

Mfano wa tatizo

-- 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;

Kadiri jedwali la muda likipo, jedwali la kawaida lenye jina sawa linafichwa, jambo ambalo linaweza kusababisha makosa yasiyotabirika ya upatikanaji wa data.

Suluhisho

  • Tumia kiambishi kama “temp_” kwa majina ya majedwali ya muda
  • Kukubaliana na kanuni ya majina wazi ili kutofautisha majedwali ya muda na ya kawaida
Mfano: Uundaji salama wa jedwali la muda
CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

Manufaa

  • Kutumia kiambishi temp_ huzuia migogoro na jedwali la kawaida users.
  • Hufanya iwe rahisi kutofautisha majedwali katika msimbo wa programu.

6-3. Tahadhari 3: Fahirisi na Vizuizi Havijirithi Kiotomatiki

Tatizo

Ikiwa unaunda jedwali kwa kutumia CREATE TEMPORARY TABLE ... AS SELECT ..., fahirisi na vizuizi kutoka jedwali asili havijirithi, jambo ambalo linaweza kupunguza utendaji.

Mfano wa tatizo

-- 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;

Katika kesi hii, vizuizi vya PRIMARY KEY na UNIQUE havijapitishwa kwa temp_users, jambo ambalo linaweza kupunguza kasi ya utafutaji na kuruhusu data inayojirudia.

Suluhisho

  • Ongeza fahirisi kwa dhahiri baada ya kuunda jedwali la muda
  • Ikiwa unafafanua safu kwa mikono kwa kutumia CREATE TEMPORARY TABLE, taja fahirisi wakati wa uundaji
Mfano: Ongeza fahirisi kwa mikono
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);

Njia hii inakuwezesha kuunda jedwali la muda na fahirisi zinazofanana na jedwali asili.

Muhtasari

Katika sehemu hii, tumeelezea tahadhari tatu muhimu za kutumia majedwali ya muda kwa usalama.

✔ Muhtasari wa haraka

  1. Usitegemeze sana utoaji wa kiotomatiki
  • Futa majedwali ya muda kwa dhahiri kwa kutumia DROP TEMPORARY TABLE
  • Yafute kwa mara kwa mara katika vikao virefu
  1. Epuka migogoro ya majina na jedwali la kawaida
  • Kama jedwali la kawaida lenye jina sawa lipo, jedwali la muda linachukua kipaumbele
  • Tumia kiambishi kama temp_ kutofautisha wazi
  1. Fahirisi na vizuizi havijirithi kiotomatiki
  • Kwa CREATE TEMPORARY TABLE ... AS SELECT ..., fahirisi hupotea
  • Ongeza fahirisi kwa mikono baada ya uundaji

Kwa kuweka haya mawazo akilini, unaweza kutumia majedwali ya muda ya MySQL kwa usalama huku ukiboresha utendaji wa hifadhidata.

7. Maswali 10 Yanayoulizwa Mara kwa Mara (FAQ) Kuhusu Jedwali za Muda ya MySQL

Utangulizi

Katika sehemu hii, tunajibu maswali 10 yanayoulizwa mara kwa mara kuhusu jedwali za muda za MySQL.
Tunashughulikia jinsi zinavyofanya kazi, vikwazo vyazo, masuala ya utendaji, na utatuzi wa matatizo katika hali za vitendo.

7-1. Maswali Kuhusu Maelezo ya Msingi

Q1. Je, jedwali la muda linaweza kufikiwa kutoka kwenye kikao kingine?

A. Hapana, haiwezekani.
Jedwali la muda ni halali tu ndani ya kikao kilicholiunda na haliwezi kufikiwa kutoka kwenye vikao vingine.

-- 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;

Hitilafu:

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

Kama unahitaji kushiriki data kati ya vikao, lazima utumie jedwali la kawaida.

Q2. Je, jedwali la muda huhifadhiwa kwenye diski?

A. Kwa kawaida huhifadhiwa katika kumbukumbu, lakini inaweza kuhamia kwenye diski chini ya hali fulani.
Kama ukubwa wa jedwali unazidi tmp_table_size au max_heap_table_size, MySQL inaweza kuunda jedwali la muda kwenye diski kwa kutumia InnoDB au MyISAM.

SHOW VARIABLES LIKE 'tmp_table_size';

Ili kuboresha utendaji, sanidi tmp_table_size ipasavyo.

Q3. Je, naweza kuunda faharasa kwenye jedwali la muda?

A. Ndiyo, unaweza.
Unaweza kufafanua PRIMARY KEY au INDEX kama ilivyo kwenye jedwali la kawaida.

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);

Hata hivyo, ikiwa utatumia CREATE TEMPORARY TABLE ... AS SELECT ..., faharasa hazirithiwi, hivyo lazima uziweke mwenyewe.

7-2. Maswali Kuhusu Utendaji na Tabia

Q4. Je, kuna mabadiliko kwenye jedwali la muda katika MySQL 8.0?

A. MySQL 8.0 ilileta Maelezo ya Jedwali ya Pamoja (CTEs) kwa kutumia kifungu WITH.
Kuanzia MySQL 8.0 na kuendelea, unaweza kushughulikia seti za matokeo ya muda kwa kutumia CTEs bila kuunda jedwali la muda waziwazi.

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

Kutumia CTEs badala ya jedwali la muda kunaweza kurahisisha maswali na kupunguza matumizi ya kumbukumbu.

Q5. Ni tofauti gani kati ya jedwali la muda na jedwali la MEMORY?

A. Jedwali la MEMORY linaendelea baada ya kikao, wakati jedwali la muda halifanyi.
Jedwali la muda huondolewa wakati kikao kinamalizika, wakati jedwali la MEMORY linaendelea hadi seva ianze upya (au litakuliwa waziwazi).

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

Ni lini kutumia kila moja?

  • Jedwali la muda: Usindikaji wa muda mfupi, unaohusishwa na kikao
  • Jedwali la MEMORY: Ufikiaji wa kasi ya juu na uthabiti wa ngazi ya seva

7-3. Maswali Kuhusu Ufutaji na Utatuzi wa Tatizo

Q6. Je, naweza kufuta jedwali la muda kwa kutumia DROP TABLE?

A. Hapana, lazima utumie DROP TEMPORARY TABLE.
Daima tumia DROP TEMPORARY TABLE unapofuta jedwali la muda.

DROP TEMPORARY TABLE temp_users;

Kutumia DROP TABLE ya kawaida kunaweza kusababisha hitilafu.

Q7. Kwa nini SHOW TABLES haionyeshi jedwali la muda?

A. Jedwali la muda halijatajwa na SHOW TABLES.
Ili kuangalia kuwepo kwake, uliza INFORMATION_SCHEMA.

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

Kama hakuna matokeo yanayotolewa, jedwali la muda huenda tayari limefutwa.

Muhtasari

Katika sehemu hii, tulijifunza maswali 10 yanayoulizwa mara kwa mara kuhusu jedwali la muda za MySQL.

✔ Muhtasari wa Haraka

  1. Jedwali za muda haviwezi kufikiwa kutoka vikao vingine
  2. Zinatengenezwa katika kumbukumbu lakini zinaweza kuhamia kwenye diski ikiwa kubwa
  3. Faharasa lazima zifafanuliwe kwa mikono ikiwa unatumia AS SELECT
  4. CTE (WITH) zinapatikana katika MySQL 8.0+
  5. Kinyume na jedwali la MEMORY, jedwali za muda hutoweka mwishoni mwa kikao
  6. Tumia DROP TEMPORARY TABLE kuzijitoa
  7. SHOW TABLES haionyeshi jedwali za muda

8. Muhtasari: Vidokezo Muhimu vya Kutumia Jedwali za Muda za MySQL Kwa Ufanisi

Utangulizi

Jedwali za muda za MySQL ni zana yenye nguvu ya kuhifadhi data ya kati na kuboresha utendaji wa maswali.
Hapa, tunajumuisha vidokezo muhimu vilivyojadiliwa katika mwongozo huu.

8-1. Dhana za Msingi za Jedwali za Muda za MySQL

Je, jedwali la muda ni nini?

  • Inapatikana kwa uhuru kwa kila kikao
  • Huondolewa kiotomatiki wakati kikao kinamalizika
  • Inasaidia INSERT, UPDATE, na DELETE kama jedwali la kawaida

Sarufi ya uundaji wa msingi

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

Matumizi Makuu

  • Uhifadhi wa data ya muda
  • Uboreshaji wa utendaji wa maswali
  • Jedwali za kati kwa usindikaji wa kundi
  • Usimamizi wa data ya muda kwa kila mtumiaji

8-2. Faida za Jedwali za Muda

1) Boresha utendaji wa maswali

  • Punguza mzigo wa JOIN
  • Fanya muungano mapema kupunguza mahesabu yanayojirudia
  • Rahisisha maswali kwa kuondoa data isiyo ya lazima
Mfano: Punguza mzigo wa 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) Uhifadhi wa muda na usimamizi kulingana na kikao

  • Huondolewa kiotomatiki mwishoni mwa kikao
  • Inafaa kwa uhifadhi wa data wa muda mfupi
  • Ushughulikiaji wa data huru bila kuathiri vikao vingine
Mfano: Uhifadhi wa muda wa matokeo ya utafutaji
CREATE TEMPORARY TABLE temp_search_results AS
SELECT * FROM products WHERE category = 'electronics';

SELECT * FROM temp_search_results;

3) Usasishaji salama wa data

  • Inafaa kama jedwali la kati katika usindikaji wa kundi
  • Inaweza kutumika kama nakala ya akiba wakati wa usasishaji wa data
  • Inafaa kwa kuunda seti za data za majaribio
Mfano: Usasishaji salama wa data
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. Hasara na Tahadhari

1) Data hutoweka wakati kikao kinamalizika

  • Haifai kwa uhifadhi wa kudumu
  • Tumia jedwali la kawaida kwa uhifadhi wa muda mrefu

2) Haiwezi kushirikiwa kati ya vikao

  • Haiwezi kufikiwa kutoka miunganisho mingine
  • Tumia jedwali la kawaida wakati wa kushiriki data kati ya watumiaji

3) Faharasa na vikwazo havirithiwi kiotomatiki

  • CREATE TEMPORARY TABLE ... AS SELECT ... haina faharasa
  • Ongeza faharasa kwa mikono ikiwa inahitajika
    ALTER TABLE temp_users ADD INDEX idx_email (email);
    

8-4. Mazoea Mazuri ya Matumizi Salama

Futa waziwazi wakati haujahitajika tena

DROP TEMPORARY TABLE IF EXISTS temp_users;

Epuka migongano ya majina na jedwali la kawaida

  • Tumia kiambishi awali temp_
    CREATE TEMPORARY TABLE temp_users (...);
    

Buni kwa kuzingatia utendaji

  • Kama jedwali linakua kubwa na kuhamia kwenye diski, fikiria kurekebisha tmp_table_size
    SHOW VARIABLES LIKE 'tmp_table_size';
    

8-5. Jedwali za Muda vs Mbadala (Mionekano na CTEs)

Pia ni muhimu kuzingatia wakati wa kutumia jedwali za muda ikilinganishwa na mionekano (VIEW) au CTEs (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

Muhtasari

Katika mwongozo huu, tumeshughulikia vipengele vyote muhimu vya jedwali za muda za MySQL.

✔ Muhtasari wa Haraka

  • Jedwali za muda huondolewa kiotomatiki wakati kikao kinamalizika
  • Zinasaidia kuboresha utendaji kwa kupunguza mzigo wa JOIN na muungano
  • Ni muhimu kwa usindikaji wa batch, matokeo ya utafutaji ya muda, na data ya majaribio
  • Haiwezi kushirikiwa kati ya vikao, na faharasa lazima ziweze kuongezwa kwa mkono inapohitajika
  • Kuchagua kati ya jedwali za muda, maoni, na CTEs kunaruhusu usimamizi wa data unaobadilika

Umekamilisha sasa sehemu zote za mwongozo wa jedwali za muda la MySQL! 🎉
Tumia rejea hii kutumia jedwali za muda kwa ufanisi katika miradi yako ya MySQL.