Vorgurakendused 1 SQL naited loengust: erinevus redaktsioonide vahel

Allikas: Lambda
Mine navigeerimisribale Mine otsikasti
Resümee puudub
Resümee puudub
1. rida: 1. rida:
Andmebaasiga tegutsemise katsetamiseks ja tabelite tegemise proovimiseks on mõistlik kasutada mysql käsurida. Pärast saad katsetatud ja töötavad päringud panna php koodi.
Käsurealt andmebaasi sisselogimiseks ja katsetamiseks tee nii (reddit on andmebaasi nimi, rstudent siis kasutajanimi ja student on parool: need on kõigile ühised). Selle peale avaneb sulle mysql käsurida, kus saab otse päringuid sisse tippida.
<pre>
<pre>
mysql --user=rstudent --password=student reddit
mysql --user=rstudent --password=student reddit
</pre>


NB! Kui loengus ei olnud, kysi parooli ja kasutajatunnust loengus/praxis!
Andmebaas on enne kasutamist vaja teha, selle praksi jaoks on see aga juba ette tehtud, sina seda rstudent kasutajana teha ei saa, välja näeks andmebaasi tegemine aga selliselt (seekord siis mysql käsurealt):
 
<pre>
create database reddit; -- seda ei saa sa oma õigustega teha, on juba tehtud
create database reddit;
</pre>


Niimoodi saab vaadata, mis andmebaasid kasutatavad on ja valida endale kasutamiseks reddit baas, aga jällegi: seda pole sul vaja teha, sest oled juba reddit andmebaasi mysqli käsurealt sisestanud:
<pre>
show databases;
show databases;
use reddit;
use reddit;
</pre>


Tabelite tegemisel on abiks korra vaadata, mis tabelid on olemas, samuti võid uudishimust vaadata, mis on mõne konkreetse tabeli väljad:
<pre>
show tables;
show tables;
describe <table>; -- siin <table> asemel peaks olema konkreetse tabeli nimi.
drop <table>;
</pre>


describe <table>;
Sul on vaja teha oma tabelid. Peaks piisama tabelitest users, links, votes, comments. Kuna selles praksis on hulk tudengeid sama andmebaasi kallal ja kõigil on sama kasutajanimi, siis on vaja tabeli nimele panna ette prefiksina oma matriklinumber, et teistega segi ei läheks. Kui andmbeaasi kasutajaid oleks vähe või kõik teeks sama projekti, siis seda prefiksit muidugi vaja ei läheks.
 
drop <table>;


Teeme näiteks tabeli t1234_users:
<pre>
create table t1234_users(
create table t1234_users(
username VARCHAR(30),
username VARCHAR(30),
name VARCHAR(40),
fullname VARCHAR(40),
sex char(1),
password VARCHAR(20), -- password on meil lahtiselt, mis "päris" rakenduses ei sobiks
various VARCHAR(200),
PRIMARY KEY (username)); -- username on nüüd alati unikaalne, kahte rida sama usernamega baas ei luba
PRIMARY KEY (username));
</pre>
 
id INT NOT NULL AUTO_INCREMENT


Ja proovime kohe lisada natuke ridu:
<pre>
INSERT INTO t1234_users  
INSERT INTO t1234_users  
(username,name,sex) VALUES('tanel', 'Tanel Tammet', 'M');
(username,fullname,password) VALUES('tanel', 'Tanel Tammet', 'abc');
INSERT INTO tammet_users  
INSERT INTO tammet_users  
(username,name,sex) VALUES('kaire', 'Kaire Kass', 'F');
(username,fullname,password) VALUES('kaire', 'Kaire Kass', 'koer');
INSERT INTO tammet_users
</pre>
(username,name,sex) VALUES('mary', 'Mary Black', 'F');
INSERT INTO tammet_users
(username,name,sex) VALUES('john', 'John Smith', 'M');
INSERT INTO tammet_users
(username,name,sex) VALUES('william', 'William Blazkowicz', 'M');


mysql --user=... --password=... reddit < proov.sql
ja proovime seejärel teha query:
<pre>
select * from t1234_users;
</pre>


create table t1234_friends(
Teeme prooviks veel teise tabeli links:
id INT NOT NULL AUTO_INCREMENT,
<pre>
inviter VARCHAR(30),
create table t1234_links(
invitee VARCHAR(30),
id integer AUTO_INCREMENT, -- see number hakkab ise automaatselt kasvama, sisestada pole vaja!
status char(1) default 'I',
url VARCHAR(200) not null,  
added date default now(), -- siia pannakse automaatselt hetkeaeg, jälle pole sisestada vaja!
adder varchar(20), -- siia pane edaspidi lisaja username, mis vastab users tabeli username väljale
PRIMARY KEY (id));
PRIMARY KEY (id));
</pre>


insert into t1234_friends
(inviter,invitee) values ('tanel','kaire');
insert into tammet_friends
(inviter,invitee) values ('tanel','mary');


