MySQL

advertisement
Główne elementy składni SQL:
Zasady ogólne:
1) Język SQL nie rozróżnia małych i wielkich liter w słowach
kluczowych i nazwach (baz danych, tabel, indeksów i kolumn);
często dotyczy to też wartości napisowych (np. we wzorcach).
Legalne są nazwy zbudowane ze znaków alfanumerycznych, nie
zaczynające się od cyfry (w MySQL jest to wprawdzie
dozwolone, lecz nie zalecane).
Nie są dozwolone nazwy składające się wyłącznie z cyfr.
Nie należy w nazwach stosować znaków przestankowych "." i
"@".
1
2) Każda komenda w MySQL kończy się średnikiem (;) i może
składać się z wielu linii tekstu.
3) Wartości napisowe podaje się tak: "napis", lub tak:
'napis'.
Znaki "%" i "_" są metaznakami, służącymi do tworzenia
wzorców do porównań; oznaczają odpowiednio dowolny ciąg
znaków i dowolny jeden znak. Aby zostały przekazane
dosłownie, należy je poprzedzać metaznakiem "\".
4) Wartości liczbowe z kropką dziesiętną lub w notacji
wykładniczej (np. -32032.6809e+10).
Czy używać polskie znaki i gdzie?
Spacje w nazwach?
2
Start MySQL
Okno startowe PuTTy
3
Start MySQL
Zgłoszenie się serwera w trybie okna komend:
4
Help:
5
Zgłoszenie się serwera w MySQL Administrator:
6
Po połączeniu z serwerem:
7
Bazy danych:
8
Wybrana baza:
9
Lista indeksów:
10
Lista perspektyw:
11
Edytor tabel:
12
Przejście do okna zapytań:
13
Połączenie z PhpMyAdmin:
adres: http://teleinfo.pb.edu.pl/phpmyadmin/
14
Połączenie z PhpMyAdmin:
15
Tworzenie nowej tabeli w PhpMyAdmin:
16
Tworzenie nowej tabeli w PhpMyAdmin:
17
Wyświetlenie używanej wersji MySQL i aktualnej daty:
mysql> SELECT VERSION(), CURRENT_DATE;
+--------------------------+--------------+
| VERSION()
| CURRENT_DATE |
+--------------------------+--------------+
| 5.5.46-0+deb8u1
| 2016-03-02
|
+--------------------------+--------------+
1 row in set (0.00 sec)
mysql>
Równoważne zapisy:
mysql> SELECT VERSION(), CURRENT_DATE;
mysql> select version(), current_date;
mysql> SeLeCt vErSiOn(), current_DATE;
18
Wyświetlanie wersji i daty z czasem w osobnych tabelach:
mysql> SELECT VERSION(); SELECT NOW();
+---------------------+
| VERSION()
|
+---------------------+
| 5.5.46-0+deb8u1
|
+---------------------+
1 row in set (0.00 sec)
+---------------------+
| NOW()
|
+---------------------+
| 2016-03-02 08:14:13 |
+---------------------+
1 row in set (0.00 sec)
mysql>
19
Wpis komendy w wielu liniach:
mysql> SELECT
-> USER()
-> ,
-> CURRENT_DATE;
+----------------+--------------+
| user()
| current_date |
+----------------+--------------+
| gilg@localhost | 2016-03-02
|
+----------------+--------------+
1 row in set (0.00 sec)
mysql>
W celu wycofania wykonania komendy wstawiamy na końcu zapis \c:
mysql> SELECT
-> USER()
-> \c
mysql>
20
Obliczenia:
mysql> SELECT SIN(PI()/4), (4+1)*5;
+------------------+---------+
| SIN(PI()/4)
| (4+1)*5 |
+------------------+---------+
| 0.70710678118655 |
25 |
+------------------+---------+
1 row in set (0.31 sec)
mysql> SELECT SQRT(20);
+------------------+
| SQRT(20)
|
+------------------+
| 4.47213595499958 |
+------------------+
1 row in set (0.00 sec)
mysql>
21
Znaczenie znaków zachęty:
znak zachęty
Znaczenie
mysql> gotowość do wykonania nowej komendy
-> oczekiwanie na następną linię kontynuacji komendy
′> oczekiwanie na następną linię kończącą wpis
łańcucha w pojedynczym cudzysłowie (′)
″> oczekiwanie na następną linię kończącą wpis
łańcucha w podwójnym cudzysłowie (″)
`> oczekiwanie na następną linię kończącą wpis
kończącą wpis identyfikatora wpisywanego od
znaczka (`)
/*> oczekiwanie na następną linię kończącą wpis
komentarza rozpoczętego znakiem /*
22
Komendy startowe i ogólne:
SHOW DATABASES [LIKE ‘wzorzec’]; – wyświetla
listę baz danych [według wzorca]
mysql> SHOW DATABASES LIKE 'te%';
+----------------+
| Database (te%) |
+----------------+
| test
|
+----------------+
1 row in set (0.06 sec)
mysql> SHOW DATABASES LIKE 'te_';
Empty set (0.00 sec)
mysql> SHOW DATABASES LIKE 'te__';
+-----------------+
| Database (te__) |
+-----------------+
| test
|
+-----------------+
1 row in set (0.00 sec)
mysql>
23
mysql> SHOW DATABASES LIKE '%st';
+----------------+
| Database (%st) |
+----------------+
| test
|
+----------------+
1 row in set (0.00 sec)
mysql> SHOW DATABASES LIKE 't%t';
+----------------+
| Database (t%t) |
+----------------+
| test
|
+----------------+
1 row in set (0.00 sec)
mysql> SHOW DATABASES LIKE 't__t';
+-----------------+
| Database (t__t) |
+-----------------+
| test
|
+-----------------+
1 row in set (0.00 sec)
24
Wyświetlanie całej listy baz danych:
mysql> SHOW DATABASES;
+--------------------+
| Database
|
+--------------------+
| information_schema |
| gilg
|
| test
|
+--------------------+
3 rows in set (0.06 sec)
mysql>
25
Podstawowe polecenia definicji danych SQL:
CREATE SCHEMA
DROP SCHEMA
CREATE DOMAIN
ALTER DOMAIN DROP DOMAIN
CREATE TABLE
ALTER TABLE
DROP TABLE
CREATE VIEW
DROP VIEW
CREATE
DROP CHARACTER SET
CHARACTER SET
CREATE COLLATION
DROP COLLATION
Wykorzystywane są one do tworzenia, modyfikacji oraz usuwania
struktur tworzących schemat konceptualny.
26
W wielu SZBD istnieją także polecenia:
CREATE INDEX
DROP INDEX
Chociaż standard SQL tego nie opisuje.
Według standardu ISO relacje i inne obiekty bazy danych
istnieją w środowisku, które zawiera przynajmniej jeden katalog,
a każdy katalog składa się ze zbioru schematów.
Schemat zaś to nazwa obejmująca zespół obiektów bazy danych
(tabele, perspektywy, dziedziny, zestawienia), które są ze sobą w
pewien sposób powiązane.
Standard pozostawia poszczególnym implementacjom realizację
mechanizmu tworzenia i likwidowania katalogów.
27
Podaje jedynie polecenie definiowania schematu:
CREATE SCHEMA nazwa [AUTHORIZATION
nazwa_właściciela]
Szczegóły dotyczące określenia zakresu uprawnień dla
użytkowników schematu pozostają zależne od implementacji.
Polecenie usuwania schematu:
DROP SCHEMA nazwa [RESTRICTCASCADE]
Słowo RESTRICT oznacza, że schemat musi być pusty – w
przeciwnym razie nie zostanie usunięty, zaś słowo CASCADE
oznacza, że operacja kaskadowo usuwa wszystkie obiekty
związane ze schematem.
28
Tworzenie nowej bazy w MySQL:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS]
nazwa_bazy
[[DEFAULT] CHARACTER SET charset_name
| [DEFAULT] COLLATE collation_name];
CREATE SCHEMA synonim CREATE DATABASE
Przy braku specyfikacji IF NOT EXISTS wystąpi błąd jeżeli baza
danych o podanej nazwie istnieje.
Wszystkie opcje bazy danych są zapisywane w pliku db.opt, który
znajduje się w katalogu bazy danych (np.C:\MySQL\data\biuro).
CHARACTER SET - wyszczególnia domyślny dla bazy danych zbiór
znaków.
COLLATE - wyszczególnia domyślne dla bazy danych zestawienie.
29
Serwer MySQL może równocześnie zarządzać wieloma
bazami danych (zbiorami tabel - database), każdą z nich
identyfikuje jej nazwa i mogą one posiadać oddzielnie
zdefiniowane prawa dostępu.
W danej chwili (w trakcie trwania połączenia z serwerem
MySQL), jest jedna bieżąca baza danych, do której domyślnie
odnoszą się komendy adresujące tabele.
Odniesienia do kolumn mogą być postaci:
nazwa_kolumny
tabela.nazwa_kolumny
bazadanych.tabela.nazwa_kolumny
[email protected]_kolumny
30
mysql> CREATE DATABASE IF NOT EXISTS gilg DEFAULT
CHARACTER SET cp1250 DEFAULT COLLATE cp1250_polish_ci;
Query OK, 1 row affected (0.02 sec)
mysql> SHOW DATABASES;
+--------------------+
| Database
|
+--------------------+
| information_schema |
| gilg
|
| test
|
+--------------------+
4 rows in set (0.00 sec)
mysql>
31
Wyświetlanie zapisu tworzenia bazy:
mysql> SHOW CREATE DATABASE gilg;
+----------+---------------------------------------------+
| Database | Create Database
|
+----------+---------------------------------------------+
| gilg
| CREATE DATABASE `gilg` /*!40100 DEFAULT
CHARACTER SET cp1250 COLLATE cp1250_polish_ci */ |
+----------+---------------------------------------------+
1 row in set (0.00 sec)
Inny sposób prezentacji wyniku:
mysql> SHOW CREATE DATABASE gilg\G
************************* 1. row *************************
Database: gilg
Create Database: CREATE DATABASE `gilg` /*!40100 DEFAULT
CHARACTER SET cp1250 COLLATE cp1250_polish_ci */
1 row in set (0.01 sec)
mysql>
32
Zbiory znaków i zestawienia w MySQL:
mysql> SHOW CHARACTER SET;
+----------+-----------------------------+---------------------+--------+
| Charset | Description
| Default collation
| Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5
| Big5 Traditional Chinese
| big5_chinese_ci
|
2 |
| dec8
| DEC West European
| dec8_swedish_ci
|
1 |
| cp850
| DOS West European
| cp850_general_ci
|
1 |
| hp8
| HP West European
| hp8_english_ci
|
1 |
| koi8r
| KOI8-R Relcom Russian
| koi8r_general_ci
|
1 |
| latin1
| cp1252 West European
| latin1_swedish_ci
|
1 |
| latin2
| ISO 8859-2 Central European | latin2_general_ci
|
1 |
| swe7
| 7bit Swedish
| swe7_swedish_ci
|
1 |
| ascii
| US ASCII
| ascii_general_ci
|
1 |
| ujis
| EUC-JP Japanese
| ujis_japanese_ci
|
3 |
| sjis
| Shift-JIS Japanese
| sjis_japanese_ci
|
2 |
| hebrew
| ISO 8859-8 Hebrew
| hebrew_general_ci
|
1 |
| tis620
| TIS620 Thai
| tis620_thai_ci
|
1 |
| euckr
| EUC-KR Korean
| euckr_korean_ci
|
2 |
| koi8u
| KOI8-U Ukrainian
| koi8u_general_ci
|
1 |
| gb2312
| GB2312 Simplified Chinese
| gb2312_chinese_ci
|
2 |
| greek
| ISO 8859-7 Greek
| greek_general_ci
|
1 |
| cp1250
| Windows Central European
| cp1250_general_ci
|
1 |
...
33
cd:
...
| gbk
| GBK Simplified Chinese
| gbk_chinese_ci
|
2 |
| latin5
| ISO 8859-9 Turkish
| latin5_turkish_ci
|
1 |
| armscii8 | ARMSCII-8 Armenian
| armscii8_general_ci |
1 |
| utf8
| UTF-8 Unicode
| utf8_general_ci
|
3 |
| ucs2
| UCS-2 Unicode
| ucs2_general_ci
|
2 |
| cp866
| DOS Russian
| cp866_general_ci
|
1 |
| keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci |
1 |
| macce
| Mac Central European
| macce_general_ci
|
1 |
| macroman | Mac West European
| macroman_general_ci |
1 |
| cp852
| DOS Central European
| cp852_general_ci
|
1 |
| latin7
| ISO 8859-13 Baltic
| latin7_general_ci
|
1 |
| cp1251
| Windows Cyrillic
| cp1251_general_ci
|
1 |
| cp1256
| Windows Arabic
| cp1256_general_ci
|
1 |
| cp1257
| Windows Baltic
| cp1257_general_ci
|
1 |
| binary
| Binary pseudo charset
| binary
|
1 |
| geostd8 | GEOSTD8 Georgian
| geostd8_general_ci |
1 |
| cp932
| SJIS for Windows Japanese
| cp932_japanese_ci
|
2 |
| eucjpms | UJIS for Windows Japanese
| eucjpms_japanese_ci |
3 |
+----------+-----------------------------+---------------------+--------+
36 rows in set (0.00 sec)
mysql>
Domyślną czcionką jest latin1, natomiast ustawienie domyślne
to latin1_swedish_ci
34
Zestawienia:
mysql> SHOW COLLATION;
+----------------------+----------+-----+---------+----------+---------+
| Collation
| Charset | Id | Default | Compiled | Sortlen |
+----------------------+----------+-----+---------+----------+---------+
| big5_chinese_ci
| big5
|
1 | Yes
| Yes
|
1 |
| big5_bin
| big5
| 84 |
| Yes
|
1 |
| dec8_swedish_ci
| dec8
|
3 | Yes
|
|
0 |
| dec8_bin
| dec8
| 69 |
|
|
0 |
| cp850_general_ci
| cp850
|
4 | Yes
|
|
0 |
| cp850_bin
| cp850
| 80 |
|
|
0 |
| hp8_english_ci
| hp8
|
6 | Yes
|
|
0 |
| hp8_bin
| hp8
| 72 |
|
|
0 |
| koi8r_general_ci
| koi8r
|
7 | Yes
|
|
0 |
| koi8r_bin
| koi8r
| 74 |
|
|
0 |
| latin1_german1_ci
| latin1
|
5 |
| Yes
|
1 |
| latin1_swedish_ci
| latin1
|
8 | Yes
| Yes
|
1 |
| latin1_danish_ci
| latin1
| 15 |
| Yes
|
1 |
| latin1_german2_ci
| latin1
| 31 |
| Yes
|
2 |
| latin1_bin
| latin1
| 47 |
| Yes
|
1 |
| latin1_general_ci
| latin1
| 48 |
| Yes
|
1 |
| latin1_general_cs
| latin1
| 49 |
| Yes
|
1 |
| latin1_spanish_ci
| latin1
| 94 |
| Yes
|
1 |
| latin2_czech_cs
| latin2
|
2 |
| Yes
|
4 |
| latin2_general_ci
| latin2
|
9 | Yes
| Yes
|
1 |
| latin2_hungarian_ci | latin2
| 21 |
| Yes
|
1 |
| latin2_croatian_ci
| latin2
| 27 |
| Yes
|
1 |
| latin2_bin
| latin2
| 77 |
| Yes
|
1 |
...
35
...
| swe7_swedish_ci
| swe7_bin
| ascii_general_ci
| ascii_bin
| ujis_japanese_ci
| ujis_bin
| sjis_japanese_ci
| sjis_bin
| hebrew_general_ci
| hebrew_bin
| tis620_thai_ci
| tis620_bin
| euckr_korean_ci
| euckr_bin
| koi8u_general_ci
| koi8u_bin
| gb2312_chinese_ci
| gb2312_bin
| greek_general_ci
| greek_bin
| cp1250_general_ci
| cp1250_czech_cs
| cp1250_croatian_ci
| cp1250_bin
| cp1250_polish_ci
...
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
swe7
swe7
ascii
ascii
ujis
ujis
sjis
sjis
hebrew
hebrew
tis620
tis620
euckr
euckr
koi8u
koi8u
gb2312
gb2312
greek
greek
cp1250
cp1250
cp1250
cp1250
cp1250
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10
82
11
65
12
91
13
88
16
71
18
89
19
85
22
75
24
86
25
70
26
34
44
66
99
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0
0
0
0
1
1
1
1
0
0
4
1
1
1
0
0
1
1
0
0
1
2
1
1
1
36
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
...
| gbk_chinese_ci
| gbk_bin
| latin5_turkish_ci
| latin5_bin
| armscii8_general_ci
| armscii8_bin
| utf8_general_ci
| utf8_bin
| utf8_unicode_ci
| utf8_icelandic_ci
| utf8_latvian_ci
| utf8_romanian_ci
| utf8_slovenian_ci
| utf8_polish_ci
| utf8_estonian_ci
| utf8_spanish_ci
| utf8_swedish_ci
| utf8_turkish_ci
| utf8_czech_ci
| utf8_danish_ci
| utf8_lithuanian_ci
| utf8_slovak_ci
| utf8_spanish2_ci
| utf8_roman_ci
| utf8_persian_ci
| utf8_esperanto_ci
| utf8_hungarian_ci
...
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gbk
gbk
latin5
latin5
armscii8
armscii8
utf8
utf8
utf8
utf8
utf8
utf8
utf8
utf8
utf8
utf8
utf8
utf8
utf8
utf8
utf8
utf8
utf8
utf8
utf8
utf8
utf8
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28
87
30
78
32
64
33
83
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Yes
Yes
Yes
Yes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1
1
0
0
0
0
1
1
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
37
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
...
| ucs2_general_ci
| ucs2_bin
| ucs2_unicode_ci
| ucs2_icelandic_ci
| ucs2_latvian_ci
| ucs2_romanian_ci
| ucs2_slovenian_ci
| ucs2_polish_ci
| ucs2_estonian_ci
| ucs2_spanish_ci
| ucs2_swedish_ci
| ucs2_turkish_ci
| ucs2_czech_ci
| ucs2_danish_ci
| ucs2_lithuanian_ci
| ucs2_slovak_ci
| ucs2_spanish2_ci
| ucs2_roman_ci
| ucs2_persian_ci
| ucs2_esperanto_ci
| ucs2_hungarian_ci
| cp866_general_ci
| cp866_bin
| keybcs2_general_ci
| keybcs2_bin
| macce_general_ci
| macce_bin
...
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ucs2
ucs2
ucs2
ucs2
ucs2
ucs2
ucs2
ucs2
ucs2
ucs2
ucs2
ucs2
ucs2
ucs2
ucs2
ucs2
ucs2
ucs2
ucs2
ucs2
ucs2
cp866
cp866
keybcs2
keybcs2
macce
macce
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35
90
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
36
68
37
73
38
43
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Yes
Yes
Yes
Yes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1
1
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
0
0
0
0
0
0
38
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
...
| macroman_general_ci | macroman | 39 | Yes
|
|
0 |
| macroman_bin
| macroman | 53 |
|
|
0 |
| cp852_general_ci
| cp852
| 40 | Yes
|
|
0 |
| cp852_bin
| cp852
| 81 |
|
|
0 |
| latin7_estonian_cs
| latin7
| 20 |
|
|
0 |
| latin7_general_ci
| latin7
| 41 | Yes
|
|
0 |
| latin7_general_cs
| latin7
| 42 |
|
|
0 |
| latin7_bin
| latin7
| 79 |
|
|
0 |
| cp1251_bulgarian_ci | cp1251
| 14 |
|
|
0 |
| cp1251_ukrainian_ci | cp1251
| 23 |
|
|
0 |
| cp1251_bin
| cp1251
| 50 |
|
|
0 |
| cp1251_general_ci
| cp1251
| 51 | Yes
|
|
0 |
| cp1251_general_cs
| cp1251
| 52 |
|
|
0 |
| cp1256_general_ci
| cp1256
| 57 | Yes
|
|
0 |
| cp1256_bin
| cp1256
| 67 |
|
|
0 |
| cp1257_lithuanian_ci | cp1257
| 29 |
|
|
0 |
| cp1257_bin
| cp1257
| 58 |
|
|
0 |
| cp1257_general_ci
| cp1257
| 59 | Yes
|
|
0 |
| binary
| binary
| 63 | Yes
| Yes
|
1 |
| geostd8_general_ci
| geostd8 | 92 | Yes
|
|
0 |
| geostd8_bin
| geostd8 | 93 |
|
|
0 |
| cp932_japanese_ci
| cp932
| 95 | Yes
| Yes
|
1 |
| cp932_bin
| cp932
| 96 |
| Yes
|
1 |
| eucjpms_japanese_ci | eucjpms | 97 | Yes
| Yes
|
1 |
| eucjpms_bin
| eucjpms | 98 |
| Yes
|
1 |
+----------------------+----------+-----+---------+----------+---------+
127 rows in set (0.00 sec)
mysql>
39
Zestawienia dla wybranych znaków:
mysql> SHOW COLLATION LIKE 'latin1%';
+-------------------+---------+----+---------+----------+---------+
| Collation
| Charset | Id | Default | Compiled | Sortlen |
+-------------------+---------+----+---------+----------+---------+
| latin1_german1_ci | latin1 | 5 |
| Yes
|
1 |
| latin1_swedish_ci | latin1 | 8 | Yes
| Yes
|
1 |
| latin1_danish_ci | latin1 | 15 |
| Yes
|
1 |
| latin1_german2_ci | latin1 | 31 |
| Yes
|
2 |
| latin1_bin
| latin1 | 47 |
| Yes
|
1 |
| latin1_general_ci | latin1 | 48 |
| Yes
|
1 |
| latin1_general_cs | latin1 | 49 |
| Yes
|
1 |
| latin1_spanish_ci | latin1 | 94 |
| Yes
|
1 |
+-------------------+---------+----+---------+----------+---------+
8 rows in set (0.00 sec)
mysql> SHOW COLLATION LIKE 'cp1250%';
+--------------------+---------+----+---------+----------+---------+
| Collation
| Charset | Id | Default | Compiled | Sortlen |
+--------------------+---------+----+---------+----------+---------+
| cp1250_general_ci | cp1250 | 26 | Yes
| Yes
|
1 |
| cp1250_czech_cs
| cp1250 | 34 |
| Yes
|
2 |
| cp1250_croatian_ci | cp1250 | 44 |
| Yes
|
1 |
| cp1250_bin
| cp1250 | 66 |
| Yes
|
1 |
| cp1250_polish_ci
| cp1250 | 99 |
| Yes
|
1 |
+--------------------+---------+----+---------+----------+---------+
5 rows in set (0.00 sec)
40
mysql> SHOW COLLATION LIKE 'utf8%';
+--------------------+---------+-----+---------+----------+---------+
| Collation
| Charset | Id | Default | Compiled | Sortlen |
+--------------------+---------+-----+---------+----------+---------+
| utf8_general_ci
| utf8
| 33 | Yes
| Yes
|
1 |
| utf8_bin
| utf8
| 83 |
| Yes
|
1 |
| utf8_unicode_ci
| utf8
| 192 |
| Yes
|
8 |
| utf8_icelandic_ci | utf8
| 193 |
| Yes
|
8 |
| utf8_latvian_ci
| utf8
| 194 |
| Yes
|
8 |
| utf8_romanian_ci
| utf8
| 195 |
| Yes
|
8 |
| utf8_slovenian_ci | utf8
| 196 |
| Yes
|
8 |
| utf8_polish_ci
| utf8
| 197 |
| Yes
|
8 |
| utf8_estonian_ci
| utf8
| 198 |
| Yes
|
8 |
| utf8_spanish_ci
| utf8
| 199 |
| Yes
|
8 |
| utf8_swedish_ci
| utf8
| 200 |
| Yes
|
8 |
| utf8_turkish_ci
| utf8
| 201 |
| Yes
|
8 |
| utf8_czech_ci
| utf8
| 202 |
| Yes
|
8 |
| utf8_danish_ci
| utf8
| 203 |
| Yes
|
8 |
| utf8_lithuanian_ci | utf8
| 204 |
| Yes
|
8 |
| utf8_slovak_ci
| utf8
| 205 |
| Yes
|
8 |
| utf8_spanish2_ci
| utf8
| 206 |
| Yes
|
8 |
| utf8_roman_ci
| utf8
| 207 |
| Yes
|
8 |
| utf8_persian_ci
| utf8
| 208 |
| Yes
|
8 |
| utf8_esperanto_ci | utf8
| 209 |
| Yes
|
8 |
| utf8_hungarian_ci | utf8
| 210 |
| Yes
|
8 |
+--------------------+---------+-----+---------+----------+---------+
21 rows in set (0.00 sec)
41
mysql> SHOW COLLATION LIKE 'ucs2%';
+--------------------+---------+-----+---------+----------+---------+
| Collation
| Charset | Id | Default | Compiled | Sortlen |
+--------------------+---------+-----+---------+----------+---------+
| ucs2_general_ci
| ucs2
| 35 | Yes
| Yes
|
1 |
| ucs2_bin
| ucs2
| 90 |
| Yes
|
1 |
| ucs2_unicode_ci
| ucs2
| 128 |
| Yes
|
8 |
| ucs2_icelandic_ci | ucs2
| 129 |
| Yes
|
8 |
| ucs2_latvian_ci
| ucs2
| 130 |
| Yes
|
8 |
| ucs2_romanian_ci
| ucs2
| 131 |
| Yes
|
8 |
| ucs2_slovenian_ci | ucs2
| 132 |
| Yes
|
8 |
| ucs2_polish_ci
| ucs2
| 133 |
| Yes
|
8 |
| ucs2_estonian_ci
| ucs2
| 134 |
| Yes
|
8 |
| ucs2_spanish_ci
| ucs2
| 135 |
| Yes
|
8 |
| ucs2_swedish_ci
| ucs2
| 136 |
| Yes
|
8 |
| ucs2_turkish_ci
| ucs2
| 137 |
| Yes
|
8 |
| ucs2_czech_ci
| ucs2
| 138 |
| Yes
|
8 |
| ucs2_danish_ci
| ucs2
| 139 |
| Yes
|
8 |
| ucs2_lithuanian_ci | ucs2
| 140 |
| Yes
|
8 |
| ucs2_slovak_ci
| ucs2
| 141 |
| Yes
|
8 |
| ucs2_spanish2_ci
| ucs2
| 142 |
| Yes
|
8 |
| ucs2_roman_ci
| ucs2
| 143 |
| Yes
|
8 |
| ucs2_persian_ci
| ucs2
| 144 |
| Yes
|
8 |
| ucs2_esperanto_ci | ucs2
| 145 |
| Yes
|
8 |
| ucs2_hungarian_ci | ucs2
| 146 |
| Yes
|
8 |
+--------------------+---------+-----+---------+----------+---------+
21 rows in set (0.00 sec)
42
mysql>
Wybór używanej bazy:
USE nazwa_bazy; – wybór bazy, która będzie
wykorzystywana w MySQL
mysql> USE gilg;
Database changed
mysql>
Równoważne polecenie:
CONNECT nazwa_bazy; – połączenie z bazą, która będzie
wykorzystywana w MySQL
mysql> CONNECT gilg;
Connection id:
1
Current database: gilg
mysql>
43
Modyfikacja bazy:
ALTER {DATABASE | SCHEMA} [nazwa_bazy]
[[DEFAULT] CHARACTER SET charset_name
| [DEFAULT] COLLATE collation_name];
Nazwa bazy danych może być pominięta, jeżeli dotyczy
domyślnej (używanej) bazy.
Zmiana nazwy bazy:
RENAME {DATABASE | SCHEMA} nazwa_bazy TO
nowa_nazwa_bazy;
Dodane w MySQL 5.1.07 ale usunięte w MySQL 5.1.23
44
Usuwanie bazy:
DROP {DATABASE
nazwa_bazy;
|
SCHEMA}
[IF
EXISTS]
mysql> DROP DATABASE test;
Query OK, 0 rows affected (0.13 sec)
mysql>
CREATE SCHEMA, ALTER SCHEMA, DROP
SCHEMA wprowadzone od MySQL 5.0.2.
45
Kontrola dostępu:
Utworzenie nowego użytkownika:
CREATE USER user [IDENTIFIED BY [PASSWORD]
'password'][, user [IDENTIFIED BY [PASSWORD]
'password']] ...
mysql> CREATE USER test;
Query OK, 0 rows affected (0.00 sec)
mysql>
SET PASSWORD [FOR user] = PASSWORD('s_password')
RENAME USER old_user TO new_user [, old_user TO
new_user] ...
DROP USER user [, user] ...
46
Nadawanie praw dostępu:
GRANT priv_type [(column_list)] [, priv_type [(column_list)]]
...
ON [object_type]
{tbl_name | * | *.* | db_name.* | db_name.routine_name}
TO user [IDENTIFIED BY [PASSWORD] 'password']
[, user [IDENTIFIED BY [PASSWORD] 'password']] ...
[WITH with_option [with_option] ...];
Gdzie:
object_type = TABLE | FUNCTION | PROCEDURE
with_option = GRANT OPTION | MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
priv_type dla tabeli = SELECT, INSERT, UPDATE, DELETE, CREATE,
DROP, GRANT OPTION, INDEX, ALTER, CREATE
VIEW, SHOW VIEW
dla kolumn = SELECT, INSERT, UPDATE
47
GRANT SELECT ON biuro TO test;
GRANT ALL [PRIVILEGES] ON biuro.* TO test;
GRANT ALL PRIVILEGES ON *.* TO test;
Wyświetlanie praw dostępu:
SHOW GRANTS;
SHOW GRANTS FOR root@localhost;
SHOW GRANTS FOR test;
mysql> SHOW GRANTS;
+--------------------------------------------------------+
| Grants for root@localhost
|
+--------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost'
IDENTIFIED BY PASSWORD
'*3F0B2389FD4B1BA0803952E313603A2C022057D0' WITH
GRANT OPTION
|
+--------------------------------------------------------+
1 row in set (0.00 sec)
48
Odbieranie praw dostępu innym użytkownikom:
REVOKE priv_type [(column_list)] [, priv_type
[(column_list)]] ...
ON [object_type] {tbl_name | * | *.* | db_name.*}
FROM user [, user] ...;
Odbieranie wszystkich praw dostępu:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [,
user] ...;
49
Typy danych:
Standard ISO SQL (1992) przewiduje kilkanaście typów
danych, podzielonych na grupy:
1. Typ logiczny: BOOLEAN  TINYINT(1)  w MySQL
2. Typy znakowe: np. CHAR(N), VARCHAR(N)
3. Typ bitowy: BIT[(M)]
4. Typy liczbowe: dokładny np. INT, BIGINT, SMALLINT,
DECIMAL lub przybliżony, np. FLOAT, DOUBLE
PRECISION
50
3. Typy daty i godziny (Datetime): np. DATE, TIME,
DATETIME, TIMESTAMP, YEAR
4. Typ przedziałowy: INTERVAL – opisujący przedział czasu
5. Typ znakowy i bitowy dużych obiektów o zmiennej długości
odpowiednio TEXT i BLOB oraz ich odmiany (TINYTEXT,
MEDIUMTEXT,
LONGTEXT,
TINYBLOB,
MEDIUMBLOB, LONGBLOB) różniące się limitem długości
(nie dopuszczają one dodatkowego określenia długości i
przechowują
informację
o
długości
faktycznie
wprowadzonych danych).
Kolumny BLOB i TEXT nie mogą posiadać wartości
DEFAULT.
51
6. Innym częstym rozszerzeniem repertuaru typów są (np. w
MySQL) ENUM i SET; są to typy napisowe przyjmujące jedną
lub odpowiednio kilka spośród z góry określonych (w definicji
typu kolumny) wartości, np.:
...
kolor ENUM('niebieski', 'biały', 'czarny')
NOT NULL
...
Różnorodność dostępnych typów danych i możliwość określania
długości należy wykorzystywać do optymalizowania definicji
tabeli pod kątem zużycia miejsca i do kontroli integralności
wprowadzanych (bądź wynikających z operacji na danych)
wartości.
52
Typy danych w MySQL:
BOOL,
BOOLEAN
może przechowywać tylko dwie wartości: TRUE
lub FALSE
 TINYINT(1) gdzie wartość zero = FALSE
