Mysql

Insert Multiple Records

To insert more than one record, make an array containing the values, and insert a question mark in the sql, which will be replaced by the value array:

Example

Fill the «customers» table with data:


var mysql = require(‘mysql’);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 = «INSERT INTO customers (name, address) VALUES ?»;  var values = ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,      ];  con.query(sql, , function (err, result) {    if (err) throw err;    console.log(«Number of records inserted: » + result.affectedRows);  });});

Save the code above in a file called «demo_db_insert_multple.js», and run the file:

Run «demo_db_insert_multiple.js»

C:\Users\Your Name>node demo_db_insert_multiple.js

Which will give you this result:

Connected!Number of records inserted: 14

Почему Node.js и MySQL?

MySQL будет использоваться для хранения информации из Trace — инструмента Node.js для отладки и мониторинга производительности.

Выбор пал на MySQL, потому что на момент принятия решения Postgres не очень хорошо обновлял строки и обновление неизменяемых данных было бы неоправданно сложным. К сожалению, эти решения не соответствуют требованиям ACID, что затрудняет их использование.

Однако при  хорошем индексировании и правильном планировании MySQL, это может быть подходящим решением для поставленной задачи.

Full-Stack JavaScript Developer

«ООО МКК «Правовой Капитал»», Екатеринбург, можно удалённо, от 50 000 ₽

tproger.ru

Вакансии на tproger.ru

MySQL имеет несколько модулей хранения. InnoDB является стандартным, в котором есть большинство функций. Однако следует учитывать, что таблицы InnoDB не изменяемы, что означает, что каждый оператор скопирует все данные в новую таблицу. Это ухудшит ситуацию, когда возникнет необходимость в переносе уже существующей базы данных.

Если имеются номинальные значения, каждое из которых имеет множество связанных данных, например, у каждого из пользователей есть множество продуктов, а пользователей довольно много — пожалуй, наиболее оптимальным будет создание отдельных таблиц с именем   для каждой из сущностей. Таким образом можно значительно уменьшить размер конкретной таблицы.

Кроме того, если не разделить пользователей по таблицам, очистка данных пользователя в случае удаления учетной записи будет являться операцией с постоянной временной сложностью алгоритма O(1), когда время выполнения не зависит от размера обрабатываемых данных

Это очень важно, потому что, если нужно удалить большое количество значений из больших таблиц, MySQL может решить использовать неверный индекс или вообще не использовать индексы. Если не создавать отдельных таблиц для каждой сущности, вы не сможете использовать подсказки для , чтобы указать MySQL, какие именно индексы нужно обрабатывать

Вы также можете захотеть использовать для таблицы, чтобы удалить данные, но это приведет к копированию каждой строки в новую таблицу, что не является рациональным при использовании одной большой таблицы для всех пользователей.

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

Однако перед тем как использовать динамически созданные таблицы, стоит попробовать удалить строки в чанках (англ.  chunks). Такой вариант также может сработать и в этом случае упростит весь процесс. Конечно, если данные появляются быстрее, чем происходит их удаление, решение с чанками не подойдет.

Но что если таблицы все еще остались огромными даже после их разделения по пользователями и также нужно удалить устаревшие строки? А данные все еще появляются быстрее, чем происходит их удаление? В этом случае стоит попробовать встроенный в MySQL инструмент для секционирования таблиц. Это удобно, когда нужно разделить данные по постоянным или переменным значениям, например, по времени создания.

Select With a Filter

When selecting records from a table, you can filter the selection by using the «WHERE» statement:

Example

Select record(s) with the address «Park Lane 38»:

var mysql = require(‘mysql’); var con = mysql.createConnection({  host: «localhost»,  user: «yourusername»,  password: «yourpassword»,  database: «mydb»});con.connect(function(err) {  if (err) throw err;  con.query(«SELECT * FROM customers WHERE address = ‘Park Lane 38′», function (err, result) {    if (err) throw err;    console.log(result);  }); });

Save the code above in a file called «demo_db_where.js» and run the file:

