Node.js MySQL İşlemleri

Node.js ile MySQL veritabanı bağlantısı, sorgulama, tablo oluşturma, tablo listeleme, veri ekleme, veri çekme, veri listeleme, veri silme, veri güncelleme bilgileri yer alıyor.

Herhangi bir programlama dili ve veritabanı arasında bağlantı kurmak, veri alışverişi yapmak için veritabanı ve programlama dili arasında görev yapan veritabanı arabirimleri kullanılır.

Node.js ve MySQL

Node.js ile MySQL bağlantısı ve veri alışverişi için mysql modülü kullanılır.

Modülü indirmek için

npm install mysql

veya

npm install mysql --save

komutu kullanılır.

MySQL bağlantısı

Modül proje dahil edilir.

const mysql = require('mysql');

Modül içerisinde yer alan createConnection metodu ile MySQL bağlantısı oluşturulur.

Metot parametre olarak MySQL bağlantısı ile ilgili bilgilerin bulunduğu bir nesne alır.

Bağlantı bilgilerinde host, user, password, database değerlerinin kullanımı yeterlidir.

'use strict';

const mysql = require('mysql');

let connection = mysql.createConnection({
  host: 'localhost',
  user: 'kullanici-adi',
  password: 'kullanici-sifre',
  database: 'veritabani-adi'
});

connection.connect(function (err) {
  if (err) throw err;

  console.log('MySQL bağlantısı başarıyla gerçekleştirildi.');

});

Ayrıca port, socketPath, charset, connectTimeout, ssl parametreleri de kullanılabilir.

Metot geri dönüş değeri olarak bağlantı bilgileri, bağlantı kurma, sorgulama yapma vb.  metot ve özelliklere sahip bir nesne döndürür.

Bağlantının sağlanabilmesi için döndürülen nesne içerisinde yer alan connect metodu kullanılır.

Bağlantı bilgileri düzenlenip kodlar çalıştırıldığında aşağıdaki gibi bir sonuç verecektir.

node index.js
MySQL bağlantısı başarıyla gerçekleştirildi.

MySQL sorgulama

Node.js ile MySQL sorgulama için query metodu kullanılır.

'use strict';

const mysql = require('mysql');

let connection = mysql.createConnection({
  host: 'localhost',
  user: 'kullanici-adi',
  password: 'kullanici-sifre',
  database: 'veritabani-adi'
});

let sqlSorgusu = `SELECT (2 + 3) AS sonuc`;

connection.connect(function (err) {
  if (err) throw err;

  console.log('MySQL bağlantısı başarıyla gerçekleştirildi.');

  connection.query(sqlSorgusu, function (err, results, fields) {
    if (err) throw err;

    console.log(results);

  });

});

Metodun ilk parametresi SQL sorgusunu, ikinci parametre sorgu sonucuyla işlem yapmak için geri bildirim fonksiyonu alır.

Geri bildirim fonksiyonu parametre olarak hata, sonuç ve tablo alanları ile ilgili bilgilerin tutulduğu err, results ve fields parametrelerini alır.

MySQL bağlantısını kapatmak

Node.js ile MySQL bağlantı yapılıp sorgulama yapıldıktan sonra bağlantının kapatılması için end metodu kullanılır.

'use strict';

const mysql = require('mysql');

let connection = mysql.createConnection({
  host: 'localhost',
  user: 'kullanici-adi',
  password: 'kullanici-sifre',
  database: 'veritabani-adi'
});

let sqlSorgusu = `SELECT (2 + 3) AS sonuc`;

connection.connect(function (err) {
  if (err) throw err;

  console.log('MySQL bağlantısı başarıyla gerçekleştirildi.');

  connection.query(sqlSorgusu, function (err, results, fields) {
    if (err) throw err;

    console.log(results);

  });

  connection.end(function (err) {
    if (err) throw err;

    console.log('MySQL bağlantısı başarıyla kapatıldı.');

  });

});

Modül MySQL ile ilgili işlemler tamamlandığında otomatik olarak bağlantıyı sonlandırır.

Ancak iyi bir geliştirme için bağlantının kapatılması faydalı olacaktır.

Bağlantı durumun kontrolü için connection.state özelliği kullanılabilir.

MySQL Tablo Oluşturma

