Лекція № 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 (і деяких інших СУБД) — це звичайний каталог, що містить бінарні файли певного формату — таблиці. Таблиці складаються із записів, а записи, у свою чергу, складаються з полів. Поле має два атрибути — ім'я і тип. Тип поля може бути: Цілим. Дійсним.. Строковим. Бінарним. Дата і час. Перерахування і множини. Можливі типи даних, діапазони і описи представлені у відповідних таблицях. Цілочисельні типи: Тип Діапазон
Дійсні типи записуються у вигляді: ТИП (ДОВЖИНА, ЗНАКИ) [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 недоцільно.