MySQL - Hızlı Kılavuz
Veritabanı nedir?
Veritabanı, bir veri koleksiyonunu depolayan ayrı bir uygulamadır. Her veritabanı, tuttuğu verileri oluşturmak, erişmek, yönetmek, aramak ve çoğaltmak için bir veya daha fazla farklı API'ye sahiptir.
Dosya sistemindeki dosyalar veya bellekteki büyük karma tablolar gibi diğer veri depoları da kullanılabilir, ancak bu tür sistemlerde veri alma ve yazma o kadar hızlı ve kolay olmaz.
Günümüzde, büyük hacimli verileri depolamak ve yönetmek için ilişkisel veritabanı yönetim sistemlerini (RDBMS) kullanıyoruz. Buna ilişkisel veritabanı denir çünkü tüm veriler farklı tablolarda depolanır ve ilişkiler birincil anahtarlar veya olarak bilinen diğer anahtarlar kullanılarak oluşturulur.Foreign Keys.
Bir Relational DataBase Management System (RDBMS) bir yazılımdır -
Tablolar, sütunlar ve dizinler içeren bir veritabanı uygulamanızı sağlar.
Çeşitli tabloların satırları arasındaki Bilgi Bütünlüğünü garanti eder.
Dizinleri otomatik olarak günceller.
Bir SQL sorgusunu yorumlar ve çeşitli tablolardaki bilgileri birleştirir.
RDBMS Terminolojisi
MySQL veritabanı sistemini açıklamaya geçmeden önce, veritabanıyla ilgili birkaç tanımı gözden geçirelim.
Database - Veritabanı, ilgili verilerin bulunduğu bir tablo koleksiyonudur.
Table- Tablo, veri içeren bir matristir. Veritabanındaki bir tablo, basit bir elektronik tablo gibi görünür.
Column - Bir sütun (veri öğesi), sütun posta kodu gibi tek ve aynı türdeki verileri içerir.
Row - Bir satır (= demet, giriş veya kayıt), bir aboneliğin verileri gibi bir ilişkili veri grubudur.
Redundancy - Sistemi daha hızlı hale getirmek için verileri yedekli olarak iki kez depolama.
Primary Key- Birincil anahtar benzersizdir. Bir tabloda bir anahtar değeri iki kez oluşamaz. Bir anahtarla yalnızca bir satır bulabilirsiniz.
Foreign Key - Yabancı anahtar, iki tablo arasındaki bağlantı pimidir.
Compound Key - Bileşik anahtar (bileşik anahtar), bir sütun yeterince benzersiz olmadığı için birden çok sütundan oluşan bir anahtardır.
Index - Veritabanındaki bir dizin, bir kitabın arkasındaki dizine benzer.
Referential Integrity - Bilgi Bütünlüğü, yabancı anahtar değerinin her zaman mevcut bir satırı işaret etmesini sağlar.
MySQL Veritabanı
MySQL, birçok küçük ve büyük işletme için kullanılan hızlı, kullanımı kolay bir RDBMS'dir. MySQL, bir İsveç şirketi olan MySQL AB tarafından geliştirilmiş, pazarlanmış ve desteklenmiştir. MySQL, birçok iyi nedenden dolayı çok popüler hale geliyor -
MySQL, açık kaynaklı bir lisans altında yayınlandı. Yani onu kullanmak için ödeyecek hiçbir şeyiniz yok.
MySQL, kendi başına çok güçlü bir programdır. En pahalı ve güçlü veritabanı paketlerinin işlevselliğinin büyük bir alt kümesini yönetir.
MySQL, iyi bilinen SQL veri dilinin standart bir biçimini kullanır.
MySQL, birçok işletim sisteminde ve PHP, PERL, C, C ++, JAVA vb. Dahil birçok dilde çalışır.
MySQL çok hızlı çalışır ve büyük veri kümeleriyle bile iyi çalışır.
MySQL, web geliştirme için en beğenilen dil olan PHP için çok dostudur.
MySQL, bir tabloda 50 milyon satıra veya daha fazlasına kadar büyük veritabanlarını destekler. Bir tablo için varsayılan dosya boyutu sınırı 4 GB'tır, ancak bunu (işletim sisteminiz bunu kaldırabilirse) teorik olarak 8 milyon terabayt (TB) sınırına yükseltebilirsiniz.
MySQL özelleştirilebilir. Açık kaynaklı GPL lisansı, programcıların MySQL yazılımını kendi özel ortamlarına uyacak şekilde değiştirmelerine olanak tanır.
Sen başlamadan önce
Bu eğiticiye başlamadan önce, PHP ve HTML eğiticilerimizde yer alan bilgiler hakkında temel bir bilgiye sahip olmalısınız.
Bu eğitim, ağırlıklı olarak MySQL'i bir PHP ortamında kullanmaya odaklanır. Bu öğreticide verilen birçok örnek, PHP Programcıları için faydalı olacaktır.
Referans için PHP Eğitimimize göz atmanızı öneririz.
MySQL için tüm indirmeler MySQL İndirmelerinde bulunur . Sürüm numarasını seçinMySQL Community Server hangi platformda çalıştıracağınızla birlikte gereklidir.
MySQL'i Linux / UNIX'e Kurmak
MySQL'i bir Linux sistemine kurmanın önerilen yolu RPM'dir. MySQL AB, aşağıdaki RPM'leri web sitesinde indirilebilir hale getirir -
MySQL - MySQL veritabanı sunucusu, veritabanlarını ve tabloları yönetir, kullanıcı erişimini kontrol eder ve SQL sorgularını işler.
MySQL-client - Sunucuyla bağlantı kurmayı ve onunla etkileşim kurmayı mümkün kılan MySQL istemci programları.
MySQL-devel - MySQL kullanan diğer programları derlerken kullanışlı olan kitaplıklar ve başlık dosyaları.
MySQL-shared - MySQL istemcisi için paylaşılan kitaplıklar.
MySQL-bench - MySQL veritabanı sunucusu için kıyaslama ve performans test araçları.
Burada listelenen MySQL RPM'lerin tümü bir SuSE Linux system, ancak genellikle diğer Linux varyantlarında zorluk çekmeden çalışırlar.
Şimdi, kuruluma devam etmek için aşağıda verilen adımlara uymanız gerekecek -
Kullanarak sisteme giriş yapın. root kullanıcı.
RPM'leri içeren dizine geçin.
Aşağıdaki komutu uygulayarak MySQL veritabanı sunucusunu kurun. İtalik olarak yazılmış dosya adını RPM'nizin dosya adıyla değiştirmeyi unutmayın.
[root@host]# rpm -i MySQL-5.0.9-0.i386.rpm
Yukarıdaki komut MySQL sunucusunu kurmayı, bir MySQL kullanıcısı oluşturmayı, gerekli yapılandırmayı oluşturmayı ve MySQL sunucusunu otomatik olarak başlatmayı sağlar.
MySQL ile ilgili tüm ikili dosyaları / usr / bin ve / usr / sbin dizinlerinde bulabilirsiniz. Tüm tablolar ve veritabanları / var / lib / mysql dizininde oluşturulacaktır.
Aşağıdaki kod kutusunda, kalan RPM'leri aynı şekilde yüklemek için isteğe bağlı ancak önerilen bir adım vardır -
[root@host]# rpm -i MySQL-client-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-devel-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-shared-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-bench-5.0.9-0.i386.rpm
MySQL'i Windows'a Kurmak
MySQL artık bir yükleyici ile düzgün bir şekilde paketlenmiş olarak geldiğinden, Windows'un herhangi bir sürümünde varsayılan kurulum artık eskisinden çok daha kolay. Kurulum paketini indirin, herhangi bir yerde açın ve setup.exe dosyasını çalıştırın.
Varsayılan yükleyici setup.exe size önemsiz işlem boyunca yol gösterecek ve varsayılan olarak her şeyi C: \ mysql altına yükleyecektir.
Sunucuyu ilk seferinde komut isteminden çalıştırarak test edin. Konumuna gidinmysqld server bu muhtemelen C: \ mysql \ bin'dir ve yazın -
mysqld.exe --console
NOTE - NT üzerindeyseniz mysqld.exe yerine mysqld-nt.exe kullanmanız gerekecektir.
Her şey yolunda giderse, başlatma hakkında bazı mesajlar göreceksiniz ve InnoDB. Değilse, bir izin sorununuz olabilir. Verilerinizi tutan dizinin, veritabanı işlemlerinin çalıştığı kullanıcı (muhtemelen MySQL) tarafından erişilebilir olduğundan emin olun.
MySQL kendisini başlangıç menüsüne eklemeyecektir ve sunucuyu durdurmanın özellikle güzel bir GUI yolu da yoktur. Bu nedenle, sunucuyu mysqld yürütülebilir dosyasını çift tıklatarak başlatma eğilimindeyseniz, mysqladmin, Görev Listesi, Görev Yöneticisi veya diğer Windows'a özgü araçları kullanarak işlemi elle durdurmayı unutmamalısınız.
MySQL Kurulumunu Doğrulama
MySQL başarıyla yüklendikten sonra, temel tablolar başlatıldı ve sunucu başlatıldı: bazı basit testler yoluyla her şeyin olması gerektiği gibi çalıştığını doğrulayabilirsiniz.
Sunucu Durumunu Almak için mysqladmin Yardımcı Programını Kullanın
Kullanım mysqladminsunucu sürümünü kontrol etmek için ikili program. Bu ikili, linux üzerinde / usr / bin içinde ve Windows için C: \ mysql \ bin içinde mevcut olacaktır.
[root@host]# mysqladmin --version
Linux üzerinde aşağıdaki sonucu üretecektir. Kurulumunuza bağlı olarak değişebilir -
mysqladmin Ver 8.23 Distrib 5.0.9-0, for redhat-linux-gnu on i386
Böyle bir mesaj almazsanız, kurulumunuzda bir sorun olabilir ve düzeltmek için biraz yardıma ihtiyacınız olabilir.
MySQL İstemcisini kullanarak basit SQL komutlarını yürütün
MySQL sunucunuza MySQL istemcisi aracılığıyla ve mysqlkomut. Şu anda herhangi bir şifre vermenize gerek yoktur çünkü varsayılan olarak boş olarak ayarlanacaktır.
Sadece aşağıdaki komutu kullanabilirsiniz -
[root@host]# mysql
Bir mysql> komut istemiyle ödüllendirilmelidir. Artık MySQL sunucusuna bağlısınız ve tüm SQL komutlarını mysql> komut isteminde aşağıdaki gibi çalıştırabilirsiniz -
mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 rows in set (0.13 sec)
Kurulum Sonrası Adımlar
MySQL, kök MySQL kullanıcısı için boş bir parola ile gönderilir. Veritabanını ve istemciyi başarıyla kurduğunuzda, aşağıdaki kod bloğunda verilen bir kök şifresi belirlemeniz gerekir -
[root@host]# mysqladmin -u root password "new_password";
Şimdi MySQL sunucunuzla bağlantı kurmak için aşağıdaki komutu kullanmanız gerekir -
[root@host]# mysql -u root -p
Enter password:*******
UNIX kullanıcıları ayrıca MySQL dizininizi PATH'inize koymak isteyeceklerdir, böylece komut satırı istemcisini her kullanmak istediğinizde tam yolu yazmaya devam etmek zorunda kalmazsınız.
Bash için şöyle bir şey olurdu -
export PATH = $PATH:/usr/bin:/usr/sbin
MySQL'i Önyükleme Zamanında Çalıştırma
MySQL sunucusunu önyükleme sırasında çalıştırmak istiyorsanız, /etc/rc.local dosyasında aşağıdaki girdiye sahip olduğunuzdan emin olun.
/etc/init.d/mysqld start
Ayrıca, /etc/init.d/ dizininde mysqld ikilisine sahip olmalısınız.
MySQL Sunucusunu Çalıştırma ve Kapatma
İlk önce MySQL sunucunuzun çalışıp çalışmadığını kontrol edin. Kontrol etmek için aşağıdaki komutu kullanabilirsiniz -
ps -ef | grep mysqld
MySql'iniz çalışıyorsa, göreceksiniz mysqldsonucunuzda listelenen süreç. Sunucu çalışmıyorsa, aşağıdaki komutu kullanarak başlatabilirsiniz -
root@host# cd /usr/bin
./safe_mysqld &
Şimdi, zaten çalışan bir MySQL sunucusunu kapatmak istiyorsanız, aşağıdaki komutu kullanarak bunu yapabilirsiniz -
root@host# cd /usr/bin
./mysqladmin -u root -p shutdown
Enter password: ******
MySQL Kullanıcı Hesabı Oluşturma
MySQL'e yeni bir kullanıcı eklemek için, sadece yeni bir giriş eklemeniz gerekir. user veritabanındaki tablo mysql.
Aşağıdaki program, yeni bir kullanıcı eklemenin bir örneğidir guest şifre ile SELECT, INSERT ve UPDATE ayrıcalıkları ile guest123; SQL sorgusu -
root@host# mysql -u root -p
Enter password:*******
mysql> use mysql;
Database changed
mysql> INSERT INTO user
(host, user, password,
select_priv, insert_priv, update_priv)
VALUES ('localhost', 'guest',
PASSWORD('guest123'), 'Y', 'Y', 'Y');
Query OK, 1 row affected (0.20 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 1 row affected (0.01 sec)
mysql> SELECT host, user, password FROM user WHERE user = 'guest';
+-----------+---------+------------------+
| host | user | password |
+-----------+---------+------------------+
| localhost | guest | 6f8c114b58f2ce9e |
+-----------+---------+------------------+
1 row in set (0.00 sec)
Yeni bir kullanıcı eklerken, MySQL tarafından sağlanan PASSWORD () işlevini kullanarak yeni parolayı şifrelemeyi unutmayın. Yukarıdaki örnekte görebileceğiniz gibi, parola mypass 6f8c114b58f2ce9e olarak şifrelenmiştir.
FLUSH PRIVILEGES bildirimine dikkat edin. Bu, sunucuya hibe tablolarını yeniden yüklemesini söyler. Kullanmazsanız, en azından sunucu yeniden başlatılıncaya kadar yeni kullanıcı hesabını kullanarak MySQL'e bağlanamazsınız.
Ayrıca, INSERT sorgusunu çalıştırırken kullanıcı tablosundaki aşağıdaki sütunların değerlerini 'Y' olarak ayarlayarak veya daha sonra UPDATE sorgusunu kullanarak bunları güncelleyerek yeni bir kullanıcıya başka ayrıcalıklar da belirleyebilirsiniz.
- Select_priv
- Insert_priv
- Update_priv
- Delete_priv
- Create_priv
- Drop_priv
- Reload_priv
- Shutdown_priv
- Process_priv
- File_priv
- Grant_priv
- References_priv
- Index_priv
- Alter_priv
Kullanıcı hesabı eklemenin başka bir yolu da GRANT SQL komutunu kullanmaktır. Aşağıdaki örnek kullanıcı ekleyecekzara şifre ile zara123 olarak adlandırılan belirli bir veritabanı için TUTORIALS.
root@host# mysql -u root -p password;
Enter password:*******
mysql> use mysql;
Database changed
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON TUTORIALS.*
-> TO 'zara'@'localhost'
-> IDENTIFIED BY 'zara123';
Bu ayrıca MySQL veritabanı tablosunda olarak adlandırılan bir giriş oluşturacaktır. user.
NOTE - MySQL, SQL komutunun sonuna noktalı virgül (;) verene kadar bir komutu sonlandırmaz.
/Etc/my.cnf Dosya Yapılandırması
Çoğu durumda bu dosyaya dokunmamalısınız. Varsayılan olarak, aşağıdaki girişlere sahip olacaktır -
[mysqld]
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
[mysql.server]
user = mysql
basedir = /var/lib
[safe_mysqld]
err-log = /var/log/mysqld.log
pid-file = /var/run/mysqld/mysqld.pid
Burada hata günlüğü için farklı bir dizin belirtebilirsiniz, aksi takdirde bu tablodaki hiçbir girişi değiştirmemelisiniz.
İdari MySQL Komutu
İşte MySQL veritabanıyla çalışmak için zaman zaman kullanacağınız önemli MySQL komutlarının listesi -
USE Databasename - Bu, MySQL çalışma alanında bir veritabanı seçmek için kullanılacaktır.
SHOW DATABASES - MySQL DBMS tarafından erişilebilen veritabanlarını listeler.
SHOW TABLES - Kullanım komutuyla bir veritabanı seçildikten sonra veritabanındaki tabloları gösterir.
SHOW COLUMNS FROM tablename: Bir tablo için öznitelikleri, öznitelik türlerini, anahtar bilgilerini, NULL'a izin verilip verilmediğini, varsayılanları ve diğer bilgileri gösterir.
SHOW INDEX FROM tablename - PRIMARY KEY dahil olmak üzere tablodaki tüm dizinlerin ayrıntılarını sunar.
SHOW TABLE STATUS LIKE tablename\G - MySQL DBMS performansının ve istatistiklerinin ayrıntılarını raporlar.
Bir sonraki bölümde, MySQL'de PHP Sözdiziminin nasıl kullanıldığını tartışacağız.
MySQL, PERL, C, C ++, JAVA ve PHP gibi çeşitli programlama dillerinin kombinasyonunda çok iyi çalışır. Bu diller arasında PHP, web uygulaması geliştirme yetenekleri nedeniyle en popüler olanıdır.
Bu eğitim, ağırlıklı olarak MySQL'i bir PHP ortamında kullanmaya odaklanır. Eğer PERL ile MySQL ilgilenen varsa, o zaman okumaya düşünebilirsiniz PERL Eğitimi.
PHP, MySQL veritabanına erişmek ve MySQL veritabanı içindeki veri kayıtlarını değiştirmek için çeşitli işlevler sağlar. PHP işlevlerini, diğer herhangi bir PHP işlevini çağırdığınız şekilde çağırmanız gerekir.
MySQL ile kullanılacak PHP işlevleri aşağıdaki genel biçime sahiptir -
mysql_function(value,value,...);
İşlev adının ikinci bölümü işleve özgüdür, genellikle işlevin ne yaptığını açıklayan bir sözcüktür. Aşağıdakiler, eğitimimizde kullanacağımız işlevlerden ikisi -
mysqli_connect($connect);
mysqli_query($connect,"SQL statement");
Aşağıdaki örnek, herhangi bir MySQL işlevini çağırmak için PHP'nin genel bir sözdizimini gösterir.
<html>
<head>
<title>PHP with MySQL</title>
</head>
<body>
<?php
$retval = mysql_function(value, [value,...]);
if( !$retval ) {
die ( "Error: a related error message" );
}
// Otherwise MySQL or PHP Statements
?>
</body>
</html>
Bir sonraki bölümden başlayarak, PHP ile birlikte tüm önemli MySQL işlevlerini göreceğiz.
MySQL İkili Kullanarak MySQL Bağlantısı
MySQL veritabanını şu şekilde kurabilirsiniz: mysql komut isteminde ikili.
Misal
İşte komut isteminden MySQL sunucusuna bağlanmak için basit bir örnek -
[root@host]# mysql -u root -p
Enter password:******
Bu size herhangi bir SQL komutunu çalıştırabileceğiniz mysql> komut istemini verecektir. Aşağıdaki komutun sonucudur -
Aşağıdaki kod bloğu, yukarıdaki kodun sonucunu gösterir -
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2854760 to server version: 5.0.9
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
Yukarıdaki örnekte kullandık rootbir kullanıcı olarak, ancak başka herhangi bir kullanıcıyı da kullanabilirsiniz. Herhangi bir kullanıcı, o kullanıcıya izin verilen tüm SQL işlemlerini gerçekleştirebilir.
MySQL veritabanından istediğiniz zaman bağlantıyı kesebilirsiniz. exit mysql> komut isteminde komut.
mysql> exit
Bye
PHP Script Kullanarak MySQL Bağlantısı
PHP sağlar mysql_connect()veritabanı bağlantısı açma işlevi. Bu işlev beş parametre alır ve başarı durumunda MySQL bağlantı tanımlayıcısı, başarısızlık durumunda FALSE döndürür.
Sözdizimi
connection mysql_connect(server,user,passwd,new_link,client_flag);
Sr.No. | Parametre ve Açıklama |
---|---|
1 | server İsteğe bağlı - Veritabanı sunucusunu çalıştıran ana bilgisayar adı. Belirtilmezse, varsayılan değer olacaktırlocalhost:3306. |
2 | user İsteğe bağlı - Veritabanına erişen kullanıcı adı. Belirtilmezse, varsayılan, sunucu işlemine sahip olan kullanıcının adı olacaktır. |
3 | passwd İsteğe bağlı - Veritabanına erişen kullanıcının şifresi. Belirtilmezse, varsayılan değer boş bir parola olacaktır. |
4 | new_link İsteğe bağlı - Aynı bağımsız değişkenlerle mysql_connect () öğesine ikinci bir çağrı yapılırsa, yeni bağlantı kurulmaz; bunun yerine, zaten açılmış olan bağlantının tanımlayıcısı döndürülür. |
5 | client_flags İsteğe bağlı - Aşağıdaki sabitlerin bir kombinasyonu -
|
İstediğiniz zaman başka bir PHP işlevi kullanarak MySQL veritabanından bağlantıyı kesebilirsiniz. mysql_close(). Bu işlev, tek bir parametre alır; bu,mysql_connect() işlevi.
Sözdizimi
bool mysql_close ( resource $link_identifier );
Bir kaynak belirtilmezse, son açılan veritabanı kapatılır. Bu işlev bağlantıyı başarıyla kapatırsa true döndürür, aksi takdirde false döndürür.
Misal
Bir MySQL sunucusuna bağlanmak için aşağıdaki örneği deneyin -
<html>
<head>
<title>Connecting MySQL Server</title>
</head>
<body>
<?php
$dbhost = 'localhost:3306'; $dbuser = 'guest';
$dbpass = 'guest123'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($conn);
?>
</body>
</html>
Mysqladmin Kullanarak Veritabanı Oluşturun
Bir MySQL veritabanı oluşturmak veya silmek için özel ayrıcalıklara ihtiyacınız olacaktır. Yani, kök kullanıcıya erişiminiz olduğunu varsayarsak, mysql kullanarak herhangi bir veritabanı oluşturabilirsiniz.mysqladmin ikili.
Misal
İşte adında bir veritabanı oluşturmanın basit bir örneği TUTORIALS -
[root@host]# mysqladmin -u root -p create TUTORIALS
Enter password:******
Bu, TUTORIALS adlı bir MySQL veritabanı oluşturacaktır.
PHP Script kullanarak bir Veritabanı oluşturun
PHP kullanır mysql_queryMySQL veritabanı oluşturma veya silme işlevi. Bu işlev iki parametre alır ve başarı durumunda TRUE, başarısızlık durumunda FALSE döndürür.
Sözdizimi
bool mysql_query( sql, connection );
Sr.No. | Parametre ve Açıklama |
---|---|
1 | sql Gerekli - MySQL veritabanı oluşturmak veya silmek için SQL sorgusu |
2 | connection İsteğe bağlı - belirtilmezse, mysql_connect tarafından açılan son bağlantı kullanılacaktır. |
Misal
Bir veritabanı oluşturmak için aşağıdaki örnek -
<html>
<head>
<title>Creating MySQL Database</title>
</head>
<body>
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root'; $dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully<br />'; $sql = 'CREATE DATABASE TUTORIALS';
$retval = mysql_query( $sql, $conn ); if(! $retval ) {
die('Could not create database: ' . mysql_error());
}
echo "Database TUTORIALS created successfully\n";
mysql_close($conn);
?>
</body>
</html>
Mysqladmin kullanarak bir Veritabanını bırakın
Bir MySQL veritabanı oluşturmak veya silmek için özel ayrıcalıklara ihtiyacınız olacaktır. Yani, kök kullanıcıya erişiminiz olduğunu varsayarak, mysql kullanarak herhangi bir veritabanı oluşturabilirsiniz.mysqladmin ikili.
Herhangi bir veritabanını silerken dikkatli olun çünkü veritabanınızda bulunan tüm verilerinizi kaybedersiniz.
İşte önceki bölümde oluşturulmuş bir veritabanını (EĞİTİCİLER) silmek için bir örnek -
[root@host]# mysqladmin -u root -p drop TUTORIALS
Enter password:******
Bu size bir uyarı verecek ve bu veritabanını gerçekten silmek isteyip istemediğinizi onaylayacaktır.
Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.
Do you really want to drop the 'TUTORIALS' database [y/N] y
Database "TUTORIALS" dropped
PHP Script kullanarak Veritabanını Bırak
PHP kullanır mysql_queryMySQL veritabanı oluşturma veya silme işlevi. Bu işlev iki parametre alır ve başarı durumunda TRUE, başarısızlık durumunda FALSE döndürür.
Sözdizimi
bool mysql_query( sql, connection );
Sr.No | Parametre ve Açıklama |
---|---|
1 | sql Gerekli - MySQL veritabanı oluşturmak veya silmek için SQL sorgusu |
2 | connection İsteğe bağlı - belirtilmezse, mysql_connect tarafından açılan son bağlantı kullanılacaktır. |
Misal
Bir veritabanını silmek için aşağıdaki örneği deneyin -
<html>
<head>
<title>Deleting MySQL Database</title>
</head>
<body>
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root'; $dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully<br />'; $sql = 'DROP DATABASE TUTORIALS';
$retval = mysql_query( $sql, $conn ); if(! $retval ) {
die('Could not delete database: ' . mysql_error());
}
echo "Database TUTORIALS deleted successfully\n";
mysql_close($conn);
?>
</body>
</html>
WARNING- PHP betiğini kullanarak bir veritabanını silerken, sizden herhangi bir onay istemez. Bu yüzden bir MySQL veritabanını silerken dikkatli olun.
MySQL sunucusuna bağlandıktan sonra, çalışmak için bir veritabanı seçmeniz gerekir. Bunun nedeni, MySQL Sunucusuyla birden fazla veritabanı kullanılabilir olabilmesidir.
Komut İsteminden MySQL Veritabanını Seçme
Mysql> komut isteminden bir veritabanı seçmek çok basittir. SQL komutunu kullanabilirsinizuse bir veritabanı seçmek için.
Misal
İşte adı verilen bir veritabanı seçmek için bir örnek TUTORIALS -
[root@host]# mysql -u root -p
Enter password:******
mysql> use TUTORIALS;
Database changed
mysql>
Şimdi, EĞİTİCİLER veritabanını seçtiniz ve sonraki tüm işlemler EĞİTİCİLER veritabanı üzerinde gerçekleştirilecektir.
NOTE- Tüm veritabanı adları, tablo adları, tablo alanları adları büyük / küçük harfe duyarlıdır. Yani herhangi bir SQL komutu verirken uygun isimleri kullanmanız gerekir.
PHP Script Kullanarak MySQL Veritabanı Seçme
PHP işlev sağlar mysql_select_dbbir veritabanı seçmek için. Başarı durumunda TRUE, başarısızlık durumunda FALSE döndürür.
Sözdizimi
bool mysql_select_db( db_name, connection );
Sr.No. | Parametre ve Açıklama |
---|---|
1 | db_name Gerekli - MySQL Veritabanı adı seçilecek |
2 | connection İsteğe bağlı - belirtilmezse, mysql_connect tarafından açılan son bağlantı kullanılacaktır. |
Misal
İşte size bir veritabanını nasıl seçeceğinizi gösteren bir örnek.
<html>
<head>
<title>Selecting MySQL Database</title>
</head>
<body>
<?php
$dbhost = 'localhost:3036';
$dbuser = 'guest'; $dbpass = 'guest123';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully'; mysql_select_db( 'TUTORIALS' ); mysql_close($conn);
?>
</body>
</html>
Bir tablodaki alanların doğru şekilde tanımlanması, veritabanınızın genel optimizasyonu için önemlidir. Yalnızca gerçekten kullanmanız gereken alan türünü ve boyutunu kullanmalısınız. Örneğin, yalnızca 2 karakter kullanacağınızı biliyorsanız, 10 karakter genişliğinde bir alan tanımlamayın. Bu tür alanlar (veya sütunlar), veri türleri olarak da adlandırılır.type of data o alanlarda depolayacaksınız.
MySQL, üç kategoriye ayrılmış birçok farklı veri türü kullanır -
- Numeric
- Tarih ve saat
- Dize Türleri.
Şimdi bunları ayrıntılı olarak tartışalım.
Sayısal Veri Türleri
MySQL, tüm standart ANSI SQL sayısal veri türlerini kullanır, bu nedenle MySQL'e farklı bir veritabanı sisteminden geliyorsanız, bu tanımlar size tanıdık gelecektir.
Aşağıdaki liste, yaygın sayısal veri türlerini ve açıklamalarını gösterir -
INT- İşaretli veya işaretsiz olabilen normal boyutlu bir tam sayı. İmzalanmışsa, izin verilen aralık -2147483648 ile 2147483647 arasındadır. İşaretlenmemişse, izin verilen aralık 0 ile 4294967295 arasındadır. En fazla 11 basamaklı bir genişlik belirtebilirsiniz.
TINYINT- İmzalı veya işaretsiz olabilen çok küçük bir tam sayı. İmzalanmışsa, izin verilen aralık -128 ila 127'dir. İşaretsizse, izin verilen aralık 0 ila 255'tir. En fazla 4 basamaklı bir genişlik belirtebilirsiniz.
SMALLINT- İmzalı veya işaretsiz olabilen küçük bir tam sayı. İmzalanmışsa, izin verilen aralık -32768 ila 32767'dir. İşaretlenmemişse, izin verilen aralık 0 ila 65535'tir. En fazla 5 basamaklı bir genişlik belirtebilirsiniz.
MEDIUMINT- İmzalı veya işaretsiz olabilen orta büyüklükte bir tam sayı. İmzalanmışsa, izin verilen aralık -8388608 ila 8388607'dir. İşaretlenmemişse, izin verilen aralık 0 ila 16777215'tir. En fazla 9 basamaklı bir genişlik belirtebilirsiniz.
BIGINT- İmzalı veya işaretsiz olabilen büyük bir tam sayı. İmzalanmışsa, izin verilen aralık -9223372036854775808 ile 9223372036854775807 arasındadır. İmzalanmamışsa, izin verilen aralık 0 ile 18446744073709551615 arasındadır. Genişliği 20 haneye kadar belirtebilirsiniz.
FLOAT(M,D)- İmzalanamayan kayan noktalı sayı. Görüntüleme uzunluğunu (M) ve ondalık basamak sayısını (D) tanımlayabilirsiniz. Bu gerekli değildir ve varsayılan olarak 10,2 olacaktır; burada 2, ondalık sayıların sayısı ve 10, toplam basamak sayısıdır (ondalıklar dahil). Ondalık hassasiyet bir FLOAT için 24 haneye gidebilir.
DOUBLE(M,D)- İmzalanamayan çift duyarlıklı kayan noktalı sayı. Görüntüleme uzunluğunu (M) ve ondalık basamak sayısını (D) tanımlayabilirsiniz. Bu gerekli değildir ve varsayılan olarak 16,4 olacaktır; burada 4, ondalıkların sayısıdır. Ondalık hassasiyet, DOUBLE için 53 haneye gidebilir. GERÇEK, DOUBLE ile eşanlamlıdır.
DECIMAL(M,D)- İmzalanamayan paketlenmemiş kayan nokta numarası. Paketlenmemiş ondalık sayılarda, her ondalık bir bayta karşılık gelir. Görüntüleme uzunluğunun (M) ve ondalık sayıların (D) tanımlanması gerekir. NUMERIC, DECIMAL ile eşanlamlıdır.
Tarih ve Saat Türleri
MySQL tarih ve saat veri türleri aşağıdaki gibidir -
DATE- 1000-01-01 ve 9999-12-31 arasında YYYY-AA-GG biçiminde bir tarih. Örneğin 30 Aralık inci 1973 1973-12-30 olarak saklanabilir.
DATETIME- 1000-01-01 00:00:00 ve 9999-12-31 23:59:59 arasında YYYY-AA-GG SS: DD: SS biçiminde bir tarih ve saat kombinasyonu. Örneğin, 30 Aralık öğleden sonra 3:30 th , 1973 1973-12-30 15:30:00 olarak saklanabilir.
TIMESTAMP- gece yarısı arasında bir zaman damgası, 1 Ocak st , 1970 ve bazen önceki DATETIME biçimi gibi sadece sayılar arasındaki tire olmadan bu görünüyor 2037 yılında; 30 Aralık öğleden sonra 3:30 th , 1973 19731230153000 (YYYYMMDDHHMMSS) halinde saklanabilir.
TIME - Saati SS: DD: SS biçiminde kaydeder.
YEAR(M)- Bir yılı 2 basamaklı veya 4 basamaklı biçimde kaydeder. Uzunluk 2 olarak belirtilirse (örneğin YIL (2)), YEAR 1970 ile 2069 (70 ila 69) arasında olabilir. Uzunluk 4 olarak belirtilmişse, YEAR 1901 ila 2155 olabilir. Varsayılan uzunluk 4'tür.
Dize Türleri
Sayısal ve tarih türleri eğlenceli olsa da, depolayacağınız verilerin çoğu bir dize biçiminde olacaktır. Bu liste, MySQL'deki yaygın dize veri türlerini açıklar.
CHAR(M)- 1 ile 255 karakter uzunluğunda sabit uzunlukta bir dize (örneğin CHAR (5)), saklandığında belirtilen uzunlukta boşluklarla sağ dolgulu. Uzunluk tanımlamak gerekli değildir, ancak varsayılan 1'dir.
VARCHAR(M)- 1 ile 255 karakter arasında değişen uzunlukta bir dize. Örneğin, VARCHAR (25). Bir VARCHAR alanı oluştururken bir uzunluk tanımlamalısınız.
BLOB or TEXT- Maksimum 65535 karakter uzunluğunda bir alan. BLOB'lar "İkili Büyük Nesnelerdir" ve görüntüler veya diğer dosya türleri gibi büyük miktarda ikili veriyi depolamak için kullanılır. METİN olarak tanımlanan alanlar da büyük miktarda veri tutar. İkisi arasındaki fark, depolanan verilerdeki sıralama ve karşılaştırmalarıncase sensitive BLOB'larda ve not case sensitiveMETİN alanlarında. BLOB veya TEXT ile bir uzunluk belirtmezsiniz.
TINYBLOB or TINYTEXT- Maksimum 255 karakter uzunluğunda bir BLOB veya TEXT sütunu. TINYBLOB veya TINYTEXT ile bir uzunluk belirtmezsiniz.
MEDIUMBLOB or MEDIUMTEXT- Maksimum uzunluğu 16777215 karakter olan bir BLOB veya TEXT sütunu. MEDIUMBLOB veya MEDIUMTEXT ile bir uzunluk belirtmezsiniz.
LONGBLOB or LONGTEXT- Maksimum uzunluğu 4294967295 karakter olan bir BLOB veya TEXT sütunu. LONGBLOB veya LONGTEXT ile bir uzunluk belirtmezsiniz.
ENUM- Liste için süslü bir terim olan bir numaralandırma. Bir ENUM tanımlarken, değerin seçilmesi gereken (veya NULL olabilir) bir öğe listesi oluşturursunuz. Örneğin, alanınızın "A" veya "B" veya "C" içermesini istiyorsanız, ENUM'unuzu ENUM ('A', 'B', 'C') ve yalnızca bu değerleri (veya NULL) olarak tanımlarsınız. o alanı doldurabilirdi.
Bir sonraki bölümde, MySQL'de tabloların nasıl oluşturulacağını tartışacağız.
Başlangıç olarak, tablo oluşturma komutu aşağıdaki ayrıntıları gerektirir -
- Tablonun adı
- Alanların adı
- Her alan için tanımlar
Sözdizimi
İşte bir MySQL tablosu oluşturmak için genel bir SQL sözdizimi -
CREATE TABLE table_name (column_name column_type);
Şimdi, aşağıdaki tabloyu oluşturacağız TUTORIALS veri tabanı.
create table tutorials_tbl(
tutorial_id INT NOT NULL AUTO_INCREMENT,
tutorial_title VARCHAR(100) NOT NULL,
tutorial_author VARCHAR(40) NOT NULL,
submission_date DATE,
PRIMARY KEY ( tutorial_id )
);
Burada birkaç öğenin açıklamaya ihtiyacı var -
Alan Özelliği NOT NULLkullanılıyor çünkü bu alanın NULL olmasını istemiyoruz. Bu nedenle, bir kullanıcı NULL değerine sahip bir kayıt oluşturmaya çalışırsa, MySQL bir hata oluşturacaktır.
Alan Özelliği AUTO_INCREMENT MySQL'e devam etmesini ve bir sonraki mevcut numarayı kimlik alanına eklemesini söyler.
Anahtar kelime PRIMARY KEYbir sütunu birincil anahtar olarak tanımlamak için kullanılır. Birincil anahtarı tanımlamak için virgülle ayrılmış birden çok sütun kullanabilirsiniz.
Komut İsteminden Tablo Oluşturma
Mysql> komut isteminden bir MySQL tablosu oluşturmak kolaydır. SQL komutunu kullanacaksınızCREATE TABLE tablo oluşturmak için.
Misal
İşte yaratacak bir örnek tutorials_tbl -
root@host# mysql -u root -p
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> CREATE TABLE tutorials_tbl(
-> tutorial_id INT NOT NULL AUTO_INCREMENT,
-> tutorial_title VARCHAR(100) NOT NULL,
-> tutorial_author VARCHAR(40) NOT NULL,
-> submission_date DATE,
-> PRIMARY KEY ( tutorial_id )
-> );
Query OK, 0 rows affected (0.16 sec)
mysql>
NOTE - MySQL, siz SQL komutunun sonuna noktalı virgül (;) verene kadar bir komutu sonlandırmaz.
PHP Script Kullanarak Tablolar Oluşturma
Mevcut herhangi bir veritabanında yeni tablo oluşturmak için PHP işlevini kullanmanız gerekir mysql_query(). Bir tablo oluşturmak için ikinci argümanını uygun bir SQL komutuyla geçireceksiniz.
Misal
Aşağıdaki program, PHP betiğini kullanarak bir tablo oluşturmak için bir örnektir -
<html>
<head>
<title>Creating MySQL Tables</title>
</head>
<body>
<?php
$dbhost = 'localhost:3036'; $dbuser = 'root';
$dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully<br />';
$sql = "CREATE TABLE tutorials_tbl( ". "tutorial_id INT NOT NULL AUTO_INCREMENT, ". "tutorial_title VARCHAR(100) NOT NULL, ". "tutorial_author VARCHAR(40) NOT NULL, ". "submission_date DATE, ". "PRIMARY KEY ( tutorial_id )); "; mysql_select_db( 'TUTORIALS' ); $retval = mysql_query( $sql, $conn );
if(! $retval ) { die('Could not create table: ' . mysql_error()); } echo "Table created successfully\n"; mysql_close($conn);
?>
</body>
</html>
Mevcut bir MySQL tablosunu düşürmek çok kolaydır, ancak var olan herhangi bir tabloyu silerken çok dikkatli olmanız gerekir çünkü bir tablo silindikten sonra kaybolan veriler kurtarılmayacaktır.
Sözdizimi
İşte bir MySQL tablosunu düşürmek için genel bir SQL sözdizimi -
DROP TABLE table_name ;
Komut İsteminden Tabloları Bırakma
Komut isteminden tabloları bırakmak için, mysql> komut isteminde DROP TABLE SQL komutunu çalıştırmamız gerekir.
Misal
Aşağıdaki program, tutorials_tbl -
root@host# mysql -u root -p
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> DROP TABLE tutorials_tbl
Query OK, 0 rows affected (0.8 sec)
mysql>
PHP Script Kullanarak Tabloları Bırakma
Herhangi bir veritabanında mevcut bir tabloyu bırakmak için PHP işlevini kullanmanız gerekir. mysql_query(). Bir tabloyu düşürmek için ikinci argümanını uygun bir SQL komutuyla geçireceksiniz.
Misal
<html>
<head>
<title>Creating MySQL Tables</title>
</head>
<body>
<?php
$dbhost = 'localhost:3036'; $dbuser = 'root';
$dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully<br />';
$sql = "DROP TABLE tutorials_tbl"; mysql_select_db( 'TUTORIALS' ); $retval = mysql_query( $sql, $conn );
if(! $retval ) { die('Could not delete table: ' . mysql_error()); } echo "Table deleted successfully\n"; mysql_close($conn);
?>
</body>
</html>
Bir MySQL tablosuna veri eklemek için SQL'i kullanmanız gerekir. INSERT INTOkomut. MySQL tablosuna mysql> komut istemini veya PHP gibi herhangi bir komut dosyasını kullanarak veri ekleyebilirsiniz.
Sözdizimi
İşte MySQL tablosuna veri eklemek için INSERT INTO komutunun genel bir SQL sözdizimi -
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
Dize veri türlerini eklemek için, tüm değerlerin çift veya tek tırnak içinde tutulması gerekir. Örneğin"value".
Komut İsteminden Veri Ekleme
Komut isteminden veri eklemek için SQL INSERT INTO komutunu kullanarak MySQL tablo tutorials_tbl içine veri gireceğiz.
Misal
Aşağıdaki örnek, içine 3 kayıt oluşturacaktır. tutorials_tbl tablo -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> INSERT INTO tutorials_tbl
->(tutorial_title, tutorial_author, submission_date)
->VALUES
->("Learn PHP", "John Poul", NOW());
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO tutorials_tbl
->(tutorial_title, tutorial_author, submission_date)
->VALUES
->("Learn MySQL", "Abdul S", NOW());
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO tutorials_tbl
->(tutorial_title, tutorial_author, submission_date)
->VALUES
->("JAVA Tutorial", "Sanjay", '2007-05-06');
Query OK, 1 row affected (0.01 sec)
mysql>
NOTE- Lütfen tüm ok işaretlerinin (->) SQL komutunun bir parçası olmadığını unutmayın. Yeni bir satırı belirtirler ve komutun her satırının sonunda noktalı virgül vermeden enter tuşuna basarken MySQL komut istemiyle otomatik olarak oluşturulurlar.
Yukarıdaki örnekte, bir tutorial_id sağlamadık çünkü tablo oluşturma sırasında bu alan için AUTO_INCREMENT seçeneğini vermiştik. Dolayısıyla MySQL, bu kimlikleri otomatik olarak eklemeye özen gösterir. Buraya,NOW() geçerli tarih ve saati döndüren bir MySQL işlevidir.
PHP Betiği Kullanarak Veri Ekleme
PHP işlevinde aynı SQL INSERT INTO komutunu kullanabilirsiniz mysql_query() MySQL tablosuna veri eklemek için.
Misal
Bu örnek, kullanıcıdan üç parametre alacak ve bunları MySQL tablosuna ekleyecektir -
<html>
<head>
<title>Add New Record in MySQL Database</title>
</head>
<body>
<?php
if(isset($_POST['add'])) { $dbhost = 'localhost:3036';
$dbuser = 'root'; $dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) { die('Could not connect: ' . mysql_error()); } if(! get_magic_quotes_gpc() ) { $tutorial_title = addslashes ($_POST['tutorial_title']); $tutorial_author = addslashes ($_POST['tutorial_author']); } else { $tutorial_title = $_POST['tutorial_title']; $tutorial_author = $_POST['tutorial_author']; } $submission_date = $_POST['submission_date']; $sql = "INSERT INTO tutorials_tbl ".
"(tutorial_title,tutorial_author, submission_date) "."VALUES ".
"('$tutorial_title','$tutorial_author','$submission_date')"; mysql_select_db('TUTORIALS'); $retval = mysql_query( $sql, $conn );
if(! $retval ) { die('Could not enter data: ' . mysql_error()); } echo "Entered data successfully\n"; mysql_close($conn);
} else {
?>
<form method = "post" action = "<?php $_PHP_SELF ?>">
<table width = "600" border = "0" cellspacing = "1" cellpadding = "2">
<tr>
<td width = "250">Tutorial Title</td>
<td>
<input name = "tutorial_title" type = "text" id = "tutorial_title">
</td>
</tr>
<tr>
<td width = "250">Tutorial Author</td>
<td>
<input name = "tutorial_author" type = "text" id = "tutorial_author">
</td>
</tr>
<tr>
<td width = "250">Submission Date [ yyyy-mm-dd ]</td>
<td>
<input name = "submission_date" type = "text" id = "submission_date">
</td>
</tr>
<tr>
<td width = "250"> </td>
<td> </td>
</tr>
<tr>
<td width = "250"> </td>
<td>
<input name = "add" type = "submit" id = "add" value = "Add Tutorial">
</td>
</tr>
</table>
</form>
<?php
}
?>
</body>
</html>
Bir veri girişi yaparken, en iyisi işlevi kullanmaktır get_magic_quotes_gpc()sihirli alıntı için geçerli yapılandırmanın ayarlanıp ayarlanmadığını kontrol etmek için. Bu işlev yanlış döndürürse, işlevi kullanınaddslashes() tırnak işaretlerinden önce eğik çizgi eklemek için.
Girilen verilerin doğru olup olmadığını kontrol etmek için birçok doğrulama yapabilir ve uygun eylemi gerçekleştirebilirsiniz.
SQL SELECTkomutu, MySQL veritabanından veri almak için kullanılır. Bu komutu mysql> komutunda ve PHP gibi herhangi bir komut dosyasında kullanabilirsiniz.
Sözdizimi
İşte MySQL tablosundan veri almak için SELECT komutunun genel SQL sözdizimi -
SELECT field1, field2,...fieldN
FROM table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]
WHERE yan tümcesi kullanarak çeşitli koşulları dahil etmek için virgülle ayrılmış bir veya daha fazla tablo kullanabilirsiniz, ancak WHERE yan tümcesi, SELECT komutunun isteğe bağlı bir parçasıdır.
Tek bir SELECT komutuyla bir veya daha fazla alanı getirebilirsiniz.
Alanların yerine yıldız (*) belirtebilirsiniz. Bu durumda, SEÇ, tüm alanları döndürür.
WHERE yan tümcesini kullanarak herhangi bir koşulu belirtebilirsiniz.
Kullanarak bir ofset belirtebilirsiniz OFFSETSELECT'in kayıtları döndürmeye başlayacağı yerden. Varsayılan olarak, ofset sıfırdan başlar.
Kullanarak iade sayısını sınırlayabilirsiniz. LIMIT öznitelik.
Komut İsteminden Veri Almak
Bu, MySQL tablosundan veri almak için SQL SELECT komutunu kullanacaktır. tutorials_tbl.
Misal
Aşağıdaki örnek, tüm kayıtları döndürür. tutorials_tbl tablo -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
| 1 | Learn PHP | John Poul | 2007-05-21 |
| 2 | Learn MySQL | Abdul S | 2007-05-21 |
| 3 | JAVA Tutorial | Sanjay | 2007-05-21 |
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.01 sec)
mysql>
PHP Betiği Kullanarak Verileri Getirme
Aynı SQL SELECT komutunu bir PHP işlevinde kullanabilirsiniz mysql_query(). Bu işlev, SQL komutunu ve daha sonra başka bir PHP işlevini çalıştırmak için kullanılır.mysql_fetch_array()seçilen tüm verileri almak için kullanılabilir. Bu işlev, satırı ilişkilendirilebilir dizi, sayısal dizi veya her ikisi olarak döndürür. Başka satır yoksa bu işlev FALSE döndürür.
Aşağıdaki program, kayıtların nasıl alınacağını / görüntüleneceğini gösteren basit bir örnektir. tutorials_tbl tablo.
Misal
Aşağıdaki kod bloğu, tutorials_tbl tablosundaki tüm kayıtları gösterecektir.
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root'; $dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn ); if(! $retval ) {
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
echo "Tutorial ID :{$row['tutorial_id']} <br> ". "Title: {$row['tutorial_title']} <br> ".
"Author: {$row['tutorial_author']} <br> ". "Submission Date : {$row['submission_date']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>
Satırların içeriği $ satır değişkenine atanır ve bu satırdaki değerler yazdırılır.
NOTE - Bir dizi değerini doğrudan bir dizeye eklemek istediğinizde her zaman küme parantezleri koymayı unutmayın.
Yukarıdaki örnekte, sabit MYSQL_ASSOC PHP işlevinin ikinci bağımsız değişkeni olarak kullanılır mysql_fetch_array(), böylece satırı ilişkilendirilebilir bir dizi olarak döndürür. İlişkilendirilebilir bir dizi ile, indeksi kullanmak yerine ismini kullanarak alana erişebilirsiniz.
PHP, mysql_fetch_assoc(), ayrıca satırı ilişkilendirilebilir bir dizi olarak döndürür.
Misal
Mysql_fetch_assoc () işlevini kullanarak tutorial_tbl tablosundaki tüm kayıtları görüntülemek için aşağıdaki örnek.
<?php
$dbhost = 'localhost:3036'; $dbuser = 'root';
$dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl'; mysql_select_db('TUTORIALS'); $retval = mysql_query( $sql, $conn );
if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_assoc($retval)) { echo "Tutorial ID :{$row['tutorial_id']} <br> ".
"Title: {$row['tutorial_title']} <br> ". "Author: {$row['tutorial_author']} <br> ".
"Submission Date : {$row['submission_date']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn);
?>
Ayrıca sabiti de kullanabilirsiniz. MYSQL_NUMPHP işlevinin ikinci bağımsız değişkeni olarak mysql_fetch_array (). Bu, işlevin sayısal indeksi olan bir dizi döndürmesine neden olur.
Misal
MYSQL_NUM bağımsız değişkenini kullanarak tutorials_tbl tablosundaki tüm kayıtları görüntülemek için aşağıdaki örneği deneyin.
<?php
$dbhost = 'localhost:3036'; $dbuser = 'root';
$dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl'; mysql_select_db('TUTORIALS'); $retval = mysql_query( $sql, $conn );
if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_NUM)) { echo "Tutorial ID :{$row[0]} <br> ".
"Title: {$row[1]} <br> ". "Author: {$row[2]} <br> ".
"Submission Date : {$row[3]} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn);
?>
Yukarıdaki üç örneğin tümü aynı sonucu verecektir.
Belleği Serbest Bırakma
İmleç belleğini her SELECT ifadesinin sonunda serbest bırakmak iyi bir uygulamadır. Bu, PHP işlevi kullanılarak yapılabilirmysql_free_result(). Aşağıdaki program, nasıl kullanılması gerektiğini gösteren örnektir.
Misal
Aşağıdaki örneği deneyin -
<?php
$dbhost = 'localhost:3036'; $dbuser = 'root';
$dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl'; mysql_select_db('TUTORIALS'); $retval = mysql_query( $sql, $conn );
if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_NUM)) { echo "Tutorial ID :{$row[0]} <br> ".
"Title: {$row[1]} <br> ". "Author: {$row[2]} <br> ".
"Submission Date : {$row[3]} <br> ". "--------------------------------<br>"; } mysql_free_result($retval);
echo "Fetched data successfully\n";
mysql_close($conn);
?>
Veri alırken, istediğiniz kadar karmaşık bir kod yazabilirsiniz, ancak prosedür yukarıda belirtildiği gibi kalacaktır.
SQL'i gördük SELECTMySQL tablosundan veri almak için komut. Bir koşullu cümle kullanabiliriz:WHERE Clausesonuçları filtrelemek için. Bu WHERE cümlesini kullanarak, bir tablodan gerekli kayıtları seçmek için bir seçim kriteri belirleyebiliriz.
Sözdizimi
Aşağıdaki kod bloğu, MySQL tablosundan veri almak için WHERE yan tümcesine sahip SELECT komutunun genel bir SQL sözdizimine sahiptir -
SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
WHERE yan tümcesi kullanarak çeşitli koşulları dahil etmek için virgülle ayrılmış bir veya daha fazla tabloyu kullanabilirsiniz, ancak WHERE yan tümcesi SELECT komutunun isteğe bağlı bir parçasıdır.
WHERE yan tümcesini kullanarak herhangi bir koşulu belirtebilirsiniz.
Kullanarak birden fazla koşul belirtebilirsiniz. AND ya da OR operatörler.
WHERE yan tümcesi, bir koşul belirtmek için DELETE veya UPDATE SQL komutuyla birlikte kullanılabilir.
WHERE fıkra gibi çalışır if conditionherhangi bir programlama dilinde. Bu cümle, verilen değeri bir MySQL tablosunda bulunan alan değeriyle karşılaştırmak için kullanılır. Dışarıdan verilen değer MySQL tablosundaki kullanılabilir alan değerine eşitse, o satırı döndürür.
İle kullanılabilecek operatörlerin listesi aşağıdadır. WHERE fıkra.
A alanının 10 ve B alanının 20 olduğunu varsayalım, o zaman -
Şebeke | Açıklama | Misal |
---|---|---|
= | İki işlenenin değerlerinin eşit olup olmadığını kontrol eder, evet ise, koşul doğru olur. | (A = B) doğru değil. |
! = | İki işlenenin değerlerinin eşit olup olmadığını kontrol eder, değerler eşit değilse koşul doğru olur. | (A! = B) doğrudur. |
> | Sol işlenenin değerinin sağ işlenenin değerinden büyük olup olmadığını kontrol eder, evet ise koşul doğru olur. | (A> B) doğru değil. |
< | Soldaki işlenenin değerinin sağ işlenenin değerinden küçük olup olmadığını kontrol eder, evet ise koşul doğru olur. | (A <B) doğrudur. |
> = | Soldaki işlenenin değerinin sağ işlenenin değerinden büyük veya ona eşit olup olmadığını kontrol eder, evet ise, koşul doğru olur. | (A> = B) doğru değil. |
<= | Soldaki işlenenin değerinin sağ işlenenin değerinden küçük veya ona eşit olup olmadığını kontrol eder, eğer öyleyse, koşul doğru olur. | (A <= B) doğrudur. |
WHERE deyimi, bir tablodan seçilen satırları getirmek istediğinizde, özellikle de MySQL Join. Birleştirmeler başka bir bölümde tartışılmaktadır.
Kayıtları aramak yaygın bir uygulamadır. Primary Key aramayı hızlandırmak için.
Verilen koşul tablodaki herhangi bir kayıtla eşleşmezse, sorgu herhangi bir satır döndürmez.
Komut İsteminden Veri Almak
Bu, seçilen verileri MySQL tablosundan almak için SQL SELECT komutunu WHERE cümlesiyle birlikte kullanır - tutorials_tbl.
Misal
Aşağıdaki örnek, tüm kayıtları döndürür. tutorials_tbl yazar adının olduğu tablo Sanjay.
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl WHERE tutorial_author = 'Sanjay';
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
| 3 | JAVA Tutorial | Sanjay | 2007-05-21 |
+-------------+----------------+-----------------+-----------------+
1 rows in set (0.01 sec)
mysql>
Yapmadıkça LIKEbir dizede karşılaştırma, karşılaştırma büyük / küçük harfe duyarlı değildir. Aramanızı büyük / küçük harf duyarlı hale getirebilirsiniz.BINARY aşağıdaki gibi anahtar kelime -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl \
WHERE BINARY tutorial_author = 'sanjay';
Empty set (0.02 sec)
mysql>
PHP Betiği Kullanarak Verileri Getirme
Aynı SQL SELECT komutunu WHERE CLAUSE ile PHP işlevinde kullanabilirsiniz. mysql_query(). Bu işlev, SQL komutunu ve daha sonra başka bir PHP işlevini çalıştırmak için kullanılır.mysql_fetch_array()seçilen tüm verileri almak için kullanılabilir. Bu işlev bir satırı ilişkilendirilebilir dizi, sayısal dizi veya her ikisi olarak döndürür. Başka satır yoksa bu işlev FALSE döndürür.
Misal
Aşağıdaki örnek, tüm kayıtları döndürür. tutorials_tbl yazar adının olduğu tablo Sanjay -
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root'; $dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT tutorial_id, tutorial_title,
tutorial_author, submission_date
FROM tutorials_tbl
WHERE tutorial_author = "Sanjay"';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn ); if(! $retval ) {
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
echo "Tutorial ID :{$row['tutorial_id']} <br> ". "Title: {$row['tutorial_title']} <br> ".
"Author: {$row['tutorial_author']} <br> ". "Submission Date : {$row['submission_date']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>
Bir MySQL tablosundaki mevcut verilerin değiştirilmesi gereken bir gereksinim olabilir. Bunu SQL kullanarak yapabilirsinizUPDATEkomut. Bu, herhangi bir MySQL tablosunun herhangi bir alan değerini değiştirecektir.
Sözdizimi
Aşağıdaki kod bloğu, MySQL tablosundaki verileri değiştirmek için UPDATE komutunun genel bir SQL sözdizimine sahiptir -
UPDATE table_name SET field1 = new-value1, field2 = new-value2
[WHERE Clause]
- Bir veya daha fazla alanı tamamen güncelleyebilirsiniz.
- WHERE yan tümcesini kullanarak herhangi bir koşulu belirtebilirsiniz.
- Tek seferde tek tablodaki değerleri güncelleyebilirsiniz.
WHERE yan tümcesi, bir tablodaki seçili satırları güncellemek istediğinizde çok kullanışlıdır.
Verileri Komut İsteminden Güncelleme
Bu, MySQL tablosundaki seçili verileri güncellemek için WHERE yan tümcesi ile SQL UPDATE komutunu kullanacaktır. tutorials_tbl.
Misal
Aşağıdaki örnek, tutorial_title tutorial_id değerine sahip bir kaydın alanı 3.
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> UPDATE tutorials_tbl
-> SET tutorial_title = 'Learning JAVA'
-> WHERE tutorial_id = 3;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql>
PHP Komut Dosyası Kullanarak Verileri Güncelleme
SQL UPDATE komutunu WHERE CLAUSE ile veya olmadan PHP işlevinde kullanabilirsiniz - mysql_query(). Bu işlev, SQL komutunu mysql> komut isteminde çalıştırılana benzer şekilde yürütecektir.
Misal
Güncellemek için aşağıdaki örnek tutorial_title tutorial_id olan bir kaydın alanı 3.
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root'; $dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'UPDATE tutorials_tbl
SET tutorial_title="Learning JAVA"
WHERE tutorial_id=3';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn ); if(! $retval ) {
die('Could not update data: ' . mysql_error());
}
echo "Updated data successfully\n";
mysql_close($conn);
?>
Herhangi bir MySQL tablosundan bir kaydı silmek istiyorsanız, SQL komutunu kullanabilirsiniz. DELETE FROM. Bu komutu mysql> komut isteminde ve PHP gibi herhangi bir komut dosyasında kullanabilirsiniz.
Sözdizimi
Aşağıdaki kod bloğu, bir MySQL tablosundan verileri silmek için DELETE komutunun genel bir SQL sözdizimine sahiptir.
DELETE FROM table_name [WHERE Clause]
WHERE yan tümcesi belirtilmezse, verilen MySQL tablosundaki tüm kayıtlar silinecektir.
WHERE yan tümcesini kullanarak herhangi bir koşulu belirtebilirsiniz.
Tek seferde tek tablodaki kayıtları silebilirsiniz.
WHERE yan tümcesi, bir tablodaki seçili satırları silmek istediğinizde çok kullanışlıdır.
Komut İsteminden Veri Silme
Bu, seçilen verileri MySQL tablosuna silmek için WHERE yan tümcesi ile SQL DELETE komutunu kullanacaktır - tutorials_tbl.
Misal
Aşağıdaki örnek, tutorial_id 3 olan tutorial_tbl'den bir kaydı silecektir.
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> DELETE FROM tutorials_tbl WHERE tutorial_id=3;
Query OK, 1 row affected (0.23 sec)
mysql>
PHP Komut Dosyası Kullanarak Verileri Silme
PHP işlevinde WHERE CLAUSE ile veya olmadan SQL DELETE komutunu kullanabilirsiniz - mysql_query(). Bu işlev, SQL komutunu mysql> komut isteminde yürütüldüğü şekilde yürütecektir.
Misal
Tutorial_id 3 olan tutorial_tbl'den bir kaydı silmek için aşağıdaki örneği deneyin.
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root'; $dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'DELETE FROM tutorials_tbl WHERE tutorial_id = 3';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn ); if(! $retval ) {
die('Could not delete data: ' . mysql_error());
}
echo "Deleted data successfully\n";
mysql_close($conn);
?>
SQL'i gördük SELECTMySQL tablosundan veri almak için komut. Ayrıca, olarak adlandırılan bir koşullu cümle kullanabiliriz.WHERE gerekli kayıtları seçmek için madde.
'Eşittir' işaretli (=) bir WHERE cümlesi, tam bir eşleşme yapmak istediğimizde iyi çalışır. "Tutorial_author = 'Sanjay'" gibi. Ancak tutorial_author adının "jay" içermesi gereken tüm sonuçları filtrelemek istediğimiz bir gereksinim olabilir. Bu, kullanılarak ele alınabilirSQL LIKE Clause WHERE yan tümcesi ile birlikte.
SQL LIKE yan tümcesi% karakteriyle birlikte kullanılırsa, komut isteminde tüm dosyaları veya dizinleri listelerken UNIX'teki gibi bir meta karakter (*) gibi çalışacaktır. % Karakteri olmadan, LIKE yan tümcesi ileequal to WHERE yan tümcesi ile birlikte imzalayın.
Sözdizimi
Aşağıdaki kod bloğu, bir MySQL tablosundan veri almak için LIKE deyimiyle birlikte SELECT komutunun genel bir SQL sözdizimine sahiptir.
SELECT field1, field2,...fieldN table_name1, table_name2...
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
WHERE yan tümcesini kullanarak herhangi bir koşulu belirtebilirsiniz.
LIKE yan tümcesini WHERE yan tümcesi ile birlikte kullanabilirsiniz.
LIKE yan tümcesini yerine equals to işaret.
LIKE,% işaretiyle birlikte kullanıldığında bir meta karakter araması gibi çalışacaktır.
Kullanarak birden fazla koşul belirtebilirsiniz AND veya OR operatörler.
Bir WHERE ... LIKE yan tümcesi, bir koşul belirtmek için DELETE veya UPDATE SQL komutuyla birlikte kullanılabilir.
Komut İstemi'nde LIKE yan tümcesini kullanma
Bu, seçilen verileri MySQL tablosundan getirmek için WHERE ... LIKE yan tümcesi ile SQL SELECT komutunu kullanır - tutorials_tbl.
Misal
Aşağıdaki örnek, tüm kayıtları döndürür. tutorials_tbl yazar adının bittiği tablo jay -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl
-> WHERE tutorial_author LIKE '%jay';
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
| 3 | JAVA Tutorial | Sanjay | 2007-05-21 |
+-------------+----------------+-----------------+-----------------+
1 rows in set (0.01 sec)
mysql>
PHP Script içinde LIKE cümlesini kullanma
WHERE ... LIKE cümlesinin benzer sözdizimini PHP işlevinde kullanabilirsiniz - mysql_query(). Bu işlev, SQL komutunu ve daha sonra başka bir PHP işlevini çalıştırmak için kullanılır -mysql_fetch_array() WHERE ... LIKE yan tümcesi SELECT komutuyla birlikte kullanılıyorsa, seçilen tüm verileri almak için kullanılabilir.
Ancak WHERE ... LIKE yan tümcesi DELETE veya UPDATE komutuyla kullanılıyorsa, başka bir PHP işlevi çağrısına gerek yoktur.
Misal
Tüm kayıtları döndürmek için aşağıdaki örneği deneyin. tutorials_tbl yazar adının içerdiği tablo jay -
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root'; $dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT tutorial_id, tutorial_title,
tutorial_author, submission_date
FROM tutorials_tbl
WHERE tutorial_author LIKE "%jay%"';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn ); if(! $retval ) {
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
echo "Tutorial ID :{$row['tutorial_id']} <br> ". "Title: {$row['tutorial_title']} <br> ".
"Author: {$row['tutorial_author']} <br> ". "Submission Date : {$row['submission_date']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>
SQL'i gördük SELECTMySQL tablosundan veri almak için komut. Satırları seçtiğinizde, MySQL sunucusu, sonucu nasıl sıralayacağınızı söyleyerek aksini belirtmediğiniz sürece bunları herhangi bir sırayla döndürmekte özgürdür. Ancak, bir sonuç kümesini birORDER BY sıralamak istediğiniz sütun veya sütunları adlandıran yan tümce.
Sözdizimi
Aşağıdaki kod bloğu, bir MySQL tablosundaki verileri sıralamak için ORDER BY yan tümcesi ile birlikte SELECT komutunun genel bir SQL sözdizimidir.
SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
Döndürülen sonucu, bu alan listeleniyorsa herhangi bir alanda sıralayabilirsiniz.
Sonucu birden fazla alanda sıralayabilirsiniz.
Artan veya azalan sırada sonuç almak için ASC veya DESC anahtar kelimesini kullanabilirsiniz. Varsayılan olarak, artan düzendir.
Bir koşul koymak için WHERE ... LIKE yan tümcesini her zamanki gibi kullanabilirsiniz.
Komut İsteminde ORDER BY yan tümcesini kullanma
Bu, SQL SELECT komutunu kullanacaktır. ORDER BY MySQL tablosundan veri almak için yan tümce - tutorials_tbl.
Misal
Sonucu artan bir sırada döndüren aşağıdaki örneği deneyin.
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl ORDER BY tutorial_author ASC
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
| 2 | Learn MySQL | Abdul S | 2007-05-24 |
| 1 | Learn PHP | John Poul | 2007-05-24 |
| 3 | JAVA Tutorial | Sanjay | 2007-05-06 |
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.42 sec)
mysql>
Artan sırada listelenen tüm yazar adlarını doğrulayın.
ORDER BY yan tümcesini PHP Betiği içinde kullanma
PHP işlevinde ORDER BY yan tümcesine benzer bir sözdizimi kullanabilirsiniz - mysql_query(). Bu işlev, SQL komutunu ve daha sonra başka bir PHP işlevini çalıştırmak için kullanılır.mysql_fetch_array() seçilen tüm verileri almak için kullanılabilir.
Misal
Sonucu eğitim yazarlarının azalan sırasına göre döndüren aşağıdaki örneği deneyin.
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root'; $dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT tutorial_id, tutorial_title,
tutorial_author, submission_date
FROM tutorials_tbl
ORDER BY tutorial_author DESC';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn ); if(! $retval ) {
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
echo "Tutorial ID :{$row['tutorial_id']} <br> ". "Title: {$row['tutorial_title']} <br> ".
"Author: {$row['tutorial_author']} <br> ". "Submission Date : {$row['submission_date']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>
Önceki bölümlerde, bir seferde bir tablodan veri alıyorduk. Bu, basit çekimler için yeterince iyidir, ancak gerçek dünyadaki MySQL kullanımlarının çoğunda, genellikle tek bir sorguda birden çok tablodan veri almanız gerekecektir.
Tek SQL sorgunuzda birden çok tablo kullanabilirsiniz. MySQL'e katılma eylemi, iki veya daha fazla tabloyu tek bir tabloya bölmeyi ifade eder.
MySQL tablolarına katılmak için SELECT, UPDATE ve DELETE ifadelerinde JOINS'i kullanabilirsiniz. Basit MySQL JOIN'den farklı bir LEFT JOIN örneği de göreceğiz.
Birleştirmeleri Komut İsteminde Kullanma
İki masamız olduğunu varsayalım tcount_tbl ve tutorials_tbl, EĞİTİMLER'de. Şimdi aşağıda verilen örneklere bir göz atın -
Misal
Aşağıdaki örnekler -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * FROM tcount_tbl;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
| mahran | 20 |
| mahnaz | NULL |
| Jen | NULL |
| Gill | 20 |
| John Poul | 1 |
| Sanjay | 1 |
+-----------------+----------------+
6 rows in set (0.01 sec)
mysql> SELECT * from tutorials_tbl;
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
| 1 | Learn PHP | John Poul | 2007-05-24 |
| 2 | Learn MySQL | Abdul S | 2007-05-24 |
| 3 | JAVA Tutorial | Sanjay | 2007-05-06 |
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.00 sec)
mysql>
Şimdi bu iki tabloyu birleştirmek için bir SQL sorgusu yazabiliriz. Bu sorgu, tablodan tüm yazarları seçecektutorials_tbl ve ilgili öğretici sayısını şuradan alır: tcount_tbl.
mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
-> FROM tutorials_tbl a, tcount_tbl b
-> WHERE a.tutorial_author = b.tutorial_author;
+-------------+-----------------+----------------+
| tutorial_id | tutorial_author | tutorial_count |
+-------------+-----------------+----------------+
| 1 | John Poul | 1 |
| 3 | Sanjay | 1 |
+-------------+-----------------+----------------+
2 rows in set (0.01 sec)
mysql>
Bir PHP Komut Dosyasında Birleştirme Kullanma
Yukarıda belirtilen SQL sorgusunu PHP komut dosyasında kullanabilirsiniz. Yalnızca SQL sorgusunu PHP işlevine aktarmanız gerekirmysql_query() ve sonra sonuçları her zamanki gibi alacaksınız.
Misal
Aşağıdaki örnek -
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root'; $dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
FROM tutorials_tbl a, tcount_tbl b
WHERE a.tutorial_author = b.tutorial_author';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn ); if(! $retval ) {
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
echo "Author:{$row['tutorial_author']} <br> ". "Count: {$row['tutorial_count']} <br> ".
"Tutorial ID: {$row['tutorial_id']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn);
?>
MySQL LEFT JOIN
MySQL sol birleştirme, basit bir birleştirmeden farklıdır. MySQL LEFT JOIN, soldaki tabloya biraz daha fazla önem verir.
Eğer yaparsam LEFT JOIN, Eşleşen tüm kayıtları aynı şekilde alırım ve EK OLARAK, birleşimin sol tablosundaki her bir eşleşmeyen kayıt için fazladan bir kayıt alırım: böylece (benim örneğimde) her YAZARIN bir söz almasını sağlarım.
Misal
LEFT JOIN'i anlamak için aşağıdaki örneği deneyin.
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
-> FROM tutorials_tbl a LEFT JOIN tcount_tbl b
-> ON a.tutorial_author = b.tutorial_author;
+-------------+-----------------+----------------+
| tutorial_id | tutorial_author | tutorial_count |
+-------------+-----------------+----------------+
| 1 | John Poul | 1 |
| 2 | Abdul S | NULL |
| 3 | Sanjay | 1 |
+-------------+-----------------+----------------+
3 rows in set (0.02 sec)
JOINS'e aşina olmak için daha fazla pratik yapmanız gerekir. Bu MySQL / SQL'de biraz karmaşık bir kavramdır ve gerçek örnekler yaparken daha net hale gelecektir.
SQL'i gördük SELECT ile birlikte komut WHERE MySQL tablosundan veri almak için yan tümce, ancak alanı veya sütun değerini karşılaştıran bir koşul vermeye çalıştığımızda NULLdüzgün çalışmıyor.
Böyle bir durumu ele almak için MySQL üç operatör sağlar -
IS NULL - Sütun değeri NULL ise bu operatör true döndürür.
IS NOT NULL - Sütun değeri NULL değilse bu operatör true döndürür.
<=> - Bu operatör (= operatörünün aksine) iki NULL değer için bile doğru olan değerleri karşılaştırır.
NULL içeren koşullar özeldir. = KullanamazsınızNULL veya! = NULLsütunlarda NULL değerleri aramak için. Bu tür karşılaştırmalar her zaman başarısız olur çünkü bunların doğru olup olmadığını söylemek imkansızdır. Bazen NULL = NULL bile başarısız olur.
BOŞ olan veya olmayan sütunları aramak için şunu kullanın: IS NULL veya IS NOT NULL.
Komut İstemi'nde NULL değerleri kullanma
Adında bir tablo olduğunu varsayın tcount_tbl TUTORIALS veritabanında bulunur ve iki sütun içerir: tutorial_author ve tutorial_count, NULL tutorial_count değerin bilinmediğini gösterir.
Misal
Aşağıdaki örnekleri deneyin -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table tcount_tbl
-> (
-> tutorial_author varchar(40) NOT NULL,
-> tutorial_count INT
-> );
Query OK, 0 rows affected (0.05 sec)
mysql> INSERT INTO tcount_tbl
-> (tutorial_author, tutorial_count) values ('mahran', 20);
mysql> INSERT INTO tcount_tbl
-> (tutorial_author, tutorial_count) values ('mahnaz', NULL);
mysql> INSERT INTO tcount_tbl
-> (tutorial_author, tutorial_count) values ('Jen', NULL);
mysql> INSERT INTO tcount_tbl
-> (tutorial_author, tutorial_count) values ('Gill', 20);
mysql> SELECT * from tcount_tbl;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
| mahran | 20 |
| mahnaz | NULL |
| Jen | NULL |
| Gill | 20 |
+-----------------+----------------+
4 rows in set (0.00 sec)
mysql>
Bunu görebilirsin = ve != aşağıdaki gibi NULL değerlerle çalışmayın -
mysql> SELECT * FROM tcount_tbl WHERE tutorial_count = NULL;
Empty set (0.00 sec)
mysql> SELECT * FROM tcount_tbl WHERE tutorial_count != NULL;
Empty set (0.01 sec)
Tutorial_count sütununun NULL olduğu veya olmadığı kayıtları bulmak için, sorgular aşağıdaki programda gösterildiği gibi yazılmalıdır.
mysql> SELECT * FROM tcount_tbl
-> WHERE tutorial_count IS NULL;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
| mahnaz | NULL |
| Jen | NULL |
+-----------------+----------------+
2 rows in set (0.00 sec)
mysql> SELECT * from tcount_tbl
-> WHERE tutorial_count IS NOT NULL;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
| mahran | 20 |
| Gill | 20 |
+-----------------+----------------+
2 rows in set (0.00 sec)
Bir PHP Komut Dosyasında NULL Değerleri İşleme
Kullanabilirsiniz if...else NULL değerine göre bir sorgu hazırlamak için koşul.
Misal
Aşağıdaki örnek, tutorial_count dışarıdan ve daha sonra tablodaki mevcut değerle karşılaştırır.
<?php
$dbhost = 'localhost:3036'; $dbuser = 'root';
$dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
if( isset($tutorial_count )) { $sql = 'SELECT tutorial_author, tutorial_count
FROM tcount_tbl
WHERE tutorial_count = $tutorial_count'; } else { $sql = 'SELECT tutorial_author, tutorial_count
FROM tcount_tbl
WHERE tutorial_count IS $tutorial_count'; } mysql_select_db('TUTORIALS'); $retval = mysql_query( $sql, $conn );
if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "Author:{$row['tutorial_author']} <br> ".
"Count: {$row['tutorial_count']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn);
?>
MySQL örüntü eşleşmesini gördünüz. LIKE ...%. MySQL, normal ifadelere veREGEXPŞebeke. PHP veya PERL'in farkındaysanız, anlamak sizin için çok basittir çünkü bu eşleştirme, normal ifadeleri kodlayanlarla aynıdır.
Aşağıda, ile birlikte kullanılabilecek desen tablosu verilmiştir. REGEXP Şebeke.
Desen | Kalıp neyle eşleşir |
---|---|
^ | Dizenin başlangıcı |
$ | Dizenin sonu |
. | Herhangi bir tek karakter |
[...] | Köşeli parantezler arasında listelenen herhangi bir karakter |
[^ ...] | Köşeli parantezler arasında listelenmeyen herhangi bir karakter |
p1 | p2 | p3 | Değişim; p1, p2 veya p3 modellerinden herhangi biriyle eşleşir |
* | Önceki elemanın sıfır veya daha fazla örneği |
+ | Önceki öğenin bir veya daha fazla örneği |
{n} | n önceki öğe örnekleri |
{m, n} | m'den n'ye kadar önceki öğenin örnekleri |
Örnekler
Şimdi yukarıdaki tabloya dayanarak, gereksinimlerinizi karşılamak için çeşitli türlerde SQL sorguları çalıştırabilirsiniz. Burada, anlayışınız için birkaç tane listeliyorum.
Adında bir masamız olduğunu düşünün person_tbl ve adı verilen bir alana sahip name -
İle başlayan tüm isimleri bulmak için sorgulama 'st' -
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';
İle biten tüm isimleri bulmak için sorgulama 'ok' -
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
İçeren tüm isimleri bulmak için sorgulama 'mar' -
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';
Bir sesli harfle başlayan ve ile biten tüm isimleri bulmak için sorgulama 'ok' -
mysql> SELECT FirstName FROM intque.person_tbl WHERE FirstName REGEXP '^[aeiou].*ok$';
İşlem, tek bir çalışma birimi gibi gerçekleştirilen sıralı bir veritabanı işleme işlemleri grubudur. Başka bir deyişle, grup içindeki her bir işlem başarılı olmadıkça bir işlem asla tamamlanmayacaktır. İşlem içindeki herhangi bir işlem başarısız olursa, işlemin tamamı başarısız olur.
Pratik olarak, birçok SQL sorgusunu bir grupta toplayacaksınız ve hepsini bir işlemin parçası olarak birlikte yürüteceksiniz.
İşlemlerin Özellikleri
İşlemler, genellikle kısaltmayla anılan aşağıdaki dört standart özelliğe sahiptir. ACID -
Atomicity- Bu, iş birimindeki tüm işlemlerin başarıyla tamamlanmasını sağlar; aksi takdirde, işlem başarısızlık noktasında iptal edilir ve önceki işlemler önceki durumuna geri döndürülür.
Consistency - Bu, veritabanının başarıyla tamamlanmış bir işlemden sonra durumları doğru şekilde değiştirmesini sağlar.
Isolation - Bu, işlemlerin birbirleri üzerinde bağımsız ve şeffaf bir şekilde işlemesini sağlar.
Durability - Bu, bir sistem arızası durumunda taahhüt edilen bir işlemin sonucunun veya etkisinin devam etmesini sağlar.
MySQL'de işlemler ifade ile başlar BEGIN WORK ve ya bir COMMIT veya a ROLLBACKBeyan. Başlangıç ve bitiş ifadeleri arasındaki SQL komutları işlemin büyük kısmını oluşturur.
COMMIT ve GERİ DÖN
Bu iki anahtar kelime Commit ve Rollback çoğunlukla MySQL İşlemleri için kullanılır.
Başarılı bir işlem tamamlandığında, ilgili tüm tablolardaki değişikliklerin geçerli olması için COMMIT komutu verilmelidir.
Bir hata oluşursa, işlemde başvurulan her tabloyu önceki durumuna döndürmek için bir ROLLBACK komutu verilmelidir.
Adlı oturum değişkenini ayarlayarak bir işlemin davranışını kontrol edebilirsiniz. AUTOCOMMIT. AUTOCOMMIT 1 (varsayılan) olarak ayarlanmışsa, her SQL ifadesi (bir işlem içinde veya dışında) tam bir işlem olarak kabul edilir ve tamamlandığında varsayılan olarak taahhüt edilir.
AUTOCOMMIT, 0 olarak ayarlandığında, SET AUTOCOMMIT = 0 komutu, sonraki ifade dizisi bir işlem gibi davranır ve açık bir COMMIT ifadesi yayınlanana kadar hiçbir etkinlik gerçekleştirilmez.
Bu SQL komutlarını PHP'de şu komutu kullanarak çalıştırabilirsiniz: mysql_query() işlevi.
İşlem Üzerine Genel Bir Örnek
Bu olaylar dizisi, kullanılan programlama dilinden bağımsızdır. Mantıksal yol, uygulamanızı oluşturmak için kullandığınız dilde oluşturulabilir.
Bu SQL komutlarını PHP'de şu komutu kullanarak çalıştırabilirsiniz: mysql_query() işlevi.
SQL komutunu vererek işleme başlayın BEGIN WORK.
SELECT, INSERT, UPDATE veya DELETE gibi bir veya daha fazla SQL komutu verin.
Herhangi bir hata olup olmadığını ve her şeyin ihtiyacınıza göre olup olmadığını kontrol edin.
Herhangi bir hata varsa, bir ROLLBACK komutu verin, aksi takdirde bir COMMIT komutu verin.
MySQL'de İşlem Güvenli Tablo Türleri
İşlemleri doğrudan kullanamazsınız, ancak bazı istisnalar için kullanabilirsiniz. Ancak güvenli ve garantili değillerdir. MySQL programlamanızda işlemleri kullanmayı planlıyorsanız, tablolarınızı özel bir şekilde oluşturmanız gerekir. İşlemleri destekleyen birçok tablo türü vardır, ancak en popüler olanıInnoDB.
InnoDB tabloları için destek, kaynaktan MySQL derlenirken belirli bir derleme parametresi gerektirir. MySQL sürümünüz InnoDB desteğine sahip değilse, İnternet Servis Sağlayıcınızdan InnoDB tablo türlerini destekleyen bir MySQL sürümü oluşturmasını isteyin veyaMySQL-Max Binary Distribution Windows veya Linux / UNIX için ve bir geliştirme ortamında tablo türüyle çalışın.
MySQL kurulumunuz InnoDB tablolarını destekliyorsa, bir TYPE = InnoDB tablo oluşturma ifadesinin tanımı.
Örneğin, aşağıdaki kod adında bir InnoDB tablosu oluşturur tcount_tbl -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table tcount_tbl
-> (
-> tutorial_author varchar(40) NOT NULL,
-> tutorial_count INT
-> ) TYPE = InnoDB;
Query OK, 0 rows affected (0.05 sec)
InnoDB hakkında daha fazla ayrıntı için aşağıdaki bağlantıya tıklayabilirsiniz - InnoDB
Gibi diğer tablo türlerini kullanabilirsiniz GEMINI veya BDB, ancak bu iki tablo türünü destekleyip desteklemediğine bağlı olarak kurulumunuza bağlıdır.
MySQL ALTER komutu, tablonuzun bir adını, herhangi bir tablo alanını değiştirmek istediğinizde veya bir tablodaki mevcut bir sütunu eklemek veya silmek istediğinizde çok kullanışlıdır.
Adlı bir tablonun oluşturulmasıyla başlayalım testalter_tbl.
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table testalter_tbl
-> (
-> i INT,
-> c CHAR(1)
-> );
Query OK, 0 rows affected (0.05 sec)
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| i | int(11) | YES | | NULL | |
| c | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
Bir Sütunu Düşürme, Ekleme veya Yeniden Konumlandırma
Yukarıdaki MySQL tablosundan mevcut bir i sütununu kaldırmak istiyorsanız, o zaman DROP ile birlikte fıkra ALTER komut aşağıda gösterildiği gibi -
mysql> ALTER TABLE testalter_tbl DROP i;
Bir DROP Tabloda kalan tek sütun ise yan tümce çalışmayacaktır.
Bir sütun eklemek için ADD'yi kullanın ve sütun tanımını belirtin. Aşağıdaki ifade,i testalter_tbl sütunu -
mysql> ALTER TABLE testalter_tbl ADD i INT;
Bu ifadeyi yayınladıktan sonra, testalter, tabloyu ilk oluşturduğunuzda sahip olduğu aynı iki sütunu içerecek, ancak aynı yapıya sahip olmayacaktır. Bunun nedeni, varsayılan olarak tablonun sonuna eklenen yeni sütunların olmasıdır. Bu nedenle olsa bilei başlangıçta mytbl'deki ilk sütun, şimdi sonuncusu.
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c | char(1) | YES | | NULL | |
| i | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
Tablonun belirli bir konumunda bir sütun istediğinizi belirtmek için, İLK düğmesini kullanarak ilk sütun yapın veya AFTER col_name yeni sütunun col_name'den sonra yerleştirilmesi gerektiğini belirtmek için.
Takip etmeyi dene ALTER TABLE ifadeler, kullanma SHOW COLUMNS her birinin ardından, her birinin ne gibi bir etkisi olduğunu görmek için
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTER c;
FIRST ve AFTER belirteçleri yalnızca ADD hükmüyle çalışır. Bu, bir tablo içindeki mevcut bir sütunu yeniden konumlandırmak istiyorsanız, önceDROP o ve sonra ADD yeni pozisyonda.
Bir Sütun Tanımını veya Adı Değiştirme (Değiştirme)
Bir sütunun tanımını değiştirmek için kullanın MODIFY veya CHANGE ALTER komutu ile birlikte yan tümce.
Örneğin, sütunu değiştirmek için c CHAR (1) 'den CHAR (10)' a, aşağıdaki komutu kullanabilirsiniz -
mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10);
İle CHANGEsözdizimi biraz farklıdır. CHANGE anahtar sözcüğünden sonra, değiştirmek istediğiniz sütunu adlandırır, ardından yeni adı içeren yeni tanımı belirtirsiniz.
Aşağıdaki örneği deneyin -
mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT;
Şimdi dönüştürmek için DEĞİŞTİR'i kullanıyorsanız j itibaren BIGINT geri dön INT sütun adını değiştirmeden, ifade aşağıda gösterildiği gibi olacaktır -
mysql> ALTER TABLE testalter_tbl CHANGE j j INT;
The Effect of ALTER TABLE on Null and Default Value Attributes- Bir sütunu DEĞİŞTİRİR veya DEĞİŞTİRİRKEN, sütunun BOŞ değerler içerip içermeyeceğini ve varsayılan değerinin ne olduğunu da belirleyebilirsiniz. Aslında, bunu yapmazsanız, MySQL bu nitelikler için otomatik olarak değerler atar.
Aşağıdaki kod bloğu bir örnektir, burada NOT NULL sütunun değeri varsayılan olarak 100 olacaktır.
mysql> ALTER TABLE testalter_tbl
-> MODIFY j BIGINT NOT NULL DEFAULT 100;
Yukarıdaki komutu kullanmazsanız, MySQL tüm sütunlarda NULL değerleri dolduracaktır.
Bir Sütunun Varsayılan Değerini Değiştirme (Değiştirme)
Herhangi bir sütun için varsayılan değeri değiştirmek için ALTER komut.
Aşağıdaki örneği deneyin.
mysql> ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c | char(1) | YES | | NULL | |
| i | int(11) | YES | | 1000 | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
Herhangi bir sütundan varsayılan kısıtlamayı, DROP yan tümcesini kullanarak kaldırabilirsiniz. ALTER komut.
mysql> ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c | char(1) | YES | | NULL | |
| i | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
Tablo Türünü Değiştirme (Değiştirme)
Kullanarak bir tablo türü kullanabilirsiniz. TYPEALTER komutu ile birlikte yan tümce. Değiştirmek için aşağıdaki örneği deneyin.testalter_tbl -e MYISAM tablo türü.
Mevcut tablo türünü bulmak için, SHOW TABLE STATUS Beyan.
mysql> ALTER TABLE testalter_tbl TYPE = MYISAM;
mysql> SHOW TABLE STATUS LIKE 'testalter_tbl'\G
*************************** 1. row ****************
Name: testalter_tbl
Type: MyISAM
Row_format: Fixed
Rows: 0
Avg_row_length: 0
Data_length: 0
Max_data_length: 25769803775
Index_length: 1024
Data_free: 0
Auto_increment: NULL
Create_time: 2007-06-03 08:04:36
Update_time: 2007-06-03 08:04:36
Check_time: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
Bir Tabloyu Yeniden Adlandırma (Değiştirme)
Bir tabloyu yeniden adlandırmak için, RENAME seçeneği ALTER TABLE Beyan.
Yeniden adlandırmak için aşağıdaki örneği deneyin testalter_tbl -e alter_tbl.
mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;
INDEX komutunu oluşturmak ve bir MySQL dosyasına bırakmak için ALTER komutunu kullanabilirsiniz. Bir sonraki bölümde bu komut hakkında ayrıntılı olarak tartışacağız.
Veritabanı dizini, bir tablodaki işlemlerin hızını artıran bir veri yapısıdır. Dizinler, hem hızlı rasgele aramalar hem de kayıtlara erişimin verimli bir şekilde sıralanması için temel sağlayan bir veya daha fazla sütun kullanılarak oluşturulabilir.
İndeks oluştururken SQL sorguları yapmak ve bu kolonlar üzerinde bir veya daha fazla indeks oluşturmak için hangi tüm kolonların kullanılacağı dikkate alınmalıdır.
Pratik olarak, dizinler aynı zamanda birincil anahtarı veya dizin alanını ve gerçek tabloya her kaydın göstericisini tutan bir tablo türüdür.
Kullanıcılar indeksleri göremezler, sadece sorguları hızlandırmak için kullanılırlar ve Veritabanı Arama Motoru tarafından kayıtları çok hızlı bir şekilde bulmak için kullanılırlar.
INSERT ve UPDATE deyimleri, dizin içeren tablolarda daha fazla zaman alırken, SELECT deyimleri bu tablolarda hızlı hale gelir. Bunun nedeni, ekleme veya güncelleme yaparken, bir veritabanının da dizin değerlerini eklemesi veya güncellemesi gerekmesidir.
Basit ve Benzersiz Dizin
Bir tablo üzerinde benzersiz bir dizin oluşturabilirsiniz. Benzersiz bir dizin, iki satırın aynı dizin değerine sahip olamayacağı anlamına gelir. Tabloda bir Dizin oluşturmak için sözdizimi aşağıda verilmiştir.
CREATE UNIQUE INDEX index_name ON table_name ( column1, column2,...);
Bir dizin oluşturmak için bir veya daha fazla sütun kullanabilirsiniz.
Örneğin, bir dizin oluşturabiliriz tutorials_tbl kullanma tutorial_author.
CREATE UNIQUE INDEX AUTHOR_INDEX ON tutorials_tbl (tutorial_author)
Bir tablo üzerinde basit bir dizin oluşturabilirsiniz. İhmal etUNIQUEbasit bir dizin oluşturmak için sorgudan anahtar kelime. Basit bir dizin, bir tabloda yinelenen değerlere izin verir.
Bir sütundaki değerleri azalan sırada dizine eklemek istiyorsanız, sütun adından sonra ayrılmış DESC sözcüğünü ekleyebilirsiniz.
mysql> CREATE UNIQUE INDEX AUTHOR_INDEX ON tutorials_tbl (tutorial_author DESC)
INDEX eklemek ve bırakmak için ALTER komutu
Bir tabloya dizin eklemek için dört tür ifade vardır -
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list) - Bu ifade, bir PRIMARY KEY, bu, dizine alınan değerlerin benzersiz olması gerektiği ve NULL olamayacağı anlamına gelir.
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list) - Bu ifade, değerlerin benzersiz olması gereken bir dizin oluşturur (birden çok kez görünebilen NULL değerler hariç).
ALTER TABLE tbl_name ADD INDEX index_name (column_list) - Bu, herhangi bir değerin birden fazla görünebileceği sıradan bir indeks ekler.
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list) - Bu, metin arama amacıyla kullanılan özel bir FULLTEXT dizini oluşturur.
Aşağıdaki kod bloğu, mevcut bir tabloya dizin eklemek için bir örnektir.
mysql> ALTER TABLE testalter_tbl ADD INDEX (c);
Kullanarak herhangi bir INDEX'i bırakabilirsiniz DROP ALTER komutu ile birlikte yan tümce.
Yukarıda oluşturulan dizini kaldırmak için aşağıdaki örneği deneyin.
mysql> ALTER TABLE testalter_tbl DROP INDEX (c);
ALTER komutuyla birlikte DROP yan tümcesini kullanarak herhangi bir INDEX'i bırakabilirsiniz.
ALTER PRIMARY KEY ekleme ve bırakma komutu
Aynı şekilde birincil anahtar da ekleyebilirsiniz. Ancak Birincil Anahtarın BOŞ OLMAYAN sütunlarda çalıştığından emin olun.
Aşağıdaki kod bloğu, birincil anahtarı mevcut bir tabloya eklemek için bir örnektir. Bu, sütunu önce BOŞ DEĞİL yapacak ve ardından onu birincil anahtar olarak ekleyecektir.
mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);
Aşağıdaki gibi bir birincil anahtarı bırakmak için ALTER komutunu kullanabilirsiniz -
mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;
BİRİNCİL ANAHTAR olmayan bir dizini kaldırmak için, dizin adını belirtmelisiniz.
INDEX Bilgilerinin Görüntülenmesi
Kullanabilirsiniz SHOW INDEXtablo ile ilişkili tüm dizinleri listelemek için komut. Dikey format çıktısı (\ G ile belirtilir), uzun bir satır kaydırmayı önlemek için genellikle bu ifadede kullanışlıdır -
Aşağıdaki örneği deneyin -
mysql> SHOW INDEX FROM table_name\G
........
Geçici tablolar, bazı durumlarda geçici verileri saklamak için çok yararlı olabilir. Geçici tablolar için bilinmesi gereken en önemli şey, mevcut istemci oturumu sona erdiğinde silinecek olmalarıdır.
Geçici Tablolar nelerdir?
MySQL Sürüm 3.23'e geçici tablolar eklendi. MySQL'in 3.23'ten daha eski bir sürümünü kullanıyorsanız, geçici tabloları kullanamazsınız, ancak kullanabilirsinizHeap Tables.
Daha önce belirtildiği gibi, geçici tablolar yalnızca oturum canlı olduğu sürece devam edecektir. Kodu bir PHP betiğinde çalıştırırsanız, betik yürütmeyi bitirdiğinde geçici tablo otomatik olarak yok edilir. MySQL veritabanı sunucusuna MySQL istemci programı aracılığıyla bağlanırsanız, geçici tablo siz istemciyi kapatana veya tabloyu manuel olarak yok edene kadar var olacaktır.
Misal
Aşağıdaki program size geçici tablonun kullanımını gösteren bir örnektir. Aynı kod, PHP betiklerinde de kullanılabilir.mysql_query() işlevi.
mysql> CREATE TEMPORARY TABLE SalesSummary (
-> product_name VARCHAR(50) NOT NULL
-> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
-> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
-> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO SalesSummary
-> (product_name, total_sales, avg_unit_price, total_units_sold)
-> VALUES
-> ('cucumber', 100.25, 90, 2);
mysql> SELECT * FROM SalesSummary;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber | 100.25 | 90.00 | 2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)
Bir yayınladığınızda SHOW TABLESkomutunu kullanırsanız, geçici tablonuz listede listelenmeyecektir. Şimdi, MySQL oturumunu kapatırsanız ve sonra birSELECTkomutunu kullanırsanız, veritabanında hiçbir veri bulamazsınız. Geçici masanız bile olmayacak.
Geçici Tabloları Kaldırmak
Varsayılan olarak, veritabanı bağlantınız sonlandırıldığında tüm geçici tablolar MySQL tarafından silinir. Yine de bunları arada silmek istiyorsanız, o zaman bunuDROP TABLE komut.
Aşağıdaki program, geçici bir tabloyu düşürmeye bir örnektir -
mysql> CREATE TEMPORARY TABLE SalesSummary (
-> product_name VARCHAR(50) NOT NULL
-> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
-> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
-> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO SalesSummary
-> (product_name, total_sales, avg_unit_price, total_units_sold)
-> VALUES
-> ('cucumber', 100.25, 90, 2);
mysql> SELECT * FROM SalesSummary;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber | 100.25 | 90.00 | 2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)
mysql> DROP TABLE SalesSummary;
mysql> SELECT * FROM SalesSummary;
ERROR 1146: Table 'TUTORIALS.SalesSummary' doesn't exist
Bir tablonun tam bir kopyasına ihtiyaç duyduğunuz bir durum olabilir ve CREATE TABLE ... SELECT kopyanın aynı dizinleri, varsayılan değerleri vb. içermesi gerektiğinden amaçlarınıza uygun değildir.
Bu durumu aşağıda verilen adımları takip ederek halledebilirsiniz -
Kaynak tablonun yapısını, dizinlerini ve tümünü belirten bir CREATE TABLE deyimi almak için SHOW CREATE TABLE kullanın.
Tablo adını klon tablosununkiyle değiştirmek ve ifadeyi yürütmek için ifadeyi değiştirin. Bu şekilde, tam klon tablosuna sahip olacaksınız.
İsteğe bağlı olarak, tablo içeriğinin de kopyalanması gerekiyorsa, bir INSERT INTO ... SELECT deyimi de yayınlayın.
Misal
Aşağıdaki örneği deneyerek bir klon tablosu oluşturmayı deneyin. tutorials_tbl.
Step 1 - Masanın tüm yapısını alın.
mysql> SHOW CREATE TABLE tutorials_tbl \G;
*************************** 1. row ***************************
Table: tutorials_tbl
Create Table: CREATE TABLE `tutorials_tbl` (
`tutorial_id` int(11) NOT NULL auto_increment,
`tutorial_title` varchar(100) NOT NULL default '',
`tutorial_author` varchar(40) NOT NULL default '',
`submission_date` date default NULL,
PRIMARY KEY (`tutorial_id`),
UNIQUE KEY `AUTHOR_INDEX` (`tutorial_author`)
) TYPE = MyISAM
1 row in set (0.00 sec)
ERROR:
No query specified
Step 2 - Bu tabloyu yeniden adlandırın ve başka bir tablo oluşturun.
mysql> CREATE TABLE clone_tbl (
-> tutorial_id int(11) NOT NULL auto_increment,
-> tutorial_title varchar(100) NOT NULL default '',
-> tutorial_author varchar(40) NOT NULL default '',
-> submission_date date default NULL,
-> PRIMARY KEY (tutorial_id),
-> UNIQUE KEY AUTHOR_INDEX (tutorial_author)
-> ) TYPE = MyISAM;
Query OK, 0 rows affected (1.80 sec)
Step 3- 2. adımı gerçekleştirdikten sonra, veritabanınızda bir klon tablosu oluşturacaksınız. Eski tablodan veri kopyalamak istiyorsanız, bunu INSERT INTO ... SELECT deyimini kullanarak yapabilirsiniz.
mysql> INSERT INTO clone_tbl (tutorial_id,
-> tutorial_title,
-> tutorial_author,
-> submission_date)
-> SELECT tutorial_id,tutorial_title,
-> tutorial_author,submission_date
-> FROM tutorials_tbl;
Query OK, 3 rows affected (0.07 sec)
Records: 3 Duplicates: 0 Warnings: 0
Son olarak, istediğiniz gibi tam bir klon tablosuna sahip olacaksınız.
MySQL Meta Verilerini Alma ve Kullanma
MySQL'den almak isteyeceğiniz üç tür bilgi vardır.
Information about the result of queries - Bu, herhangi bir SELECT, UPDATE veya DELETE ifadesinden etkilenen kayıtların sayısını içerir.
Information about the tables and databases - Bu, tabloların ve veri tabanlarının yapısına ilişkin bilgileri içerir.
Information about the MySQL server - Bu, veritabanı sunucusunun durumunu, sürüm numarasını vb. İçerir.
Tüm bu bilgileri MySQL komut isteminde almak çok kolaydır, ancak PERL veya PHP API'lerini kullanırken, tüm bu bilgileri elde etmek için çeşitli API'leri açıkça çağırmamız gerekir.
Bir Sorgudan Etkilenen Satır Sayısını Elde Etme
Şimdi bu bilgiyi nasıl elde edeceğimize bakalım.
PERL Örneği
DBI betiklerinde, etkilenen satır sayısı, do( ) veya tarafından execute( ) komutu, sorguyu nasıl yürüttüğünüze bağlı olarak.
# Method 1
# execute $query using do( )
my $count = $dbh->do ($query); # report 0 rows if an error occurred printf "%d rows were affected\n", (defined ($count) ? $count : 0); # Method 2 # execute query using prepare( ) plus execute( ) my $sth = $dbh->prepare ($query);
my $count = $sth->execute ( );
printf "%d rows were affected\n", (defined ($count) ? $count : 0);
PHP Örneği
PHP'de, mysql_affected_rows( ) işlevi, bir sorgunun kaç satır değiştiğini bulmak için kullanılır.
$result_id = mysql_query ($query, $conn_id); # report 0 rows if the query failed $count = ($result_id ? mysql_affected_rows ($conn_id) : 0);
print ("$count rows were affected\n");
Tabloları ve Veritabanlarını Listeleme
Bir veritabanı sunucusunda bulunan tüm veritabanlarını ve tabloları listelemek çok kolaydır. Sonucunuz olabilirnull Yeterli ayrıcalıklara sahip değilseniz.
Aşağıdaki kod bloğunda gösterilen yöntem dışında kullanabilirsiniz. SHOW TABLES veya SHOW DATABASES PHP veya PERL'de tabloların veya veritabanlarının listesini almak için sorgular.
PERL Örneği
# Get all the tables available in current database.
my @tables = $dbh->tables ( );
foreach $table (@tables ){ print "Table Name $table\n";
}
PHP Örneği
<?php
$con = mysql_connect("localhost", "userid", "password"); if (!$con) {
die('Could not connect: ' . mysql_error());
}
$db_list = mysql_list_dbs($con);
while ($db = mysql_fetch_object($db_list)) {
echo $db->Database . "<br />"; } mysql_close($con);
?>
Sunucu Meta Verilerini Alma
MySQL'de, veritabanı sunucusu hakkında çeşitli önemli bilgileri almak için MySQL komut isteminde veya PHP gibi herhangi bir komut dosyası kullanılarak çalıştırılabilen birkaç önemli komut vardır.
Sr.No. | Komut ve Açıklama |
---|---|
1 | SELECT VERSION( ) Sunucu sürümü dizesi |
2 | SELECT DATABASE( ) Mevcut veritabanı adı (yoksa boştur) |
3 | SELECT USER( ) Mevcut kullanıcı adı |
4 | SHOW STATUS Sunucu durum göstergeleri |
5 | SHOW VARIABLES Sunucu yapılandırma değişkenleri |
Bir dizi, belirli bir talebe göre sırayla üretilen 1, 2, 3, ... tam sayıları kümesidir. Diziler sık sık veritabanlarında kullanılır çünkü birçok uygulama bir tablodaki her satırın benzersiz bir değer içermesini gerektirir ve diziler bunları oluşturmak için kolay bir yol sağlar.
Bu bölüm, MySQL'de dizilerin nasıl kullanılacağını açıklar.
AUTO_INCREMENT Sütunu Kullanılıyor
MySQL'de Sıraları kullanmanın en basit yolu bir sütunu şu şekilde tanımlamaktır: AUTO_INCREMENT ve kalan şeyleri ilgilenmesi için MySQL'e bırakın.
Misal
Aşağıdaki örneği deneyin. Bu, tablo oluşturacak ve bundan sonra bu tabloya, MySQL tarafından otomatik olarak artırıldığı için kayıt kimliği vermenin gerekli olmadığı birkaç satır ekleyecektir.
mysql> CREATE TABLE insect
-> (
-> id INT UNSIGNED NOT NULL AUTO_INCREMENT,
-> PRIMARY KEY (id),
-> name VARCHAR(30) NOT NULL, # type of insect
-> date DATE NOT NULL, # date collected
-> origin VARCHAR(30) NOT NULL # where collected
);
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO insect (id,name,date,origin) VALUES
-> (NULL,'housefly','2001-09-10','kitchen'),
-> (NULL,'millipede','2001-09-10','driveway'),
-> (NULL,'grasshopper','2001-09-10','front yard');
Query OK, 3 rows affected (0.02 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM insect ORDER BY id;
+----+-------------+------------+------------+
| id | name | date | origin |
+----+-------------+------------+------------+
| 1 | housefly | 2001-09-10 | kitchen |
| 2 | millipede | 2001-09-10 | driveway |
| 3 | grasshopper | 2001-09-10 | front yard |
+----+-------------+------------+------------+
3 rows in set (0.00 sec)
AUTO_INCREMENT Değerlerini Alın
LAST_INSERT_ID( )bir SQL işlevidir, bu nedenle onu SQL ifadelerinin nasıl yayınlanacağını anlayan herhangi bir istemcinin içinden kullanabilirsiniz. Aksi takdirde, PERL ve PHP betikleri, son kaydın otomatik olarak artan değerini almak için özel işlevler sağlar.
PERL Örneği
Kullan mysql_insertid elde etme özelliği AUTO_INCREMENTbir sorgu tarafından oluşturulan değer. Bu özniteliğe, sorguyu nasıl yayınladığınıza bağlı olarak bir veritabanı tanıtıcısı veya bir ifade tutamacı aracılığıyla erişilir.
Aşağıdaki örnek, veritabanı tanıtıcısı aracılığıyla buna başvurur.
$dbh->do ("INSERT INTO insect (name,date,origin) VALUES('moth','2001-09-14','windowsill')"); my $seq = $dbh->{mysql_insertid};
PHP Örneği
AUTO_INCREMENT değeri üreten bir sorgu gönderdikten sonra, değeri çağırarak alın mysql_insert_id( ) komut.
mysql_query ("INSERT INTO insect (name,date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id);
$seq = mysql_insert_id ($conn_id);
Mevcut Bir Sırayı Yeniden Numaralandırma
Bir tablodan çok sayıda kayıt sildiğiniz ve tüm kayıtları yeniden sıralamak istediğiniz bir durum olabilir. Bunu basit bir numara kullanarak yapabilirsiniz, ancak masanız diğer masayla birleşiyorsa bunu yapmak için çok dikkatli olmalısınız.
AUTO_INCREMENT sütununun yeniden dizilmesinin kaçınılmaz olduğunu belirlerseniz, bunu yapmanın yolu sütunu tablodan bırakıp tekrar eklemektir.
Aşağıdaki örnek, nasıl yeniden numaralandırılacağını gösterir. id values Bu tekniği kullanarak tabloda.
mysql> ALTER TABLE insect DROP id;
mysql> ALTER TABLE insect
-> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
-> ADD PRIMARY KEY (id);
Sıraya Belirli Bir Değerden Başlama
MySQL varsayılan olarak 1'den başlayacaktır, ancak tablo oluşturma sırasında başka herhangi bir sayıyı da belirtebilirsiniz.
Aşağıdaki program, MySQL'in diziyi 100'den nasıl başlatacağını gösteren bir örnektir.
mysql> CREATE TABLE insect
-> (
-> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
-> PRIMARY KEY (id),
-> name VARCHAR(30) NOT NULL, # type of insect
-> date DATE NOT NULL, # date collected
-> origin VARCHAR(30) NOT NULL # where collected
);
Alternatif olarak, tabloyu oluşturabilir ve ardından ilk sıra değerini ALTER TABLE komut.
mysql> ALTER TABLE t AUTO_INCREMENT = 100;
Genellikle, tablolar veya sonuç kümeleri bazen yinelenen kayıtlar içerir. Çoğu zaman izin verilir, ancak bazen yinelenen kayıtları durdurmak gerekir. Yinelenen kayıtların belirlenmesi ve tablodan kaldırılması gerekir. Bu bölümde, bir tabloda yinelenen kayıtların oluşmasının nasıl önleneceği ve zaten var olan yinelenen kayıtların nasıl kaldırılacağı anlatılacaktır.
Bir Tabloda Yinelemelerin Oluşmasını Önleme
Kullanabilirsin PRIMARY KEY veya a UNIQUE Yinelenen kayıtları durdurmak için uygun alanlara sahip bir tablo üzerinde dizin oluşturun.
Bir örnek alalım - Aşağıdaki tablo böyle bir dizin veya birincil anahtar içermez, bu nedenle için yinelenen kayıtlara izin verir. first_name ve last_name.
CREATE TABLE person_tbl (
first_name CHAR(20),
last_name CHAR(20),
sex CHAR(10)
);
Bu tabloda aynı ad ve soyad değerlerine sahip birden çok kaydın oluşturulmasını önlemek için bir PRIMARY KEYtanımına. Bunu yaptığınızda, dizine alınmış sütunların daNOT NULL, Çünkü PRIMARY KEY izin vermiyor NULL değerler -
CREATE TABLE person_tbl (
first_name CHAR(20) NOT NULL,
last_name CHAR(20) NOT NULL,
sex CHAR(10),
PRIMARY KEY (last_name, first_name)
);
Bir tabloda benzersiz bir dizinin varlığı, normalde, dizini tanımlayan sütun veya sütunlarda var olan bir kaydı çoğaltan tabloya bir kayıt eklerseniz bir hatanın oluşmasına neden olur.
Kullan INSERT IGNORE yerine komut INSERTkomut. Bir kayıt mevcut bir kaydı çoğaltmazsa, MySQL onu her zamanki gibi ekler. Kayıt bir kopya ise, o zamanIGNORE anahtar kelime MySQL'e bir hata oluşturmadan onu sessizce atmasını söyler.
Aşağıdaki örnek hata vermez ve aynı zamanda yinelenen kayıtları da eklemeyecektir.
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
-> VALUES( 'Jay', 'Thomas');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
-> VALUES( 'Jay', 'Thomas');
Query OK, 0 rows affected (0.00 sec)
Kullan REPLACEINSERT komutu yerine komut. Kayıt yeniyse, INSERT'te olduğu gibi eklenir. Kopya ise, yeni kayıt eskisinin yerini alır.
mysql> REPLACE INTO person_tbl (last_name, first_name)
-> VALUES( 'Ajay', 'Kumar');
Query OK, 1 row affected (0.00 sec)
mysql> REPLACE INTO person_tbl (last_name, first_name)
-> VALUES( 'Ajay', 'Kumar');
Query OK, 2 rows affected (0.00 sec)
INSERT IGNORE ve REPLACE komutları, etkilemek istediğiniz yinelenen işleme davranışına göre seçilmelidir. INSERT IGNORE komutu, çoğaltılan kayıtların ilk kümesini saklar ve kalanları atar. REPLACE komutu, son kopya kümesini saklar ve daha öncekileri siler.
Benzersizliği sağlamanın başka bir yolu da UNIQUE bir tabloya PRIMARY KEY yerine dizin.
CREATE TABLE person_tbl (
first_name CHAR(20) NOT NULL,
last_name CHAR(20) NOT NULL,
sex CHAR(10)
UNIQUE (last_name, first_name)
);
Yinelemeleri Sayma ve Tanımlama
Aşağıda, bir tablodaki ad ve soyad ile yinelenen kayıtları sayma sorgusu yer almaktadır.
mysql> SELECT COUNT(*) as repetitions, last_name, first_name
-> FROM person_tbl
-> GROUP BY last_name, first_name
-> HAVING repetitions > 1;
Bu sorgu person_tbl tablosundaki tüm yinelenen kayıtların bir listesini döndürecektir. Genel olarak, yinelenen değer kümelerini belirlemek için aşağıda verilen adımları izleyin.
Hangi sütunların yinelenebilecek değerleri içerdiğini belirleyin.
Sütun seçim listesinde bu sütunları, COUNT(*).
İçindeki sütunları listeleyin GROUP BY cümle de.
Ekle HAVING Grup sayılarının birden fazla olmasını gerektirerek benzersiz değerleri ortadan kaldıran yan tümce.
Yinelenenleri Sorgu Sonucundan Kaldırma
Kullanabilirsiniz DISTINCT Tabloda bulunan benzersiz kayıtları bulmak için SELECT deyimiyle birlikte komut verin.
mysql> SELECT DISTINCT last_name, first_name
-> FROM person_tbl
-> ORDER BY last_name;
DISTINCT komutunun bir alternatifi, seçtiğiniz sütunları adlandıran bir GROUP BY cümlesi eklemektir. Bu, yinelenenleri kaldırma ve yalnızca belirtilen sütunlardaki benzersiz değer kombinasyonlarını seçme etkisine sahiptir.
mysql> SELECT last_name, first_name
-> FROM person_tbl
-> GROUP BY (last_name, first_name);
Masa Değiştirmeyi Kullanarak Yinelenenleri Kaldırma
Bir tabloda yinelenen kayıtlarınız varsa ve bu tablodan tüm yinelenen kayıtları kaldırmak istiyorsanız, aşağıda verilen prosedürü izleyin.
mysql> CREATE TABLE tmp SELECT last_name, first_name, sex
-> FROM person_tbl;
-> GROUP BY (last_name, first_name);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;
Bir tablodan yinelenen kayıtları kaldırmanın kolay bir yolu, bu tabloya bir INDEX veya PRIMARY KEY eklemektir. Bu tablo zaten mevcut olsa bile, yinelenen kayıtları kaldırmak için bu tekniği kullanabilirsiniz ve gelecekte de güvende olacaksınız.
mysql> ALTER IGNORE TABLE person_tbl
-> ADD PRIMARY KEY (last_name, first_name);
Bir web sayfası üzerinden kullanıcı girdisi alır ve bunu bir MySQL veritabanına eklerseniz, bir güvenlik sorunu için kendinizi tamamen açık bırakmış olabilirsiniz. SQL Injection. Bu bölüm size bunun olmasını nasıl engelleyeceğinizi öğretecek ve komut dosyalarınızı ve MySQL ifadelerinizi güvence altına almanıza yardımcı olacaktır.
SQL Enjeksiyonu genellikle bir kullanıcıdan adı gibi bir girdi istediğinizde oluşur ve bir isim yerine size bilmeden veritabanınızda çalıştıracağınız bir MySQL ifadesi verir.
Bir kullanıcı tarafından sağlanan verilere asla güvenmeyin, bu verileri yalnızca doğrulamadan sonra işleyin; kural olarak bu, örüntü eşleştirmesi ile yapılır. Aşağıdaki örnekte, kullanıcı adı alfasayısal karakterler artı alt çizgi ve 8 ila 20 karakter arasındaki bir uzunlukla sınırlandırılmıştır - bu kuralları gerektiği gibi değiştirin.
if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches)) { $result = mysql_query("SELECT * FROM users WHERE username = $matches[0]");
} else {
echo "username not accepted";
}
Bu sorunu göstermek için aşağıdaki alıntıyı düşünün.
// supposed input
$name = "Qadir'; DELETE FROM users;";
mysql_query("SELECT * FROM users WHERE name = '{$name}'");
İşlev çağrısının, kullanıcı tablosundan, ad sütununun kullanıcı tarafından belirtilen adla eşleştiği bir kaydı alması beklenir. Normal şartlar altında, $ isim sadece alfanümerik karakterler ve belki boşluklar içerecektir. Ancak burada, tamamen yeni bir sorgu ekleyerek$nameVeritabanına yapılan çağrı bir felakete dönüşür. Enjekte edilen DELETE sorgusu, tüm kayıtları kullanıcılardan kaldırır.
Neyse ki, MySQL kullanıyorsanız, mysql_query()işlev, tek bir işlev çağrısında birden çok sorgunun yığınlanmasına veya yürütülmesine izin vermez. Sorguları yığmaya çalışırsanız, arama başarısız olur.
Ancak, diğer PHP veritabanı uzantıları, örneğin SQLite ve PostgreSQL, mutlu bir şekilde yığılmış sorgular gerçekleştirin, tek bir dizede sağlanan tüm sorguları yürütün ve ciddi bir güvenlik sorunu yaratın.
SQL Enjeksiyonunu Önleme
PERL ve PHP gibi betik dillerinde tüm kaçış karakterlerini akıllıca işleyebilirsiniz. PHP için MySQL uzantısı şu işlevi sağlar:mysql_real_escape_string() MySQL'e özel giriş karakterlerinden çıkış yapmak için.
if (get_magic_quotes_gpc()) {
$name = stripslashes($name); } $name = mysql_real_escape_string($name); mysql_query("SELECT * FROM users WHERE name = '{$name}'");
GİBİ İkilemi
LIKE çıkmazını ele almak için, özel bir kaçış mekanizmasının kullanıcı tarafından sağlanan% ve _ karakterlerini değişmez değerlere dönüştürmesi gerekir. Kullanımaddcslashes(), kaçış için bir karakter aralığı belirlemenizi sağlayan bir işlev.
$sub = addcslashes(mysql_real_escape_string("%something_"), "%_"); // $sub == \%something\_
mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");
Bir tablo verilerini bir metin dosyasına dışa aktarmanın en basit yolu, SELECT...INTO OUTFILE Bir sorgu sonucunu doğrudan sunucu ana bilgisayarındaki bir dosyaya aktaran ifade.
SELECT ... INTO OUTFILE Deyimi ile Verileri Dışa Aktarma
Bu ifadenin sözdizimi, normal bir SELECT ile komut INTO OUTFILE filenamesonunda. Varsayılan çıktı formatı LOAD DATA komutu ile aynıdır. Dolayısıyla, aşağıdaki ifade,tutorials_tbl masa içine /tmp/tutorials.txt sekmeyle ayrılmış, satır besleme ile sonlandırılmış bir dosya olarak.
mysql> SELECT * FROM tutorials_tbl
-> INTO OUTFILE '/tmp/tutorials.txt';
Sütun ve kayıtların nasıl alıntı yapılacağını ve sınırlandırılacağını belirtmek için çeşitli seçenekleri kullanarak çıktı biçimini değiştirebilirsiniz. Tutorial_tbl tablosunu CRLF ile sonlandırılmış satırlarla CSV formatında dışa aktarmak için aşağıdaki kodu kullanın.
mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/tutorials.txt'
-> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
-> LINES TERMINATED BY '\r\n';
SELECT ... INTO OUTFILE aşağıdaki özelliklere sahiptir -
Çıktı dosyası doğrudan MySQL sunucusu tarafından oluşturulur, bu nedenle dosya adı, dosyanın sunucu ana bilgisayarında nereye yazılmasını istediğinizi belirtmelidir. İfadenin YEREL versiyonu yoktur.LOCAL versiyonu LOAD DATA.
Sahip olmalısın MySQL FILE yürütme ayrıcalığı SELECT ... INTO Beyan.
Çıktı dosyası halihazırda mevcut olmamalıdır. Bu, MySQL'in önemli olabilecek dosyaları bozmasını engeller.
Sunucu ana bilgisayarında bir oturum açma hesabınız olmalı veya dosyayı bu ana bilgisayardan almanın bir yolu olmalıdır. Aksi takdirdeSELECT ... INTO OUTFILE komutun büyük olasılıkla sizin için bir değeri olmayacaktır.
UNIX altında dosya oluşturulur world readableve MySQL sunucusuna aittir. Bu, dosyayı okuyabilecek olmanıza rağmen silemeyebileceğiniz anlamına gelir.
Tabloları Ham Veri Olarak Dışa Aktarma
mysqldumpprogramı, tabloları ve veritabanlarını kopyalamak veya yedeklemek için kullanılır. Tablo çıktısını birRaw Datafile veya bir dizi olarak INSERT tablodaki kayıtları yeniden oluşturan ifadeler.
Bir tabloyu veri dosyası olarak dökmek için, bir --tab MySQL sunucusunun dosyayı yazmasını istediğiniz dizini gösteren seçenek.
Örneğin, tutorials_tbl masadan TUTORIALS veritabanındaki bir dosyaya /tmp dizin, aşağıda gösterildiği gibi bir komut kullanın.
$ mysqldump -u root -p --no-create-info \
--tab=/tmp tutorials tutorials_tbl
password ******
Tablo İçeriklerini veya Tanımları SQL Formatında Dışa Aktarma
Bir tabloyu SQL formatında bir dosyaya aktarmak için aşağıda gösterilen komutu kullanın.
$ mysqldump -u root -p TUTORIALS tutorials_tbl > dump.txt
password ******
Bu, aşağıda gösterildiği gibi içeriğe sahip bir dosya oluşturacaktır.
-- MySQL dump 8.23
--
-- Host: localhost Database: TUTORIALS
---------------------------------------------------------
-- Server version 3.23.58
--
-- Table structure for table `tutorials_tbl`
--
CREATE TABLE tutorials_tbl (
tutorial_id int(11) NOT NULL auto_increment,
tutorial_title varchar(100) NOT NULL default '',
tutorial_author varchar(40) NOT NULL default '',
submission_date date default NULL,
PRIMARY KEY (tutorial_id),
UNIQUE KEY AUTHOR_INDEX (tutorial_author)
) TYPE = MyISAM;
--
-- Dumping data for table `tutorials_tbl`
--
INSERT INTO tutorials_tbl
VALUES (1,'Learn PHP','John Poul','2007-05-24');
INSERT INTO tutorials_tbl
VALUES (2,'Learn MySQL','Abdul S','2007-05-24');
INSERT INTO tutorials_tbl
VALUES (3,'JAVA Tutorial','Sanjay','2007-05-06');
Birden çok tabloyu dökmek için, hepsini veritabanı adı bağımsız değişkeniyle birlikte adlandırın. Veritabanının tamamını dökmek için, aşağıdaki kod bloğunda gösterildiği gibi herhangi bir tabloyu veritabanından sonra adlandırmayın.
$ mysqldump -u root -p TUTORIALS > database_dump.txt
password ******
Ana makinenizde bulunan tüm veritabanlarını yedeklemek için aşağıdaki kodu kullanın.
$ mysqldump -u root -p --all-databases > database_dump.txt
password ******
--All-databases seçeneği MySQL 3.23.12 sürümünde mevcuttur. Bu yöntem, bir veritabanı yedekleme stratejisi uygulamak için kullanılabilir.
Tabloları veya Veritabanlarını Başka Bir Ana Bilgisayara Kopyalama
Tabloları veya veritabanlarını bir MySQL sunucusundan diğerine kopyalamak istiyorsanız, mysqldump veritabanı adı ve tablo adı ile.
Kaynak ana bilgisayarda aşağıdaki komutu çalıştırın. Bu, tüm veritabanınıdump.txt dosya.
$ mysqldump -u root -p database_name table_name > dump.txt
password *****
Yukarıda açıklandığı gibi belirli bir tablo adı kullanmadan tüm veritabanını kopyalayabilirsiniz.
Şimdi, başka bir ana bilgisayarda ftp dump.txt dosyasını açın ve aşağıdaki komutu kullanın. Bu komutu çalıştırmadan önce, hedef sunucuda veritabanı_adı oluşturduğunuzdan emin olun.
$ mysql -u root -p database_name < dump.txt
password *****
Bunu bir ara dosya kullanmadan gerçekleştirmenin başka bir yolu, mysqldump çıktısını doğrudan ağ üzerinden uzak MySQL sunucusuna göndermektir. Kaynak veritabanının bulunduğu ana bilgisayardan her iki sunucuya da bağlanabiliyorsanız, aşağıdaki komutu kullanın (Her iki sunucuya da erişiminiz olduğundan emin olun).
$ mysqldump -u root -p database_name \
| mysql -h other-host.com database_name
Mysqldump'ta, komutun yarısı yerel sunucuya bağlanır ve döküm çıktısını boruya yazar. Komutun kalan yarısı, diğer-barındırıcı.com'daki uzak MySQL sunucusuna bağlanır. Giriş için boruyu okur ve her bir ifadeyi diğer-barındırıcı.com sunucusuna gönderir.
MySQL'de verileri önceden yedeklenmiş bir dosyadan MySQL veritabanına yüklemenin iki basit yolu vardır.
LOAD DATA ile Verileri İçe Aktarma
MySQL, toplu veri yükleyici görevi gören bir LOAD DATA deyimi sağlar. İşte bir dosyayı okuyan örnek bir ifadedump.txt mevcut dizininizden ve tabloya yükler mytbl mevcut veritabanında.
mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl;
Eğer LOCAL anahtar sözcüğü mevcut değilse, MySQL veri dosyasını sunucu ana bilgisayarında arar. looking into absolute pathname, dosya sisteminin kökünden başlayarak dosyanın konumunu tam olarak belirtir. MySQL, dosyayı verilen konumdan okur.
Varsayılan olarak, LOAD DATA veri dosyalarının satır beslemeleriyle (satırsonu) sonlandırılan satırlar içerdiğini ve bir satırdaki veri değerlerinin sekmelerle ayrıldığını varsayar.
Bir dosya biçimini açıkça belirtmek için bir FIELDS bir satırdaki alanların özelliklerini açıklamak için yan tümce ve bir LINESsatır sonu sırasını belirtmek için yan tümce. AşağıdakiLOAD DATA deyimi, veri dosyasının iki nokta üst üste ile ayrılmış değerler ve satır başları ve yeni satır karakteriyle sonlanan satırlar içerdiğini belirtir.
mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl
-> FIELDS TERMINATED BY ':'
-> LINES TERMINATED BY '\r\n';
LOAD DATA komutu, veri dosyasındaki sütunların tablodaki sütunlarla aynı sıraya sahip olduğunu varsayar. Bu doğru değilse, veri dosyası sütunlarının hangi tablo sütunlarına yüklenmesi gerektiğini gösteren bir liste belirtebilirsiniz. Tablonuzun a, b ve c sütunlarına sahip olduğunu, ancak veri dosyasındaki ardışık sütunların b, c ve a sütunlarına karşılık geldiğini varsayalım.
Dosyayı aşağıdaki kod bloğunda gösterildiği gibi yükleyebilirsiniz.
mysql> LOAD DATA LOCAL INFILE 'dump.txt'
-> INTO TABLE mytbl (b, c, a);
Mysqlimport ile Verileri İçe Aktarma
MySQL ayrıca adlı bir yardımcı program içerir mysqlimport LOAD DATA etrafında bir sarmalayıcı görevi görür, böylece girdi dosyalarını doğrudan komut satırından yükleyebilirsiniz.
Veri yüklemek için dump.txt içine mytbl, UNIX isteminde aşağıdaki komutu kullanın.
$ mysqlimport -u root -p --local database_name dump.txt
password *****
Eğer kullanırsan mysqlimport, komut satırı seçenekleri biçim belirleyicilerini sağlar. mysqlimport önceki ikisine karşılık gelen komutlar LOAD DATA deyimleri aşağıdaki kod bloğunda gösterildiği gibi görünür.
$ mysqlimport -u root -p --local --fields-terminated-by = ":" \
--lines-terminated-by = "\r\n" database_name dump.txt
password *****
Tüm seçeneklerin veritabanı adından önce gelmesi dışında, seçenekleri belirttiğiniz sıra mysqlimport için önemli değildir.
mysqlimport ifade kullanır --columns sütun sırasını belirtme seçeneği -
$ mysqlimport -u root -p --local --columns=b,c,a \
database_name dump.txt
password *****
Alıntıları ve Özel Karakterleri İşleme
FIELDS yan tümcesi, diğer biçim seçeneklerini belirtebilir. TERMINATED BY. Varsayılan olarak LOAD DATA, değerlerin tırnaksız olduğunu varsayar ve ters eğik çizgiyi (\) özel karakterler için bir çıkış karakteri olarak yorumlar. Değeri tırnak içine alarak açıkça belirtmek için,ENCLOSED BYkomut. MySQL, girdi işleme sırasında bu karakteri veri değerlerinin sonlarından çıkarır. Varsayılan kaçış karakterini değiştirmek için kullanınESCAPED BY.
Alıntı karakterlerinin veri değerlerinden çıkarılması gerektiğini belirtmek için ENCLOSED BY belirttiğinizde, tırnak karakterini tam anlamıyla veri değerlerine iki katına çıkararak veya ondan önce çıkış karakteriyle dahil etmek mümkündür.
Örneğin, tırnak ve çıkış karakterleri "ve \ ise, giriş değeri "a""b\"c" olarak yorumlanacak a"b"c.
İçin mysqlimporttırnak ve kaçış değerlerini belirtmek için karşılık gelen komut satırı seçenekleri --fields-enclosed-by ve --fields-escaped-by.