zaś wartość różna od zera = TRUE
CHAR(N)
definiuje pole napisowe o stałej długości N (ew.
uzupełniane spacjami)
VARCHAR(N)
jest polem o zmiennej długości nie przekraczającej
N, ale maksymalnie 255
BIT[(M)]
M oznacza liczbę bitów na wartość, od 1 do 64
(domyślnie 1)
53
INT[(M)]
[UNSIGNED]
[ZEROFILL]
pole liczb całkowitych, przechowuje liczby z
zakresu od -2147483648 do 2147483647 (z
parametrem UNSIGNED - od 0 do
4294967295).
DECIMAL(M,D) Pole liczbowe (ułamek dziesiętny o ustalonej
liczbie cyfr dziesiętnych w części całkowitej i
ułamkowej, gdzie M to maksymalna ilość cyfr w
tej kolumnie, a D to maksymalna ilość cyfr w
części ułamkowej).
DATE
pole daty przechowuje daty z zakresu od '100001-01' do '9999-12-31'.
BLOB/TEXT
pole tekstowe, przechowuje dłuższe,
wielowierszowe teksty do 65535 znaków.
54
Wymagana pamięć dla typów znakowych :
CHAR(M)
M bajtów, 0 <= M <= 255
VARCHAR(M)
TINYBLOB,
TINYTEXT
BLOB, TEXT
L+l bajtów, gdzie L <= M i 0<= M <= 255
L+l bajtów, gdzie L < 2^8 (255 znaków)
MEDIUMBLOB,
MEDIUMTEXT
LONGBLOB,
LONGTEXT
L+2 bajtów, gdzie L < 2^16 (65 535
znaków)
L+3 bajtów, gdzie L < 2^24 (16 777 215
znaków)
L+4 bajtów, gdzie L < 2^32 (4 294 967
295 znaków)
55
ENUM ( 'value1'
, 'value2',...)
1 or 2 bajtów, zależnie od liczby
wyliczeniowych wartości (maksymalnie
65 535)
SET ( 'value1' , 1, 2, 3, 4, lub 8 bajtów, zależnie od liczby
'value2',...)
elementów zbioru (maksymalnie 64)
Od MySQL 4.0 maksymalna dopuszczalna długość kolumn
LONGBLOB lub LONGTEXT zależy od skonfigurowanego
maksymalnego rozmiaru pakietów w protokole klient/serwer i
dostępnej pamięci.
56
Odmiany typów liczbowych:
TINYINT[(M)] [UNSIGNED] [ZEROFILL]
SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
BIGINT[(M)] [UNSIGNED] [ZEROFILL]
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
FLOAT(p) [UNSIGNED] [ZEROFILL]
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL]
REAL[(M,D)] [UNSIGNED] [ZEROFILL]
57
Wymagana pamięć dla typów liczbowych:
Typ
bajty
Wartość minimalna
Wartość maksymalna
(Signed / Unsigned) (Signed / Unsigned)
TINYINT
1
-128 / 0
127 (27-1) /
255 (28-1)
SMALLINT
2
-32768 / 0
32767 (215-1) /
65535 (216-1)
MEDIUMINT
3
-8388608 / 0
8388607 (223-1) /
16777215 (224-1)
INT
4
-2147483648 / 0
2147483647 (231-1) /
4294967295 (232-1)
BIGINT
8
-9223372036854775808 9223372036854775807
/ 0
(263-1) /
18446744073709551615
(264-1)
58
Wymagana pamięć dla typów liczbowych cd:
FLOAT (p)
4 bajty jeżeli 0<=p<=24, 8 bajtów
jeżeli 25<=p<=53
FLOAT
4 bajtów
DOUBLE [PRECISION],
pozycja REAL
8 bajtów
DECIMAL(M,D),
NUMERIC(M,D)
M+2 bajtów jeżeli D > 0, M+1 bajtów
jeżeli D = 0 (D+2, jeżeli M < D)
59
Wymagana pamięć dla typów daty i czasu:
Typ
Wymagana pamięć
DATE
DATETIME
TIMESTAMP
TIME
3 bytes
8 bytes
4 bytes
3 bytes
YEAR
1 byte
60
Odmiany typów daty:
Typ DATE jest stosowany dla dat i zawiera pola 'YYYY-MM-DD'
w zakresie od '1000-01-01' do '9999-12-31'.
Typ DATETIME jest stosowany dla dat z czasem i zawiera pola
'YYYY-MM-DD HH:MM:SS' w zakresie od '1000-01-01
00:00:00' do '9999-12-31 23:59:59'.
Niewłaściwe wartości DATETIME, DATE, TIMESTAMP, TIME
lub YEAR są zamieniane na ``zera'' odpowiednio:
Typ kolumny
DATETIME
Wartości "zerowe"
‘0000-00-00 00:00:00’
DATE
‘0000-00-00’
TIMESTAMP
00000000000000
TIME
‘00:00:00'
YEAR
0000
61
TIMESTAMP - znacznik czasu, zakres od '1970-01-01 00:00:01' UTC
do '2038-01-19 03:14:07' UTC.
Wartości TIMESTAMP są przechowywane jako liczba sekund od
epoki ( '1970-01-01 00:00:00' UTC).
Typ kolumny
TIMESTAMP(14)
TIMESTAMP(12)
Format wyświetlania
YYYYMMDDHHMMSS
YYMMDDHHMMSS
TIMESTAMP(10)
TIMESTAMP(8)
TIMESTAMP(6)
YYMMDDHHMM
YYYYMMDD
YYMMDD
TIMESTAMP(4)
TIMESTAMP(2)
YYMM
YY
62
Funkcje dotyczące daty bieżącej:
CURDATE() – podaje datę bieżącą w formatach: 'YYYY-MMDD' lub YYYYMMDD
CURTIME() – podaje czas bieżący w formatach: 'HH:MM:SS'
lub HHMMSS
w zależności od kontekstu użycia znakowym lub numerycznym:
mysql> select CURDATE();
+------------+
| CURDATE() |
+------------+
| 2016-03-02 |
+------------+
mysql> select CURTIME();
+-----------+
| CURTIME() |
+-----------+
| 08:16:06 |
+-----------+
63
mysql> select CURDATE()+0;
+-------------+
| CURDATE()+0 |
+-------------+
|
20160302 |
+-------------+
mysql> select Now();
+---------------------+
| Now()
|
+---------------------+
| 2016-03-02 08:17:21 |
+---------------------+
UTC_DATE() – synonim CURDATE()
UTC_TIME() – synonim CURTIME()
CURRENT_TIMESTAMP i CURRENT_TIMESTAMP() są
synonimami NOW()
64
Typ wyliczeniowy pola:
Kolumna ustawiona jako ENUM('jeden','dwa','trzy')
może przyjmować którąkolwiek z poniższych wartości, gdzie
przedstawiono również indeksy dla każdej wartości:
Value
Index
NULL
NULL
' '
'jeden'
'dwa'
'trzy'
0
1
2
3
Typ wyliczeniowy może mieć maksymalnie 65 535 elementów.
65
Download