MySQL-தகவல்களை சேமித்தல்

பாகம்: 3

MySQL-தகவல்களைசேமித்தல்

இந்தப் பாகத்தில் அடிப்படை SQL மற்றும் MySQL commands -ஐப் பயன்படுத்தி எவ்வாறு data-வை table-க்குள் செலுத்துவது என்று பார்க்கலாம். ஆனால் programs வழியாக data-வை table-க்குள் செலுத்துவது பற்றி இப்போது அறிந்து கொள்ளத் தேவையில்லை. அதைப் பற்றி பின்னர் பார்க்கலாம்.

Data-வைtable-க்குள்செலுத்துதல்:-

INSERT table_name (list, of, columns)

VALUES (list, of, values);

INSERT book (title, author, cond)

VALUES (‘Where the Wild Things Are’,’Maurice Sendak’,

‘fine’);

Insert command மூலமாக table-க்குள் ஒன்று அல்லது அதற்கு மேற்பட்ட rows-ஐ நுழைக்கலாம். இந்த command-ன் syntax பின்வருமாறு விளக்கப்படுகிறது.

  • Insert – இதுதான் command-ன் தொடக்கம்.

  • table_name – நாம் data-வை எந்த table-க்குள் நுழைக்கவேண்டுமோ அந்த table-ன் பெயர்.

  • (list,of,columns….) – எந்தெந்த column-ல் data வை செலுத்த வேண்டுமோ அந்த columns-ஐ ஒன்றன் பின் ஒன்றாக parenthesis-க்குள் கொடுக்க வேண்டும். இதற்குள் கொடுக்கப்படாத columns ஒரு row உருவாக்கப்படும் போது default மதிப்புகளைப் பெற்றுவிடும்.

  • values – இந்த command மூலம் MySQL இதன் தொடர்ச்சியாக ஒரு சில மதிப்புகள் வரப் போகின்றன என்று தெரிந்து கொள்ளும்.

  • (list, of, values,….) – எந்தெந்த மதிப்புகள் column-ல் கொடுக்கப்பட வேண்டுமோ, அந்த மதிப்புகளை ஒன்றன் பின் ஒன்றாக ஒரு parenthesis -க்குள் கொடுக்க வேண்டும்.

ஒரேquery-ல்பலrows-நுழைத்தல்:-

INSERT book (author, title, cond)

VALUES

(‘Maurice Sendak’,

‘In the Night Kitchen’,’mint’),

(‘Caroll Spinney’,’How to Be a Grouch’,’poor’),

(‘Dr. Seuss’, ‘Green Eggs and Ham’, ‘good’);

ஒவ்வொரு row insert செய்யப்படும்போதும், ஒரு தனி query எழுதுவதற்கு பதிலாக, எத்தனை rows insert செய்யப்பட வேண்டுமோ, அதனை rows -ஐயும் ஒரு தனித்தனி parenthesis-க்குள் எழுதி, அந்த parenthesis-ஐ comma-ஆல் வேறுபடுத்திக் காட்டுவதன் மூலம் ஒரே query-ல் பல rows-ஐ insert செய்யலாம்.

Auto-increment மூலம்தனித்தனிrow எண்களைஉருவாக்கல்:-

CREATE TABLE table (

column INT AUTO_INCREMENT,

);

Auto-increment என்று அமைக்கப்படும் column -ஆனது, அந்த table-ல் ஒவ்வொரு முறை rows insert செய்யப்படும்போதும், அதற்கான வரிசை எண்களை அந்த column-ல் தானாகவே  உருவாக்கும்.

நீங்கள் ஒரு row -வை insert செய்யும் போது, auto-increment என்று இருக்கும் column-க்கு ஏதேனும் ஒரு மதிப்பினைக் கொடுத்தீர்களானால், அந்த column அந்த மதிப்பினைப் பெற்றுவிடும். அப்படி இல்லையெனில், அந்த column தானாகவே ஒன்றன்பின் ஒன்றாக இருக்கும் தொடர்ச்சியான எண்களால் நிரப்பப்படும்.

