Wednesday, January 28, 2009

எளிய தமிழில் SQL - பாகம் 6

DQL: SELECT
DML: DELETE, INSERT, UPDATE
DDL: CREATE, DROP, TRUNCATE, ALTER
TCL: COMMIT, ROLLBACK, SAVEPOINT
DCL: GRANT, REVOKE

மேலே சில கட்டளைகளை (Commands)கொடுத்துள்ளேன். இந்தக் கட்டளைகள் மூலம் Databaseஐ நாம் நமது கட்டுப்பாட்டுக்குள் கொண்டு வரலாம்.

DQL என்பது Data Query Language. ஒரு Databaseன் Tableல் ஏற்கனவே நாம் பதிந்துவைத்துள்ள தகவல்களை தேடி எடுப்பதற்கு. உதாரணமாக 1000 rows இருப்பதாகக் கொள்வோம். அதில் குறிப்பிட்ட சில rows மட்டும் நமக்குத் தேவையெனில் அவற்றை மட்டும் தேடி எடுக்க DQL . இதற்காக SELECT என்கிற கட்டளை பயன்படும்.

DML என்பது Data Manipulation Language. ஏற்கனவே பதிந்துவைத்திருக்கும் தகவல்களில் மாற்றங்களை ஏற்படுத்த, அழிக்க, உருவாக்க. (தகவல்களைத் தான் மாற்றுகிறதே ஒழிய ஒரு Tableன் Structureல் எந்த மாற்றமும் நிகழாது).

DDL என்பது Data Definition Language. புதிய Database (அ) Table போன்றவற்றை உருவாக்க. அதாவது Tableன் Structure ஐ உருவாக்க, ஒட்டுமொத்த Table ஐயுமே அழிக்க, மாற்றங்கள் செய்ய. ஒரு குறிப்பிட்ட Column ன் Data Type ஐ மாற்ற.புதிய Column ஐ உருவாக்க, தேவையற்ற Column இருப்பின் அதை நீக்க.

TCL என்றால் Transaction Control Language. ஒரு நிரலை இயக்கும்போது ஏதேனும் பிழைகள் ஏற்பட்டால், பிழை ஏற்படுவதற்கு முன்னர் வரை ஏதேனும் மாற்றங்கள் நிகழ்ந்திருந்தால் அவையனைத்தையும் நிராகரித்து முந்தைய நிலைக்குக் கொண்டு செல்வதற்கு.

TCL பற்றி சிறிது விளக்கமாகப் பார்ப்போம்.

உதாரணமாக ஒன்றுக்கு மேற்பட்ட Database அல்லது Tableகளில் நாம் ஒரு குறிப்பிட்ட Program ஐ இயக்குவதாகக் கொள்வோம். ஒரு Tableல் உள்ள ஒரு மதிப்பைக் கழித்து (முதலாவது செயல்), அடுத்த Tableல் உள்ள ஒரு குறிப்பிட்ட மதிப்புடன் கூட்டச் செய்ய(இரண்டாவது செயல்) முயற்சிக்கிறோம்.

முதல் செயல் நல்லபடியாக நிறைவுற்றுவிடுகிறது. ஆனால் இரண்டாவது செயல் நிறைவேறுவதற்கு முன்னர் ஏதேனும் தொழில்நுட்பக் கோளாறு நிகழ்ந்தால் என்ன ஆகும்?

முதலாவது Tableல் அந்த மதிப்பு கழிக்கப்பட்டு இருக்கும். ஆனால் கோளாறு காரணமாக இரண்டாவது Tableல் அந்த மதிப்பு கூட்டப்பட்டு இருக்காது.

அப்படியெனில் இதை ஒரு சரியான நிகழ்வாக ஏற்றுக்கொள்ளக் கூடாது. முதலில் கழிக்கப்பட்ட மதிப்பை reverse செய்து , தலைகீழாக மீண்டும் பழைய நிலைக்குக் கொண்டுவந்துவிட வேண்டும். அப்போதுதான் முறையான நிகழ்வு.

நல்ல உதாரணம் ஒன்று:

உங்களது வங்கியின் ATM அட்டையை, ATM இயந்திரத்தில் செருகி பணம் எடுக்க முயற்சிக்கிறீர்கள். எத்தனை ரூபாய் பணம் என்பதையும் தட்டிவிட்டீர்கள். இயந்திரமானது பணத்தை எண்ணிக்கொண்டிருக்கும் சத்தம் கேட்கிறது. திடீரென்று கோளாறு. Battery down - Power Cut. ஏதோ ஒரு கோளாறு. என்ன ஆகும்?