Run «demo_db_where.js»

C:\Users\Your Name>node demo_db_where.js

Which will give you this result:

Запросы к базе данных

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

const Sequelize = require("sequelize");
const sequelize = new Sequelize("usersdb", "root", "123456", {
  dialect: "mysql",
  host: "localhost",
  define: {
    timestamps: false
  }
});
const User = sequelize.define("user", {
  id: {
    type: Sequelize.INTEGER,
    autoIncrement: true,
    primaryKey: true,
    allowNull: false
  },
  name: {
    type: Sequelize.STRING,
    allowNull: false
  },
  age: {
    type: Sequelize.INTEGER,
    allowNull: false
  }
});

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

Для добавления данных в бд у модели вызывается метод create(), в который передается добавляемый объект:

User.create({
    name: "Tom",
    age: 35
  }).then(res=>{
    console.log(res);
  }).catch(err=>console.log(err));

Как мы видим, свойства передаваемого в метод create объекта соответствуют свойствам модели User за исключением свойства id, которое генерируется базой данных.

После операции добавления мы можем получить добавленный объект, в том числе его id, сгенерированный базой данных:

User.create({
  name: "Bob",
  age: 31
}).then(res=>{
  const user = {id: res.id, name: res.name, age: res.age}
  console.log(user);
}).catch(err=>console.log(err));

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

Для извлечения всех данных применяется метод findAll():

User.findAll({raw:true}).then(users=>{
  console.log(users);
}).catch(err=>console.log(err));

В данном случае в метод передается необязательный объект , который позволяет получить непосредственно данны из БД в вид объектов без дополнительных метаданных. Например, консольный вывод в моем случае выглядел следующим образом:

Простейшая фильтрация

Для применения фильтрации при получении данных (а также при обновлении и удалении) применяется оператор where, который указывает на критерий фильтрации. Например, выберем из БД всех пользователей, у которых name=»Tom»:

User.findAll({where:{name: "Tom"}, raw: true })
.then(users=>{
  console.log(users);
}).catch(err=>console.log(err));

Консольный вывод в данном случае:

Получение одного объекта

Нередко необходимо получить лишь один объект из БД. В этом случае мы можем использовать такие методы как findByPk() (получает объект по первичному ключу) и findOne() (получает один объект по определенному критерию). Например, получим пользователя с id=2:

User.findByPk(2)
.then(user=>{
	if(!user) return; // если пользователь не найден
	console.log(user.name);
}).catch(err=>console.log(err));

Или получим одного пользователя с именем Tom:

User.findOne({where: {name: "Tom"}})
.then(user=>{
	if(!user) return;
	console.log(user.name, user.age);
}).catch(err=>console.log(err));

Обновление

Для обновления применяется метод update(), в который передается объект с новыми значениями и объект-критерий выборки обновляемых объектов:

User.update({ age: 36 }, {
  where: {
    name: "Bob"
  }
}).then((res) => {
  console.log(res);
});

В данном случае первый объект указывает, что все обновляемые объекты будут получать для поля age значение 36. Второй объект указывает на критерий выборки — обновляются только объекты, у которых name=»Bob».

Удаление

Для удаления используется метод destroy(), в который передается объект-критерий выборки удаляемых объектов:

User.destroy({
  where: {
    name: "Bob"
  }
}).then((res) => {
  console.log(res);
});

В данном случае удаляются объекты, у которых name=»Bob».

НазадВперед

Using Prepared Statements

With MySQL2 you also get the prepared statements. With prepared statements MySQL doesn’t have to prepare plan for same query everytime, this results in better performance. If you don’t know why they are important, please check these discussions

How prepared statements can protect from SQL Injection attacks

MySQL provides helper which will prepare and query the statement. You can also manually prepare / unprepare statement with / methods.

constmysql=require('mysql2');constconnection=mysql.createConnection({  host'localhost',  user'root',  database'test'});connection.execute('SELECT * FROM `table` WHERE `name` = ? AND `age` > ?','Rick C-137',53,function(err,results,fields){console.log(results);console.log(fields);});

