Лекція № 15
Тема: СУБД MySQL. Поля та їх типи.
План
Загальні положення
Базова термінологія
Поля та їх типи
База даних, таблиці запису
База даних — це сукупність зв'язаних двомірних таблиць, що містять певну інформацію. Програмне забезпечення, яке управляє базою даних (створює нові бази даних, таблиці, а також дозволяє використовувати вже створені об'єкти), називається системою управління базою даних (СУБД). Варто відразу ж обмовитися, що цей розділ не претендує на повноту інформації: СУБД MYSQL і мові SQL присвячені цілі томи, об'єми яких перевищують цю книгу. Проте для написання нескладних сценаріїв роботи з базою даних приведеного матеріалу буде досить.
Клієнтська і серверні частини MYSQL
Почнемо з клієнтської частини СУБД MYSQL. База даних в MYSQL — це звичайний каталог (зазвичай, це підкаталог каталога /var/lib/ mysql - в Linux або c:\mysql\data - в Windows). Таблиця фізично представляється файлами з розширеннями frm, MYD, MYI. Логічно — таблиця є сукупністю записів. У свою чергу, запис — це сукупність полий різного типу (тип полів може повторюватися). Ім'я бази даних унікальне в межах системи, таблиці — в межах бази даних, а поля — в межах таблиці.
Зручною програмою для проглядання структури бази даних є mysqlshow. Введіть наступну команду:
mysqlshow -p mysql
Ви побачите список таблиць, які знаходяться в базі даних mysql.
Програма mysqlshow може викликатися з додатковими параметрами.
Для самих же операцій з даними використовується програма mysql. Вона і є клієнтом сервера. У цій програмі можна використовувати ті ж опції, що і mysqlshow. Серед численних параметрів програма mysql має один дуже важливий параметр "-s". Я рекомендую вам завжди його використовувати. Цей параметр пригнічують більшість непотрібних повідомлень, що виводяться клієнтом. На повільних лініях зв'язку це повинно підвищити продуктивність. Та і спостерігати за всіма рамочками і непотрібними повідомленнями особливо не хочеться. Для підключення до серверу mysql необхідно запустити клієнт:
mysql –u root –p
де:
-u – опція вибору користувача
-p – опція вказування паролю
-h – опція вибору хоста.
Створити базу даних можна за допомогою програми mysqladmin. Природно, що використовувати цю програму може тільки адміністратор, наприклад:
mysqladmin -u admin -p create my_db
Як працює сервер SQL? Клієнт посилає запит, в якому він указує, яку інформацію він хоче отримати від сервера, або яку операцію з даними він хоче виконати, сервер посилає клієнтові відповідь, в якій указується, чи виконав сервер запит клієнта, і, якщо сервер виконав запит, результат запиту.
Мова SQL
Для опису запитів клієнта була розроблена ціла мова — SQL (Structured Query Language — структурована мова запитів). За допомогою запитів SQL ви можете:
Створювати бази даних і таблиці.
Додавати інформацію в таблиці.
Видаляти інформацію.
Модифікувати інформацію.
Отримувати потрібні вам дані.
Природно, користувач admin, крім того, що повинен існувати, повинен володіти відповідними правами. Кожен запит MYSQL повинен закінчуватися крапкою з комою. Якщо ви введете SELECT * FROM test клієнт mysql чекатиме введення крапки з комою:
->
Базова термінологія
Якщо ви раніше працювали з якою-небудь СУБД (Система Управління Базою Даних), ви сміливо можете пропустити цей пункт — нічого нового для себе ви не прочитаєте. Але якщо ви стикаєтеся з СУБД вперше, без основних термінів вам не обійтися.
Поле (field) — це базовий елемент даних в БД. Поле має ім'я і тип. Наприклад, поле Tovar_No і позначаюча кількість товару, швидше за все, буде цілим. Докладніше про типи полий ми поговоримо трохи пізніше.
Запис (record) — це набір полий, що містять зв'язану інформацію. Наприклад, запис з полями C_No, C_Name і C_Address містить інформацію про клієнта — його номер, ім'я і адреса.
Таблиця (table) — це набір записів однієї структури полий. Якщо у нас є запис структури C_No, C_Name, C_Address, то всі записи в таблиці Clients матимуть такуюструктуру.
База даних (database) — це сукупність зв'язаних таблиць. Наприклад, в одній таблиці може зберігатися інформація про клієнта, а в іншій — інформація про замовлення, яке зробило клієнт, і т.д.
Індекс (index) — використовується для швидкого пошуку потрібного запису в базі даних. Зазвичай пошук проводиться по значенню одного поля або по значенню декілька полий.
Первинний індекс (index) — управляє порядком відображення записів в таблиці. Поле первинною індексу повинно бути унікальним, тобто в одній таблиці не повинні бути два поля (по якому будувався первинних індекс) з одним і тим же значенням. У нашій таблиці clients, очевидно, первинний індекс повинен будуватися по полю c_No — по номеру клієнта, який повинен бути унікальний.
Вторинний індекс (secondary index) — на відміну від первинного індексу, може будуватися по декількох полях і необов'язково повинен бути унікальним. Вторинні індекси використовуються для скріплення таблиць (про це ми поговоримо пізніше).
Запит (query) — оператор, що вибирає записи і поля з однієї або декількох таблиць. При цьому вибирані записи і поля повинні відповідати умові, заданій оператором.
Індекси також називаються ключами. Відповідно, первинний індекс називається первинним ключем, а вторинний — вторинним ключем.
Поля та їх типи
Ми вже знаємо, що база даних з погляду MYSQL (і деяких інших СУБД) — це звичайний каталог, що містить бінарні файли певного формату — таблиці. Таблиці складаються із записів, а записи, у свою чергу, складаються з полів. Поле має два атрибути — ім'я і тип.
Тип поля може бути:
Цілим.
Дійсним..
Строковим.
Бінарним.
Дата і час.
Перерахування і множини.
Можливі типи даних, діапазони і описи представлені у відповідних таблицях.
Цілочисельні типи:
Тип
Діапазон