Tablo oluşturma işlemi için öncelikle tabloda yer alacak alanların belirlenmesi, alanların veri tipinin belirlenmesi ve varsa çeşitli kısıtlamaların SQL komutu ile yazılması gerekir.

let sqlSorgusu = `CREATE TABLE IF NOT EXISTS kisiler (
  kisi_sira INT AUTO_INCREMENT NOT NULL,
  kisi_adi VARCHAR(20) NOT NULL,
  kisi_soyadi VARCHAR(30) NOT NULL DEFAULT 'SEZER',
  kisi_eposta VARCHAR(50) NOT NULL,
  CONSTRAINT PK_sira PRIMARY KEY(kisi_sira)
);`;

SQL komutları Node.js MySQL sorgulama alanındaki kodlardan faydalanılarak tablo oluşturulur.

'use strict';

const mysql = require('mysql');

let connection = mysql.createConnection({
  host: 'localhost',
  user: 'kullanici-adi',
  password: 'kullanici-sifre',
  database: 'veritabani-adi'
});

let sqlSorgusu = `CREATE TABLE IF NOT EXISTS kisiler (
  kisi_sira INT AUTO_INCREMENT NOT NULL,
  kisi_adi VARCHAR(20) NOT NULL,
  kisi_soyadi VARCHAR(30) NOT NULL DEFAULT 'SEZER',
  kisi_eposta VARCHAR(50) NOT NULL,
  CONSTRAINT PK_sira PRIMARY KEY(kisi_sira)
);`;

connection.connect(function (err) {
  if (err) throw err;
  connection.query(sqlSorgusu, function (err, results) {
    if (err) throw err.message;
    console.log('Tablo oluşturuldu.');
  });
});

Tablo oluşturma işleminden sonra artık oluşturulan tabloya kayıt eklenebilir.

Node.js MySQL Tablo Listeleme

Tabloları listelemek için SHOW TABLES komutu kullanılır.

let sqlSorgusu = `SHOW TABLES;`;

Node.js MySQL sorgulama alanındaki kodlardan faydalanılarak tablo listelenir.

'use strict';

const mysql = require('mysql');

let connection = mysql.createConnection({
  host: 'localhost',
  user: 'kullanici-adi',
  password: 'kullanici-sifre',
  database: 'veritabani-adi'
});

let sqlSorgusu = `SHOW TABLES;`;

connection.connect(function (err) {
  if (err) throw err;
  connection.query(sqlSorgusu, function (err, results, fields) {
    if (err) throw err.message;

    // Tablolar listeleniyor.
    for (let tablo of results) {
      console.log(Object.values(tablo).toString());
    }

  });
});

Node.js ile tabloların listelenmesi karmaşık olabilir.

MySQL veri ekleme

Veri ekleme işlemi için INSERT INTO anahtar kelimesi kullanılır.

Node.js ile MYSQL veritabanına veri eklemek için öncelikle tabloya uygun SQL komutu yazılır.

let sqlSorgusu = `INSERT INTO kisiler VALUES(NULL, 'Yusuf', 'SEZER', 'yusufsezer@mail.com');`;

Hazırlanan SQL sorgusu MySQL bağlantısını yapılması ve çalıştırılmasıyla eklenir.

'use strict';

const mysql = require('mysql');

let connection = mysql.createConnection({
  host: 'localhost',
  user: 'kullanici-adi',
  password: 'kullanici-sifre',
  database: 'veritabani-adi'
});

let sqlSorgusu = `INSERT INTO kisiler VALUES(NULL, 'Yusuf', 'SEZER', 'yusufsezer@mail.com');`;

connection.connect(function (err) {
  if (err) throw err;
  connection.query(sqlSorgusu, function (err, results) {
    if (err) throw err.message;
    console.log('Başarılı bir şekilde eklendi.');
  });
});

Eklenen kayıt ile ilgi bilgi için results parametresindeki insertId, affectedRows vb. değerlere bakılır.

Güvenli veri ekleme

Node.js ile veri eklerken istenmeyen durumların önüne geçmek için ön hazırlıklı sorgular kullanılır.

'use strict';

const mysql = require('mysql');

let connection = mysql.createConnection({
  host: 'localhost',
  user: 'kullanici-adi',
  password: 'kullanici-sifre',
  database: 'veritabani-adi'
});