ஒரு row -ஆனது insert செய்யப்படும்போது, auto-increment column-க்கு எந்த ஒரு மதிப்பும் கொடுக்காவிட்டாலும் அல்லது NULL எனும் மதிப்பினைக் கொடுத்தாலும் அது ஒன்றாகவே கருதும். இதைப் பின்வரும் எடுத்துக்காட்டில் காணலாம்.

CREATE TEMPORARY TABLE demo (

id INT NOT NULL AUTO_INCREMENT,

PRIMARY KEY (id)

);

INSERT demo () VALUES ();

SELECT id FROM demo; # id contains 1

INSERT demo (id) VALUES (NULL);

SELECT id FROM demo; # id contains 1 and 2

INSERT demo (id) VALUES (4);

SELECT id FROM demo; # id contains 1, 2 and 4

INSERT demo (id) VALUES (NULL);

SELECT id FROM demo; # id contains 1, 2, 4

and 5

ஒரு table-ல் ஒரே ஒரு AUTO-INCREMENT column தான்  இருக்கும் மற்றும் அது primary key-ன் ஓர் அங்கமாகவும் இருக்கும் என்பதை நினைவில் கொள்க.

ஒரு row-வை நாம் delete செய்யும்போது auto-increment column-ல் இருக்கும் தொடர்ச்சியான எண்களுக்கு இடையில் ஓர் இடைவெளி ஏற்படும். இந்த இடைவெளி பார்ப்பதற்கு வித்தியாசமாக இருந்தாலும், தொடர்ச்சியான எண்களை அடுத்தடுத்த rows-க்கு பயன்படுத்தாமல் இருப்பது, அந்த data-வின் நிலைப்புத்தன்மையை உறுதிபடுத்தும்.

MySQL function –ஐப்பயன்படுத்திதற்போதையDate மற்றும்Time –insert செய்தல்:-

INSERT some_table (some_column) VALUES (NOW ());

மேலே இருக்கும் SQL-ல் பயன்படுத்தப்பட்டுள்ள Now ()-எனும் function தற்போதைய date மற்றும் time-ஐ கொடுக்கப்பட்டுள்ள column-ல் insert செய்யப்பயன்படும்.

Now() எனும் function, call செய்யப்படும்போது அதன் MySQL server எந்த machine-ல் ஓடிக்கொண்டிருக்கிறதோ, அந்த machine-ன் date மற்றும் time-ஐ return செய்யும். பொதுவாக இந்த function return செய்யும் text-ஆனது தேவையான இடைவெளி மற்றும் punctuation-ஐப் பெற்று நாம் சுலபமாக படிக்கும் வகையில் அமையும்.

ஒருfile-ல் இருந்துSQL commands-load செய்தல்:-

shell> mysql -u username -p db_name < file_name.sql

mysql> \. file_name.sql

நாம் பார்த்த பெரும்பாலான SQL commands நேரடியாக MySQL command line -ல் run செய்யப்பட்டவை. இப்போது இந்த commands-ஐ எல்லாம் ஒரு புதிய text file-ல் சேமித்து வைத்துக் கொண்டு, அதனை எவ்வாறு MySQL (அல்லது வேறு ஏதாவது client) மூலமாக run செய்யலாம் என்று பார்க்கலாம்.

மேலே கொடுக்கப்பட்டுள்ள முதல் உதாரணத்தில், command line -ல் MySQL-ஆனது batch mode-ல் run செய்யப்படுகிறது. Batch mode எனில் இந்த MySQL ஒன்று அல்லது அதற்கு மேற்பட்ட commands -ஐ run செய்து, அதற்குரிய output-ஐ கொடுத்து வெளியேறிவிடும். இதனை விளக்கமாக பின்வருமாறு காணலாம்.