Wildcard Characters

You can also select the records that starts, includes, or ends with a given letter or phrase.

Use the ‘%’ wildcard to represent zero, one or multiple characters:

Example

Select records where the address starts with the letter ‘S’:

var mysql = require(‘mysql’); var con = mysql.createConnection({  host: «localhost»,  user: «yourusername»,  password: «yourpassword»,  database: «mydb»});con.connect(function(err) {  if (err) throw err;  con.query(«SELECT * FROM customers WHERE address LIKE ‘S%'», function (err, result) {    if (err) throw err;    console.log(result);  }); });

Save the code above in a file called «demo_db_where_s.js» and run the file:

Run «demo_db_where_s.js»

C:\Users\Your Name>node demo_db_where_s.js

Which will give you this result:

Создание связей¶

Создание связей между таблицами осуществляется с использованием моделей. Рассмотрим установление следующих типов связей:

  • один к одному;
  • один ко многим;
  • многие ко многим.

Пример установки связи один к одному.

one-to-one.js

Определение связи один к одному подразумевает, что у одного водителя имеется одна машина.

Разница между использованием и в том, что в первом случае будет добавлен в модель , а во втором — в модель .

По умолчанию формат добавляемого следующий: . Так, добавит в поле , а — в поле .

Если вы хотите задать собственное наименование или связать таблицы не по полю , используйте следующий формат определения связи.


Значение поля sourceKey должно быть уникальным.

Теперь рассмотрим пример установки связи один ко многим. В качестве исходных моделей используем модели из примера связи один к одному.

Здесь в примере определение связи один ко многим указывает, что у одного водителя может быть несколько машин.

Если необходимо указать пользовательские поля связывания, то придется указать полную связь.

Теперь посмотрим, как определить связь многие ко многим на примере все тех же моделей и .

Для хранения соответствия ключей водителей и автомобилей будет создана отдельная таблица, название которой указывается в поле объекта, передаваемого методу вторым параметром.

Задание полей в создаваемой таблице можно указать через свойство .

Пример извлечения данных из таблицы вместе с данными связанной таблице приведен далее в разделе «Получение/создание/обновление/удаление записи».

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

API Overview

HTTP Type API URL Comments
GET Gets all REST APIs
GET /api/tableName Lists rows of table
POST /api/tableName Create a new row
PUT /api/tableName Replaces existing row with new row
POST /api/tableName/bulk Create multiple rows — send object array in request body
GET /api/tableName/bulk Lists multiple rows — /api/tableName/bulk?_ids=1,2,3
DELETE /api/tableName/bulk Deletes multiple rows — /api/tableName/bulk?_ids=1,2,3
GET /api/tableName/:id Retrieves a row by primary key
PATCH /api/tableName/:id Updates row element by primary key
DELETE /api/tableName/:id Delete a row by primary key
GET /api/tableName/findOne Works as list but gets single record matching criteria
GET /api/tableName/count Count number of rows in a table
GET /api/tableName/distinct Distinct row(s) in table — /api/tableName/distinct?_fields=col1
GET /api/tableName/:id/exists True or false whether a row exists or not
GET Get list of child table rows with parent table foreign key
GET Aggregate results of numeric column(s)
GET Group by results of column(s)
GET Multiple group by results using one call
GET Numeric column distribution based on (min,max,step) or(step array) or (automagic)
GET Same as Chart but identifies which are numeric column automatically — gift for lazy while prototyping
GET handles join
GET execute dynamic mysql statements with params
GET upload single file
GET upload multiple files
GET download a file
GET /api/tableName/describe describe each table for its columns
GET /api/tables get all tables in database
GET gets health of process and mysql — details query params for more details
GET gets version of Xmysql, mysql, node

Limit the Result

You can limit the number of records returned from the query, by using the «LIMIT» statement:

Example

Select the 5 first records in the «customers» table:

var mysql = require(‘mysql’); var con = mysql.createConnection({  host: «localhost»,  user: «yourusername»,  password: «yourpassword»,  database: «mydb»});con.connect(function(err) {  if (err) throw err;  var sql = «SELECT * FROM customers LIMIT 5»;  con.query(sql, function (err, result) {    if (err) throw err;    console.log(result);  }); });

Save the code above in a file called «demo_db_limit.js» and run the file:

Run «demo_db_limit.js»

C:\Users\Your Name>node demo_db_limit.js

Which will give you this result:

Get Inserted ID

For tables with an auto increment id field, you can get the id of the row you just inserted by asking the result object.

Note: To be able to get the inserted id, only one row can be inserted.

Example

Insert a record in the «customers» table, and return the ID:

var mysql = require(‘mysql’);var con = mysql.createConnection({  host: «localhost»,  user: «yourusername»,  password: «yourpassword»,   database: «mydb» });con.connect(function(err) {  if (err) throw err;  var sql = «INSERT INTO customers (name, address) VALUES (‘Michelle’, ‘Blue Village 1’)»;  con.query(sql, function (err, result) {    if (err) throw err;    console.log(«1 record inserted, ID: » + result.insertId);  });});

Save the code above in a file called «demo_db_insert_id.js», and run the file:

Run «demo_db_insert_id.js»

C:\Users\Your Name>node demo_db_insert_id.js

Which will give you something like this in return:

1 record inserted, ID: 15

Подключение к базе данных

Для подключения к базе данных прежде всего необходимо создать объект Sequelize:

const Sequelize = require("sequelize");
const sequelize = new Sequelize("usersdb2", "root", "123456", {
  dialect: "mysql",
  host: "localhost"
});

Для создания объекта sequelize используется функция Sequelize, которая принимает ряд параметров. Первый параметр — имя базы данных. Второй параметр — логин к бд, третий параметр — пароль. Это обязательные параметры.

Кроме того, с помощью четвертого параметра мы можем задать ряд дополнительных опций конфигурации. Четвертый параметр представляет объект, который имеет множество свойств. В данном случае используются только два. Первое свойство — указывает на диалект языка SQL, который используется в запросах — в данном случае «mysql». Второе свойство представляет адрес, по которому запущен сервер. По умолчанию имеет значение «localhost», поэтому для подключения к локальной базе данных это свойство в принципе можно не указывать.

Для свойства dialect в зависимости от того, с какой СУБД предстоит работать, могут использоваться следующие значения:

Подключение к mysql

Для работы с MySQL также должен быть установлен пакет mysql2, работа с котором разбиралась в прошлой главе:

npm install --save mysql2

И при создании объекта Sequelize в параметрах указывается :

const Sequelize = require("sequelize");
const sequelize = new Sequelize("usersdb2", "root", "123456", {
  dialect: "mysql",
  host: "localhost"
});

Подключение к mssql

Для работы с MS SQL Server в проекте должен быть установлен пакет tedious:

npm install --save tedious

И при создании объекта Sequelize в параметрах указывается :

const Sequelize = require("sequelize");
const sequelize = new Sequelize("usersdb2", "sa", "123456", {
  dialect: "mssql",
  host: "localhost",
  port: "1433"
});

Кроме диалекта в настройках конфигурации также указывается параметр host — адрес сервера и port. Если сервер запущен на порту 1433, то в принципе его необязательно указывать, так как этот порт Sequelize использует по умолчанию. Любой другой порт необходимо указывать.

При создании подключения к MSSQL Server мы можем столкнуться с рядом сложностей, которые вытекают в основном из конфигурации самого сервера. Прежде всего, нам надо убедиться, что запущенный экземпляр сервера принимает запросы по TCP. Для этого перейдем в панели управления к пункту Администрирование и затем выберем пункт Управление компьютером

В открывшейся вкладке перейдем к пункту Службы и приложения -> SQL Server Configuration Manager -> SQL Server Network Configuration и найдем нужный нам экземпляр сервера. Убедимся, что для включен параметр TCP/IP (то есть имеет значение «Enabled»).

Для использования логина и пароля в MS SQL Server убедимся, что он настроен на смешанную аутентификацию. Для этого подключимся к серверу через SQL Server Managemen Studio и перейдем к свойствам сервера:

Затем в открывшемся окне на вкладке Security выбрем режим SQL Server and Windows Authentication mode.

После применения всех настроек перезапустим сервер.

И естественно перед подключением необходимо создать базу данных, с которой будет идти взаимодействие.

Подключение к postgres

Для работы с СУБД Postgres также необходимо установить пакет pg:

npm install --save pg

И при создании объекта Sequelize в параметрах указывается :

const Sequelize = require("sequelize");
const sequelize = new Sequelize("usersdb2", "root", "123456", {
  dialect: "postgres"
});

Все остальное взаимодействие с базой данных в большинстве случаев за некоторыми исключениями практически не зависит от конкретной СУБД. А это значит, что большую часть кода (если не весь код) мы можем использовать для подключения к разным СУБД.

НазадВперед

XJOIN

Sql join query:

SELECTpl.field1, pr.field2FROM productlines as plJOIN products as prONpl.productline=pr.productline

Equivalent xjoin query API:

Sql join query:

SELECTpl.field1, pr.field2, ord.field3FROM productlines as plJOIN products as prONpl.productline=pr.productlineJOIN orderdetails as ordONpr.productcode=ord.productcode

Equivalent xjoin query API:

Explanation:

Example to use : _fields, _where, _p, _size in query params

Response:

Please note : Xjoin response has aliases for fields like below aliasTableName + ‘_’ + columnName. eg: pl.productline in _fields query params — returns as pl_productline in response.

Start From Another Position

If you want to return five records, starting from the third record, you can use the «OFFSET» keyword:

Example

Start from position 3, and return the next 5 records:

var mysql = require(‘mysql’); var con = mysql.createConnection({  host: «localhost»,  user: «yourusername»,  password: «yourpassword»,  database: «mydb»});con.connect(function(err) {  if (err) throw err;  var sql = «SELECT * FROM customers LIMIT 5 OFFSET 2»;  con.query(sql, function (err, result) {    if (err) throw err;    console.log(result);  }); });

Note: «OFFSET 2», means starting from the third position, not the second!

Save the code above in a file called «demo_db_offset.js» and run the file:

Run «demo_db_offset.js»

C:\Users\Your Name>node demo_db_offset.js

Which will give you this result:

Selecting Columns

To select only some of the columns in a table, use the «SELECT» statement followed by the column name.

Example

Select name and address from the «customers» table, and display the return object:

var mysql = require(‘mysql’); var con = mysql.createConnection({  host: «localhost»,  user: «yourusername»,  password: «yourpassword»,  database: «mydb»});con.connect(function(err) {  if (err) throw err;  con.query(«SELECT name, address FROM customers», function (err, result, fields) {    if (err) throw err;    console.log(result);  }); });

Save the code above in a file called «demo_db_select2.js» and run the file:

Run «demo_db_select2.js»


C:\Users\Your Name>node demo_db_select2.js

Which will give you this result:

Table events

Each method/query will emit a event when a new type of query executed and parsed. If you need to log or test results on the table before it gets used, you can listen to these events: insert, update, remove (or delete) and save( for both insert and update) .

Note: Events are always executed before callbacks or promises.

varusersInsertWatcher=function(parsedInsertedRows){console.log('Somewhere an insert query executed on USERS table : ');console.dir(parsedInsertedRows);};varusersRemoveWatcher=function(deleted){console.log('Somewhere a remove/delete query executed on USERS table : ');console.log('Affected rows number: '+deleted.affectedRows);};db.table("users").on('insert',usersInsertWatcher);db.table("users").on('remove',usersRemoveWatcher);

To turn off an event on a table just call db.table(«tablename»).off(‘event_type’,the_callback_variable_to_remove)

db.table("users").off('insert',usersInsertWatcher);db.table("users").off('remove',usersRemoveWatcher);

Получение/создание/обновление/удаление записи¶

Для получения данных таблицы, применительно к соответствующей модели используйте методы и .

С полным списком поддерживаемых Node.js sequelize операторов можно ознакомиться на .

Создание новых записей осуществляется с помощью методов и .

За обновление записей отвечает метод , который первым параметром принимает новые значения для записей, попадающих под задаваемую вторым параметром выборку.

Для удаления записей имеется метод .

Для выполнения самописных запросов без использования модели таблицы имеется метод , который первым параметром принимает сам запрос в строковом виде, а вторым параметром — конфигурационный объект.

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 mysql = require(‘mysql’);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 mysql = require(‘mysql’);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»);  });});

