Utilizarea server-ului MySQL

Conectarea si deconectarea de la server

Primul lucru pe care trebuie sa-l observi este ca fiecare comanda data server-ului se termina cu ';'. Fara aceste terminator nu se va intampla nimic. Asta inseamna ca poti avea linii noi in mijlocul unei comenzi sau poti da mai multe comenzi pe aceeasi linie:

1. mysql> SELECT VERSION(); SELECT NOW();
2. mysql> SELECT
-> USER()
-> ,
-> CURRENT_DATE;
3. mysql> grant select
	->

Acest ultim prompt insemna ca MySQL mai asteapta sa fie introdus ceva (asteapta ';').

Alta caracteristica de notat este ca declaratiile SQL (Structured Query Language - un limbaj de interogare a bazelor de date) nu sunt case sensitive

Daca vrei sa nu mai executi o comanda pe care ai scris-o partial, o poti anula cu '\c':

mysql> SELECT
-> USER()
-> \c
mysql>

Ce insemna prompt-urile

mysql> Gata pentru o noua comanda.
-> Asteapta urmatoarea linie dintr-o comanda. multi-linie.
'> Astepta continuarea unui sir de caractere care incepe cu '.
"> Astepta continuarea unui sir de caractere care incepe cu ".

AtentieEste important de stiut ce inseamna prompt-urile '> and "> , deoarece daca din greseala introduci un sir neterminat, orice altceva ce vei tasta (chiar si quit) nu va fi luat in seama.

Pentru a te conecta la server, de obicei esti nevoit sa dai numele de utilizator si parola:

shell> mysql -h host -u user -p
Enter password: ********
MySQL
Comanda mysql invoca programul-monitor MySQL, un program client care te conecteaza la server. -h specifica numele gazdei (host) la care te vei conecta (doar daca te conectezi pe alta statie de lucru). -u specifica numele tau de utilizator ('root' daca ai MySQL pe propria statie, sau alt nume dat de administrator..). -p spune server-ului ca te vei conecta folosind o parola.
shell> mysql -h host -u user -p
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 459 to server version: 3.22.20a-log

Type 'help' for help.

mysql>

In functie de cum ai instalat si configurat MySQL, ai putea fi lasat sa te conectezi la server fara nume de utilizator sau parola:
shell> mysql

Dupa ce te-ai conectat cu succes la server te poti deconecta cu comanda QUIT sau apasand CTRL+D
mysql> QUIT


Crearea utilizatorilor

Sistemul de privilegii al MySQL

Una dinte cele mai bune caracteristici ale MySQL este ca suporta un sistem de privilegii (dreptul de a face o anumita actiune asupra unui obiect) pentru utilizatori foarte sofisticat. Cand vei crea un utilizator, ii vei da acces la un set de privilegii pentru a specifica ce anume poate sa faca si ce nu poate sa faca un utilizator. Un utilizator ar trebui sa aiba cel mai mic nivel de privilegii necesar pentru a-si indeplini sarcina.

Crearea drepturilor pentru utilizatori se face cu comanda GRANT, iar retragerea drepturilor cu REVOKE
Pentru a crea un administrator:

mysql> grant all
-> on *
-> to fred identified by ‘mnb123’
-> with grant option;

Pentru a-i retrag drepturile acestui utilizator:
mysql> revoke all
-> on *
-> from fred;

Exemplu de acordare drepturi pentru un utilizator:
mysql> grant select, insert, update, delete, index, alter, create, drop
-> on carti.*
-> to alina;

Crearea tabelelor

Vom crea o baza de date angajati pe care o vom folosi si in alte ocazii:
Pe Windws:
create database angajati;
Sa vedem cate baze de date sunt in sistem:
show databases;

+----------------+
| Database       |
+----------------+
| angajati       |
| mysql          |
| test           |
+----------------+
3 rows in set (0.00 sec)