1. shell> prompt -ல் MySQL server-ஐ கொடுக்கப்பட்டுள்ள username-ஐ வைத்து connect செய்யவும்.
2. பின் அதனுடன் authenticate செய்வதற்கான password prompt-ஐ அமைக்கவும்.
3. db_name என்பது default database அமைக்கப்படுவதைக் காட்டுகிறது
4. பின் commands அடங்கியுள்ள file_name.sql எனும் file-ஐ server-க்கு அனுப்பவும்.
5. அடுத்தபடியாக, இந்த commands execute செய்யப்பட்டு அதன் results தெரிவிக்கப்படும்.

6. கடைசியாக exit செய்யப்படும்.

அடுத்ததாக கொடுக்கப்பட்டிருக்கும் உதாரணத்தில், MySQL command line ஏற்கனவே பயன்பாட்டில் உள்ளதைக் காணலாம். எனவே கொடுக்கப்பட்டுள்ள file_name.sql எனும் file client-ஆல் read செய்யப்பட்டு server-க்கு அனுப்பப்படும்.

ஒருtable-ல்மற்றொருtable-ல் இருந்துஎடுக்கும்data-வைinsert செய்தல்:-

INSERT table_one (list, of, columns) SELECT …;

Insert command-ஆனது select command-வுடன் ஒன்றாக இணைந்து ஒரு

table-ல் இருந்து copy செய்யப்படும் rows-ஐ மற்றொரு table-க்குள் insert செய்யப் பயன்படுகிறது.

இந்த INSERT—-SELECT command-க்கான syntax மிகவும் சுலபமானது. Insert command-ன் முதல் பகுதியை (VALUES clause வரை) Select command-வுடன் இணைக்க வேண்டும்

இதில் Insert command-ல் இருக்கும் ஒவ்வொரு column-க்கும், select statement-ல் இருந்து ஒரு column, return செய்யப்படுகிறதா என்பதை உறுதி செய்து கொள்ளவும்.

Text files-லிருந்துதகவல்களைimport செய்தல்:-

LOAD DATA INFILE ‘some_file.txt’

INTO TABLE ‘some_table’ (list, of, columns, …);

Data-வை பிற applications-லிருந்து MySQL-க்கு import செய்யும்போது, முதலில் அந்த data-வை ஒழுங்குபடுத்தப்பட்ட text format ஆக மாற்றி (Eg: tab-separated values) அதன்பின் MySQL-ல் import செய்ய வேண்டும்.

இவ்வாறு அல்லாமல் அந்த data-வை ஒரு set of SQL queries-ஆக மாற்றி அதன் பின்னரும் import செய்யலாம். ஆனால் இவ்வாறு செய்வது, அதிக நேரம் பிடிக்கக்கூடியதாகவும், மிகுதியான தவறுகளுக்கு நம்மை உட்படுத்தக்கூடியதாகவும் இருக்கும்.

எனவே LOAD DATA INFILE எனும் command, text files-ல் இருக்கும் வடிவமைக்கப்பட்ட data-வை MySQL-க்குள் செலுத்தப் பயன்படும் ஒரு எளிமையான வழியாகும்.

இந்த text file-க்குள் இருக்கும் data-வின் ஒவ்வொரு field-ம் ஒரு tab-ஆலும், ஒவ்வொரு row-ம் ஒரு புதிய line-ஆலும் ஒழுங்குபடுத்தப்பட்டிருக்கும். இந்த LOAD DATA INFILE எனும் command இத்தகைய ஒழுங்குபடுத்தப்பட்ட file-ஐ எவ்வாறு import செய்வது என்பதை தானாகவே புரிந்துகொள்ளும் வகையில் இருக்கும். file-ல் இருக்கும் ஒவ்வொரு row-ம் இந்த command-ஆல் read செய்யப்பட்டு பின்னர் அதற்குரிய table-ல் column mapping-ஐ பயன்படுத்தி அந்த row செலுத்தப்படும்.

உதாரணத்துக்கு /users/zak/books_and_authors.txt எனும் இடத்தில் சேமித்துவைக்கப்பட்டுள்ள பின்வரும் சாரத்தை உள்ளடக்கிய இந்த file எவ்வாறு book எனும் table-க்கு மாற்றப்படுகிறது என்று பார்க்கலாம்.

Where the Wild Things Are Maurice Sendak fine