Escaping Query Values

When query values are variables provided by the user, you should escape the values.

This is to prevent SQL injections, which is a common web hacking technique to destroy or misuse your database.

The MySQL module has methods to escape query values:

Example

Escape query values by using the method:

var adr = ‘Mountain 21’;var sql = ‘SELECT * FROM customers WHERE address = ‘ + mysql.escape(adr);con.query(sql, function (err, result) {  if (err) throw err;  console.log(result);});

You can also use a as a placeholder for the values you want to escape.

In this case, the variable is sent as the second parameter in the query() method:

Example

Escape query values by using the placeholder method:

var adr = ‘Mountain 21’;var sql = ‘SELECT * FROM customers WHERE address = ?’;con.query(sql, , function (err, result) {  if (err) throw err;  console.log(result);});

If you have multiple placeholders, the array contains multiple values, in that order:

Example

Multiple placeholders:

var name = ‘Amy’;var adr = ‘Mountain 21’;var sql = ‘SELECT * FROM customers WHERE name = ? OR address = ?’;con.query(sql, , function (err, result) {  if (err) throw err;  console.log(result);});

Extending a table

Any table can be extending to your own custom needs, with custom method queries, using this syndax:

An example is always better, let’s suppose that we have a users table with some columns, one of these columns is the ‘mail’ column, and we want to find if a user exists with a mail in our users table. Ofcourse we could use the already find method, but just for example purpose:

if(db.table("users").has('mailExists')===false){db.table("users").extend('mailExists',function(mail,callback){var q="SELECT COUNT(*) FROM "+this.name+" WHERE mail = "+db.connection.escape(mail);db.query(q,function(err,results){if(!err &&results.length>&& results"COUNT(*)">){callback(true);}else{callback(false);}});});}
db.table("users").mailExists('an_e-mail@mail.com',function(exists){if(exists)console.log('this mail already exists!');elseconsole.log('this mail doesnt exists.');});

Insert Into Table

To fill a table in MySQL, use the «INSERT INTO» statement.

Example

Insert a record in the «customers» table:

var mysql = require(‘mysql’);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 = «INSERT INTO customers (name, address) VALUES (‘Company Inc’, ‘Highway 37’)»;  con.query(sql, function (err, result) {    if (err) throw err;    console.log(«1 record inserted»);  });});

Save the code above in a file called «demo_db_insert.js», and run the file:

Run «demo_db_insert.js»

C:\Users\Your Name>node demo_db_insert.js

Which will give you this result:

Connected!1 record inserted

Create Connection

Start by creating a connection to the database.

Use the username and password from your MySQL database.

demo_db_connection.js

var mysql = require(‘mysql’);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:

Run «demo_db_connection.js»

C:\Users\Your Name>node demo_db_connection.js