Sub Linux:
Trebuie sa devii superuser si sa tastezi parola de root:
create database angajati;
GRANT ALL ON angajati.* TO marius@localhost IDENTIFIED BY "eagle"
Ultima conanda acorda toate drepturile asupra tabelei angajati utilizatorului Marius.
Iesi cu QUIT si intra din nou cu nume de utilizator de aceasta data:
mysql -u user_name -p
Ar trebui sa apara ca in continuare:
[marius@localhost marius]$ mysql -u marius -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is X to server version: 3.XX.XX

Deschiderea unei baze de date se poate face cu una din metodele:


mysql>\u angajati;

AtentieDaca nu specificam o baza de date cand lucram cu MySQL, se va genera o eroare!

Pentru baza noastra de date vom avea o tabela cu detalii despre angajati si o tabela cu date personale. Dupa ce ai selectat baza de date angajati dai urmatoarea comanda:

mysql> CREATE TABLE angajati_data
    -> (
    -> emp_id int unsigned not null auto_increment primary key,
    -> f_name varchar(20),
    -> l_name varchar(20),
    -> title varchar(30),
    -> age int,
    -> yos int,
    -> salary int,
    -> perks int,
    -> email varchar(60)
    -> );
Query OK, 0 rows affected (0.01 sec)

CREATE TABLE e urmata de numele tabelei si poia de numele si tipul de date al campurilor din baza de date. 'varchar' inseamna caractere de lungime variabile. Numarul din paranteza este lungimea maxima de caractere admise.'not null' specifica ca nu avem voie sa avem valori nule pe acel camp in inregistrari. 'int' inseamna numar inreg, iar 'unsigned' numar pozitiv. 'auto_increment' specifica pentru MySQL sa atribuie o valoare automat la o noua adaugare de inregistrare cu o valoare mai mare cu 1 decat cea mai mare valoare din acel camp (necesar pentru un camp ID). 'primary key' speciofica ca acel camp va fi indexat (fiecare valoare va fi unicat).

Tipuri de campuri

Cele trei tipuri de baza pentru campuri sunt: numeric, data si timp si sir de caractere(string). Cand alegi un anumit tip sau subtip, poti specifica si lungimea maxima admisa (M, maxim 255).

Tipurile de date numerice
Pentru numerele in virgula flotanta (float), poti specifica cu D numarul de cifre dupa puctul zecimal. Pentru numerele intregi poti sa specifici daca vor fi doar pozitive cu 'unsigned'.
Tipuri de date intregi

    Tip            Interval       (Bytes)     Descriere
TINYINT[(M)]    -127..128           1       Foarte mic integers
    or 0..255
SMALLINT[(M)]   -32768..32767       2       Intregi mici
    or 0..65535
MEDIUMINT[(M)]  -8388608..          3       Marime medie
                8388607
                or 0..16777215
INT[(M)]        -231..231-1         4       Intregi normali
                or 0..232-1
INTEGER[(M)]                                Sinonim cu INT
BIGINT[(M)]     -263..263-1 8               Intregi mari
                or 0..264-1
 
Tipuri de date flotante
Tip                 Interval            (Bytes)     Descriere
FLOAT(precision)    depinde                          Precizie simpla sau precizie dubla
FLOAT[(M,D)]        ±1.175494351E-38        4       Precizie simpla
                    ±3.402823466E+38
DOUBLE[(M,D)]       ±1.7976931348623157E    8       Precizie dubla
                    +308
                    ±2.2250738585072014E
                    -308
DOUBLE
PRECISION[(M,D)]    la fel
REAL[(M,D)]         la fel

DECIMAL[(M[,D])]    variaza                     M+2      Float stocat ca char.



NUMERIC[(M,D)]      la fel                               Sinonim cu DECIMAL.

Tipurile pentru data si timp
Tip        Interval   Descriere
DATE      1000-01-01  O data(YYYY-MM-DD).
          9999-12-31
TIME      -838:59:59  Un time(HH:MM:SS).
           838:59:59
DATETIME  1000-01-01  Data si timp(YYYY-MM-DDHH:MM:SS).
            00:00:00
          9999-12-31
            23:59:59
