İleri MySql Veri Tabanı Kullanımı
Mysql.exe dosyası aracılığıyla Mysql sunucusu ile bağlantı kurulabilir. Mysql Monitörüne girmek için genel formul:

mysql [-h host_name] [-u user_name] [-pyour_pass]
 

Host :Masaüstünde Bilgisayarım'a sağ tıklayıp özellikler-Ağ kimliği-Tam Bilgisayar Adı karşısında yazan isim bilgisayarınızın host ismidir. Mysql Sunucusu sizin bilgisayarınıza kurulmuş ve bu bilgisayardan mysql monitöre giriş yapacaksanız host olaak localhost da yazabilirsiniz. Yada localhostun  IP numarasını olan 127.0.0.1 rakamını yazabilirsiniz. Mysql sunucusuna başka bir bilgisayardan bağlanacaksanız host olarak o bilgisayarın ağ kimliğini veya IP numarasını yazmalısınız.

örnek:
C:\Mysql\bin\mysql -h localhost -u kullanici -p [enter]
Enter Password:

veya C:\Mysql\bin\mysql -h localhost -u kullanici -psifre [enter] yazılabilir.(-p den sonra şifre bitişik yazılmalı.

Örneğin Mysql monitörüne girer girmez ilamat isimli bir veritabanını kullanmak istersek C:\Mysql\bin\mysql -h localhost -u kullanici -psifre ilamat [enter]

Eğer mysql sunucusunun çalıştığı bilgisayardan veritabanına giriş yapıyorsanız hostu belirtmek zorunluluğu yok.örnek:C:\Mysql\bin\mysql  -u kullanici -psifre

Mysql monitoru ile bir *.sql dosyasını icra etmek:

C:\Mysql\bin\mysql -u kullanici -psifre < dosyaadi.sql

Mysql monitorunden çıkmak için:

mysql>quit;  veya mysql>\q yazarız.

Mysql monitöründeki komutlarla ilgili yardım almak için:

myswl> help; veya mysq>l\h yazarız.

Mysql monitöründe iken her komut sonununa ";" işaretini koyarız, aksi halde komutun halen bitmediği şeklinde yorumlanır ve komut satırı -> şekline dönüşür.

örnekler:

mysql> select version(); select now(); Her iki komutda icra edilecek. Her komut bitiminden sonra ";" işaretini koyarak tek bir satıra birden fazla komut yazabiliriz. Bu ifadeyi birden fazla satırla yazmak istersek

mysql> select version()
-> ,
-> now()
-> ;
//burdan itiabaren komut icra edilecektir.
+-----------+---------------------+
| version() | now() |
+-----------+---------------------+
| 4.0.15-nt | 2004-03-22 22:43:07 |
+-----------+---------------------+
1 row in set (0.00 sec)

Birden fazla satırlı komutlarda yazdığımız ifadenin çalışmasından vazgeçmek ve bufferi temizlemek için \c veya \clear; ifadesini kullanırız. örnek:

mysql> SELECT
-> USER()
-> \c
mysql>

Komut satırı '> olursa tek tırnakla başlamış bir string bekliyor.
"> olursa çift tırnakla başlamış bir string bekliyor.
; işaretini koymayı unutup entere basarsak sonraki satıra koyarız..
örnek:
mysql> SELECT USER()
-> ;

Çift tırnak beklenmesine örnek:
mysql> SELECT * FROM isimler WHERE adi = "metin AND [enter]
"> yas<30"; [enter]

Veritabanlarını görmek için:

mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql    |
| test       |
+----------+
Yukarıdaki örnekte mysql veritabanını kullanmak için:

mysql> use mysql;
Database changed
mysql>
 

Mysql tablosundaki tabloları görmek için:

mysql> show tables;
+-----------------    +
| Tables_in_mysql |
+-----------------    +
| columns_priv       |
| db                      |
| func                   |
| host                   |
| tables_priv          |
| user                   |
+-----------------    +
6 rows in set (0.00 sec)

Mysql sunucusunu kullanan kullanıcıların isimleri, hostları erişim yetkileri mysql veritabanında tutulur.

Yeni bir veritabanı yaratmak için:

mysql> create database ornekveritabani;
Query OK, 1 row affected (0.02 sec)

Bir veritabanını kullanmak için Use komutu kullanılır.
use ornekveritabani:

Ornek veritabanı içinde kitaplar isminde bir tablo yaratalım:
mysql> CREATE TABLE `kitaplar` (`SiraNo` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`kitapadi` VARCHAR(20), `YazarAdi` VARCHAR(20),
->`YazarSoyadi` VARCHAR(20),
-> `aciklama` VARCHAR(200), `BasimTarihi` DATE, `AlimTarihi` DATE,
-> PRIMARY KEY ( `SiraNo` ),
-> index `inkitap` ( `kitapadi` ),
-> index `AdSoyad` ( `Yazaradi` , `YazarSoyadi` )
-> );

Query OK, 0 rows affected (0.04 sec)

Oluşturduğumuz bu tabloyu silmek için:
mysql> drop table kitaplar;
Query OK, 0 rows affected (0.01 sec)
Oluşturduğumuz veritabanını silmek için:
mysql> drop database ornekveritabani;
Query OK, 0 rows affected (0.17 sec)
 

Bir dosyadan Sql komutlarını okuyarak icra etmek: Örneğin yukarıdaki ornekveritabani ve tabloyu oluşturmak için nod defteri ile aşağıdaki satırları yazalım.

# solda diyez işareti olursa bu satır açıklama oluyor.dikkate
#alınmaz.
#önce veritabanımızı oluşturalalım.
create database 'ornekveritabani';

#bu veritabanıını kullanmaya başlayalım.
use ornekveritabani;

#Bu veritabanı içinde kitaplar isminde  bir tablo oluşturalım.

CREATE TABLE `kitaplar` (`SiraNo` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`kitapadi` VARCHAR(20), `YazarAdi` VARCHAR(20),
`YazarSoyadi` VARCHAR(20),
 `aciklama` VARCHAR(200), `BasimTarihi` DATE, `AlimTarihi` DATE,
 PRIMARY KEY ( `SiraNo` ),
 index `inkitap` ( `kitapadi` ),
 index `AdSoyad` ( `Yazaradi` , `YazarSoyadi` )
 );

#meydana gelen tabloyu gösterelim.

show tables;

#artık query'imiz bitti.

Yukarıdaki dosyayı not defteri ile yazdıktan sonra ornek1.sql olarak c:\mysql\bin dizini içine  kaydedelim.Uzantının mutlaka sql olması gerekmez, Txt de olabilir.Bu dosyayı yükleyip içindeki komutları icra etmek için:

mysql> source ornek1.sql
Query OK, 1 row affected (0.00 sec)

Database changed
Query OK, 0 rows affected (0.01 sec)

+---------------------------     +
| Tables_in_ornekveritabani |
+---------------------------     +
| kitaplar                           |
+---------------------------    +
1 row in set (0.00 sec)

Yukarıdaki dosyayı Mysql monitörü dışında iken yanı DOS komut satırında iken yüklemek isteseydik:

C:\mysql\bin>mysql -u kullaniciadi -psifre <ornek1.sql
Tables_in_ornekveritabani
kitaplar
 

Mysqlyi kullanan kullanıcının kim olduğunu görmek için:

mysql> select user(); komutunu kullanırız.

Mysql sunucu versiyonunu öğrenmek için:

mysql> select version(); komutunu kullarız.

Hangi veritabanı üzerinde işlem yapıldığını bulmak için

mysql> SELECT DATABASE();
+-------------------+
| DATABASE()     |
+-------------------+
| ornekveritabanı |
+-------------------+
1 row in set (0.00 sec)

Herhangi bir veritabanı kullanılmıyorsa yukarıdaki tabloda alt bölümde bir şey yazmaz.

Kullanıcılara Yetki vermek:

Yetkiler:
1-Global
2-Veritabanı
3-Tablo
4-sütün bazında olabilir.

Grant ve Revoke komutu mysql adlı veritabanı içindeki tablolara etki eden özel bir Select komutu olarak düşünülebilir.


Grant Komutu:
GRANT privileges [columns]
ON item
TO User_name [identified by 'Password']
[With GRANT OPTion]

-Köşeli parentezler içindeki ifadeler seçime bağlı.
Privileges:virgülle ayrılmış bir yetki listesi olmalı.
Columns tek bir sütün veya "," ayrılmış birden fazla sütün.
item yeni yetkilerin geçerli olduğu tablo veya veritabanı.
item olarak "*.*" veya "*" kullanılarak tüm veritabanına yetki verilebilir.Buna global yetki denir.
Bir veritabanındaki tüm tablolarına dbname.*
tek bir tablo için dbname.tablename
Tablodaki sutunlar için dbname.tablename ve Columns bölü-
müne istenilen sütünlar yazılarak yetki verilebilir.

With grant option seçeneği belirlenmişse kullanıcı kendi yetkilerini başkasına vermesini sağlar.
Kullanıcı yetkileri:Select,insert,update,delete,index,alter,
create, drop.

Yönetici yetkileri:Kullanıcı yetkilerine ek olarak Reload,shutdown,process, file
Özel yetkiler:
all: tüm yetkileri verir.
Usage:hiçbir yetki vermez.bir kullanıcı yaratır ve girmesine izin verir.


REVOKE komutu: grant ın tersidir.
REVOKE privileges [(columns)]
on item
From user_name

Örnekler:

Mydql sunucusu üzerinde tüm yetkilere sahip yönetici konumunda bir kullanıcı oluşturalım.


mysql> grant all //tüm yetkiler
mysql->on * //tüm veritabanı
mysql->to murat identified by 'sifrem'/murat adında bir kullanıcı ve şifresimuratli olan bir kullanıcı oluştur.
mysql->with grant option; //yetkileri de devret


Bu kullanıcının yetkilerini geri almak için
mysql> revoke all
->on *
->from murat;

hiç bir yetkisi olmayan bir kullanıcı tanımlayalım
mysql>grant usage
mysql->on books.*//book veritabanındaki tüm tablolar
mysql->to nihat identified by 'yorgan';
Bu kullanıcı sadece sisteme girebilir fakat bir şey yapamaz.
Nihata uygun yetkiler vermeye karar verirsek
mysql>grant select,insert,update,delete, index, alter, create, drop
mysql->on books.*
mysql->to nihat //şifresini belirtmemiz gerekmiyor.
Nihatın yetkilerini azaltmak için:
Mysql>revoke alter, create, drop
->on books.*
->from nihat;

Tüm yetkilerini almak için
mysql>revoke all
->on books.*
->from nihat;

 

Tüm veritabanlarını sadece okuma yetkisi olan bir kullanıcı oluşturalım:

mysql>grant select
mysql->on *.*//Tüm veritabanları ve tablolar
mysql->to nihat identified by 'yorgan';

Herhangi bir hostdan veritabanına tam erişim hakkı olan bir kullanıcı tanımlayalım.

mysql> grant all
-> on *
-> to 'murat'@'%' identified by 'marmara';
->with grant option;
//yetkileri de devret
Query OK, 0 rows affected (0.00 sec)
 

Sadece Sunucunun kurulu olduğu (localhost) dan giriş yapacak bir kullanıcı tanımlayalım.

mysql> grant all
-> on *
-> to 'murat'@'localhost' identified by 'marmara';
->with grant option;
//yetkileri de devret

Yukarıdaki örnekte to 'murat'@'127.0.0.1' identified by 'murat'; yazsakda sonuç değişmeyecektir.

Sadece BenBil isimli hostdan (bilgisayardan erişim hakkı olan bir kullanıcı tanımlayalım. İstenirse BenBil yerine IP nosuda yazılabilir.

mysql> grant all
-> on *
-> to 'murat'@'BenBil' identified by 'marmara';
->with grant option;
//yetkileri de devret

Görüldüğü gibi Kullanıcı yaratılırken host belirtilecekse tırnak içinde isim, @ işareti ve tırnak içinde host ismi yazılmalı. Eğer host ismi belirtilmezse herhangi bir host olduğu ('%') şeklinde yorumlanır.

Mysql veritabanındaki user, db, host, Tables_priv columns_priv tablolarındaki verileri doğrudan değiştirerek de kullanıcılara yetki verir veya alırız.Bu taktirde değişiklikleri sunucuya bildirmemiz gerekir. (Grant ve Revoke de ise otamatik yetkilendirme tablolarını okur.)
Bunu üç yoldan biriyle sunucuya bildirebiliriz.
mysql>Flush privileges; //Mysql monitörü içinde iken.
c:\mysql\bin\mysqladmin flush-privilesges -u kullanici -psifre // Dosda iken
c:\mysql\bin\mysqladmin reload -u kullanici -psifre //Dosda iken
 

Örneğin nihatın pasaportunu "yastik" olarak değiştirmek istersek:

mysql> UPDATE user SET Password=PASSWORD('yastik')
    ->             WHERE user='nihat';
mysql> FLUSH PRIVILEGES;

 

Doğrudan müdehale ile bir kullanıcı yaratalım.

Veritabanı seçiliyor:

mysql> use mysql

kullanıcı yaratılıyor:

mysql> INSERT INTO user (host, user, password) VALUES(
-> 'localhost',
-> 'rehadmin',
-> password('rehadmin')
-> );

Yukarıdaki kullanıcıyı Mysql ye ekledik, fakat hiç bir yetkisi yok.Bazı yetkiler verecek olursak:

mysql> UPDATE user SET Select_priv='Y', Insert_priv='Y', Update_priv='Y', Delete_priv='Y',
    ->     Create_priv='Y', Drop_priv='Y', Alter_priv='Y) 

    ->             WHERE user='rehadmin';
mysql> FLUSH PRIVILEGES;



Yukarıdaki örnekte Select,insert,updade, delete create, drop alter yetkileri olan bir kullanıcı oluşturduk."Y" yerine "N" olsaydı ilgili yetkisi olmayacaktı.

Sadece rehber isimli bir veritabanını okuma yetkisi olan bir kullanıcı tanımlayalım.

mysql> INSERT INTO db
-> ( host, db, user, Select_priv)
->
-> VALUES(
-> 'localhost', 'rehber', 'rehuser', 'Y'
-> );

Yukarıda 'rehber' isimli veritabanına 'rehuser' kullanıcısının sadece 'localhost'tan erişebileceği ve yalnız 'select' hakkı olduğu belirtiliyor.

Mysql veritabanı içindeki user tablosu içindeki yetkiler globaldir. Yani User tablosu içinde Select (okuma) yetkisi verilmişse sunucu diğer tablolara bakmaksızın bu kullanıcının tüm sunuculardaki veritabanlarını(Mysql veritabanı da dahil olmak üzere) okuma yetkisi olduğunu anlar, Mysql veritabanı içindeki Db tablosu ise bir kullanıcıya sadece belirli bir veritabanı ile ilgili yetki verilirse kullanılır. Host tablosu ise db tablosunu tamamlar.Bir kullanıcı birden fazla bilgisayardan sunucuya bağlanacaksa Db tablosunda host bölümü boş olacak, fakat host tablosundaki host alanında birden fazla giriş olacaktır.
 

Bir kullanıcının sadece şifresini değiştirmek için özel bir komut vardır ve derhal etki eder.

mysql> SET PASSWORD FOR root@localhost=PASSWORD('new_password');

http://www.mysqlfront.de adresinden Mysql-Front programını indirerek windows ortamında görsel olarak çok daha kolay yukarıdaki anlatılanları yapabilir, yeni veritabanı, tablo oluşturma, tabloları yedekleme, dışarıdan veri alma, yeni kullanıcı ekleme silme, kullanıcılara yetki verme vs. işlemlerini yapabilirsiniz.