Which will give you this result:

Connected!

Now you can start querying the database using SQL statements.

API

Name of a MySQL table the model will refer to:

var Movie =MyAppModel.extend({    tableName"movies",});

Retrieves records from database

Usage:

movie.find();movie.find(method);movie.find(callback);movie.find(method, conditions);movie.find(method, callback);movie.find(method, conditions, callback);

Parameters:

  • string method: uses one of find methods
  • object conditions: set find conditions
  • function callback: returns errors and results

Example:

movie.find('all',{where"year > 2001"},function(err,rows,fields){});

Saves your model to database

Usage:

movie.save();movie.save(where);movie.save(callback);movie.save(where, callback);

Parameters:

  • string where: set condition for WHERE
  • function callback: returns errors and results

Example:

movie =newMovie({    name'Serenity',    director'Joss Whedon',    language'English',    year2005});movie.save();movie.set('id',4);movie.save();

Deletes your model from database and unsets it

Usage:

movie.remove();movie.remove(where);movie.remove(callback);movie.remove(where, callback);

Parameters:

  • string where: set condition for WHERE
  • function callback: returns errors and results

Example:

movie.set('id',8);movie.remove();movie.remove('year < 1980');

Retrieves record from database and set it to current model

Usage:

movie.read();movie.read(id);movie.read(callback);movie.read(id, callback);