Cigars of the Pharoah Herge good

… … …

இதனை upload செய்வதற்கான command பின்வருமாறு அமையும்.

USE library;

LOAD DATA INFILE ‘/Users/zak/books_and_authors.txt’

INTO TABLE book (title, author, cond);

இந்த command, run செய்யப்பட்ட பின்னர், book எனும் table-ல் பின்வருமாறு rows இணைக்கப்பட்டிருக்கும்.

+———+—————+—————-+——+

| book_id | title | author | cond |

+———+—————+—————-+——+

| 5 | Cigars of … | Herge | good |

| 6 | Where the … | Maurice Sendak | fine |

| 7 | … | … | … |

+———+—————+—————-+——+

LOAD DATA INFILE எனும் command-ல் பின்வருவனவற்றை கவனிக்கவும்.

  • MySQL server இயங்கும் அதே machine-ல் datafile இருக்க வேண்டும்.

  • Data load செய்யப்படவேண்டிய file-ஐ குறிப்பிடும்போது அதன் பெயரை மட்டும் குறிப்பிடாமல் அதன் முழு path-ஐயும் குறிப்பிட வேண்டும். இல்லையெனில், இந்த MySQL server குறிப்பிட்ட path-ல் தேடாமல், வேறு எங்காவது அதன் data directory-ல் தேடிக்கொண்டிருக்கும்

  • Windows systems-ல் கூட நீங்கள் backslash-க்கு பதிலாக forward slash-ஐ பயன்படுத்தி path-ஐ குறிப்பிடலாம். உதாரணத்துக்கு unix-style path (‘/Users/zak/books_and_authors.txt’) என்று குறிப்பிடப்படுகிறது என்றால், அது windows-ல் ‘C:/Desktop/book_and_authors.txt’ என்று குறிப்பிடப்படும். இங்கு நீங்கள் backslash-ஐ பயன்படுத்தினால் அது character escape sequences-ஆக interpret செய்யப்படும்.

மேலும் பின்வரும் குறிப்புகள், இந்த load data infile -ன் பயன்பாட்டை இன்னும் சுலபமாக அமைக்கும்.

இந்த command-ன் output ஒரு warning அல்லது error-வுடன் வருகிறது எனில்(eg: Query OK, 3 rows affected, 1 warning (0.01 sec)), SHOW WARNINGS அல்லது SHOW ERRORS எனும் command-ஐப் பயன்படுத்தி அது எவ்வகையான பிரச்சனைகளைக் கொண்டுள்ளது என்று பார்க்கலாம்.
நீங்கள் அமைத்துள்ள LOAD DATA INFILE சரியாக இயங்குகிறதா என்பதை சரிபார்க்க, உண்மையான table-ஐப் போலவே ஒரு temporary table-ஐ தற்காலிகமாக உருவாக்கி, அதில் சிறிதளவு data-வை load செய்து பார்க்கலாம். இது பின்வருமாறு அமையும்.

USE library;

# Create a temp table like your real table

CREATE TEMPORARY TABLE book_temp LIKE book;

# load in part of your data

LOAD DATA INFILE

‘/Users/zak/books_and_authors.txt’

INTO TABLE book_temp (title, author, cond)

IGNORE 195 LINES;

# ignore the first 195 lines

SELECT * FROM book_temp;

# see if things look ok

இந்த command நீங்கள் எவ்வாறு data-வை import செய்ய வேண்டும், எந்த format-ல் அது இருக்க வேண்டும் மற்றும் எவ்வளவு rows செலுத்தப்பட வேண்டும் என்பதை விளக்கும் வகையில் பல options-களைப் பெற்றிருக்கும்.

விரைவாகதகவல்களைinsert செய்தல்:-

நீங்கள் ஒரு table-ல் தொடர்ந்து பலமுறை data-வை insert செய்யும்போது ஏற்படும் performance பிரச்சனைகளைத் தீர்க்க பின்வரும் வழிவகைகளைக் கையாளலாம்.
முதலில் அனைத்து rows -ம் ஒரே முறையில் insert செய்யப்பட வேண்டுமா அல்லது ஒவ்வொன்றாக insert செய்யப்பட வேண்டுமா என்பதைப் பொருத்து வெவ்வேறு முறைகள் பின்பற்றப்படுகின்றன.

