Основные операции с данными

Последнее обновление: 28.04.2019

Все операции с данными опираются на команды языка SQL, про которые подробно можно прочитать в соответствующем руководстве. Тем не менее рассмотрим вкратце базовые операции с бд.

Создание базы данных

Создадим базу данных на сервере MySQL через Node.js:

const mysql = require("mysql2");

const connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "123456"
});

connection.query("CREATE DATABASE usersdb2",
  function(err, results) {
    if(err) console.log(err);
    else console.log("База данных создана");
});

connection.end();

В данном случае посредство команды CREATE DATABASE создается база данных usersdb2.

Создание таблиц

Теперь добавим в выше созданную базу данныз usersdb2 таблицу:

const mysql = require("mysql2");
 
const connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  database: "usersdb2",
  password: "123456"
});

const sql = `create table if not exists users(
  id int primary key auto_increment,
  name varchar(255) not null,
  age int not null
)`;

connection.query(sql, function(err, results) {
    if(err) console.log(err);
    else console.log("Таблица создана");
});
connection.end();

Для создания таблицы применяется команда CREATE TABLE, которая создается таблицу users с тремя столбцами - id, name и age.

Добавление данных

Для добавления применяется SQL-команда INSERT. Добавим данные в ранее созданную таблицу users:

const mysql = require("mysql2");
 
const connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  database: "usersdb2",
  password: "123456"
});

const sql = `INSERT INTO users(name, age) VALUES('Sam', 31)`;

connection.query(sql, function(err, results) {
    if(err) console.log(err);
    console.log(results);
});

connection.end();

В данном случае в таблицу добавляется одна строка, где столбец name имеет значение "Sam", столбец age - значение 31. С помощью параметра results в функции обратного вызова мы можем получить результаты операции. Например, в моем случае консольный вызов будет следующим:

C:\node\mysqlapp> node app.js
ResultSetHeader {
  fieldCount: 0,
  affectedRows: 1,
  insertId: 1,
  info: '',
  serverStatus: 2,
  warningStatus: 0 }

В данном случае мы видим, что возвращается объект, где можно выделить ряд свойств. Прежде всего, это affectedRows - количество затронутых операцией строк (в данном случае количество добавленных строк) и insertId - идентификатор (значение поля id) добавленной записи. Соответственно, если бы нам потребовалось получить id добавленной строки, то мы могли бы написать так:

connection.query(sql, function(err, results) {
    if(err) console.log(err);
    console.log(results.insertId);
});

Добавление множества значений

Добавим сразу несколько значений:

const mysql = require("mysql2");
 
const connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  database: "usersdb2",
  password: "123456"
});

const users = [
  ["Bob", 22],
  ["Alice", 25],
  ["Kate", 28]
];
const sql = `INSERT INTO users(name, age) VALUES ?`;

connection.query(sql, [users], function(err, results) {
    if(err) console.log(err);
    console.log(results);
});

connection.end();

При добавлении множества объектов в sql-запросе после VALUES указывается один вопросительный знак.

И при успешном добавлении свойство results.affectedRows укажет, то добавлено три строки:

C:\node\mysqlapp> node app.js
ResultSetHeader {
  fieldCount: 0,
  affectedRows: 3,
  insertId: 3,
  info: 'Records: 3  Duplicates: 0  Warnings: 0',
  serverStatus: 2,
  warningStatus: 0 }

Однако в этом случае следует учитывать, что мы не сможем получить id всех добавленных строк.

Получение данных

Для получения данных применяется sql-команда SELECT. Например, получим все данные из таблицы users:

const mysql = require("mysql2");
 
const connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  database: "usersdb2",
  password: "123456"
});

const sql = `SELECT * FROM users`;

connection.query(sql, function(err, results) {
    if(err) console.log(err);
    console.log(results);
});

connection.end();

Объект results в функции обратного вызова будет представлять массив полученных из БД данных:

C:\node\mysqlapp> node app.js
[ TextRow { id: 1, name: 'Sam', age: 31 },
  TextRow { id: 2, name: 'Tom', age: 29 },
  TextRow { id: 3, name: 'Bob', age: 22 },
  TextRow { id: 4, name: 'Alice', age: 25 },
  TextRow { id: 5, name: 'Kate', age: 28 },
  TextRow { id: 6, name: 'Tim', age: 22 },
  TextRow { id: 7, name: 'Tom', age: 25 }]

Соответственно после получения мы сможем работать с этими данными как с обычным массивом объектов. Например, выведем только имя для каждого пользователя из базы данных:

const mysql = require("mysql2");
 
const connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  database: "usersdb2",
  password: "123456"
});

const sql = "SELECT * FROM users";
connection.query(sql,  function(err, results) {
    if(err) console.log(err);
    const users = results;
    for(let i=0; i < users.length; i++){
      console.log(users[i].name);
    }
});

connection.end();

Консольный вывод:

C:\node\mysqlapp> node app.js
Sam
Tom
Bob
Alice
Kate
Tim
Tom

Фильтрация данных

Выполним фильтрацию данных с применением выражения WHERE:

const mysql = require("mysql2");
 
const connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  database: "usersdb2",
  password: "123456"
});

const sql = `SELECT * FROM users WHERE name=? AND age=?`;
const filter = ["Tom", 29];
connection.query(sql, filter, function(err, results) {
    if(err) console.log(err);
    console.log(results);
});

connection.end();

Здесь запрос фактически будет выглядеть как SELECT * FROM users WHERE name="Tom" AND age=29, и в прицнипе мы могли бы напрямую ввести данные в запрос. Однако чтобы избежать sql-инъекций при передаче в запрос данных извне рекомендуется использовать параметризацию.

Обновление

Для обновления данных применяется sql-команда UPDATE:

const mysql = require("mysql2");
 
const connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  database: "usersdb2",
  password: "123456"
});

const sql = `UPDATE users SET age=? WHERE name=?`;
const data = [34, "Tom"];
connection.query(sql, data, function(err, results) {
    if(err) console.log(err);
    console.log(results);
});

connection.end();

Консольный вывод

C:\node\mysqlapp> node app.js
ResultSetHeader {
  fieldCount: 0,
  affectedRows: 2,
  insertId: 0,
  info: 'Rows matched: 2  Changed: 2  Warnings: 0',
  serverStatus: 34,
  warningStatus: 0,
  changedRows: 2 }

С помощью свойства affectedRows объекта results мы можем проверить, сколько строк было обновлено.

Удаление

Для удаления применяется sql-команда DELETE:

const mysql = require("mysql2");
 
const connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  database: "usersdb2",
  password: "123456"
});

const sql = "DELETE FROM users WHERE name=?";
const data = ["Sam"]; // удаляем пользователей с именем Sam
connection.query(sql, data, function(err, results) {
    if(err) console.log(err);
    console.log(results);
});

connection.end();

Консольный вывод:

C:\node\mysqlapp> node app.js
ResultSetHeader {
  fieldCount: 0,
  affectedRows: 1,
  insertId: 0,
  info: '',
  serverStatus: 34,
  warningStatus: 0 }
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850