Yeni Başlayanlar İçin MySQL/MariaDB'yi Öğrenin - Bölüm 1


Bu makalede, bir veritabanının (şema olarak da bilinir), tabloların (veri türleriyle birlikte) nasıl oluşturulacağını gösterecek ve Veri İşleme Dili'nin (DML) nasıl gerçekleştirileceğini açıklayacağız. ) MySQL/MariaDB sunucusundaki verilerle yapılan işlemler.

Veritabanı sunucusunun güvenliğini artırmak için daha önce 1) gerekli paketleri Linux sisteminize yüklediğiniz ve 2) mysql_secure_installation'u çalıştırdığınız varsayılmaktadır. . Değilse, MySQL/MariaDB sunucusunu kurmak için aşağıdaki kılavuzları izleyin.

  1. Linux Sistemlerine En Son MySQL Veritabanını Kurun
  2. Linux Sistemlerine En Son MariaDB Veritabanını Kurun

Kısaca belirtmek gerekirse, bu makale boyunca yalnızca MariaDB'den bahsedeceğiz, ancak burada özetlenen kavramlar ve komutlar MySQL için de geçerlidir.

Veritabanları, Tablolar ve Yetkili Kullanıcıların Oluşturulması

Bildiğiniz gibi veri tabanı basit anlamda organize bir bilgi topluluğu olarak tanımlanabilir. Özellikle MariaDB ilişkisel bir veritabanı yönetim sistemidir (RDBMS) ve veritabanları üzerinde işlemler gerçekleştirmek için Yapı Sorgulama Dilini kullanır. Ek olarak, MariaDB'nin veritabanı ve şema terimlerini birbirinin yerine kullandığını unutmayın.

Kalıcı bilgileri bir veritabanında depolamak için veri satırlarını saklayan tabloları kullanacağız. Çoğu zaman iki veya daha fazla tablo bir şekilde birbiriyle ilişkilendirilir. Bu, ilişkisel veritabanlarının kullanımını karakterize eden organizasyonun bir parçasıdır.

Yeni Bir Veritabanı Oluşturma

BooksDB adında yeni bir veritabanı oluşturmak için aşağıdaki komutla MariaDB istemini girin (kök MariaDB kullanıcısının şifresini girmeniz istenecektir):

[root@TecMint ~]# 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)]> 

Veritabanı oluşturulduktan sonra üzerinde en az iki tablo oluşturmamız gerekiyor. Ancak önce veri türleri kavramını inceleyelim.

MariaDB veri türlerine giriş

Daha önce açıkladığımız gibi tablolar kalıcı bilgileri tutacağımız veritabanı nesneleridir. Her tablo, söz konusu alanın depolayabileceği belirli bir veri türüne (bilgi türüne) ait iki veya daha fazla alandan (sütunlar olarak da bilinir) oluşur.

MariaDB'deki en yaygın veri türleri şunlardır (tam listeye resmi MariaDB çevrimiçi belgelerinde başvurabilirsiniz):

Sayısal:
  1. BOOLEAN, 0'ı yanlış, diğer değerleri ise doğru olarak kabul eder.
  2. TINYINT, SIGNED ile birlikte kullanıldığında -128 ila 127 aralığını kapsarken, UNSIGNED aralığı 0 ila 255 arasındadır.
  3. SMALLINT, SIGNED ile birlikte kullanıldığında -32768 ile 32767 arasındaki aralığı kapsar. UNSIGNED aralığı 0 ile 65535 arasındadır.
  4. INT, UNSIGNED ile birlikte kullanıldığında 0 - 4294967295, aksi halde -2147483648 - 2147483647 aralığını kapsar.

Not: TINYINT, SMALLINT ve INT'de varsayılan SIGNED değeri varsayılır.

ÇİFT(M, D); burada M toplam basamak sayısıdır ve D ondalık noktadan sonraki basamak sayısıdır, bir değeri temsil eder çift duyarlıklı kayan noktalı sayı. UNSIGNED belirtilirse negatif değerlere izin verilmez.

Sicim :
  1. VARCHAR(M), değişken uzunlukta bir dizeyi temsil eder; burada M, bayt cinsinden izin verilen maksimum sütun uzunluğudur (teoride 65.535). Çoğu durumda bayt sayısı, 3 bayta kadar yer kaplayabilen bazı karakterler dışında karakter sayısıyla aynıdır. Örneğin, İspanyolca ñ harfi bir karakteri temsil eder ancak 2 bayt yer kaplar.
  2. METİN(M), maksimum 65.535 karakter uzunluğunda bir sütunu temsil eder. Ancak VARCHAR(M)'de olduğu gibi, çok baytlı karakterler depolanırsa gerçek maksimum uzunluk azalır. M belirtilirse bu sayıda karakteri saklayabilen en küçük tür olarak sütun oluşturulur.
  3. MEDIUMTEXT(M) ve LONGTEXT(M), TEXT(M)'e benzer, yalnızca izin verilen maksimum uzunluklar 16,777,215 ve 4,294,967,295 karakterdir, sırasıyla.
Tarih ve saat:
  1. TARİH, YYYY-AA-GG biçimindeki tarihi temsil eder.
  2. TIME, zamanı SS:MM:SS.sss biçiminde (saat, dakika, saniye ve milisaniye) temsil eder.
  3. DATETIME, YYYY-AA-GG SS:MM:SS biçimindeki DATE ve TIME kombinasyonudur.
  4. TIMESTAMP, bir satırın eklendiği veya güncellendiği anı tanımlamak için kullanılır.

Bu veri türlerini inceledikten sonra, tablodaki belirli bir sütuna hangi veri türünü atamanız gerektiğini belirleme konusunda daha iyi bir konumda olacaksınız.

Örneğin, bir kişinin adı VARCHAR(50)'e kolayca sığabilirken, bir blog yazısının TEXT türüne ihtiyacı olacaktır (olarak M'yi seçin) özel ihtiyaçlarınıza göre).

Birincil ve Yabancı Anahtarlarla Tablo Oluşturma

Tablo oluşturmaya başlamadan önce ilişkisel veritabanlarıyla ilgili incelememiz gereken iki temel kavram vardır: birincil ve yabancı anahtarlar.

Birincil anahtar, tablodaki her satırı veya kaydı benzersiz şekilde tanımlayan bir değer içerir. Öte yandan, iki tablodaki veriler arasında bağlantı oluşturmak ve yabancı anahtarın bulunduğu tabloda saklanabilecek verileri kontrol etmek için yabancı anahtar kullanılır. Hem birincil hem de yabancı anahtarlar genellikle INT'lerdir.

Örnek vermek gerekirse, BookstoreDB kullanıp aşağıdaki gibi AuthorsTBL ve BooksTBL adında iki tablo oluşturalım. NOT NULL kısıtlaması, ilişkili alanın NULL dışında bir değer gerektirdiğini belirtir.

Ayrıca AUTO_INCREMENT, tabloya yeni bir kayıt eklendiğinde INT birincil anahtar sütunlarının değerini bir artırmak için kullanılır.

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)
);
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]> 

Artık devam edip AuthorsTBL ve BooksTBL'e kayıt eklemeye başlayabiliriz.

Satırları Seçme, Ekleme, Güncelleme ve Silme

İlk önce YazarlarTBL tablosunu dolduracağız. Neden? Çünkü BooksTBL'e kayıt eklemeden önce AuthorID değerlerine sahip olmamız gerekiyor.

MariaDB isteminizden aşağıdaki sorguyu yürütün:

MariaDB [BookstoreDB]> INSERT INTO AuthorsTBL (AuthorName) VALUES ('Agatha Christie'), ('Stephen King'), ('Paulo Coelho');

Bundan sonra YazarlarTBL'den tüm kayıtları seçeceğiz. BooksTBL için INSERT sorgusunu oluşturmak amacıyla her kayıt için YazarKimliği'ne ihtiyacımız olacağını unutmayın.

Bir kerede bir kayıt almak istiyorsanız, bir satırın döndürülmesi için karşılaması gereken bir koşulu belirtmek üzere WHERE yan tümcesini kullanabilirsiniz. Örneğin,

MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL WHERE AuthorName='Agatha Christie';

Alternatif olarak tüm kayıtları aynı anda seçebilirsiniz:

MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL;
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]>

Şimdi, her kitabın yazarıyla eşleşmek üzere karşılık gelen YazarKimliği'ni kullanarak KitaplarTBL için INSERT sorgusunu oluşturalım. BookIsAvailable'daki 1 değeri kitabın stokta olduğunu gösterir, aksi durumda 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);
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

Bu noktada kayıtları BooksTBL'de görmek için SEÇ yapacağız. Ardından Paulo Coelho'nun "The Alchemist" adlı eserinin fiyatını GÜNCELLE edelim ve söz konusu kaydı yeniden SEÇ.

BookLastUpdated alanının artık nasıl farklı bir değer gösterdiğine dikkat edin. Daha önce açıkladığımız gibi, TIMESTAMP alanı, kaydın eklendiği veya en son değiştirildiği zamanı gösterir.

MariaDB [BookstoreDB]> SELECT * FROM BooksTBL;
MariaDB [BookstoreDB]> UPDATE BooksTBL SET BookPrice=22.75 WHERE BookID=6;
MariaDB [BookstoreDB]> SELECT * FROM BooksTBL WHERE BookID=6;
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]> 

Her ne kadar bunu burada yapmasak da, artık kullanılmıyorsa bir kaydı da silebilirsiniz. Örneğin, "The Alchemist" dosyasını BooksTBL'den silmek istediğimizi varsayalım.

Bunu yapmak için DELETE ifadesini şu şekilde kullanacağız:

MariaDB [BookstoreDB]> DELETE FROM BooksTBL WHERE BookID=6;

GÜNCELLEME durumunda olduğu gibi, 'den etkilenebilecek kayıtları görüntülemek için önce SEÇ yapmak iyi bir fikirdir. SİL.

Ayrıca kaldırılacak belirli kaydı seçmek için WHERE yan tümcesini ve (BookID=6) koşulunu eklemeyi unutmayın. Aksi takdirde tablodaki tüm satırları silme riskiyle karşı karşıya kalırsınız!

İki (veya daha fazla) alanı birleştirmek istiyorsanız CONCAT ifadesini kullanabilirsiniz. Örneğin, "Simyacı (Paulo Coelho)" biçiminde kitap adı ve yazarın yer aldığı bir alan ve fiyatın yer aldığı başka bir sütundan oluşan bir sonuç kümesi döndürmek istediğimizi varsayalım.

Bu, her iki tablo tarafından paylaşılan ortak alanda (AuthorID) AuthorsTBL ve BooksTBL arasında JOIN yapılmasını gerektirir:

MariaDB [BookstoreDB]> SELECT CONCAT(BooksTBL.BookName, ' (', AuthorsTBL.AuthorName, ')') AS Description, BooksTBL.BookPrice FROM AuthorsTBL JOIN BooksTBL ON AuthorsTBL.AuthorID = BooksTBL.AuthorID;

Gördüğümüz gibi CONCAT, virgüllerle ayrılmış birden çok dize ifadesini birleştirmemize olanak tanır. Ayrıca birleştirme işleminin sonuç kümesini temsil etmek için Açıklama takma adını seçtiğimizi de fark edeceksiniz.

Yukarıdaki sorgunun çıktısı aşağıdaki resimde gösterilmektedir:

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 Veritabanına Erişmek için Kullanıcı Oluşturun

Bir veritabanındaki tüm DML işlemlerini gerçekleştirmek için root'u kullanmak kötü bir fikirdir. Bunu önlemek için yeni bir MariaDB kullanıcı hesabı oluşturabilir (bu hesabı bookstoreuser olarak adlandıracağız) ve BookstoreDB için gerekli tüm izinleri atayabiliriz:

MariaDB [BookstoreDB]> CREATE USER bookstoreuser@localhost IDENTIFIED BY 'YourPasswordHere';
MariaDB [BookstoreDB]> GRANT ALL PRIVILEGES ON  BookstoreDB.* to bookstoreuser@localhost;
MariaDB [BookstoreDB]> FLUSH PRIVILEGES;
MariaDB [BookstoreDB]> CREATE USER bookstoreuser@localhost IDENTIFIED BY 'tecmint';
Query OK, 0 rows affected (0.00 sec)

MariaDB [BookstoreDB]> GRANT ALL PRIVILEGES ON  BookstoreDB.* to bookstoreuser@localhost;
Query OK, 0 rows affected (0.00 sec)

MariaDB [BookstoreDB]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Her veritabanı için özel, ayrı bir kullanıcıya sahip olmak, tek bir hesabın ele geçirilmesi durumunda tüm veritabanının zarar görmesini önleyecektir.

Ekstra MySQL İpuçları

MariaDB istemini temizlemek için aşağıdaki komutu yazın ve Enter tuşuna basın:

MariaDB [BookstoreDB]> \! clear

Belirli bir tablonun yapılandırmasını incelemek için şunları yapın:

MariaDB [BookstoreDB]> SELECT COLUMNS IN [TABLE NAME HERE ];

Örneğin,

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)

Hızlı bir inceleme, BookIsAvailable alanının NULL değerleri kabul ettiğini ortaya çıkarır. Buna izin vermek istemediğimiz için tabloyu aşağıdaki gibi DEĞİŞTİRECEĞİZ:

MariaDB [BookstoreDB]> ALTER TABLE BooksTBL MODIFY BookIsAvailable BOOLEAN NOT NULL;

(Sütunları tekrar göstermekten çekinmeyin; yukarıdaki resimde vurgulanan EVET artık HAYIR olmalıdır).

Son olarak sunucunuzdaki tüm veritabanlarını görüntülemek için şunu yapın:

MariaDB [BookstoreDB]> SHOW DATABASES;
OR
MariaDB [BookstoreDB]> SHOW SCHEMAS;
[root@TecMint ~]# 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)

Aşağıdaki resim, bookstoreuser olarak MariaDB istemine eriştikten sonra yukarıdaki komutun sonucunu göstermektedir (bu hesabın BookstoreDB ve dışında herhangi bir veri tabanını nasıl "göremediğine" dikkat edin) Strong>information_schema (tüm kullanıcılar için kullanılabilir):

Özet

Bu yazımızda DML işlemlerinin nasıl çalıştırılacağını ve MariaDB veritabanı üzerinde veritabanı, tablolar ve özel kullanıcıların nasıl oluşturulacağını anlattık. Ayrıca sistem/veri tabanı yöneticisi olarak hayatınızı kolaylaştıracak birkaç ipucu da paylaştık.

  1. MySQL Veritabanı Yönetimi Bölüm – 1
  2. MySQL Veritabanı Yönetimi Bölüm – 2
  3. MySQL Performans Ayarlaması ve Optimizasyonu – Bölüm 3

Bu makaleyle ilgili herhangi bir sorunuz varsa bize bildirmekten çekinmeyin! Bize ulaşmak için aşağıdaki yorum formunu kullanmaktan çekinmeyin.