let sqlSorgusu = `INSERT INTO kisiler VALUES(NULL, ?, ?, ?);`;
let veri = ['Yusuf', 'SEZER', 'yusufsezer@mail.com'];

connection.connect(function (err) {
  if (err) throw err;
  connection.query(sqlSorgusu, veri, function (err, results) {
    if (err) throw err.message;
    console.log('Başarılı bir şekilde eklendi.');
  });
});

Veritabanına ekleme işlemi çeşitli filtreleme işlemleri yapılarak eklenir.

Çoklu veri ekleme

Node.js ile çoklu veri ekleme işlemi için eklenecek verilerle ilgili sütun bilgilerinin bulunduğu SQL komutu hazırlanır.

let sqlSorgusu = `INSERT INTO kisiler(kisi_adi, kisi_sira, kisi_eposta) VALUES ?`;

SQL komutuna göre uygun veriler hazırlanarak query metoduna parametre olarak geçirilir.

'use strict';

const mysql = require('mysql');

let connection = mysql.createConnection({
  host: 'localhost',
  user: 'kullanici-adi',
  password: 'kullanici-sifre',
  database: 'veritabani-adi'
});

let sqlSorgusu = `INSERT INTO kisiler(kisi_adi, kisi_sira, kisi_eposta) VALUES ?`;
let veriler = [
  ['Yusuf', 'SEZER', 'yusufsezer@mail.com'],
  ['Ramazan', 'SEZER', '***@****.com'],
  ['Sinan', 'SEZER', '***@****.com'],
  ['Mehmet', 'SEZER', '***@****.com'],
];

connection.connect(function (err) {
  if (err) throw err;
  connection.query(sqlSorgusu, [veriler], function (err, results) {
    if (err) throw err.message;
    console.log(results.affectedRows + ' kayıt eklendi.');
  });
});

Veri ekleme işlemlerinde ön hazırlıklı güvenli veri ekleme işleminin kullanılması faydalı olacaktır.

MySQL veri çekme

Veri seçme işlemi için SELECT anahtar kelimesi kullanılır.

Tabloda bulunan tüm sütunları seçmek için yıldız (*) karakteri kullanılır.

let sqlSorgusu = `SELECT * FROM kisiler`;

Tabloda bulunan belirli sütunları seçmek için sütun adı kullanılır.

let sqlSorgusu = `SELECT kisi_adi, kisi_soyadi FROM kisiler`;

Tabloda bulunan özel bir veriyi seçmek için WHERE anahtar kelimesi kullanılır.

let sqlSorgusu = `SELECT * FROM kisiler WHERE kisi_adi = 'yusuf'`;

İstenilen veriye ait SQL komutunun hazırlanmasının ardından gerekli olan MYSQL bağlantısı yapılarak sonuçlar alınır.

'use strict';

const mysql = require('mysql');

let connection = mysql.createConnection({
  host: 'localhost',
  user: 'kullanici-adi',
  password: 'kullanici-sifre',
  database: 'veritabani-adi'
});

let sqlSorgusu = `SELECT * FROM kisiler WHERE kisi_adi = 'yusuf'`;

connection.connect(function (err) {
  if (err) throw err;
  connection.query(sqlSorgusu, function (err, results) {
    if (err) throw err.message;
    console.log(results);
  });
});

Veri ekleme işleminde dışarıdan alınan veride sorgulanabilir. Bu durumda ön hazırlıklı sorgular kullanılır.

Güvenli veri çekme

'use strict';

const mysql = require('mysql');

let connection = mysql.createConnection({
  host: 'localhost',
  user: 'kullanici-adi',
  password: 'kullanici-sifre',
  database: 'veritabani-adi'
});

let sqlSorgusu = `SELECT * FROM kisiler WHERE kisi_adi = ?`;

connection.connect(function (err) {
  if (err) throw err;
  connection.query(sqlSorgusu, ['yusuf'], function (err, results) {
    if (err) throw err.message;
    console.log(results);
  });
});

Güvenli sorgulara ek olarak SQL sorgusunu güvenli hale getirmek için mysql.escape metodu da kullanılabilir.

Sütun bilgisi

Veri çekme işleminde kullanılan sütunların bilgisi geri bildirim fonksiyonunun üçüncü parametresi ile ulaşılır.

'use strict';

const mysql = require('mysql');

