![]() |
| Članak na Engleskom je ovde - http://linuxgazette.net/issue67/tag/16.html Pitanje – hteo bih videti članak o osnovnim komandama MySQL-a, nešto korisno. Majkov odgovor – evo nekih osnovnih komandi. Šta je za tebe korisno? Pitanje – vidim da mnogi članci nemaju osnove korišćenja/administracije, pa bi bilo korisna kombinacija ovoga. Majkov odgovor – komanda *myslq* je trvoj prijatelj za pretragu baze, pravljenje i editovanje tabela, testiranje ideaj pre ugradnje u kod. Evo primera na data bazi *test* koja dolazi sa MySQL-om. Prvo vidimo imena tabela, zatim strukturu TEAM tabele, pa brojimo koliko ima rekorda, i na kraju pokazujemo neka polja. $ mysql test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1325 to server version: 3.23.35-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer mysql> show tables; +------------------+ | Tables_in_test | +------------------+ | COLORS | | TEAM | +------------------+ 2 rows in set (0.00 sec) mysql> describe TEAM; +------------+---------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+---------------+------+-----+---------+----------------+ | MEMBER_ID | int(11) | | PRI | NULL | auto_increment | | FIRST_NAME | varchar(32) | | | | | | LAST_NAME | varchar(32) | | | | | | REMARK | varchar(64) | | | | | | FAV_COLOR | varchar(32) | | MUL | | | | LAST_DATE | timestamp(14) | YES | MUL | NULL | | | OPEN_DATE | timestamp(14) | YES | MUL | NULL | | +------------+---------------+------+-----+---------+----------------+ 7 rows in set (0.00 sec) mysql> select count(*) from TEAM; +----------+ | count(*) | +----------+ | 4 | +----------+ 1 row in set (0.00 sec) mysql> select MEMBER_ID, REMARK, LAST_DATE from TEAM; +-----------+-----------------+----------------+ | MEMBER_ID | REMARK | LAST_DATE | +-----------+-----------------+----------------+ | 1 | Techno Needy | 20000508105403 | | 2 | Meticulous Nick | 20000508105403 | | 3 | The Data Diva | 20000508105403 | | 4 | The Logic Bunny | 20000508105403 | +-----------+-----------------+----------------+ 4 rows in set (0.01 sec)Recimo da smo zaboravili puno ime Diva osobe. mysql> select MEMBER_ID, FIRST_NAME, LAST_NAME, REMARK -> from TEAM -> where REMARK LIKE "%Diva%"; +-----------+------------+-----------+---------------+ | MEMBER_ID | FIRST_NAME | LAST_NAME | REMARK | +-----------+------------+-----------+---------------+ | 3 | Brittney | McChristy | The Data Diva | +-----------+------------+-----------+---------------+ 1 row in set (0.01 sec)Šta ako Brittney McChristy promeni prezime u Spears? mysql> update TEAM set LAST_NAME='Spears' WHERE MEMBER_ID=3; Query OK, 1 row affected (0.01 sec) mysql> select MEMBER_ID, FIRST_NAME, LAST_NAME, LAST_DATE from TEAM -> where MEMBER_ID=3; +-----------+------------+-----------+----------------+ | MEMBER_ID | FIRST_NAME | LAST_NAME | LAST_DATE | +-----------+------------+-----------+----------------+ | 3 | Brittney | Spears | 20010515134528 | +-----------+------------+-----------+----------------+ 1 row in set (0.00 sec)Pošto je LAST_DATE prvi TIMESTAMP polje u tabeli, automatski se promeni na tekuće vreme svaki put kada nešto izmeniš. Pogledajmo sada sve igrače čija je omiljena boja plava, listajući prvo one koji su poslednji editovani. mysql> select MEMBER_ID, FIRST_NAME, LAST_NAME, FAV_COLOR, LAST_DATE from TEAM -> where FAV_COLOR = 'blue' -> order by LAST_DATE desc; +-----------+------------+-----------+-----------+----------------+ | MEMBER_ID | FIRST_NAME | LAST_NAME | FAV_COLOR | LAST_DATE | +-----------+------------+-----------+-----------+----------------+ | 3 | Brittney | Spears | blue | 20010515134528 | | 2 | Nick | Borders | blue | 20000508105403 | +-----------+------------+-----------+-----------+----------------+ 2 rows in set (0.00 sec)Sada napravimo tabelu TEAM2 slične strukture kao TEAM. mysql> create table TEAM2 ( -> MEMBER_ID int(11) not null auto_increment primary key, -> FIRST_NAME varchar(32) not null, -> LAST_NAME varchar(32) not null, -> REMARK varchar(64) not null, -> FAV_COLOR varchar(32) not null, -> LAST_DATE timestamp, -> OPEN_DATE timestamp); Query OK, 0 rows affected (0.01 sec) mysql> describe TEAM2; +------------+---------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+---------------+------+-----+---------+----------------+ | MEMBER_ID | int(11) | | PRI | NULL | auto_increment | | FIRST_NAME | varchar(32) | | | | | | LAST_NAME | varchar(32) | | | | | | REMARK | varchar(64) | | | | | | FAV_COLOR | varchar(32) | | | | | | LAST_DATE | timestamp(14) | YES | | NULL | | | OPEN_DATE | timestamp(14) | YES | | NULL | | +------------+---------------+------+-----+---------+----------------+ 7 rows in set (0.00 sec)Uporedi ovo sa opisom tabele TEAM. Obe su iste (osim višestrukog indeksa koji nismo kreirali jer je ovo prost primer). Na primer, vršimo pretragu u Python programu:
$ python
Python 1.6 (#1, Sep 5 2000, 17:46:48) [GCC 2.7.2.3] on linux2
Copyright (c) 1995-2000 Corporation for National Research Initiatives.
All Rights Reserved.
Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam.
All Rights Reserved.
>>> import MySQLdb
>>> conn = MySQLdb.connect(host='localhost', user='me', passwd='mypw', db='test')
>>> c = conn.cursor()
>>> c.execute("select MEMBER_ID, FIRST_NAME, LAST_NAME from TEAM")
4L
>>> records = c.fetchall()
>>> import pprint
>>> pprint.pprint(records)
((1L, 'Brad', 'Stec'),
(2L, 'Nick', 'Borders'),
(3L, 'Brittney', 'Spears'),
(4L, 'Fuzzy', 'Logic'))
Možemo takodje da podesimo da Python ili shell skript piše SQL komande u fajl, pa onda 'mysql' komanda čita iz tog fajla.
Ili shell skript šalje komandu ka mysql:
$ echo "select REMARK from TEAM" | mysql -t test +-----------------+ | REMARK | +-----------------+ | Techno Needy | | Meticulous Nick | | The Data Diva | | The Logic Bunny | +-----------------+( -t kaže MySQL da nacrta dekoraciju tabele iako je u *batch* modu. Dodaj tvoje MySQL korisničko ime i lozinku ako je potrebno.) 'mysqldump' štampa set SQL komandi koje kreiraju tabele. Ovo je jednostavan način za čuvanje ili povratak podataka.
$ mysqldump --opt -u Username -pPassword test TEAM >/backups/team.sql
$ mysql -u Username -pPassword test Ovo može biti korišćeno za zaštitu sistema ili pojedinačnu zaštitu dok menjaš neke stvari (i spašavati život ako zaboraviš WHERE u UPDATE kombinaciji pa promeniš sve rekorde umesto samo jednog!) Zaštita sistema je moguća i sa rsync ili tar celog /var/lib/mysql/ direktorijuma. Ali postoji rizik da je tabla u pola editovanja kada se zaštita dešava. MySQL ima komandu *LOCK TABLES the_table READ*, ali nije zgodno ovo koristiti sa Python/Perl jezicima ili kao deo shell skripta bez upotrebe mysql kao ko-procesora. Druga operacija održavanja je kreiranje korisnika i dozvoljavanje pristupa. Studiraj "GRANT i REVOKE sintakse" (sekcija 7.25) u MySQL referentnom dokumentu. Ja uvek ovo čitam iz početka kada dodajem nove baze. U principu treba ti komanda kao ova: mysql> grant SELECT, INSERT, DELETE, UPDATE on test.TEAM to somebody -> identified by 'her_password'; Query OK, 0 rows affected (0.03 sec)Ovo omogućava "somebody" da vidi i promeni rekorde ali ne može da menja strukturu tabele. (ja uvek menja tabele kao MzSQL root korisnik.) Koristi "on test.*" da bi video i modifikovao sve tekuće/buduće tabele u bazi 'test'. Da dozvoliš korisniku pristup bez lozinke, izostavi "identified by 'her_password'" deo. Da ograničiš pristup na osnovu klijentovog imena mašine, koristi 'to somebody@"%.mysite.com"'. Zapamti da MySQL korisničko ime nije u vezi sa login korisničkim imenom. Da zajedno spojiš više tabela (MySQL je relaciona DBMS pre svegal), pogledaj "SELECT syntax" (sekcija 7.11). U stvari celo poglavlje 7 je dobro kao referenca. MySQL dokumentacija je ovde- http://www.mysql.com/doc/ Napomena prevodioca: Ја sam 100% amater u prevođenju i veoma se dvoumim kada treba da prevedem neke reči karakteristične za oblast računara. Biće mi drago ako ima onih koji su veštiji u prevođenju i voljni da razvijaju ovaj sajt. | |||