У меня есть файл SQL, в котором есть следующее:

CREATE TABLE `Task_type` (
  `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(255) NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Dumping data for table `Task_type`
--

INSERT INTO `Task_type` (`id`, `name`, `created_at`, `updated_at`) VALUES
(1, 'Task', NULL, NULL),
(2, 'Meeting', NULL, NULL),
(3, 'Phone call', NULL, NULL),
(4, 'Task', NULL, NULL),
(5, 'Meeting', NULL, NULL),
(6, 'Phone call', NULL, NULL);

--
-- Table structure for table `User_logs`
--

CREATE TABLE `User_logs` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `user_id` bigint(20) NOT NULL,
  `login` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `logout` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `logged_out` tinyint(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Dumping data for table `User_logs`
--

INSERT INTO `User_logs` (`id`, `user_id`, `login`, `logout`, `time`, `logged_out`) VALUES
(42, 2, '2020-10-14 16:12:37', '2020-10-14 19:09:14', '2020-10-14 16:09:08', 1),
(43, 2, '2020-10-14 20:10:38', '2020-10-15 00:43:04', '2020-10-14 21:43:04', 0),
(44, 1, '2020-10-14 20:46:10', '2020-10-14 20:56:36', '2020-10-14 17:56:17', 1),
(45, 1, '2020-10-14 21:03:09', '2020-10-14 21:06:15', '2020-10-14 18:06:15', 0),
(46, 2, '2020-10-15 07:15:30', '2020-10-15 07:24:38', '2020-10-15 04:19:29', 1),
(47, 2, '2020-10-15 07:24:49', '2020-10-15 07:49:45', '2020-10-15 04:48:48', 1),
(48, 2, '2020-10-15 07:51:25', '2020-10-15 07:57:36', '2020-10-15 04:57:36', 0),
(49, 2, '2020-11-01 21:43:35', '2020-11-01 22:02:26', '2020-11-01 20:02:26', 0);

Но я получаю следующую ошибку:

SQLSTATE [42S02]: базовая таблица или представление не найдены: 1146 Таблица 'dbs1056212.User_Logs' не существует (SQL: вставить в значения User_Logs (user_id, logged_out) (1, 0))

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

Что делать?

База данных MySQL

1
mark15987 7 Дек 2020 в 15:06

1 ответ

Лучший ответ

Вы создали таблицу как User_logs.

В сообщении об ошибке говорится, что не удается найти User_Logs.

Это не одно и то же, потому что случай «л» другой. Иногда это имеет значение в MySQL, иногда это не зависит от значения системной переменной lower_case_table_names.

Это важное соображение подробно описано в документации. :

Значение 0. . . Имена таблиц и баз данных хранятся на диске с использованием буквенного регистра, указанного в операторе CREATE TABLE или CREATE DATABASE. При сравнении имен учитывается регистр .

Это настройка по умолчанию для системной переменной lower_case_table_names в системах Unix (но не в MacO, подобных Unix). Вы можете переопределить его при создании базы данных, но это довольно необычно.

1
Gordon Linoff 7 Дек 2020 в 13:12