let connection = mysql.createConnection({
  host: 'localhost',
  user: 'kullanici-adi',
  password: 'kullanici-sifre',
  database: 'veritabani-adi'
});

let sqlSorgusu = `SELECT * FROM kisiler WHERE kisi_adi = ?`;

connection.connect(function (err) {
  if (err) throw err;
  connection.query(sqlSorgusu, ['yusuf'], function (err, results, fields) {
    if (err) throw err.message;
    // Sütun ile ilgili bilgiler.
    console.log(fields);
  });
});

Veri çekme işlemi sonrası verilerin iyi bir şekilde listelenmesi için Node.js MySQL Veri Listeleme yazısına bakabilirsiniz.

MySQL veri listeleme

Veri seçme işlemi için SELECT anahtar kelimesi kullanılır.

'use strict';

const mysql = require('mysql');

let connection = mysql.createConnection({
  host: 'localhost',
  user: 'kullanici-adi',
  password: 'kullanici-sifre',
  database: 'veritabani-adi'
});

let sqlSorgusu = `SELECT * FROM kisiler`;

connection.connect(function (err) {
  if (err) throw err;
  connection.query(sqlSorgusu, function (err, results) {
    if (err) throw err.message;
    console.log(results);
  });
});

Veri çekme işleminin sonucu dizi içerisinde yer alan nesneler olacaktır.

[ { kisi_sira: 1, kisi_adi: 'Yusuf', kisi_soyadi: 'SEZER' },
  { kisi_sira: 2, kisi_adi: 'Ramazan', kisi_soyadi: 'SEZER' },
  { kisi_sira: 3, kisi_adi: 'Sinan', kisi_soyadi: 'SEZER' },
  { kisi_sira: 4, kisi_adi: 'Mehmet', kisi_soyadi: 'SEZER' } ]

Verilere JavaScript Nesneler yazısında yer alan erişim yöntemleriyle aşağıdaki gibi erişilir.

console.log(results[0].sutun_adi);

Verilerdeki kisi_adi sütununa erişmek için sutun_adi yerine kisi_adi yazılması yeterli olacaktır.

console.log(results[0].kisi_adi);

Nesne içindeki diğer elemanlara da benzer şekilde erişim sağlanır.

console.log(results[0].kisi_sira + '-' + results[0].kisi_adi + ' ' + results[0].kisi_soyadi);

Birden fazla sonucu olan sorgular JavaScript içerisinde yer alan for, forin, forof, while döngüleri kullanılarak yazdırılır.

for (const kayit of results) {
  console.log(kayit.kisi_sira + '-' + kayit.kisi_adi + ' ' + kayit.kisi_soyadi);
}

Kayıt listeleme sırasında JavaScript Nesneler yazısından faydalanabilirsiniz.

MySQL veri silme

Veri silme işlemi için DELETE anahtar kelimesi kullanılır.

DELETE FROM tablo_adi WHERE sutun_adi = silinecek_veri

NOT: Veri silme işleminde WHERE kullanılmazsa tablodaki tüm veriler silinir.

Veri silme işlemi için öncelikle dikkatli bir şekilde gerekli SQL komutu yazılır.

let sqlSorgusu = `DELETE FROM kisiler WHERE kisi_sira= 99`;

Yazılan komut Node.js ile işlenmek üzere mysql modülüne parametre olarak geçirilerek çalıştırılır.

'use strict';

const mysql = require('mysql');

let connection = mysql.createConnection({
  host: 'localhost',
  user: 'kullanici-adi',
  password: 'kullanici-sifre',
  database: 'veritabani-adi'
});

let sqlSorgusu = `DELETE FROM kisiler WHERE kisi_sira= 99`;

connection.connect(function (err) {
  if (err) throw err;
  connection.query(sqlSorgusu, function (err, results) {
    if (err) throw err.message;
    console.log('Başarılı bir şekilde silindi.');
  });
});

Node.js komutları her çalıştırıldığında “Başarılı bir şekilde silindi.” sonucunu verecektir.

Silme işleminin kontrolü için results nesnesinde yer alan affectedRows özelliği kullanılır.

'use strict';

const mysql = require('mysql');

let connection = mysql.createConnection({
  host: 'localhost',
  user: 'kullanici-adi',
  password: 'kullanici-sifre',
  database: 'veritabani-adi'
});