1. ஒரே முறையில் பல rows -ஐ நுழைத்தல் :-

முதலாவதாக ஒரே முறையில், நிறைய rows, insert செய்யப்படுவதற்கான வழிவகைகளைப் பின்வருமாறு காணலாம்.

  • Load data infile ஐப் பயன்படுத்தலாம். இதன் மூலம் client மற்றும் serverஆனது table-ல் insert செய்யப்படவேண்டிய data-வை உருவாக்குவதற்காக எடுத்துக்கொள்ளப்படும் நேரம் குறைக்கப்பட்டு அதன் performance அதிகரிக்கப்படுகிறது.

  • Alter table command-ஐப் பயன்படுத்தி, index உருவாதலை தற்காலிகமாக disable செய்து வைக்கலாம். இது data அனைத்தும் insert செய்யப்பட்ட பின்னர் ஒரே ஒரு படியில் table indexes -ஐ உருவாக்குவதற்கு வழிவகை செய்யும். எடுத்துக்காட்டு:

ALTER TABLE table_name DISABLE KEYS;

# Many INSERT statements here

ALTER TABLE table_name ENABLE KEYS;

  • MyISAM tables-ல் data insert செய்யப்படும்போது table -ஐ lock செய்து விடவும். இது அந்த data அதே நேரத்தில் table -லிலிருந்து read செய்யப்படுவதைத் தவிர்த்து அதனால் ஏற்படும் performance இழப்பைக் குறைக்கிறது. இதற்கான code பின்வருமாறு அமையும்

LOCK TABLES table_name WRITE;

# Many INSERT statements here

UNLOCK TABLES;

  • InnoDB tables-ல் நமது அனைத்து Insert statement -ஐயும் ஒரு transaction-க்குள் அமைத்து, அதைப்  பின்வருமாறு run செய்யலாம்.

BEGIN;

# Many INSERT statements here

COMMIT;

  • Mutivalue Insert-ஐப் பயன்படுத்தலாம். இதன் மூலம் client மற்றும் server, table-ல் data, insert செய்யப்படுவதற்கு முன்னர் query-யை process செய்வதற்கு செய்யும் வேலையைக் குறைக்கப் பயன்படுகிறது. இதைப்பற்றி ஏற்கனவே”ஒரே query-ல் பல rows-ஐ insert செய்தல்” எனும் தலைப்பில் பார்த்துள்ளோம்.

2. பல reads மூலம் பல rows -ஐ insert செய்வதற்கான வழிவகைகளைப் பின்வருமாறு காணலாம்.

  • MyISAM tables-ல் Delay_Key_Write option -ஐ enable செய்யவும். இது tables-ன் index-ல் புதிய entries உருவாக்கப்படும்போது, MySQL ஏற்படுத்த வேண்டிய disk writes-ஐ குறைக்கப் பயன்படுகிறது. இதனை நீங்கள் Alter table command-ஐப் பயன்படுத்தி பின்வருமாறு செய்யலாம்.

ALTER TABLE table_name DELAY_KEY_WRITE = 1;

  • InnoDB tables-ஐப் பயன்படுத்தவும். இது ஒரே நேரத்தில் பலவகையான reads மற்றும் writes-ஐ MyISAM tables-ஐ விட திறமையாகக் கையாளும்.

  • Read செய்யும் table-லிலேயே write செய்ய வேண்டாம். மாறாக writes-ஐ கையாளுவதற்கு ஒரு table-ஐ உருவாக்கி பின்னர் write table-ல் இருக்கும் rows-ஐ read table-க்கு ஒரு குறிப்பிட்ட இடைவெளியில் merge செய்யவும். இதில் performance-ஐ அதிகரிக்க, முன்னர் குறிப்பிட்ட bulk insert tips-ஐப் பயன்படுத்தலாம்.

%d bloggers like this: