1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/blackeybaord-kingshard

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
kingshard_support_sql.md 7.2 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 18:42 b4fbb46

Поддержка SQL в Kingshard

1. Краткое описание

Kingshard поддерживает большую часть синтаксиса и протоколов MySQL без использования разделения таблиц, включая такие команды, как SHOW DATABASES, SHOW TABLES, а также различные DML- и DDL-операции. В случае разделения таблиц в настоящее время поддерживается только ограниченный набор DML-операций: SELECT, UPDATE, INSERT, REPLACE и DELETE. Функция автоматического создания дочерних таблиц не поддерживается. Также ограничена поддержка пользовательских команд для управления через интерфейс.

В обоих случаях (с разделением таблиц и без него) не поддерживаются следующие функции:

  • пользовательские типы данных и функции;
  • представления, хранимые процедуры, триггеры и курсоры;
  • составные операторы, такие как BEGIN...END, LOOP...END LOOP, REPEAT...UNTIL...END REPEAT, WHILE...DO...END WHILE;
  • управляющие структуры, такие как IF и WHILE. Далее рассмотрим поддержку SQL в двух сценариях: с разделением таблиц и без разделения.

2. Поддержка SQL без разделения таблиц

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

2.1 Синтаксис DDL базы данных

  • CREATE TABLE;
  • CREATE INDEX;
  • DROP TABLE;
  • DROP INDEX;
  • ALTER TABLE;
  • TRUNCATE TABLE.

2.2 Синтаксис DML базы данных

  • INSERT;
  • INSERT DELAYED (не поддерживается);
  • REPLACE;
  • UPDATE;
  • DELETE;
  • Subquery: скалярные подзапросы, сравнения, с ANY, IN или SOME, ALL, EXISTS или NOT EXISTS, в предложении FROM;
  • SELECT;
  • SELECT INTO OUTFILE/INTO DUMPFILE/INTO var_name (не поддерживается).
  • Last_insert_id.

2.3 Поддержка транзакций

  • START TRANSACTION, COMMIT и ROLLBACK;
  • не поддерживается определение transaction_characteristic;
  • не поддерживается savepoint для вложенных транзакций;
  • не поддерживается XA-транзакции;
  • поддерживается установка режима автофиксации с помощью set autocommit=0/1;
  • поддерживается использование begin/commit и start transaction для установки транзакций;
  • SET TRANSACTION (не поддерживается настройка уровня изоляции глобальных транзакций);

2.4 Поддержка предварительной обработки

  • Prepared Statements: поддерживается синтаксис Prepare для основных языков программирования (Java, PHP, Python, C/C++, Go).

2.5 Поддержка синтаксиса управления базами данных

  • SET: поддерживается только для настройки набора символов и режима автофиксации, другие варианты не тестировались;
  • Show: по умолчанию операции show будут перенаправлены на основную базу данных, для просмотра содержимого других баз данных необходимо использовать комментарии в SQL;
  • KILL: в настоящее время не поддерживается KILL QUERY processlist_id.

2.6 Поддержка синтаксиса описания баз данных

  • DESCRIBE;
  • EXPLAIN;
  • USE.

2.7 Поддержка системных функций баз данных

Поддерживаются все системные функции (не тестировались).

3. Поддержка SQL с разделением таблиц

3.1 Синтаксис DDL базы данных

При разделении таблиц поддерживаются те же команды DDL, что и без разделения, но требуется добавление комментариев в SQL для указания узла, например: /*node1*/create table stu_0000(id int, name char(20));. Это позволит Kingshard направить SQL на мастер-узел node1. Примечание: команда truncate, если не указано имя узла, очистит данные во всех разделах, например: truncate stu.

3.2 Синтаксис DML базы данных

  • INSERT: поддерживается;
  • INSERT DELAYED: не поддерживается;
  • INSERT INTO SELECT: не поддерживается;
  • REPLACE: поддерживается;
  • UPDATE: поля, используемые для обновления, не могут быть частью раздела, также не поддерживается UPDATE SET xx=REPLACE(xx,'a','b');
  • DELETE: поддерживается;
  • Subquery: условия в WHERE не должны содержать подзапросов, функций и т. д., только имена полей;
  • SELECT: поддерживается.

3.3 Поддержка синтаксиса управления базами данных

  • DESCRIBE: поддерживается с использованием синтаксиса hint, например: /*node2*/describe table_name;
  • EXPLAIN: поддерживается с использованием синтаксиса hint, например: /*node2*/explain select * from xxxx;
  • USE: поддерживается.

3.4 Поддержка агрегатных функций для разделения таблиц

Поддерживаются следующие агрегатные функции: sum, max, count, min. Не поддерживается distinct после агрегатной функции, например: select count(distinct id) from xxxx.

3.5 Поддержка group by, order by и limit для разделения таблиц

Поддерживается использование group by, order by и limit в контексте разделения таблиц.

3.6 Другие особенности

  • Не поддерживаются распределённые транзакции, обновление данных на нескольких узлах возможно только без транзакций.
  • Не поддерживается предварительная обработка.
  • Не поддерживается синтаксис управления базами данных.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/blackeybaord-kingshard.git
git@api.gitlife.ru:oschina-mirror/blackeybaord-kingshard.git
oschina-mirror
blackeybaord-kingshard
blackeybaord-kingshard
master