let sqlSorgusu = `DELETE FROM kisiler WHERE kisi_sira= 99`;

connection.connect(function (err) {
  if (err) throw err;
  connection.query(sqlSorgusu, function (err, results) {
    if (err) throw err.message;

    // Veri silme kontrolü
    if (results.affectedRows > 0) {
      console.log(results.affectedRows + ' kayıt silindi.');
    }

  });
});

Veri silme işlemindeki dikkat edilmesi gereken yer DELETE SQL komutuna uygun WHERE koşulunun yazılmasıdır.

Veri silme işleminde WHERE koşulu belirtilmediğinde tablodaki veriler toplu/çoklu olarak silinecektir.

MySQL veri güncelleme

Veri güncelleme işlemi için UPDATE anahtar kelimesi kullanılır.

UPDATE tablo_adi SET sutun1 = yeni_deger, sutun2 = yeni_deger WHERE sutun_adi = guncellenecek_deger

NOT: Veri güncelleme işleminde WHERE kullanılmazsa tablodaki tüm veriler güncellenir.

Veri güncelleme işlemi için öncelikle dikkatli bir şekilde gerekli SQL komutu yazılır.

let sqlSorgusu = `UPDATE kisiler SET kisi_adi = 'Yusuf Sefa', kisi_soyadi = 'SEZER' WHERE kisi_sira = 3`;

Yazılan komut Node.js ile işlenmek üzere mysql modülüne parametre olarak geçirilerek çalıştırılır.

'use strict';

const mysql = require('mysql');

let connection = mysql.createConnection({
  host: 'localhost',
  user: 'kullanici-adi',
  password: 'kullanici-sifre',
  database: 'veritabani-adi'
});

let sqlSorgusu = `UPDATE kisiler SET kisi_adi = 'Yusuf Sefa', kisi_soyadi = 'SEZER' WHERE kisi_sira = 3`;

connection.connect(function (err) {
  if (err) throw err;
  connection.query(sqlSorgusu, function (err, results) {
    if (err) throw err.message;
    console.log('Başarılı bir şekilde güncellendi.');
  });
});

Node.js komutları her çalıştırıldığında “Başarılı bir şekilde güncellendi.” sonucunu verecektir.

Güncelleme işleminin kontrolü için results nesnesinde yer alan affectedRows özelliği kullanılır.

'use strict';

const mysql = require('mysql');

let connection = mysql.createConnection({
  host: 'localhost',
  user: 'kullanici-adi',
  password: 'kullanici-sifre',
  database: 'veritabani-adi'
});

let sqlSorgusu = `UPDATE kisiler SET kisi_adi = 'Yusuf Sefa', kisi_soyadi = 'SEZER' WHERE kisi_sira = 3`;

connection.connect(function (err) {
  if (err) throw err;
  connection.query(sqlSorgusu, function (err, results) {
    if (err) throw err.message;

    // Veri güncelleme kontrolü
    if (results.affectedRows > 0) {
      console.log(results.affectedRows + ' kayıt güncellendi.');
    }

  });
});

Dışarıdan alınan verilerin filtrelenmesi için ön hazırlıklı sorguların kullanılması faydalı olacaktır.

'use strict';

const mysql = require('mysql');

let connection = mysql.createConnection({
  host: 'localhost',
  user: 'kullanici-adi',
  password: 'kullanici-sifre',
  database: 'veritabani-adi'
});

let sqlSorgusu = `UPDATE kisiler SET kisi_adi = ?, kisi_soyadi = ? WHERE kisi_sira = ?`;
let veri = ['Yusuf Sefa', 'SEZER', 3];

connection.connect(function (err) {
  if (err) throw err;
  connection.query(sqlSorgusu, veri, function (err, results) {
    if (err) throw err.message;

    // Veri güncelleme kontrolü
    if (results.affectedRows > 0) {
      console.log(results.affectedRows + ' kayıt güncellendi.');
    }

  });
});

Veri güncelleme işlemindeki dikkat edilmesi gereken yer UPDATE SQL komutuna uygun WHERE koşulunun yazılmasıdır.

Veri güncelleme işleminde WHERE koşulu belirtilmediğinde tablodaki veriler toplu/çoklu olarak güncellenecektir.

Node.js Derslerine buradan ulaşabilirsiniz…

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!