MySQL are o interfata SQL foarte complexa, dar si intuitiva si usor de invatat. Capitolul acesta se ocupa cu prezentarea detaliata a unor comenzi diverse (cum se folosesc ele ai aflat in Utilizare MySQL), tipuri de date si functii de care vei avea nevoie ca sa folosesti MySQL eficient.
Siruri de caractere
Un sir de caractere (string) este o secventa de caractere aflata intre apostrofuri sau ghilimele ('un sir' sau "un sir"). Intr-un sir de caractere, unele secvente au un inteles special. Aceste secvente incep cu '\'. MySQL recunoste urmatoarele secvente de escape:
\0 0 (NULL) \' Apostrof \" Ghilimele. \b , \\ Backslash \n Linie noua \r Carriage return \t Tab. \z Control-Z (sfarsit de fisier) \% Procent `%' \_ Undersore `_'Daca vrei sa incluzi ghilimele si apostrofuri in siruri de caractere:
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+
Numere
Numerele intregi sunt reprezentate ca o secventa de cifre, iar float-urile folosesc '.' ca separator decimal.
Valoarea NULL
Valoarea NULL inseamna 'Nici o informatie' si difera de valoarea 0 pentru intregi si de sirul gol pentru siruri de caractere.
Numele folosite pentru baze de date, tabele, indecsi, coloane si alias-uri
Un nume poate contine caractere alfanumerice din setul curent de cacactere (implicit ISO-8859-1 Latin1). Un nume poate incepe cu orice caracter valid in nume. Un nume poate incepe si cu un numar, dar nu poate fi compus numai din numere. Nu poti folosi '.' in nume deoarece e folosit pentru a referi coloanele din tabele. sensibilitatea la majuscule sau minuscule pentru numele alese depinde de sistemul de operare (case sensitive in Unix si case insensitive in Windows). Oricum, in Windows nu poti referi aceeasi baza de date in aceeasi interogare cu un nume in cazuri diferite. Urmatoare interogare nu merge:
mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;
Numele de coloane sunt case insensitive. Alias-urile sunt case sensitive.
Variabile definite de utilizator
Se pot defini cu @nume_variabila. Ele nu trebuiesc initializate, contin de la inceput valoare NULL si pot stoca un integ, un numar real, un float sau un sir de caractere.
Poti seta o variabila la o anumita valoare cu:
SET @variable= { integer expression | real expression | string expression }[,@variable= ...].
sau cu:
select @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3; +----------------------+------+------+------+ | @t1:=(@t2:=1)+@t3:=4 | @t1 | @t2 | @t3 | +----------------------+------+------+------+ | 5 | 5 | 1 | 4 | +----------------------+------+------+------+
Comentarii
MySQL suporta cometariile #pana la sfarsit de linie, --pana la sfarsit de linie si /*linii multiple*/.
mysql> select 1+1; # Comentariu pana la sfarsitul linie mysql> select 1+1; -- Comentariu pana la sfarsitul liniei mysql> select 1 /* comentariu in-line */ + 1; mysql> select 1+ /* comentariu multi-linii */ 1;
Cuvinte rezervate
action | add | aggregate | all
|
alter | after | and | as
|
asc | avg | avg_row_length | auto_increment
|
between | bigint | bit | binary
|
blob | bool | both | by
|
cascade | case | char | character
|
change | check | checksum | column
|
columns | comment | constraint | create
|
cross | current_date | current_time | current_timestamp
|
data | database | databases | date
|
datetime | day | day_hour | day_minute
|
day_second | dayofmonth | dayofweek | dayofyear
|
dec | decimal | default | delayed
|
delay_key_write | delete | desc | describe
|
distinct | distinctrow | double | drop
|
end | else | escape | escaped
|
enclosed | enum | explain | exists
|
fields | file | first | float
|
float4 | float8 | flush | foreign
|
from | for | full | function
|
global | grant | grants | group
|
having | heap | high_priority | hour
|
hour_minute | hour_second | hosts | identified
|
ignore | in | index | infile
|
inner | insert | insert_id | int
|
integer | interval | int1 | int2
|
int3 | int4 | int8 | into
|
if | is | isam | join
|
key | keys | kill | last_insert_id
|
leading | left | length | like
|
lines | limit | load | local
|
lock | logs | long | longblob
|
longtext | low_priority | max | max_rows
|
match | mediumblob | mediumtext | mediumint
|
middleint | min_rows | minute | minute_second
|
modify | month | monthname | myisam
|
natural | numeric | no | not
|
null | on | optimize | option
|
optionally | or | order | outer
|
outfile | pack_keys | partial | password
|
precision | primary | procedure | process
|
processlist | privileges | read | real
|
references | reload | regexp | rename
|
replace | restrict | returns | revoke
|
rlike | row | rows | second
|
select | set | show | shutdown
|
smallint | soname | sql_big_tables | sql_big_selects
|
sql_low_priority_updates | sql_log_off | sql_log_update | sql_select_limit
|
sql_small_result | sql_big_result | sql_warnings | straight_join
|
starting | status | string | table
|
tables | temporary | terminated | text
|
then | time | timestamp | tinyblob
|
tinytext | tinyint | trailing | to
|
type | use | using | unique
|
unlock | unsigned | update | usage
|
values | varchar | variables | varying
|
varbinary | with | write | when
|
where | year | year_month | zerofill
|
Functii pentru compararea de siruri
LIKE
Cauta un 'pattern' intr-o expresie folosind caracterele wildcard:%(orice numar de caractere) si _ (un singur caracter).
expr LIKE pat [ESCAPE ‘escape-char’]
mysql> select ‘jay greenspan’ like ‘jay%’; ‘jay greenspan’ like ‘jay%’ 1
mysql> select name from guestbook where name regexp ‘^j.*g’;
Functii pentru controlul programului
IFNULL
IFNULL(expr1,expr2)
Daca expr1 nu e NULL, returneaza expr1, altfel ret. expr2.
mysql> select ifnull(1/0, ‘exp 1 is null’);
+--------------------------------+ | ifnull(1/0, ‘exp 1 is null’) | +--------------------------------+ | exp 1 is null | +--------------------------------+ 1 row in set (0.00 sec)
Functii matematice
ABS (modulul unui numar)
SIGN (semnul:-1 negativ, 1 pozitiv, 0 egal cu 0)
MOD (rstul impartirii)
FLOOR (cea mai mare valoare intreaga mai mica ca un numar)
CEILING (cea mai mica valoare intreaga mai mare ca un numar)
ROUND (un numar rotunjit la o valoare intreaga)
TRUNCATE (trunceaza un numar la un anumit numar de zecimale)
mysql> select truncate(8.53,0), truncate(8.43,0), truncate(8.534,2); |truncate(8.53,0)|truncate(8.43,0)|truncate(8.534,2)| | 8 | 8 | 8.53 | 1 row in set (0.05 sec)
mysql> select least(2,7,9,1); |least(2,7,9,1)| | 1 | 1 row in set (0.00 sec)
Functii pentru siruri de caractere
ASCII(str) (codul ASCII)
mysql> select ascii(‘\n’); | ascii(‘\n’)| | 10 | 1 row in set (0.00 sec)
mysql> select locate(‘s’, ‘mysql functions’) as example1, -> locate(‘s’, ‘mysql functions’,4) as example2; |example1|example2| | 3 | 15 | 1 row in set (0.00 sec)
mysql> select mid(‘mysqlfunctions’,6,8); | mid(‘mysqlfunctions’,6,8)| | function | 1 row in set (0.00 sec)
mysql> select substring_index(‘mysqlfunctionsmysql’, ‘fu’, 1); | substring_index(‘mysqlfunctions’, ‘fu’, 1) | | mysql | 1 row in set (0.00 sec) mysql> select substring_index(‘mysqlfunctionsmysql’, ‘fu’, -1); | substring_index(‘mysqlfunctionsmysql’, ‘fu’, -1) | | nctionsmysql | 1 row in set (0.00 sec)
mysql> select insert(‘mysqlfunctions’, 6,2,’FU’); + + |insert(‘mysqlfunctions’, 6,2,’FU’)| + + |mysqlFUnctions | + + 1 row in set (0.44 sec)
Functii pentru data calendaristica si timp
DAYOFWEEK
mysql> select dayofweek(‘2001-01-01’); + + | dayofweek(‘2001-01-01’)| | 2 | 1 row in set (0.33 sec)
Specificatori pentru DATE_FORMAT %M Luna (January÷December) %W Ziua (Sunday÷ Saturday) %D Numarul zilei(1st, 2nd, 3rd, etc.) %Y Anul AAAA %y Anul AA %a Numele abreviat al zilei(Sun..Sat) %d Numarul zilei lunii(00..31) %e Numarul zilei lunii(0..31) %m Numarul lunii(01..12) %c Numarul lunii(1..12) %b Numele lunii(Jan..Dec) %j Numarul zilei in an(001..366) %H Ora (00..23) %k Ora (0..23) %h Ora (01..12) %I Ora (01..12) %l Ora (1..12) %i Minutele(00..59) %r Timpul, 12-ore (hh:mm:ss [AP]M) %T Timpul, 24-ore (hh:mm:ss) %S Secundele(00..59) %s Secundele (00..59) %p AM sau PM %w Ziua saptamanii (0=Sunday..6=Saturday) %U Saptamana (0..53) %u Saptamana (0..53) %V Saptamana (1..53) %v Saptamana (1..53) %X Anul pentru saptamana %x Anul pentru saptamana %% Caracterul %Exemplu:
mysql> select date_format(‘2001-01-01’, ‘%W %M %d, %Y’); | date_format(‘2001-01-01’, ‘%W %M %d, %Y’) | | Monday January 01, 2001 | 1 row in set (0.00 sec)
Alte functii diverse
Database (numele bazei de date curente)
User (numele utilizatorului curent)
VERSION (versiunea MySQL)
LAST_INSERT_ID (ultima valoare inserata intr-un camp 'auto_increment')
SELECT
SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [HIGH_PRIORITY] [DISTINCT | DISTINCTROW | ALL] select_expression,... [INTO {OUTFILE | DUMPFILE} 'file_name' export_options] [FROM table_references [WHERE where_definition] [GROUP BY {unsigned_integer | col_name | formula} [ASC | DESC], ...] [HAVING where_definition] [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...] [LIMIT [offset,] rows] [PROCEDURE procedure_name] [FOR UPDATE | LOCK IN SHARE MODE]]
INSERT
INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES (expression,...),(...),... sau INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ... sau INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name SET col_name=expression, col_name=expression, ...
ALTER TABLE
ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...] alter_specification: ADD [COLUMN] create_definition [FIRST | AFTER column_name ] sau ADD [COLUMN] (create_definition, create_definition,...) sau ADD INDEX [index_name] (index_col_name,...) sau ADD PRIMARY KEY (index_col_name,...) sau ADD UNIQUE [index_name] (index_col_name,...) sau ADD FULLTEXT [index_name] (index_col_name,...) sau ADD [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name,...) [reference_definition] sau ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT} sau CHANGE [COLUMN] old_col_name create_definition sau MODIFY [COLUMN] create_definition sau DROP [COLUMN] col_name sau DROP PRIMARY KEY sau DROP INDEX index_name sau DISABLE KEYS sau ENABLE KEYS sau RENAME [TO] new_tbl_name sau ORDER BY col sau table_options
UPDATE
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name SET col_name1=expr1, [col_name2=expr2, ...] [WHERE where_definition] [LIMIT #]
LOAD DATA INFILE
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE] INTO TABLE tbl_name [FIELDS [TERMINATED BY '\t'] [[OPTIONALLY] ENCLOSED BY ''] [ESCAPED BY '\\' ] ] [LINES TERMINATED BY '\n'] [IGNORE number LINES] [(col_name,...)]
DELETE
DELETE [LOW_PRIORITY | QUICK] FROM table_name [WHERE where_definition] [ORDER BY ...] [LIMIT rows] sau DELETE [LOW_PRIORITY | QUICK] table_name[.*] [table_name[.*] ...] FROM table-references [WHERE where_definition]
CREATE INDEX
CREATE [UNIQUE|FULLTEXT] INDEX index_name ON tbl_name (col_name[(length)],... )
CREATE TABLE
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [select_statement] create_definition: col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [PRIMARY KEY] [reference_definition] sau PRIMARY KEY (index_col_name,...) sau KEY [index_name] (index_col_name,...) sau INDEX [index_name] (index_col_name,...) sau UNIQUE [INDEX] [index_name] (index_col_name,...) sau FULLTEXT [INDEX] [index_name] (index_col_name,...) sau [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name,...) [reference_definition] sau CHECK (expr) type: TINYINT[(length)] [UNSIGNED] [ZEROFILL] sau SMALLINT[(length)] [UNSIGNED] [ZEROFILL] sau MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL] sau INT[(length)] [UNSIGNED] [ZEROFILL] sau INTEGER[(length)] [UNSIGNED] [ZEROFILL] sau BIGINT[(length)] [UNSIGNED] [ZEROFILL] sau REAL[(length,decimals)] [UNSIGNED] [ZEROFILL] sau DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL] sau FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL] sau DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL] sau NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL] sau CHAR(length) [BINARY] sau VARCHAR(length) [BINARY] sau DATE sau TIME sau TIMESTAMP sau DATETIME sau TINYBLOB sau BLOB sau MEDIUMBLOB sau LONGBLOB sau TINYTEXT sau TEXT sau MEDIUMTEXT sau LONGTEXT sau ENUM(value1,value2,value3,...) sau SET(value1,value2,value3,...) index_col_name: col_name [(length)] reference_definition: REFERENCES tbl_name [(index_col_name,...)] [MATCH FULL | MATCH PARTIAL] [ON DELETE reference_option] [ON UPDATE reference_option] reference_option: RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT table_options: TYPE = {BDB | HEAP | ISAM | InnoDB | MERGE | MYISAM } sau AUTO_INCREMENT = # sau AVG_ROW_LENGTH = # sau CHECKSUM = {0 | 1} sau COMMENT = "string" sau MAX_ROWS = # sau MIN_ROWS = # sau PACK_KEYS = {0 | 1} sau PASSWORD = "string" sau DELAY_KEY_WRITE = {0 | 1} sau ROW_FORMAT= { default | dynamic | fixed | compressed } sau RAID_TYPE= {1 | STRIPED | RAID0 } RAID_CHUNKS=# RAID_CHUNKSIZE=# sau UNION = (table_name,[table_name...]) sau DATA DIRECTORY="directsauy" sau INDEX DIRECTORY="directsauy" select_statement: [IGNORE | REPLACE] SELECT ... (Some legal select statement)
CREATE DATABASE
CREATE DATABASE [IF NOT EXISTS] db_name
DROP DATABASE
DROP DATABASE [IF EXISTS] db_name
DROP INDEX
DROP INDEX index_name ON tbl_name
DROP TABLE
DROP TABLE [IF EXISTS] tbl_name [, tbl_name,...] [RESTRICT | CASCADE]
RENAME TABLE
RENAME TABLE tbl_name TO new_table_name[, tbl_name2 TO new_table_name2,...]
JOIN
table_reference, table_reference table_reference [CROSS] JOIN table_reference table_reference INNER JOIN table_reference table_reference STRAIGHT_JOIN table_reference table_reference LEFT [OUTER] JOIN table_reference ON conditional_expr table_reference LEFT [OUTER] JOIN table_reference USING (column_list) table_reference NATURAL LEFT [OUTER] JOIN table_reference { oj table_reference LEFT OUTER JOIN table_reference ON conditional_expr }