- Node.js MySQL
- Install MySQL Driver
- Create Connection
- Query a Database
- Таблицы mysql в javascript
- Создание базы данных
- Создание таблиц
- Добавление данных
- Добавление множества значений
- Получение данных
- Фильтрация данных
- Обновление
- Удаление
- Node.js MySQL Create Table
- Example
- Primary Key
- Example
- Example
- Creating Tables in MySQL from Node.js
Node.js MySQL
To be able to experiment with the code examples, you should have MySQL installed on your computer.
You can download a free MySQL database at https://www.mysql.com/downloads/.
Install MySQL Driver
Once you have MySQL up and running on your computer, you can access it by using Node.js.
To access a MySQL database with Node.js, you need a MySQL driver. This tutorial will use the «mysql» module, downloaded from NPM.
To download and install the «mysql» module, open the Command Terminal and execute the following:
Now you have downloaded and installed a mysql database driver.
Node.js can use this module to manipulate the MySQL database:
Create Connection
Start by creating a connection to the database.
Use the username and password from your MySQL database.
var con = mysql.createConnection( host: «localhost»,
user: «yourusername«,
password: «yourpassword»
>);
con.connect(function(err) if (err) throw err;
console.log(«Connected!»);
>);
Save the code above in a file called «demo_db_connection.js» and run the file:
Which will give you this result:
Now you can start querying the database using SQL statements.
Query a Database
Use SQL statements to read from (or write to) a MySQL database. This is also called «to query» the database.
The connection object created in the example above, has a method for querying the database:
con.connect(function(err) <
if (err) throw err;
console.log(«Connected!»);
con.query(sql, function (err, result) <
if (err) throw err;
console.log(«Result: » + result);
>);
>);
The query method takes an sql statements as a parameter and returns the result.
Learn how to read, write, delete, and update a database in the next chapters.
Read more about SQL statements in our SQL Tutorial.
Таблицы mysql в javascript
Все операции с данными опираются на команды языка 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
В данном случае мы видим, что возвращается объект, где можно выделить ряд свойств. Прежде всего, это 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
Однако в этом случае следует учитывать, что мы не сможем получить 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
С помощью свойства 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
Node.js MySQL Create Table
To create a table in MySQL, use the «CREATE TABLE» statement.
Make sure you define the name of the database when you create the connection:
Example
Create a table named «customers»:
var con = mysql.createConnection( host: «localhost»,
user: «yourusername«,
password: «yourpassword«,
database: «mydb»
>);
con.connect(function(err) if (err) throw err;
console.log(«Connected!»);
var sql = «CREATE TABLE customers (name VARCHAR(255), address VARCHAR(255))»;
con.query(sql, function (err, result) if (err) throw err;
console.log(«Table created»);
>);
>);
Save the code above in a file called «demo_create_table.js» and run the file:
Which will give you this result:
Primary Key
When creating a table, you should also create a column with a unique key for each record.
This can be done by defining a column as «INT AUTO_INCREMENT PRIMARY KEY» which will insert a unique number for each record. Starting at 1, and increased by one for each record.
Example
Create primary key when creating the table:
var con = mysql.createConnection( host: «localhost»,
user: «yourusername«,
password: «yourpassword«,
database: «mydb»
>);
con.connect(function(err) if (err) throw err;
console.log(«Connected!»);
var sql = «CREATE TABLE customers (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), address VARCHAR(255))»;
con.query(sql, function (err, result) if (err) throw err;
console.log(«Table created»);
>);
>);
If the table already exists, use the ALTER TABLE keyword:
Example
Create primary key on an existing table:
var con = mysql.createConnection( host: «localhost»,
user: «yourusername«,
password: «yourpassword«,
database: «mydb»
>);
con.connect(function(err) if (err) throw err;
console.log(«Connected!»);
var sql = «ALTER TABLE customers ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY«;
con.query(sql, function (err, result) if (err) throw err;
console.log(«Table altered»);
>);
>);
Creating Tables in MySQL from Node.js
Summary: in this tutorial, you will learn how to create a new table in MySQL database from a node.js application.
To create a table from node.js, you use these steps:
- Connect to the MySQL database server.
- Call the query() method on the connection object to execute a CREATE TABLE statement.
- Close the database connection.
The following example (query.js) shows you how to connect to the todoapp database and execute a CREATE TABLE statement:
let mysql = require('mysql'); let connection = mysql.createConnection(< host: 'localhost', user: 'root', password: '', database: 'todoapp' >); // connect to the MySQL server connection.connect(function(err) < if (err) < return console.error('error: ' + err.message); > let createTodos = `create table if not exists todos( id int primary key auto_increment, title varchar(255)not null, completed tinyint(1) not null default 0 )`; connection.query(createTodos, function(err, results, fields) < if (err) < console.log(err.message); > >); connection.end(function(err) < if (err) < return console.log(err.message); > >); >);
Code language: JavaScript (javascript)
The query() method accepts an SQL statement and a callback. The callback function takes three arguments:
- error: stores the detailed error if an error occurred during the execution of the statement
- results: contains the results of the query
- fields: contains results fields information if any
> node query.js
Code language: JavaScript (javascript)
The query executed successfully without error.
Let’s check whether the todos table created in the database:
>mysql -u root -p todoapp; Enter password: ********* mysql> show tables; +-------------------+ | Tables_in_todoapp | +-------------------+ | todos | +-------------------+ 1 row in set (0.08 sec)
Code language: JavaScript (javascript)
As you can see, the todos table created within the todoapp database.
In this tutorial, you have learned how to create a new table in a MySQL database.