TIMESTAMP 1970-01-01  Un timestamp, folosit in tranzactii.
[(M)]       00:00:00
YEAR[(2|4)]    70–69  Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format.
           1901–2155
 
TIMESTAMP-uri
Type Specified	Display
TIMESTAMP		YYYYMMDDHHMMSS
TIMESTAMP(14)	YYYYMMDDHHMMSS
TIMESTAMP(12)	YYMMDDHHMMSS
TIMESTAMP(10)	YYMMDDHHMM
TIMESTAMP(8)	YYYYMMDD
TIMESTAMP(6)	YYMMDD
TIMESTAMP(4)	YYMM
TIMESTAMP(2)	YY
 

Tipuri pentru siruri de caractere
Se impart in trei grupuri:siruri normale: CHAR (fixed length character) si VARCHAR (variable length character), siruri TEXT si BLOB pentru siruri lungi/date binare si sirurile SET si ENUM (valori predefinte).
Tipuri pentru siruri de caractere regulare

Tip                    Interval
[NATIONAL]             1 to 255
CHAR(M) [BINARY]
[NATIONAL]             1 to 255
VARCHAR(M)
[BINARY]   
Tipuri TEXT si BLOB
	             Lungime maxima
Tip               (Caractere)
TINYBLOB              28-1
    	             (255)
TINYTEXT              28-1
BLOB                 216-1
                  (65.535)
TEXT                 216-1
MEDIUMBLOB           224-1
              (16.777.215)
MEDIUMTEXT           224-1
LONGBLOB             232-1
           (4.294.967.295)
LONGTEXT             232-1   
Tipuri SET si ENUM
Tip            Nr. valori in set Descriere
ENUM(‘valoare1’,      65535      O singura valoare din lista sau NULL
‘valoare2’,...)
SET(‘valoare1’,          64      Un set dintre valorile din lista.
‘valoare2’,...)

Exemplu:
create table _tabela1 (
id int auto_increment primary key,
answer enum (‘da’, ‘nu’) default ‘nu’
);

Tipul de camp NULL
Pentru a face o valoare dintr-un camp NULL, nu include acel camp in declaratia INSERT. Campurile au ca valoare implicita NULL daca nu specifici 'NOT NULL'. Pentru compararea valorilor cu NULL se folosesc 'IS NULL' sau 'IS NOT NULL'.

Descrierea tablelelor Permite afisarea detaliilor despre campurile tabelei.
mysql> DESCRIBE angajati_data;

+--------+------------------+------+-----+---------+------+
| Field  | Type             | Null | Key | Default | Extra|
+--------+------------------+------+-----+---------+------|
| emp_id | int(10) unsigned |      | PRI | 0       |      |
|        |    auto_increment|      |     |         |      |
| f_name | varchar(20)      | YES  |     | NULL    |      |
| l_name | varchar(20)      | YES  |     | NULL    |      |
| title  | varchar(30)      | YES  |     | NULL    |      |
| age    | int(11)          | YES  |     | NULL    |      |
| yos    | int(11)          | YES  |     | NULL    |      |
| salary | int(11)          | YES  |     | NULL    |      |
| perks  | int(11)          | YES  |     | NULL    |      |
| email  | varchar(60)      | YES  |     | NULL    |      |
+--------+------------------+------+-----+---------+------+
9 rows in set (0.00 sec)
 

Inserarea inregistrarilor in tabele

Comanda SQL INSERT inseareaza informatii in tabele.

INSERT into nume_tabela (camp1, camp2....)
values (val1, val2...);

Exemplu:
mysql> INSERT INTO angajati_data
    -> (f_name, l_name, title, age, yos, salary, perks, email)
    -> values
    -> ("Manish", "Sharma", "CEO", 28, 4, 200000,
    -> 50000, "manish@bignet.com");
Query OK, 1 row affected (0.00 sec)
 

Daca vrei sa inserezi unul dintre urmatoarele caractere intr-un camp de tip text, trebui sa-i adaugi inainte un caracter backslash(\):

‘ (apostrof) :\'
“ (ghilimele):\"
\ (backslash) :\\
% (procent)	  :\%
_ (liniuta de subliniere) :\_

