create table

Transkrypt

create table
MySQL (www.mysql.org)
Plan wykładu:
– Wprowadzenie
– Użytkowanie
– Administracja
Wprowadzenie
Licencjonowanie (serwer „półdarmowy”)
• OpenSource – GPL (dotyczy także luźnego powiązania)
• Commercial license (koszt zakupienia licencji)
2
Wprowadzenie (2)
• Serwer dostępny na różne systemy operacyjne:
Linux, Microsoft Windows,
FreeBSD, Sun Solaris, IBM's AIX, Mac OS X, HP-UX, AIX,
QNX, Novell NetWare, SCO OpenUnix, SGI Irix, i Dec OSF
• Szybkość
• Duże rozmiary bazy danych
MySQL – w zależności od typu tabeli:
– MyISAM – 65536TB (jeden plik; domyślnie 4GB)
Ograniczenie systemu operacyjnego (2GB – 16TB)
– InnoDB – 64TB (wiele plików)
3
Wprowadzenie (3)
• Duży podzbiór ANSI SQL 99
• Obecne możliwości i planowane ulepszenia:
Feature
MySQL version
Subqueries
4.1
R-trees
4.1 (dla tabel MyISAM)
Stored procedures
5.0
Views
5.0
Cursors
5.0
-------------------------------------------Foreign keys
5.2 (już w 3.23 dla InnoDB)
Triggers
5.0 (niepełne) i 5.1
4
Użytkowanie
Typy danych
●
Liczby całkowite: TINYINT, SMALLINT, MEDIUMINT, INT,
BIGINT
●
Liczby zmiennoprzecinkowe: FLOAT, DOUBLE
●
Liczby stałoprzecinkowe: DECIMAL(M, N)
●
Data i czas: DATETIME, DATE, TIMESTAMP, TIME, i YEAR
●
Napisy: CHAR, VARCHAR, TEXT
●
Typ wyliczeniowy: ENUM
●
Typ zbiorowy: SET
●
Typ danych binarnych: BINARY, VARBINARY, BLOB
5
Użytkowanie (2)
Mapowanie typów dostępnych w innych serwerach w
trakcie tworzenia tabeli
Inny typ
• BINARY(NUM)
• CHAR VARYING(NUM)
• FLOAT4
• FLOAT8
• INT1
• INT2
• INT3
• INT4
• INT8
• LONG VARBINARY
• LONG VARCHAR
• MIDDLEINT
• VARBINARY(NUM)
Typ MySQL
CHAR(NUM)BINARY
VARCHAR(NUM)
FLOAT
DOUBLE
TINYINT
SMALLINT
MEDIUMINT
INT
BIGINT
MEDIUMBLOB
MEDIUMTEXT
MEDIUMINT
VARCHAR(NUM) BINARY
6
Użytkowanie (3)
ENUM('one', 'two', 'three')
Wartość
Indeks (wartość alternatywna)
• NULL
NULL
• ''
0
• 'one'
1
• 'two'
2
• 'three'
3
7
Użytkowanie (4)
SET('a','b','c','d')
(elementom przyporządkowane są bity od najmniej znaczącego)
Wartość
• 'a'
• 'b'
• 'c'
• 'd'
Indeks (wartość alternatywna)
1
2
4
8
Kolejność: kol='a,c' lub kol='c,a' da w wyniku 'a,c'
(przy SELECT oraz porównywaniu):
• mysql> SELECT * FROM tab WHERE kol LIKE '%c%';
• mysql> SELECT * FROM tab WHERE FIND_IN_SET('c',kol)>0;
• mysql> SELECT * FROM tab WHERE kol = 'a,c';
• mysql> SELECT * FROM tab WHERE kol & 1;
8
Użytkowanie (5)
Napisy:
'napis'
"inny napis"
• ' w napisie otoczonym ' można zapisać jako ' '
• " w napisie otoczonym " można zapisać jako " "
• Można także poprzedzić znakiem \
'hello', '"hello"', '""hello""',
'hel''lo', '\'hello',
"hello", "'hello'", "''hello''",
"hel""lo", "\"hello"
9
Użytkowanie (6)
Napisy:
• Maski i wyrażenia regularne (REGEXP i NOT REGEXP)
SELECT * FROM tab
WHERE nazwa LIKE "%fy";
SELECT * FROM tab
WHERE nazwa REGEXP "^[bB]";
10
Użytkowanie (7)
BLOB – używać jak TEXT, ale wewnętrzna
reprezentacja binarna
UPDATE tab
SET blob_col=LOAD_FILE('/tmp/picture')
WHERE id=1;
(uprawnienie – FILE)
11
Użytkowanie (8)
Sortowanie i porównywanie napisów
• Domyślna strona kodowa: ISO-8859-1 (Latin1)
• Ustawienia strony kodowej można ominąć korzystając z atrybutu
BINARY dla napisów (nie mylić z typem pola), który nakazuje
korzystanie z ustawień regionalnych systemu (np. Windows).
• Wsparcie dla języka polskiego przez użycie jednej z podanych
poniżej stron kodowych:
cp1250 (Windows), cp852 (DOS), ISO-8859-2 (Latin2),
od wersji 4.1 – Unicode (UCS2 i UTF-8).
12
Użytkowanie (9)
Generowanie unikalnego klucza:
• Na polu typu liczbowego: AUTO_INCREMENT
odczyt ostatniej wartości przez: LAST_INSERT_ID()
• Typ: SERIAL => BIGINT UNSIGNED NOT NULL
AUTO_INCREMENT UNIQUE
13
Użytkowanie (10)
Rozszerzenie SQL (1)
• Operacja REPLACE zamiast dwóch DELETE + INSERT
(wstawianie nowych lub aktualizacja istniejących elementów).
• INSERT, REPLACE, DELETE, i UPDATE
– LOW_PRIORITY – niski priorytet z czekaniem
– DELAYED – niski priorytet bez czekania (żądanie wstawione do
kolejki)
– HIGH_PRIORITY – wysoki priorytet z czekaniem
14
Użytkowanie (11)
Rozszerzenie SQL (2)
• Operatory || i && są traktowane jak logiczne OR i AND
(jak w języku C).
Zamiast || należy korzystać z funkcji CONCAT() przyjmującej
dowolną liczbę parametrów
• Ustawianie wartości zmiennych poprzez :=
SELECT @a:=SUM(total),@b=COUNT(*),
@a/@b AS avg FROM test_table;
SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
15
Użytkowanie (12)
Wyszukiwanie pełnotekstowe (tylko MyISAM)
Indeks o nazwie FULLTEXT
Wyszukiwanie przez funkcję MATCH...AGAINST
CREATE TABLE artykuly (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
tytul VARCHAR(200),
tresc TEXT,
FULLTEXT (tytul,tresc)
);
W przypadku gdy szukane słowo określałoby ponad połowę wierszy,
jest wtedy uznawane za słowo mało znaczące (słabo selekcjonujące)
i nie jest brane pod uwagę przy wyszukiwaniu.
16
Użytkowanie (13)
Wyszukiwanie pełnotekstowe (2)
INSERT INTO artykuly VALUES
(NULL,'MySQL Tutorial', 'DBMS stands for DataBase ...'),
(NULL,'How To Use MySQL Efficiently', 'After you went through a ...'),
(NULL,'Optimising MySQL','In this tutorial we will show ...'),
(NULL,'1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
(NULL,'MySQL vs. YourSQL', 'In the following database comparison ...'),
(NULL,'MySQL Security', 'When configured properly, MySQL ...');
SELECT * FROM artykuly WHERE MATCH (tytul,tresc) AGAINST ('database');
+----+-------------------+------------------------------------------+
| id | tytul
| tresc
|
+----+-------------------+------------------------------------------+
| 5 | MySQL vs. YourSQL | In the following database comparison ... |
| 1 | MySQL Tutorial
| DBMS stands for DataBase ...
|
+----+-------------------+------------------------------------------+
2 rows in set (0.00 sec)
SELECT * FROM artykuly WHERE MATCH (tytul,tresc)
AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
17
Użytkowanie (14)
Typy tabel – niezależny silnik dostępu do danych
• Nietransakcyjne (szybkie)
– MyISAM – bazuje na ISAM,
('.MYI' – MYIndex, '.MYD' – MYData) - BTree
– MEMORY/HEAP – używa hash-indeks, BTree
('.frm' – format, dane w pamięci RAM)
– MERGE – użycie kilku tabel MyISAM
('.frm' – format, '.MRG' – linki do tabel)
18
Użytkowanie (15)
• Transakcyjne, klucze obce
– InnoDB – używa BTree indeksy
(ewentualnie automatycznie wygenerowany
hash-index na podstawie BTree indeksu)
– BDB (BerkeleyDB) – używa BTree indeksy
('.frm' – format, '.db' – dane i indeksy)
19
Użytkowanie (16)
• HEAP
CREATE TABLE test ENGINE = HEAP
SELECT ip, SUM(downloads) AS down
FROM log_table GROUP BY ip;
SELECT COUNT(ip),AVG(down) FROM test;
DROP TABLE test;
CREATE TABLE lookup (id INT) ENGINE = MEMORY;
CREATE INDEX id_index USING BTREE ON lookup (id);
20
Użytkowanie (17)
• InnoDB
CREATE TABLE parent(id INT NOT NULL, PRIMARY KEY (id))
ENGINE=INNODB;
CREATE TABLE child(id INT, parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id) REFERENCES parent(id)
ON DELETE SET NULL
) ENGINE=INNODB;
21
Użytkowanie (18)
CREATE TABLE product (category INT NOT NULL,
id INT NOT NULL, price DECIMAL,
PRIMARY KEY(category, id)) ENGINE=INNODB;
CREATE TABLE customer (id INT NOT NULL,
PRIMARY KEY (id)) ENGINE=INNODB;
22
Użytkowanie (19)
CREATE TABLE product_order (no INT NOT NULL AUTO_INCREMENT,
product_category INT NOT NULL,
product_id INT NOT NULL,
customer_id INT NOT NULL,
PRIMARY KEY(no),
INDEX (product_category, product_id),
FOREIGN KEY (product_category, product_id)
REFERENCES product(category, id)
ON UPDATE CASCADE
ON DELETE RESTRICT,
INDEX (customer_id),
FOREIGN KEY (customer_id)
REFERENCES customer(id)) ENGINE=INNODB;
23
Użytkowanie (20)
Transakcje
• START TRANSACTION / SET AUTOCOMMIT=0
• COMMIT / ROLLBACK
• Punkty kontrolne
– możliwość wycofania się do określonego miejsca wewnątrz transakcji
– SAVEPOINT identifier
– ROLLBACK TO SAVEPOINT identifier
24
Użytkowanie (21)
Transakcje (2)
• Blokowanie tabel – dostęp wyłączny
– LOCK TABLES tbl_name [AS alias]
{READ [LOCAL] | [LOW_PRIORITY] WRITE} [, tbl_name [AS alias]
{READ [LOCAL] | [LOW_PRIORITY] WRITE} ...]
– ...
– UNLOCK TABLES
25
Użytkowanie (22)
Poziomy izolacji
SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL
{ READ UNCOMMITTED | READ COMMITTED |
REPEATABLE READ (def.) | SERIALIZABLE }
• global – będzie domyślny dla następnych
• session – aktualny w obrębie sesji
• READ UNCOMMITTED – "brudny odczyt"
• READ COMMITTED – czyta zatwierdzone
• REPEATABLE READ – domyślny, odczyt powtarzalny
• SERIALIZABLE – pełna szeregowalność
26
Użytkowanie (23)
Przykład użycia
• Utworzenie bazy danych i podłączenie się do niej
SHOW DATABASES;
CREATE DATABASE zwierzaki;
USE zwierzaki;
• Utworzenie tabeli
SHOW TABLES;
CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
DESCRIBE pet;
• Załadowanie danych
INSERT INTO pet
VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);
27
Użytkowanie (24)
Przykład użycia (2)
• Pobranie danych
SELECT what_to_select
FROM which_table
WHERE conditions_to_satisfy;
SELECT DISTINCT owner FROM pet;
SELECT name, birth, CURDATE(),
(YEAR(CURDATE()) - YEAR(birth)) (RIGHT(CURDATE(),5) < RIGHT(birth,5))
AS age
FROM pet;
28
Administracja
Użytkownicy i uprawnienia
• ACL (Access Control Lists)
informacja jest przechowywana w tabelach systemowych:
•mysql.user
•mysql.db
•mysql.host
•mysql.tables_priv
•mysql.columns_priv
•mysql.procs_priv
29
Administracja (2)
Użytkownicy i uprawnienia (2)
• Użytkownicy (autoryzacja)
•nazwa użytkownika
•adres, z którego się łączy (może być podana maska)
30
Administracja (3)
Użytkownicy i uprawnienia (3)
• Dostęp do zasobów - poziomy hierarchii
•Global level – GRANT/REVOKE ... ON *.*
•Database level – GRANT/REVOKE ... ON db.*
•Table level – GRANT/REVOKE ... ON db.table
•Column level – tabela: mysql.columns_priv
•Routine level – GRANT/REVOKE ... ON ...
31
Administracja (4)
Rodzaje uprawnień
•ALL [PRIVILEGES]
•ALTER
•CREATE
•CREATE TEMPORARY TABLES
•DELETE
•DROP
•EXECUTE
•FILE
•INDEX
•INSERT
•LOCK TABLES
•PROCESS
•REFERENCES
•RELOAD
•REPLICATION CLIENT
•REPLICATION SLAVE
•SELECT
•SHOW DATABASES
•SHUTDOWN
•SUPER
•UPDATE
•USAGE (brak uprawnień)
•GRANT OPTION
32
Administracja (5)
• Tworzenie użytkownika
CREATE USER david
[IDENTIFIED BY [PASSWORD] 'password']
• Usuwanie użytkownika
DROP USER david;
33
Administracja (6)
• Zmiana hasła
SET PASSWORD FOR 'u1'@'h1' = PASSWORD('newpwd');
• Zmiana hasła przez tabele systemowe:
UPDATE mysql.user
SET Password=PASSWORD('new_password')
WHERE user='u1' AND host='h1';
FLUSH PRIVILEGES; // bo używał tabeli
34
Administracja (7)
• Nadawanie praw
(gdy brak użytkownika, to zostanie założony)
GRANT ALL PRIVILEGES ON db.*
TO david@'192.58.197.0/255.255.255.0';
• Usuwanie praw
•nie usuwa użytkownika (DROP USER)
•usunięcie tabeli nie usuwa praw do tabeli
35
Administracja (8)
• Ograniczenie wykorzystania zasobów
GRANT ... WITH MAX_QUERIES_PER_HOUR N1
MAX_UPDATES_PER_HOUR N2
MAX_CONNECTIONS_PER_HOUR N3;
36
Administracja (9)
Domyślne uprawnienia
• 'root' bez hasła z 'localhost' (root@localhost)
• 'anonymous' bez hasła (@localhost/hostname) do bazy
•'test'
•rozpoczynającej się od 'test_'
37
Administracja (10)
•Tabele bazy danych są zapisane w oddzielnych plikach
•Baza danych jest przechowywana w oddzielnym katalogu
•Można wykonać kopię bazy z poziomu systemu
operacyjnego z użyciem:
•LOCK TABLES
– zablokowanie tabel
•FLUSH TABLES
– zapisanie wszystkich danych z cache tabeli do pliku
•“file copy”
38
Administracja (11)
•Wykonanie kopii danych do pliku
SELECT ... INTO OUTFILE 'file_name'
LOAD DATA LOCAL INFILE "pet.txt" INTO TABLE pet;
•Tylko dla MyISAM
BACKUP TABLE tbl_name[,tbl_name...]
TO '/path/to/backup/directory'
RESTORE TABLE tbl_name[,tbl_name...]
FROM '/path/to/backup/directory'
39
Administracja (12)
Program do zrzucenia bazy do pliku SQL
mysqldump [OPTIONS] database [tables] > backup-file.sql
mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2...]
mysqldump [OPTIONS] --all-databases [OPTIONS]
mysql database < backup-file.sql
40
Administracja (13)
•Sprawdzenie tabeli
CHECK TABLE tbl_name[,tbl_name...] [option [option...]]
Gdzie option: QUICK | FAST | MEDIUM | EXTENDED | CHANGED
•Naprawa tabeli
REPAIR [LOCAL | NO_WRITE_TO_BINLOG]
TABLE tbl_name[,tbl_name...]
[QUICK] [EXTENDED] [USE_FRM]
41
Administracja (14)
Kanały komunikacyjne
• TCP/IP 3306
• socket – Unix, pipe – WinNT (potoki)
• zawiera SSL, od klienta wymagana konfiguracja tunelu dla portu 3306
42

Podobne dokumenty