TINYINT
-128... +127

SMALLINT
-32768... +32767

MEDIUMINT
-8 388 608... +8 388 607

int
-2 147 483 648... -2 147 483 647

BIGINT
-9 223 372 036 854 775 808 ... ±9 223 372 036 854 775 807


Дійсні типи записуються у вигляді:
ТИП (ДОВЖИНА, ЗНАКИ) [UNSIGNED]
ДОВЖИНА — це кількість знакомісць, в яких буде розміщено все число при його передачі, а ЗНАКИ — це кількість знаків після десяткової крапки, які враховуватимуться. Якщо вказаний модифікатор UNSIGNED, знак числа враховуватися не буде.
Дійсні типи
Тип
Опис

FLOAT
Невелика точність

DOUBLE
Подвійна точність

REAL
Те ж, що і DOUBLE

DECIMAL
Дробове число, зберігається у вигляді рядка

NUMERIC
Те ж, що і DECIMAL




Будь-який рядок — це масив символів. При пошуку за допомогою оператора SELECT не враховується регістр символів: рядки "HELLO" і "HElLo" вважаються однаковими.
Можна набудувати базу даних на те, що автоматичне перекодувало символів — в цьому випадку в базі даних рядка зберігатимуться в одному кодуванні, а виводитися — в іншій.
В більшості випадків вас влаштує тип VARCHAR або просто CHAR, що дозволяє зберігати рядки, що містять до 255 символів. У дужках після типу указується довжина рядка:
VARCHAR(20);
CHAR(20);
Якщо ж 255 символів для вашого завдання — це дуже мало, можна використовувати інші типи, наприклад, TEXT.
Символьні типи
Тип
Опис

TINYTEXT
Максимальна довжина рядка — 255 символів

TEXT
Максимальна довжина рядка — 65535 символів (64 Кб)

MEDIUMTEXT
Максимальна довжина рядка — 16 777 215 символів

LONGTEXT
Максимальна довжина рядка — 4 294 967 295 символів


Бінарні дані також можна використовувати для зберігання тексту, але при пошуку враховуватиметься регістр символів. До того ж, будь-який текстовий тип можна перетворити на бінарний, вказавши модифікатор BINARY:
VARCHAR(20) BINARY;
Бінарні типи
Тип

Опис


TINYBLOB
Максимум
— 255 символів


BLOB
Максимум
— 65535 символів


MEDIUMBLOB
Максимум
- 16 777 215 символів


LONGBLOB
Максимум
— 4 294 967 295 символів



Примітка.
Бінарні дані не перекодують на льоту, якщо встановлена та, що перекодувала символів.
Дата та час
Тип
Опис

DATE
Дата у форматі ГГГГ-ММ-ДД

TIME
Час у форматі 44:MM:CC

TIMESTAMP
Дата і час у форматі timestamp, проте при відображенні воно виводиться у вигляді ГГГГММДДЧЧММСС

DATETIME
Дата і час у форматі ГГГГ-ММ-ДД 44:MM:CC


Інші типи даних MYSQL розглядати ми не будемо, оскільки їх використання в PHP недоцільно.