База данных Web SQL - это API веб-страницы для хранения данных в базах данных, которые можно запрашивать с помощью SQL.

Спецификация основана на SQLite. База данных Web SQL поддерживается не всеми браузерами - этот стандарт в настоящее время объявлен устаревшим W3C и альтернативой этому является IndexedDB.

Тем не менее, её можно использовать в поддерживаемых браузерах, таких как Safari, Chrome, Opera и Edge.

Создадим БД и таблицу средствами JS:

var db;

// создаем базу с параметрами - имя, версия, описание, требуемое хранилище
db = window.openDatabase('test_db', '1.0', 'Test DB', 1024*1024)

// транзакция
db.transaction(function (tx) {
  // удаляем существующую таблицу
  tx.executeSql('DROP TABLE IF EXISTS USERS');				
  // Create the new table with required fields, define the primary key
  tx.executeSql('CREATE TABLE IF NOT EXISTS USERS(CARD TEXT PRIMARY KEY, NAME TEXT, AGE INTEGER, EMAIL TEXT)', [], function(tx, result) {
    console.log(result);
    console.log('Таблица успешно создана');
  }, errorHandler);
});

// обработчик ошибок
function errorHandler(transaction, error) {
  console.log('Ошибка: ', error.message);
  console.log('Код ошибки: ', error.code);
  return false;
}

Поместим данные в базу:

db.transaction(function (tx) { 										
  tx.executeSql('INSERT INTO USERS(CARD, NAME, AGE, EMAIL) VALUES (?,?,?,?)', ['444-44-4444', 'Иван', 35, 'ivan@mail.com'], function(tx,result) {					 
    console.log('Данные добавлены успешно', result.insertId);
  }, errorHandler);
							
  tx.executeSql('INSERT INTO USERS(CARD, NAME, AGE, EMAIL) VALUES (?,?,?,?)', ['555-55-5555', 'Петр', 32, 'petr@mail.com'], function(tx,result) {
    console.log('Данные добавлены успешно', result.insertId);
  }, errorHandler);
});

Таблицу БД теперь можно увидеть в поддерживающих Web SQL браузерах, в частности в панели разработчика (F12 в Chrome) во вкладке "Application":

webSQL в Chrome

Считаем данные с базы:

db.readTransaction(function (tx) { 			
  tx.executeSql('SELECT * FROM USERS', [], function (tx, results) { 
    var len = results.rows.length; 
    for (var i = 0; i < len; i++) {
      console.log('card: ', results.rows.item(i).CARD);
      console.log('name: ', results.rows.item(i).NAME);
      console.log('age: ', results.rows.item(i).AGE);
    }
  }, errorHandler);
});

Обновим данные:

db.transaction(function (tx) { 										
  tx.executeSql('UPDATE USERS SET AGE=? WHERE CARD=?', [45, '444-44-4444'], function(tx,result) {					 
    console.log('Данные обновлены успешно', result);    
  }, errorHandler);
});

Удалим данные:

db.transaction(function (tx) { 										
  tx.executeSql('DELETE FROM USERS WHERE CARD=?', ['444-44-4444'], function(tx,result) {					 
    console.log('Данные удалены успешно', result);    
  }, errorHandler);					
});