MariaDB
 sql >> база данни >  >> RDS >> MariaDB

Автоматично управление на версиите на данни в MariaDB Server 10.3

MariaDB Server 10.3 идва с нова, много полезна функция, която ще улесни дизайна на много приложения. Версионирането на данни е важно от няколко гледни точки. Съответствието може да изисква да съхранявате промени в данните. За аналитични заявки може да искате да разгледате данните в определен момент от време и за целите на одита какви промени са направени и кога е важно. Също така, в случай на изтриване на таблица, може да бъде от голяма полза да я възстановите от историята. MariaDB Server вече включва функция с име System-Versioned Tables, която се основава на спецификацията в стандарта SQL:2011. Той осигурява автоматично версия на данните в таблицата.

Ще разгледам концепцията за таблици с версии на системата с много прост пример, който ще ви покаже за какво става въпрос. Нека започнем със създаване на база данни и таблица.

CREATE DATABASE Company; 

CREATE TABLE Person (
  Id int(11) NOT NULL AUTO_INCREMENT,
  FirstName varchar(50) NOT NULL,
  LastName varchar(50) NOT NULL,
  Gender char(1) NOT NULL,
  DepartmentId int(11) NOT NULL,
  PRIMARY KEY (Id),
  CONSTRAINT con_gender CHECK (Gender in ('f','m')))
WITH SYSTEM VERSIONING;

Изглежда точно както преди, с изключение на последната опция за таблица WITH SYSTEM_VERSIONING, която включва автоматичното управление на версиите на таблицата. Нека видим как работи, като вмъкнем ред в таблицата.

MariaDB [Company]> INSERT INTO Person (FirstName, LastName, Gender, DepartmentId) VALUES ('Rasmus', 'Johansson', 'm', 1);
Query OK, 1 row affected (0.002 sec)

MariaDB [Company]> SELECT * FROM Person;
+----+-----------+-----------+--------+--------------+
| Id | FirstName | LastName  | Gender | DepartmentId |
+----+-----------+-----------+--------+--------------+
|  1 | Rasmus    | Johansson | m      |            1 |
+----+-----------+-----------+--------+--------------+
1 row in set (0.001 sec)

Имаме ме като един ред в таблица. Интересната част започва, когато актуализираме редовете. Ще сменя отделите няколко пъти.

MariaDB [Company]> UPDATE Person SET DepartmentId = 2 WHERE Id = 1;                                      Query OK, 1 row affected (0.002 sec)
Rows matched: 1  Changed: 1  Inserted: 1  Warnings: 0

MariaDB [Company]> SELECT * FROM Person;
+----+-----------+-----------+--------+--------------+
| Id | FirstName | LastName  | Gender | DepartmentId |
+----+-----------+-----------+--------+--------------+
|  1 | Rasmus    | Johansson | m      |            2 |
+----+-----------+-----------+--------+--------------+
1 row in set (0.001 sec)

MariaDB [Company]> UPDATE Person SET DepartmentId = 3 WHERE Id = 1;
Query OK, 1 row affected (0.003 sec)
Rows matched: 1  Changed: 1  Inserted: 1  Warnings: 0

MariaDB [Company]> SELECT * FROM Person;
+----+-----------+-----------+--------+--------------+
| Id | FirstName | LastName  | Gender | DepartmentId |
+----+-----------+-----------+--------+--------------+
|  1 | Rasmus    | Johansson | m      |            3 |
+----+-----------+-----------+--------+--------------+
1 row in set (0.001 sec)

Както можете да видите, MariaDB Server казва, че има 1 променен ред за всяка актуализация, както обикновено, но също така и 1 вмъкнат, което не би било така за таблица без версии. Всяка актуализация причинява нова версия на реда, която трябва да се вмъкне в таблицата. Както виждате по-горе, нормалният SELECT ще покаже само най-новата версия. За да видите всички версии на редовете, MariaDB Server предоставя следния синтаксис.

MariaDB [Company]> SELECT * FROM Person FOR SYSTEM_TIME ALL;
+----+-----------+-----------+--------+--------------+
| Id | FirstName | LastName  | Gender | DepartmentId |
+----+-----------+-----------+--------+--------------+
|  1 | Rasmus    | Johansson | m      |            1 |
|  1 | Rasmus    | Johansson | m      |            2 |
|  1 | Rasmus    | Johansson | m      |            3 |
+----+-----------+-----------+--------+--------------+
3 rows in set (0.001 sec)

За да можем да видим кога редовете са актуализирани, искаме да включим две невидими колони, които са създадени от автоматичното управление на версиите. Invisible Column е друга вълнуваща нова функция на MariaDB Server 10.3. Невидимите колони на автоматичното управление на версиите са ROW_START и ROW_END. Те определят периода от време, за който версията на реда е била/е валидна.

MariaDB [Company]> SELECT *, ROW_START, ROW_END FROM Person FOR SYSTEM_TIME ALL;
+----+-----------+-----------+--------+--------------+----------------------------+----------------------------+
| Id | FirstName | LastName  | Gender | DepartmentId | ROW_START                  | ROW_END                    |
+----+-----------+-----------+--------+--------------+----------------------------+----------------------------+
|  1 | Rasmus    | Johansson | m      |            1 | 2018-05-03 07:21:12.386980 | 2018-05-03 07:22:29.188266 |
|  1 | Rasmus    | Johansson | m      |            2 | 2018-05-03 07:22:29.188266 | 2018-05-03 07:22:47.596481 |
|  1 | Rasmus    | Johansson | m      |            3 | 2018-05-03 07:22:47.596481 | 2038-01-19 03:14:07.999999 |
+----+-----------+-----------+--------+--------------+----------------------------+----------------------------+
3 rows in set (0.000 sec)

Интересното нещо сега е да правите заявки във времето, за да извлечете точно как изглежда таблицата на конкретна дата и час. Можем да направим това, като използваме синтаксиса AS OF:

MariaDB [Company]> SELECT * FROM Person FOR SYSTEM_TIME AS OF TIMESTAMP '2018-05-03 07:22:33';
+----+-----------+-----------+--------+--------------+
| Id | FirstName | LastName  | Gender | DepartmentId |
+----+-----------+-----------+--------+--------------+
|  1 | Rasmus    | Johansson | m      |            2 |
+----+-----------+-----------+--------+--------------+
1 row in set (0.001 sec)

Това беше само малък поглед към таблиците с версии на системата. В допълнение към примерите, показани по-горе, можете да поставите хронология на отделни дялове от съображения за производителност, да изключите колони от версиите и много други.

Прочетете повече за таблиците с версии на системата в документацията на MariaDB. Вземете MariaDB Server 10.3 като част от изтеглянето на MariaDB TX 3.0 – вече е налице.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ClusterControl 1.5 - Автоматична проверка на архивиране, изграждане на подчинен от архивиране и интеграция в облак

  2. Задайте набора от символи и съпоставяне на база данни в MariaDB

  3. Как работи ROUND() в MariaDB

  4. Как QUARTER() работи в MariaDB

  5. Как работи SYS_GUID() в MariaDB