select * from t1234_friends;
NB! Esialgselt sisestatud tabeleid on edaspidi vaja muuta, täiendada jne. Käsitsi sisestamine oleks selle juures
talumatult kohmakas. Selle asemel tee hoopis tekstifail (näiteks nimega tables.sql), kuhu paned sisse tabeli tegemise ja näitedata jne ja siis saad edaspidi kõik need käsud lihtsalt failist peale lasta selliselt:
<pre>
mysql --user=rstudent --password=student reddit < tables.sql
</pre>


select t1234_users.name,u2.name,u2.sex from
Seejuures on hea mõte panna faili algusse olemasolevate tabelite kustutamine, muidu lihtsalt uusi tabeleid ei tehta:
t1234_users,t1234_users u2,t1234_friends where
<pre>
t1234_users.username=t1234_friends.inviter and
drop table t1234_users;
u2.username=t1234_friends.invitee;
drop table t1234_links;
 
...
create table t1234_users(
create table ...
username VARCHAR(30) NOT NULL DEFAULT NULL,
name VARCHAR(40) NOT NULL DEFAULT NULL,
sex char(1),
various VARCHAR(200),
PRIMARY KEY (username));
 
 
show  engines;
</pre>
</pre>

Redaktsioon: 3. detsember 2011, kell 15:40

Andmebaasiga tegutsemise katsetamiseks ja tabelite tegemise proovimiseks on mõistlik kasutada mysql käsurida. Pärast saad katsetatud ja töötavad päringud panna php koodi.

Käsurealt andmebaasi sisselogimiseks ja katsetamiseks tee nii (reddit on andmebaasi nimi, rstudent siis kasutajanimi ja student on parool: need on kõigile ühised). Selle peale avaneb sulle mysql käsurida, kus saab otse päringuid sisse tippida.

mysql --user=rstudent --password=student reddit

Andmebaas on enne kasutamist vaja teha, selle praksi jaoks on see aga juba ette tehtud, sina seda rstudent kasutajana teha ei saa, välja näeks andmebaasi tegemine aga selliselt (seekord siis mysql käsurealt):

create database reddit;

Niimoodi saab vaadata, mis andmebaasid kasutatavad on ja valida endale kasutamiseks reddit baas, aga jällegi: seda pole sul vaja teha, sest oled juba reddit andmebaasi mysqli käsurealt sisestanud:

show databases;
use reddit;

Tabelite tegemisel on abiks korra vaadata, mis tabelid on olemas, samuti võid uudishimust vaadata, mis on mõne konkreetse tabeli väljad:

show tables;
describe <table>; -- siin <table> asemel peaks olema konkreetse tabeli nimi.
drop <table>;

Sul on vaja teha oma tabelid. Peaks piisama tabelitest users, links, votes, comments. Kuna selles praksis on hulk tudengeid sama andmebaasi kallal ja kõigil on sama kasutajanimi, siis on vaja tabeli nimele panna ette prefiksina oma matriklinumber, et teistega segi ei läheks. Kui andmbeaasi kasutajaid oleks vähe või kõik teeks sama projekti, siis seda prefiksit muidugi vaja ei läheks.

Teeme näiteks tabeli t1234_users:

create table t1234_users(
username VARCHAR(30),
fullname VARCHAR(40),
password VARCHAR(20), -- password on meil lahtiselt, mis "päris" rakenduses ei sobiks
PRIMARY KEY (username));  -- username on nüüd alati unikaalne, kahte rida sama usernamega baas ei luba

Ja proovime kohe lisada natuke ridu:

INSERT INTO t1234_users 
(username,fullname,password) VALUES('tanel', 'Tanel Tammet', 'abc');
INSERT INTO tammet_users 
(username,fullname,password) VALUES('kaire', 'Kaire Kass', 'koer');

ja proovime seejärel teha query:

select * from t1234_users;

Teeme prooviks veel teise tabeli links:

create table t1234_links(
id integer AUTO_INCREMENT, -- see number hakkab ise automaatselt kasvama, sisestada pole vaja!
url VARCHAR(200) not null, 
added date default now(), -- siia pannakse automaatselt hetkeaeg, jälle pole sisestada vaja!
adder varchar(20), -- siia pane edaspidi lisaja username, mis vastab users tabeli username väljale
PRIMARY KEY (id));


NB! Esialgselt sisestatud tabeleid on edaspidi vaja muuta, täiendada jne. Käsitsi sisestamine oleks selle juures talumatult kohmakas. Selle asemel tee hoopis tekstifail (näiteks nimega tables.sql), kuhu paned sisse tabeli tegemise ja näitedata jne ja siis saad edaspidi kõik need käsud lihtsalt failist peale lasta selliselt:

mysql --user=rstudent --password=student reddit < tables.sql 

Seejuures on hea mõte panna faili algusse olemasolevate tabelite kustutamine, muidu lihtsalt uusi tabeleid ei tehta:

drop table t1234_users;
drop table t1234_links;
...
create table ...