Actualizarea datelor din tabele

Se face cu comanda SQL UPDATE.

UPDATE nume_tabela SET
nume_camp1 = val1,
nume_camp2 = val2,
nume_camp3 = val3 ...
[WHERE conditii];

UPDATE angajati_data SET
salary = salary + 20000,
perks = perks + 5000
WHERE title='CEO';

Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

Extragerea informatiilor dorite din tabela

Informatiile dorite sunt extrase din tabela (preocesul de interogare) cu comanda SELECT
SELECT nume_campuri from nume_tabela [WHERE ...conditii];
De exemplu, pentru a extrage nume si prenumele tuturor angajatilor (presupunand ca ai mai adaugat pe parcurs mai multe inregistrari cu INSERT sau LOAD DATA INFILE):

mysql> SELECT f_name, l_name from angajati_data;
+---------+------------+
| f_name  | l_name     |
+---------+------------+
| Manish  | Sharma     |
| John    | Hagan      |
| Ganesh  | Pillai     |
| Anamika | Pandit     |
| Mary    | Anchor     |
| Fred    | Kruger     |
| John    | MacFarland |
| Edward  | Sakamuro   |
| Alok    | Nanda      |
| Hassan  | Rajabi     |
| Paul    | Simon      |
| Arthur  | Hoopla     |
| Kim     | Hunter     |
| Roger   | Lewis      |
| Danny   | Gibson     |
| Mike    | Harper     |
| Monica  | Sehgal     |
| Hal     | Simlai     |
| Joseph  | Irvine     |
| Shahida | Ali        |
| Peter   | Champion   |
+---------+------------+
21 rows in set (0.00 sec)
Pentru a afisa intreaga tabela, in loc sa specificam toate campurile vom folosi simbolul '*':
SELECT * from angajati_data;

Selectia conditionala Puterea SGBD-ului sta in permiterea de a extrage informatii dupa anumite conditii specificate

SELECT f_name, l_name from angajati_data where f_name = 'John';

+--------+------------+
| f_name | l_name     |
+--------+------------+
| John   | Hagan      |
| John   | MacFarland |
+--------+------------+
2 rows in set (0.00 sec)
Comparatiile MySQL sunt case insensitive ceea ca inseamna ca "john", "John" sau "JoHn" ar merge in exemplul de mai sus.
Operatori de comparatie
Operator    Nume                 Exemplu
=          eqalitate           customerid = 3
>        mai mare           amount>60.00

<         mai mic           amount<60.00
>=    mai mic sau egal      amount>=60.00
<=    mai mic sau egal      amount<=60.00
!= sau        diferit		quantity != 0
<>                        
IS NOT  valoare nenula
NULL
IS NULL   valoare nula
BETWEEN   interval de valori   amount between 0 and 60.00
IN        inclus intr-un set
             predefinit        city in    (“Carlton”, “Moe”)
NOT IN    neinclus intr-un
           set predefinit      city not in     (“Carlton”,“Moe”)

LIKE        cautare pattern    name like   (“Fred %”)
NOT LIKE    cautare pattern
REGEXP     expresie regular    name regexp

	
Daca am vrea sa afisam angajatii al caror nume incepe cu 'J'?
select f_name, l_name from angajati_data where f_name LIKE "J%";

+--------+------------+
| f_name | l_name     |
+--------+------------+
| John   | Hagan      |
| John   | MacFarland |
| Joseph | Irvine     |
+--------+------------+
3 rows in set (0.00 sec)
 

Conditiile SQL pot contine si operatorii logici: AND, OR si NOT. Sa afisam numele angajatilor care au numele incepand cu 'S' sau 'A':

SELECT l_name from angajati_data where
l_name like 'S%' OR l_name like 'A%';

+----------+
| l_name   |
+----------+
| Sharma   |
| Anchor   |
| Sakamuro |
| Simon    |
| Sehgal   |
| Simlai   |
| Ali      |
+----------+
7 rows in set (0.00 sec)
 

