В тази статия ще покажем как да създадете база данни (известна още като схема), таблици (с типове данни) и ще обясним как да изпълнявате Език за манипулиране на данни (DML ) операции с данни в MySQL /MariaDB сървър.
Предполага се, че преди това сте имали 1) инсталирани необходимите пакети на вашата Linux система и 2) изпълнена mysql_secure_installation за подобряване на сигурността на сървъра на базата данни. Ако не, следвайте указанията по-долу, за да инсталирате MySQL/MariaDB сървър.
- Инсталирайте най-новата база данни MySQL в Linux системи
- Инсталирайте най-новата база данни MariaDB в Linux системи
За краткост ще се обърнем към MariaDB изключително в тази статия, но концепциите и командите, описани тук, важат за MySQL също.
Част 1 :Научете MySQL / MariaDB за начинаещи Част 2 :Научете как да използвате няколко функции на MySQL и MariaDBСъздаване на бази данни, таблици и оторизирани потребители
Както знаете, базата данни може да бъде дефинирана с прости думи като организирана колекция от информация. По-специално MariaDB е система за управление на релационна база данни (RDBMS ) и използва езика на структурните заявки за извършване на операции върху бази данни. Освен това, имайте предвид, че MariaDB използва термините база данни и схема взаимозаменяемо.
За да съхраняваме постоянна информация в база данни, ще използваме таблици които съхраняват редове от данни. Често две или повече таблици ще бъдат свързани една с друга по някакъв начин. Това е част от организацията, която характеризира използването на релационни бази данни.
Създаване на нова база данни
За да създадете нова база данни с име BooksDB
, въведете подканата на MariaDB със следната команда (ще бъдете подканени да въведете паролата за root потребител на MariaDB):
[[email protected] ~]# mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 10.1.14-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> CREATE DATABASE BookstoreDB; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]>
След като базата данни е създадена, трябва да създадем поне две таблици върху нея. Но първо нека проучим концепцията за типовете данни.
Представяме типове данни на MariaDB
Както обяснихме по-рано, таблици са обекти на база данни, където ще съхраняваме постоянна информация. Всяка таблица се състои от две или повече полета (известни също като колони). ) от даден тип данни (типа информация), които това поле може да съхранява.
Най-често срещаните типове данни в MariaDB са следните (можете да прегледате пълния списък в официалната онлайн документация на MariaDB):
Числово:
- БУЛЕВО счита 0 за невярно, а всички други стойности за вярно.
- TINYINT , ако се използва с SIGNED, покрива диапазона от -128 до 127, докато диапазонът UNSIGNED е от 0 до 255.
- SMALLINT , ако се използва с SIGNED, покрива диапазона от -32768 до 32767. Диапазонът UNSIGNED е от 0 до 65535.
- INT , ако се използва с UNSIGNED, покрива диапазона от 0 до 4294967295 и -2147483648 до 2147483647 в противен случай.
Забележка :В TINYINT, SMALLINT и INT се приема по подразбиране SIGNED.
ДВОЙНО(M, D) , където M е общият брой цифри и D е броят на цифрите след десетичната запетая, представлява число с плаваща запетая с двойна точност. Ако е посочено UNSIGNED, отрицателни стойности не са разрешени.
Низ:
- VARCHAR(M) представлява низ с променлива дължина, където M е максимално допустимата дължина на колоната в байтове (65 535 на теория). В повечето случаи броят на байтовете е идентичен с броя на знаците, с изключение на някои знаци, които могат да заемат до 3 байта. Например испанската буква ñ представлява един знак, но заема 2 байта.
- TEXT(M) представлява колона с максимална дължина от 65 535 знака. Въпреки това, както се случва с VARCHAR(M) , действителната максимална дължина се намалява, ако се съхраняват многобайтови знаци. Ако M е посочено, колоната се създава като най-малкия тип, който може да съхранява такъв брой знаци.
- СРЕДЕН ТЕКСТ(M) и LONGTEXT(M) са подобни на TEXT(M) , само че максимално допустимите дължини са съответно 16 777 215 и 4 294 967 295 знака.
Дата и час:
- ДАТА представлява датата в ГГГГ-ММ-ДД формат.
- ВРЕМЕ представлява времето в ЧЧ:ММ:СС.ссс формат (час, минути, секунди и милисекунди).
- DATETIME е комбинацията от ДАТА и ВРЕМЕ в ГГГГ-ММ-ДД ЧЧ:ММ:СС формат.
- TIMESTAMP се използва за дефиниране на момента на добавяне или актуализиране на ред.
След като прегледате тези типове данни, ще бъдете в по-добра позиция да определите кой тип данни трябва да присвоите към дадена колона в таблица.
Например името на човек може лесно да се побере в VARCHAR(50) , докато публикация в блог ще се нуждае от TEXT тип (изберете M според вашите специфични нужди).
Създаване на таблици с първични и външни ключове
Преди да се потопим в създаването на таблици, има две основни концепции за релационни бази данни, които трябва да прегледаме:първични ичуждини ключове.
Първичен ключ съдържа стойност, която уникално идентифицира всеки ред или запис в таблицата. От друга страна, външен ключ се използва за създаване на връзка между данните в две таблици и за управление на данните, които могат да се съхраняват в таблицата, където се намира външният ключ. И първичният, и външният ключ обикновено са INT.
За да илюстрираме, нека използваме BookstoreDB
и създайте две таблици с име AuthorsTBL
и BooksTBL
както следва. НЕ НУЛВО ограничението показва, че свързаното поле изисква стойност, различна от NULL .
Също така, AUTO_INCREMENT се използва за увеличаване с единица на стойността на INT колони с първичен ключ, когато в таблицата се вмъкне нов запис.
MariaDB [(none)]> USE BookstoreDB; MariaDB [(none)]> CREATE TABLE AuthorsTBL ( AuthorID INT NOT NULL AUTO_INCREMENT, AuthorName VARCHAR(100), PRIMARY KEY(AuthorID) ); MariaDB [(none)]> CREATE TABLE BooksTBL ( BookID INT NOT NULL AUTO_INCREMENT, BookName VARCHAR(100) NOT NULL, AuthorID INT NOT NULL, BookPrice DECIMAL(6,2) NOT NULL, BookLastUpdated TIMESTAMP, BookIsAvailable BOOLEAN, PRIMARY KEY(BookID), FOREIGN KEY (AuthorID) REFERENCES AuthorsTBL(AuthorID) );Създайте MySQL таблици с първичен и външен ключ
MariaDB [(none)]> USE BookstoreDB; Database changed MariaDB [BookstoreDB]> CREATE TABLE AuthorsTBL ( -> AuthorID INT NOT NULL AUTO_INCREMENT, -> AuthorName VARCHAR(100), -> PRIMARY KEY(AuthorID) -> ); Query OK, 0 rows affected (0.05 sec) MariaDB [BookstoreDB]> CREATE TABLE BooksTBL ( -> BookID INT NOT NULL AUTO_INCREMENT, -> BookName VARCHAR(100) NOT NULL, -> AuthorID INT NOT NULL, -> BookPrice DECIMAL(6,2) NOT NULL, -> BookLastUpdated TIMESTAMP, -> BookIsAvailable BOOLEAN, -> PRIMARY KEY(BookID), -> FOREIGN KEY (AuthorID) REFERENCES AuthorsTBL(AuthorID) -> ); Query OK, 0 rows affected (0.05 sec) MariaDB [BookstoreDB]>
Сега можем да продължим и да започнем да вмъкваме записи в AuthorsTBL
и BooksTBL
.
Избиране, вмъкване, актуализиране и изтриване на редове
Първо ще попълним AuthorsTBL
маса. Защо? Тъй като трябва да имаме стойности за AuthorID
преди да поставите записи в BooksTBL .
Изпълнете следната заявка от подканата на MariaDB:
MariaDB [BookstoreDB]> INSERT INTO AuthorsTBL (AuthorName) VALUES ('Agatha Christie'), ('Stephen King'), ('Paulo Coelho');
След това ще изберем всички записи от AuthorsTBL . Не забравяйте, че ще се нуждаем от AuthorID за всеки запис, за да създадете INSERT заявка за BooksTBL .
Ако искате да извлечете един запис в даден момент, можете да използвате КЪДЕ клауза, за да посочи условие, на което трябва да отговаря даден ред, за да бъде върнат. Например,
MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL WHERE AuthorName='Agatha Christie';
Като алтернатива можете да изберете всички записи едновременно:
MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL;Изберете и заявете запис в MySQL
MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL WHERE AuthorName='Agatha Christie'; +----------+-----------------+ | AuthorID | AuthorName | +----------+-----------------+ | 1 | Agatha Christie | +----------+-----------------+ 1 row in set (0.00 sec) MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL; +----------+-----------------+ | AuthorID | AuthorName | +----------+-----------------+ | 1 | Agatha Christie | | 2 | Stephen King | | 3 | Paulo Coelho | +----------+-----------------+ 3 rows in set (0.00 sec) MariaDB [BookstoreDB]>
Сега нека създадем INSERT заявка за BooksTBL , като използвате съответния AuthorID да съответства на автора на всяка книга. Стойност от 1 в BookIsAvailable показва, че книгата е на склад, 0 иначе:
MariaDB [BookstoreDB]> INSERT INTO BooksTBL (BookName, AuthorID, BookPrice, BookIsAvailable) VALUES ('And Then There Were None', 1, 14.95, 1), ('The Man in the Brown Suit', 1, 23.99, 1), ('The Stand', 2, 35.99, 1), ('Pet Sematary', 2, 17.95, 0), ('The Green Mile', 2, 29.99, 1), ('The Alchemist', 3, 25, 1), ('By the River Piedra I Sat Down and Wept', 3, 18.95, 0);Вмъкване на заявка в MySQL таблица
MariaDB [BookstoreDB]> INSERT INTO BooksTBL (BookName, AuthorID, BookPrice, BookIsAvailable) -> VALUES ('And Then There Were None', 1, 14.95, 1), -> ('The Man in the Brown Suit', 1, 23.99, 1), -> ('The Stand', 2, 35.99, 1), -> ('Pet Sematary', 2, 17.95, 0), -> ('The Green Mile', 2, 29.99, 1), -> ('The Alchemist', 3, 25, 1), -> ('By the River Piedra I Sat Down and Wept', 3, 18.95, 0); Query OK, 7 rows affected (0.03 sec) Records: 7 Duplicates: 0 Warnings: 0
В този момент ще направим SELECT за да видите записите в BooksTBL . След това нека Актуализираме цената на „Алхимикът ” от Пауло Коелю и ИЗБЕРЕТЕ отново този конкретен запис.
Обърнете внимание как BookLastUpdated полето сега показва различна стойност. Както обяснихме по-рано, TIMESTAMP полето показва стойността, когато записът е бил вмъкнат или последно променен.
MariaDB [BookstoreDB]> SELECT * FROM BooksTBL; MariaDB [BookstoreDB]> UPDATE BooksTBL SET BookPrice=22.75 WHERE BookID=6; MariaDB [BookstoreDB]> SELECT * FROM BooksTBL WHERE BookID=6;Вмъкнете заявка и актуализирайте таблица в MySQL база данни
MariaDB [BookstoreDB]> SELECT * FROM BooksTBL; +--------+-----------------------------------------+----------+-----------+---------------------+-----------------+ | BookID | BookName | AuthorID | BookPrice | BookLastUpdated | BookIsAvailable | +--------+-----------------------------------------+----------+-----------+---------------------+-----------------+ | 1 | And Then There Were None | 1 | 14.95 | 2016-10-01 23:31:41 | 1 | | 2 | The Man in the Brown Suit | 1 | 23.99 | 2016-10-01 23:31:41 | 1 | | 3 | The Stand | 2 | 35.99 | 2016-10-01 23:31:41 | 1 | | 4 | Pet Sematary | 2 | 17.95 | 2016-10-01 23:31:41 | 0 | | 5 | The Green Mile | 2 | 29.99 | 2016-10-01 23:31:41 | 1 | | 6 | The Alchemist | 3 | 25.00 | 2016-10-01 23:31:41 | 1 | | 7 | By the River Piedra I Sat Down and Wept | 3 | 18.95 | 2016-10-01 23:31:41 | 0 | +--------+-----------------------------------------+----------+-----------+---------------------+-----------------+ 7 rows in set (0.00 sec) MariaDB [BookstoreDB]> UPDATE BooksTBL SET BookPrice=22.75 WHERE BookID=6; Query OK, 1 row affected (0.04 sec) Rows matched: 1 Changed: 1 Warnings: 0 MariaDB [BookstoreDB]> SELECT * FROM BooksTBL WHERE BookID=6; +--------+---------------+----------+-----------+---------------------+-----------------+ | BookID | BookName | AuthorID | BookPrice | BookLastUpdated | BookIsAvailable | +--------+---------------+----------+-----------+---------------------+-----------------+ | 6 | The Alchemist | 3 | 22.75 | 2016-10-01 23:35:00 | 1 | +--------+---------------+----------+-----------+---------------------+-----------------+ 1 row in set (0.00 sec) MariaDB [BookstoreDB]>
Въпреки че няма да го направим тук, можете също да изтриете запис, ако вече не се използва. Да предположим например, че искаме да изтрием „Алхимикът ” от BooksTBL .
За целта ще използваме ИЗТРИВАНЕ изявление, както следва:
MariaDB [BookstoreDB]> DELETE FROM BooksTBL WHERE BookID=6;
Както в случая с АКТУАЛИЗИРАНЕ , добра идея е да направите SELECT първо, за да видите записа(ите), които потенциално могат да бъдат засегнати от ИЗТРИВАНЕ .
Също така, не забравяйте да добавите КЪДЕ клауза и условие (BookID=6) за да изберете конкретния запис, който да бъде премахнат. В противен случай рискувате да изтриете всички редове в таблицата!
Ако желаете да свържете две (или повече) полета, можете да използвате CONCAT изявление. Например, да кажем, че искаме да върнем набор от резултати, който се състои от едно поле с името на книгата и автора под формата на „Алхимикът (Пауло Коелю) ” и друга колона с цената.
Това ще изисква JIN между АвториTBL и BooksTBL в общото поле, споделено от двете таблици (AuthorID ):
MariaDB [BookstoreDB]> SELECT CONCAT(BooksTBL.BookName, ' (', AuthorsTBL.AuthorName, ')') AS Description, BooksTBL.BookPrice FROM AuthorsTBL JOIN BooksTBL ON AuthorsTBL.AuthorID = BooksTBL.AuthorID;
Както виждаме, CONCAT ни позволява да обединим множество низови изрази, разделени със запетаи. Ще забележите също, че избрахме псевдонима Описание за представяне на резултатния набор от конкатенацията.
Резултатът от горната заявка е показан на изображението по-долу:
Заявка за множество полета в MySQL таблицаMariaDB [BookstoreDB]> SELECT CONCAT(BooksTBL.BookName, ' (', AuthorsTBL.AuthorName, ')') AS Description, BooksTBL.BookPrice FROM AuthorsTBL JOIN BooksTBL ON AuthorsTBL.AuthorID = BooksTBL.AuthorID; +--------------------------------------------------------+-----------+ | Description | BookPrice | +--------------------------------------------------------+-----------+ | And Then There Were None (Agatha Christie) | 14.95 | | The Man in the Brown Suit (Agatha Christie) | 23.99 | | The Stand (Stephen King) | 35.99 | | Pet Sematary (Stephen King) | 17.95 | | The Green Mile (Stephen King) | 29.99 | | The Alchemist (Paulo Coelho) | 25.00 | | By the River Piedra I Sat Down and Wept (Paulo Coelho) | 18.95 | +--------------------------------------------------------+-----------+ 7 rows in set (0.00 sec)
Създайте потребител за достъп до базата данни на BookstoreDB
Използване на root за изпълнение на всички DML операции в база данни е лоша идея. За да избегнем това, можем да създадем нов MariaDB потребителски акаунт (ще го наречем потребител на книжарница ) и задайте всички необходими разрешения за BookstoreDB :
MariaDB [BookstoreDB]> CREATE USER [email protected] IDENTIFIED BY 'YourPasswordHere'; MariaDB [BookstoreDB]> GRANT ALL PRIVILEGES ON BookstoreDB.* to [email protected]; MariaDB [BookstoreDB]> FLUSH PRIVILEGES;Създаване на нов потребител на база данни с привилегии
MariaDB [BookstoreDB]> CREATE USER [email protected] IDENTIFIED BY 'tecmint'; Query OK, 0 rows affected (0.00 sec) MariaDB [BookstoreDB]> GRANT ALL PRIVILEGES ON BookstoreDB.* to [email protected]; Query OK, 0 rows affected (0.00 sec) MariaDB [BookstoreDB]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec)
Наличието на специален, отделен потребител за всяка база данни ще предотврати повреда на цялата база данни, ако един акаунт бъде компрометиран.
Допълнителни съвети за MySQL
За да изчистите MariaDB подкана, въведете следната команда и натиснете Enter :
MariaDB [BookstoreDB]> \! clear
За да проверите конфигурацията на дадена таблица, направете:
MariaDB [BookstoreDB]> SELECT COLUMNS IN [TABLE NAME HERE ];
Например,
MariaDB [BookstoreDB]> SHOW COLUMNS IN BooksTBL;Избройте колоните в таблицата на базата данни
MariaDB [BookstoreDB]> SHOW COLUMNS IN BooksTBL; +-----------------+--------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+--------------+------+-----+-------------------+-----------------------------+ | BookID | int(11) | NO | PRI | NULL | auto_increment | | BookName | varchar(100) | NO | | NULL | | | AuthorID | int(11) | NO | MUL | NULL | | | BookPrice | decimal(6,2) | NO | | NULL | | | BookLastUpdated | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | | BookIsAvailable | tinyint(1) | YES | | NULL | | +-----------------+--------------+------+-----+-------------------+-----------------------------+ 6 rows in set (0.02 sec)
Бърза проверка разкрива, че BookIsAvailable поле допуска NULL стойности. Тъй като не искаме да позволим това, ще ПРОМЕНИМ таблицата, както следва:
MariaDB [BookstoreDB]> ALTER TABLE BooksTBL MODIFY BookIsAvailable BOOLEAN NOT NULL;
(Чувствайте се свободни да покажете отново колоните – маркираното ДА на горното изображение вече трябва да е НЕ ).
И накрая, за да видите всички бази данни на вашия сървър, направете:
MariaDB [BookstoreDB]> SHOW DATABASES; OR MariaDB [BookstoreDB]> SHOW SCHEMAS;Избройте всички MySQL бази данни
[[email protected] ~]# mysql -u bookstoreuser -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 3 Server version: 10.1.14-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [BookstoreDB]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | BookstoreDB | | information_schema | +--------------------+ 2 rows in set (0.00 sec) MariaDB [BookstoreDB]> SHOW SCHEMAS; +--------------------+ | Database | +--------------------+ | BookstoreDB | | information_schema | +--------------------+ 2 rows in set (0.00 sec)
Следното изображение показва резултата от горната команда след достъп до подканата на MariaDB като потребител на книжарница (обърнете внимание как този акаунт не може да „вижда“ никакви бази данни, различни от BookstoreDB и информационна_схема (достъпно за всички потребители):
Резюме
В тази статия сме обяснили как да стартирате DML операции и как да създадете база данни, таблици и специализирани потребители в база данни на MariaDB. Освен това споделихме няколко съвета, които могат да улеснят живота ви като системен администратор/администратор на база данни.
- Част за администриране на база данни на MySQL – 1
- Част за администриране на база данни на MySQL – 2
- Настройка и оптимизиране на производителността на MySQL – част 3
Ако имате въпроси относно тази статия, не се колебайте да ни уведомите! Чувствайте се свободни да използвате формуляра за коментари по-долу, за да се свържете с нас.