Отсутствующее значение для необнуляемого столбца было добавлено при вставке pymysql в MariaDB

В следующем сценарии я ожидал исключение, но получил предупреждение:

# MariaDB: 10

create table tm
(
    id int auto_increment primary key,
    col1 int not null
) ENGINE = InnoDB;

Мой сценарий:

# Python: 3.6.1
# PyMySQL: 0.7.11

import pymysql


def main():
    connection = None
    try:
        connection = pymysql.connect(host='localhost',
                                     port=3306,
                                     user='username',
                                     password='password',
                                     db='dev')

        with connection.cursor() as cursor:
            sql = 'INSERT INTO `tm` (`tm`.`id`) VALUES (DEFAULT)'
            cursor.execute(sql)
        connection.commit()

    finally:
        connection.close()


if __name__ == '__main__':
    main()

В оболочке:

$ ./main.py
.../venv/lib/python3.6/site-packages/pymysql/cursors.py:166: Warning: (1364, "Field 'col1' doesn't have a default value")
  result = self._query(query)

После исполнения запись с col1 равный 0 был добавлен в базу данных. Затем я выполнил запрос прямо в консоли MariaDB. я получил [HY000][1364] Field 'col1' doesn't have a default valueи ни одна запись не была вставлена.

Я проверил SQL_MODE от SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session и получил:

  global                                     session
1 NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Как это случилось в движке InnoDB?

0 ответов

Другие вопросы по тегам