Parameters:

  • integer id: Id of record to read
  • function callback: returns errors and results

Example:

movie.set('id',6);movie.read();movie.read(6);

Runs custom query

Usage:

movie.query(query);movie.query(query, callback);

Parameters:

  • string query: Your custom sql query to run
  • function callback: returns errors and results

Example:

movie.query("SELECT name FROM movies WHERE director = 'James Cameron' ORDER BY year",function(err,rows,fields){});

Method to replace ‘set’, when setting results passed back by node-mysql

Usage:

movie.setSQL(result);

Parameters:

object result: Results passed back by find or read

Example:

movie.find('first',{where"id=12"},function(err,row){movie.setSQL(row);});

Returns all the records matching conditions

Returns:

array

Example:

movie.find('all',{where"language = 'German'", limit,30},function(err,rows){for(var i=; i<rows.length; i++){console.log(rowsi);}});

Returns number of records matching conditions

Returns:

integer

Example:

movie.find('count',{where"year = 2012"},function(err,result){console.log(result);});

Returns first the records matching conditions

Returns:

object (hash)

Example:

movie.find('first',{where"id = 3"},function(err,row){console.log(row);});

Returns field of the first record matching conditions

Returns:

depends on field type

Example:

movie.find('field',{fields'name', where"id = 3"},function(err,field){console.log(field);});

Fields to select from the table

Accepts:

  • array
  • string

Example:

movie.find('all',{fields'id','name','year'});movie.find('all',{fields"name"});

Operators for MySQL WHERE clause.

Accepts:

string

Example:

movie.find('all',{where"year > 1987"});

Operators for MySQL GROUP BY clause.

Accepts:

  • array
  • string

Example:

movie.find('all',{group'year','name'});movie.find('all',{group"name"});

If true, sets descending order for GROUP BY

Accepts:

boolean

Example:

movie.find('all',{group'year','name', groupDESCtrue});

Operators for MySQL HAVING clause.

Accepts:

string

Example:

movie.find('all',{fields'name','COUNT(name)', group"name", having"COUNT(name) = 1"});

Operators for MySQL ORDER BY clause.

Accepts:

  • array
  • string

Example:

movie.find('all',{group'year','name'});movie.find('all',{group"name"});

If true, sets descending order for ORDER BY

Accepts:

boolean

Example:

movie.find('all',{group'year','name', orderDESCtrue});

Operators for MySQL LIMIT clause.

Accepts:

  • array
  • string

Example:

movie.find('all',{limit,30});movie.find('all',{limit"10, 40"});

Заключение

Как можно видеть, вопреки распространенному мнению, совместимые с ACID решения СУБД, такие как MySQL, могут использоваться, когда обрабатываются большие объемы данных, поэтому необязательно отказываться от функций транзакционных баз данных.

Тем не менее, разделение таблиц имеет довольно много ограничений, а это означает, что невозможно будет использовать все возможности, которые InnoDB предоставляет для обеспечения гарантированного сохранения данных. Также может потребоваться обработать в логике приложения то, что без секционирования было бы реализовано средствами СУБД. Например, ограничения внешнего ключа или полнотекстовый поиск.


С этим читают