Alte exemple:
SELECT f_name, l_name, title from
    -> angajati_data where title
    -> IN ('Web Designer', 'System Administrator');

+---------+--------+----------------------+
| f_name  | l_name | title                |
+---------+--------+----------------------+
| Anamika | Pandit | Web Designer         |
| Mary    | Anchor | Web Designer         |
| Roger   | Lewis  | System Administrator |
| Danny   | Gibson | System Administrator |
+---------+--------+----------------------+
4 rows in set (0.00 sec)

select f_name, l_name, age from
    -> angajati_data where age BETWEEN
    -> 32 AND 40;

+---------+------------+------+
| f_name  | l_name     | age  |
+---------+------------+------+
| John    | Hagan      |   32 |
| Ganesh  | Pillai     |   32 |
| John    | MacFarland |   34 |
| Alok    | Nanda      |   32 |
| Hassan  | Rajabi     |   33 |
| Arthur  | Hoopla     |   32 |
| Kim     | Hunter     |   32 |
| Roger   | Lewis      |   35 |
| Danny   | Gibson     |   34 |
| Mike    | Harper     |   36 |
| Shahida | Ali        |   32 |
| Peter   | Champion   |   36 |
+---------+------------+------+
12 rows in set (0.00 sec)

select f_name, l_name, salary
    -> from angajati_data where salary
    -> NOT BETWEEN
    -> 90000 AND 150000;

+---------+------------+--------+
| f_name  | l_name     | salary |
+---------+------------+--------+
| Manish  | Sharma     | 200000 |
| Mary    | Anchor     |  85000 |
| Fred    | Kruger     |  75000 |
| John    | MacFarland |  80000 |
| Edward  | Sakamuro   |  75000 |
| Alok    | Nanda      |  70000 |
| Paul    | Simon      |  85000 |
| Arthur  | Hoopla     |  75000 |
| Hal     | Simlai     |  70000 |
| Joseph  | Irvine     |  72000 |
| Shahida | Ali        |  70000 |
+---------+------------+--------+
11 rows in set (0.00 sec)
 

Sortarea datelor
Inregistrarile extraswe anterior au fost afisate in rodinea in care erau stocate in tabela. Pentru a le sorta folosim clauza ORDER BY a comenzii SELECT.

SELECT l_name, f_name from
angajati_data ORDER BY l_name;

+------------+---------+
| l_name     | f_name  |
+------------+---------+
| Ali        | Shahida |
| Anchor     | Mary    |
| Champion   | Peter   |
| Gibson     | Danny   |
| Hagan      | John    |
| Harper     | Mike    |
| Hoopla     | Arthur  |
| Hunter     | Kim     |
| Irvine     | Joseph  |
| Kruger     | Fred    |
| Lewis      | Roger   |
| MacFarland | John    |
| Nanda      | Alok    |
| Pandit     | Anamika |
| Pillai     | Ganesh  |
| Rajabi     | Hassan  |
| Sakamuro   | Edward  |
| Sehgal     | Monica  |
| Sharma     | Manish  |
| Simlai     | Hal     |
| Simon      | Paul    |
+------------+---------+
21 rows in set (0.00 sec)
sau (ordine descrerscatoare):
SELECT f_name from angajati_data
ORDER by f_name DESC;

Limitarea numarului de inregistrari extrase

SELECT f_name, l_name from
angajati_data LIMIT 5;

+---------+--------+
| f_name  | l_name |
+---------+--------+
| Manish  | Sharma |
| John    | Hagan  |
| Ganesh  | Pillai |
| Anamika | Pandit |
| Mary    | Anchor |
+---------+--------+
5 rows in set (0.01 sec)
Similar, putem lista cei mai tineri doi angajati:
SELECT f_name, l_name, age from
angajati_data ORDER BY age
LIMIT 2;

+--------+----------+------+
| f_name | l_name   | age  |
+--------+----------+------+
| Edward | Sakamuro |   25 |
| Mary   | Anchor   |   26 |
+--------+----------+------+
2 rows in set (0.01 sec)
 
