Вопрос вставки данных MySQL - PullRequest
0 голосов
/ 05 мая 2010

предположим, что я уже создал таблицу в MySQL, как показано ниже

CREATE TABLE IF NOT EXISTS `sales` (
  `id` smallint(5) unsigned NOT NULL auto_increment,
  `client_id` smallint(5) unsigned NOT NULL,
  `order_time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `sub_total` decimal(8,2) NOT NULL,
  `shipping_cost` decimal(8,2) NOT NULL,
  `total_cost` decimal(8,2) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

--
-- Dumping data for table `sales`
--

Если я добавил новое поле must_fill для текущей таблицы.

 `must_fill` tinyint(1) unsigned NOT NULL,

Пользователь может по умолчанию вставить в таблицу меньше, чем количество элементов поля, как показано в приведенном ниже сценарии.

INSERT INTO `sales` (`id`, `client_id`, `order_time`, `sub_total`, `shipping_cost`, `total_cost`) VALUES
(8, 12312, '2007-12-19 01:30:45', 10.75, 3.00, 13.75);

Всё хорошо.

Но как я могу настроить поле (must_fill) для поля MUST INCLUDE Data, когда пользователь планирует вставить новые данные.

Кстати, код будет интегрирован в скрипт PHP.

[обновление] Или я могу только написать специальный PHP-скрипт, чтобы судить, must_fill равен нулю или нет, когда пользователь пытается запустить скрипт Insert Into, привязавший некоторые значения данных?

Ответы [ 3 ]

2 голосов
/ 05 мая 2010

Это сложно реализовать, так как MySQL никогда не разрабатывался таким образом. Обозначение NOT NULL в таблице MySQL просто означает, что значение никогда не может быть NULL, а не то, что значение должно быть : MySQL найдет значение по умолчанию, если оно опущено. Однако вы можете указать значение по умолчанию, которое будет раздражать, если будет пропущено реальное; что именно использовать, зависит от вашего приложения.

Я бы также посмотрел на Режимы MySQL Server . Возможно, вы захотите включить STRICT_ALL_TABLES, но это довольно драконовский параметр, и ваше приложение, вероятно, сломается, если оно было запрограммировано на режим слабых значений по умолчанию MySQL.

0 голосов
/ 05 мая 2010

MySQL по умолчанию будет содержать целочисленный столбец, такой как must_fill, равным нулю, если вы не укажете «строгий режим». Попробуйте добавить

SET SESSION sql_mode = STRICT_ALL_TABLES

перед INSERT, и ваш пример INSERT теперь должен выдавать ошибку, поскольку для столбца must_fill не было предоставлено значение.

Вы можете установить строгий режим в качестве параметра командной строки при запуске демона MySQL. Подробности на странице документации по режиму MySQL, о которой я упоминаю ниже.

Режимы MySQL http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html

0 голосов
/ 05 мая 2010

Даже check constraint не позволяет MySQL вставить неявное значение по умолчанию для целого числа:

create table YourTable (
  id int primary key
, must_fill tinyint not null
, constraint must_fill_constraint check (must_fill <> 0)
);
insert into YourTable (id) values (1);
select must_fill from YourTable t1;

Это печатает 0, хотя есть ограничение, запрещающее 0. Вы можете изменить это поведение, включив строгий режим .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...