பணம் உங்கள் கைக்கு வராது.

உங்கள் வங்கிக்கணக்கிலிருந்து பணம் எடுக்கப்பட்டுக் கழிக்கப்பட்டு இருக்கும். ஆனால் உங்கள் கைக்குப் பணம் வந்திருக்காது. இப்படியே விட்டுவிட்டால் முறையாகுமா?

இந்த மாதிரி இக்கட்டான சமயத்தில் உதவுவதுதான் Transaction Control. TCL ன் பணி என்னவென்றால் ஏதேனும் பிழை ஏற்பட்டிருக்கும்போது அதைத் தலைகீழாக ஆக்கி, reverse செய்து (Undo) ஒட்டுமொத்த செயல்களையும் பழைய நிலைக்கு ஆக்குவதே.

TCL இருப்பதால் உங்கள் வங்கிக்கணக்கிலிருந்து கழிக்கப்பட்ட பணமானது, இயந்திரக்கோளாறு ஏற்பட்ட உடனேயே, தலைகீழ் இயக்கத்தால் திரும்ப உங்கள் accountல் சேர்க்கப்பட்டுவிடும்.

(இது எனக்கு இரண்டுமுறை நடந்து இருக்கிறது. கடந்த 3 ஆண்டுகளில் இரண்டுமுறை இந்த TCL இயக்கத்தால் பணம் பரிபோகாமல் தப்பித்தது.)


1) எந்தப் பிழையும் நிகழாமல் இருக்கும்போது ஒட்டுமொத்த நிரலும் நல்லபிள்ளையாக இயங்கி பரிவர்த்தனையை ஒழுங்காக நிறைவு செய்யும்.

2) ஏதேனும் பிழை ஏற்பட்டால் உடனே நிரலானது தனது இயக்கத்தை நிறுத்திவிட்டு, அதுவரை செய்யப்பட்ட இயக்கத்தை reverse செய்து தகவல் இழப்பைத் தடுத்துவிடுகிறது.

முந்தைய பாடத்தில் Authorization பற்றிப் பார்த்தோம். ஒரு குறிப்பிட்ட பயனாளருக்கு ஒரு Databaseஐப் பார்வையிட மட்டும் அனுமதிக்க DCL உதவும்.

DCL என்றால் Data Control Language. ஒரு குறிப்பிட்ட பயனர் உருவாக்கிய Database,Table களின் உரிமங்களை அடுத்த பயனாளருக்கு விட்டுத்தருவதற்கு. அல்லது அடுத்தவருக்கு விட்டுத்தந்த சலுகைகளை நிராகரிப்பதற்கு.

GRANT என்றால் சலுகைகளை வழங்குவது. உரிமங்களை வழங்குவதற்கு.

REVOKE என்றால் கொடுத்த சலுகைகளை / உரிமைகளைத் திரும்பப் பெருவதற்கு.

DROP என்பது ஒட்டுமொத்த Database (அ) Table ஐ அழிப்பதற்கு (தகவலும், Structureம் அழிந்துவிடும்).

TRUNCATE என்பது தகவல்களை மட்டும் அழிப்பதற்கு (Structure அழியாது).

SELECT பதியப்பட்ட தகவல்களைத் தேடித் தருவதற்கு

INSERT புதிய rowவை உருவாக்க
UPDATE பழைய rowன் தகவலை மாற்றுவதற்கு
DELETE பதிந்திருக்கும் row / rows ஐ அழிப்பதற்கு

CREATE புதிய Database / Table ஐ உருவாக்க

2 comments:

Unknown said...

இவ்வளவு ஈஸியா விளக்குவீங்கனு கொஞ்சம்கூட எதிர்பார்க்கல தலைவா... சூப்பரோ சூப்பர். டவுட் வந்தா எத்தனை மணியானாலும் போன்போடுவேன். என்ன சரியா...?

Tech Shankar said...

லார்டு லபக் தாசு ரேஞ்சுக்கு மட்டும் வேணாங்க.

// இவ்வளவு ஈஸியா விளக்குவீங்கனு கொஞ்சம்கூட எதிர்பார்க்கல தலைவா... சூப்பரோ சூப்பர். டவுட் வந்தா எத்தனை மணியானாலும் போன்போடுவேன். என்ன சரியா...?

எளிய தமிழில் SQL - பாகம் 17

பாகம் 15ல் திரு G. ராஜாராமன், சவுதி அரேபியா அவர்கள் கீழ்க்கண்ட கேள்வியை எழுப்பி இருந்தார். அவருக்கு விடையளிக்கும் விதமாக இந்தப்பதிவு அமைகிற...