Forma generala a clauzei LIMIT este:
SELECT (...) from tabela LIMIT nr_rand_incepere, nr_inreg_extrase;

SELECT f_name, l_name from
angajati_data LIMIT 6,3;

+--------+------------+
| f_name | l_name     |
+--------+------------+
| John   | MacFarland |
| Edward | Sakamuro   |
| Alok   | Nanda      |
+--------+------------+
3 rows in set (0.00 sec)
Comanda de mai sus extrage 3 angajati incepand de la inregistrarea 6.

Folosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parte.

Functii agregat

MIN(): Valoare minima
MAX(): Valoare maxima
SUM(): Suma valorilor
AVG(): Media aritmetica
COUNT(): Numarul inregistrarilor extrase
select MIN(salary) from angajati_data;

+-------------+
| MIN(salary) |
+-------------+
|       70000 |
+-------------+
1 row in set (0.00 sec)

select MAX(salary) from angajati_data;

+-------------+
| MAX(salary) |
+-------------+
|      200000 |
+-------------+
1 row in set (0.00 sec)

select SUM(salary) from angajati_data;

+-------------+
| SUM(salary) |
+-------------+
|     1997000 |
+-------------+
1 row in set (0.00 sec)

select COUNT(*) from angajati_data;

+----------+
| COUNT(*) |
+----------+
|       21 |
+----------+
1 row in set (0.00 sec)

Denumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extrase.

select avg(salary) AS
'Salariu mediu' from
angajati_data;

+----------------+
| Salariu mediu  |
+----------------+
|     95095.2381 |
+----------------+
1 row in set (0.00 sec)
 

Clauza GROUP BY permite gruparea informatiilor similare. Deci, pentru a lista toate functiile unice din tabela:

select title from angajati_data GROUP BY title;

+----------------------------+
| title                      |
+----------------------------+
| CEO                        |
| Customer Service Manager   |
| Finance Manager            |
| Marketing Executive        |
| Multimedia Programmer      |
| Programmer                 |
| Senior Marketing Executive |
| Senior Programmer          |
| Senior Web Designer        |
| System Administrator       |
| Web Designer               |
+----------------------------+
11 rows in set (0.01 sec)

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilor

select title, AVG(salary)
from angajati_data
GROUP BY title
HAVING AVG(salary) > 100000;

+----------------------------+-------------+
| title                      | AVG(salary) |
+----------------------------+-------------+
| CEO                        | 200000.0000 |
| Finance Manager            | 120000.0000 |
| Senior Marketing Executive | 120000.0000 |
| Senior Programmer          | 115000.0000 |
| Senior Web Designer        | 110000.0000 |
+----------------------------+-------------+
5 rows in set (0.00 sec)

Extragerea inregistrarilor din mai multe tabele (JOIN-uri)

De multe ori, ca sa raspunzi la o intrebare trebui sa extragi date din mai multe tabele. De exemplu, pentru a afla ce clienti au facut comenzi luna asta trebuie sa folosesti tabela clienti si tabela comenzi. Pentru acest lucru in SQL trebuie realizata o relatie intre tabele (JOIN) pe baza unor informatii comune (un camp de ID).

In exemplul nostru campul care relationeaza tabela 'angajati_data' este emp_id, iar pentru 'angajati_per 'e_id. Sa extragem numele angajatilor casatoriti din angajati_data si numele sotiei din angajati_per (vom folosi functia CONCAT pentru a alipi doua siruri de caractere):

select CONCAT(f_name, " ", l_name) AS Name,
s_name as 'Spouse Name' from
angajati_data, angajati_per
where m_status = 'Y' AND
emp_id = e_id;

+-----------------+-----------------+
| Name            | Spouse Name     |
+-----------------+-----------------+
| Manish Sharma   | Anamika Sharma  |
| John Hagan      | Jane Donner     |
| Ganesh Pillai   | Sandhya Pillai  |
| Anamika Sharma  | Manish Sharma   |
| John MacFarland | Mary Shelly     |
| Alok Nanda      | Manika Nanda    |
| Paul Simon      | Muriel Lovelace |
| Arthur Hoopla   | Rina Brighton   |
| Kim Hunter      | Matt Shikari    |
| Danny Gibson    | Betty Cudly     |
| Mike Harper     | Stella Stevens  |
| Monica Sehgal   | Edgar Alan      |
| Peter Champion  | Ruby Richer     |
+-----------------+-----------------+
13 rows in set (0.00 sec)
Tipuri de join-uri in MySQL
Produs cartezian, Full Join, Cross join
Toate combinatiile tuturor liniilor din tabela. Se specifica prin virgula si fara clauza WHERE.
Inner join
Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN.
Equi-join
Foloseste o conditie cu '=' pentru a face corespondente intre inregistrari.
Left join
Incearca sa gasesca corespondente intre tabele si cand nu gaseste, umple inregistrarile fara pereche cu NULL.

Stergerea inregistrarilor din tabela

DELETE FROM table
[WHERE condition] [LIMIT number]
 

delete from customers where customerid=5;

Stergerea tabelelor
DROP TABLE angajati_data;

Stergerea unei baze de date
DROP DATABASE database;


Crearea indecsilor

Se poate face cu comanda INDEX sau specificand la crearea unui tabel un camp ca PRIMARY KEY.
index nume_index (nume_coloana_indexata)

create table my_table ( id_col int unsigned auto_increment primary key, another_col text );

Indecsi pot cuprinde si mai multe campuri:
create table mytable( id_col int unsigned not null, another_col char(200) not null, index dual_col_index(id_col, another_col) );
In versiunea MySQL 3.23 poti indexa si dupa o parte dintr-un camp
index index_name (column_name(column_length))
De exemplu:
create table my_table(
char_column char (255) not null,
text_column text not null,
index index_on_char (char_column(20)),
index index_on_text (text_column(200))
);

Modificarea tabelelor dupa creare


ALTER TABLE nume modificare [, modificare ...]
Posibile modificari cu ALTER TABLE
Sintaxa                              Descriere
ADD [COLUMN] column_description 	 Adauga o coloana
[FIRST | AFTER column ]
ADD [COLUMN] (column_description,    Adauga o descriere de coloana
ADD INDEX [index] (column,...)       Adauga un index
ADD PRIMARY KEY (column,...)         Transforma campul in PK

ADD UNIQUE [index] (column,...) 	 Adauga un index pt. unicate
ALTER [COLUMN] column {SET DEFAULT   Adauga/sterge valorile implicite
value | DROP DEFAULT}
CHANGE [COLUMN] column new_column    Modificari pentru coloane
_description
MODIFY [COLUMN] column_description
DROP [COLUMN] column                 Sterge un camp
DROP PRIMARY KEY                     Sterge PK
DROP INDEX index                     Sterge indexul
RENAME[AS] new_table_name            Redenumeste o tabela
 

MySQL ofera 3 tipuri de tabele: ISAM, MyISAM (implicit), BDB, and Heap alese dupa sintaxa:

create table nume type=tip_tabela( nume_col coloana attribut ); 

Heap-urile sunt tabele hash temporare rezidente in memorie. Tabelele BDB sunt folosite la tranzactii, iar tabelele ISAM nu mai sunt recomandate. Deci alegerea implicita MyISAM este cea mai buna si nu trebuie sa-ti faci grji ca trebui sa specifici vreodata un tip de tabela.
Sintaxe ALTER:
(Redenumire tabela:)alter table nume_vechi rename nume_nou

(Modificare camp:)alter table my_table add column my_column text not null

(Stergere camp):alter table nume_tabela drop column nume_camp
Indecsi:

alter table my_table add index index_name (column_name1, column_name2, ...)
alter table my_table add unique index_name(column_name)
alter table my_table add primary key(my_column)
alter table table_name drop index index_name
alter table_name test10 drop primary key
InapoiInainte

Home Introducere Instalarea Utilizare MySQL Limbajul MySQL Administarea MySQL Configurarea MySQL MySQL si PHP Quiz MySQL Linkuri utile Contacteaza-ma..