Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Варнинги мешают вставки данных / 13 сообщений из 13, страница 1 из 1
18.04.2017, 10:10
    #39440023
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варнинги мешают вставки данных
Код: sql
1.
10.1.21-MariaDB-1~trusty


Код: sql
1.
select @@global.sql_mode


NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
CREATE TABLE `cart_item` (
	`cart_item_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
	`cart_id` INT(11) UNSIGNED NOT NULL,
	`created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
	`product_offer_id` INT(11) UNSIGNED NOT NULL,
	`product_target_id` INT(11) UNSIGNED NULL DEFAULT NULL,
	`name` VARCHAR(128) NOT NULL,
	`quantity` INT(11) UNSIGNED NOT NULL,
	`value` FLOAT NULL DEFAULT NULL,
	`price` FLOAT UNSIGNED NOT NULL,
	`usd_equivalent` FLOAT UNSIGNED NOT NULL,
	`usd_equivalent_clean` FLOAT UNSIGNED NULL DEFAULT NULL,
	`product_offer_website_bonus_id` INT(11) UNSIGNED NULL DEFAULT NULL,
	`is_activated` ENUM('no','yes') NOT NULL DEFAULT 'no',
	`bonus_period_start` DATETIME NULL DEFAULT NULL,
	`price_rate` FLOAT UNSIGNED NULL DEFAULT NULL,
	`is_need_attestation` ENUM('yes','no') NOT NULL DEFAULT 'yes',
	PRIMARY KEY (`cart_item_id`),
	INDEX `fk_cart_item_cart` (`cart_id`),
	INDEX `fk_cart_item_product_offer` (`product_offer_id`),
	INDEX `fk_cart_item_product_bonus_website1` (`product_offer_website_bonus_id`),
	CONSTRAINT `cart_item_ibfk_1` FOREIGN KEY (`cart_id`) REFERENCES `cart` (`cart_id`) ON UPDATE NO ACTION ON DELETE CASCADE,
	CONSTRAINT `cart_item_ibfk_2` FOREIGN KEY (`product_offer_id`) REFERENCES `product_offer` (`product_offer_id`) ON UPDATE NO ACTION ON DELETE NO ACTION,
	CONSTRAINT `cart_item_ibfk_3` FOREIGN KEY (`product_offer_website_bonus_id`) REFERENCES `product_offer_website_bonus` (`product_offer_website_bonus_id`) ON UPDATE NO ACTION ON DELETE NO ACTION
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=24977
;



Пытаюсь вставить строку (все фореигны коректны):
Код: sql
1.
2.
INSERT INTO `cart`.`cart_item` (`CART_ITEM_ID`,`CART_ID`,`PRODUCT_OFFER_ID`,`PRODUCT_TARGET_ID`,`NAME`,          `PRICE`,    `PRICE_RATE`,`IS_NEED_ATTESTATION`) 
                        VALUES (NULL,          27080,    101,               0,                  'Tickets 10',   12.9,        1,            'yes')


Никаких ошибок, но вставленых строк 0. show warnings показывают что Field 'quantity' doesn't have a default value

Если и инсерт добавить quantity - То инсерт вставляеться. Т.е. получаеться что варнинг мешает вставиться данным.
Как можно настроить mysql чтобы он всеже вставлял данные даже с этими варнингами?
...
Рейтинг: 0 / 0
18.04.2017, 10:13
    #39440027
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варнинги мешают вставки данных
Ренатполучаеться что варнинг мешает вставиться данным.Нет, данным мешает вставиться кривизна вставляемых данных или кривизна структуры. А что именно (первое, второе, или оба сразу) - зависит от бизнес-процесса.
...
Рейтинг: 0 / 0
18.04.2017, 10:20
    #39440034
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варнинги мешают вставки данных
В качестве простейшего (но не факт что лучшего) решения могу предложить
Код: sql
1.
2.
3.
ALTER TABLE cart_item
    ALTER COLUMN quantity
        SET DEFAULT 0;
...
Рейтинг: 0 / 0
18.04.2017, 11:06
    #39440070
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варнинги мешают вставки данных
Akina,

к сожалению на предыдушем mysql сервере при абсолютно такой же структуре таблиц и вставляемых данных - запись вставляеться и по умолчанию значение quantity выставляеться в 0 (хотя default значение не установлено).
существующая структура таблиц (и код который с ними работает) была очень давно спроектирована. И такихъ мест море. Это слишком нереально выяснять - где какие еще значение могут быть пропущены.
...
Рейтинг: 0 / 0
18.04.2017, 11:19
    #39440081
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варнинги мешают вставки данных
Ренатна предыдушем mysql сервере при абсолютно такой же структуре таблиц и вставляемых данных - запись вставляеться и по умолчанию значение quantity выставляеться в 0 (хотя default значение не установлено).Это можно воспринять исключительно как басню. Либо имеется не обнаруженный Вами программный код, который выполняет присвоение нулевого значения при его отсутствии - клиентский код, триггер либо что-то ещё. А вот чудес - не бывает. И сервер никогда и ни при каких обстоятельствах не станет проявлять незапрошенной инициативы.
...
Рейтинг: 0 / 0
18.04.2017, 11:49
    #39440107
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варнинги мешают вставки данных
Akina,

тригеры в первую очередь смотрел. Хоть они есть но очень простые и 100% не затрагивают эти поля.
авторЛибо имеется не обнаруженный Вами программный код
я дотрейсил до конечного sql запроса, и на нем уже тестирую.
...
Рейтинг: 0 / 0
18.04.2017, 11:53
    #39440112
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варнинги мешают вставки данных
Ренатя дотрейсил до конечного sql запросаИ Вы хотите сказать, что на показанной структуре таблицы показанный текст запроса при выполнении его из консольного клиента "на предыдушем mysql сервере" выполняет вставку записи?
...
Рейтинг: 0 / 0
18.04.2017, 11:58
    #39440115
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варнинги мешают вставки данных
Akina,

да именно так - вставляет.
причем не только для этой таблички но и для многих других.
я согласен что это неверно, но тем не менее это было так настроено на старом сервере.
чтобы устранить такие проблемы нужно время и силы которых к отправлены на другие задачи.
поэтому "настроить как было на предыдущем сервер" - единственный оставшийся вариант
...
Рейтинг: 0 / 0
18.04.2017, 12:21
    #39440137
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варнинги мешают вставки данных
Версию сервера озвучьте в таком случае... прямо цитатой с консоли. И простейший тест-кейс. Ну скажем так:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT @@version;
CREATE TABLE test (id int not null, val int not null);
INSERT INTO test (id) SELECT 1;
SHOW WARNINGS;
SELECT * FROM test;
DROP TABLE test;
...
Рейтинг: 0 / 0
18.04.2017, 12:38
    #39440151
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варнинги мешают вставки данных
Akina,

да вы оказались правы.
проблема была в тригере

авторCREATE DEFINER=`develop`@`%` TRIGGER `cart_item_insert` BEFORE INSERT ON `cart_item` FOR EACH ROW BEGIN
SET new.usd_equivalent = new.price;
END

по какой то странной причине после него запись не вставляеться. после удаления тригера - все заработало. спс
...
Рейтинг: 0 / 0
19.04.2017, 09:29
    #39440621
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варнинги мешают вставки данных
AkinaРенатна предыдушем mysql сервере при абсолютно такой же структуре таблиц и вставляемых данных - запись вставляеться и по умолчанию значение quantity выставляеться в 0 (хотя default значение не установлено).Это можно воспринять исключительно как басню. Либо имеется не обнаруженный Вами программный код, который выполняет присвоение нулевого значения при его отсутствии - клиентский код, триггер либо что-то ещё. А вот чудес - не бывает. И сервер никогда и ни при каких обстоятельствах не станет проявлять незапрошенной инициативы.
Это mysql-то и без лишних инициатив?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
mysql> create table test (i int not null, val int not null);
Query OK, 0 rows affected (0.10 sec)

mysql> insert into test (i) values (1);
Query OK, 1 row affected, 1 warning (0.07 sec)

mysql> select * from test;
+---+-----+
| i | val |
+---+-----+
| 1 |   0 |
+---+-----+
1 row in set (0.00 sec)

mysql> select version();
+-----------------+
| version()       |
+-----------------+
| 5.5.54-0+deb8u1 |
+-----------------+
1 row in set (0.00 sec)


Дефолта нет, запись - есть. См. strict sql mode
...
Рейтинг: 0 / 0
19.04.2017, 10:05
    #39440654
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варнинги мешают вставки данных
Melkij , Strict mode по умолчанию включен. То есть выключить его можно только сознательным действием. А это уже трудно квалифицировать как "незапрошенную инициативу".
...
Рейтинг: 0 / 0
19.04.2017, 12:27
    #39440807
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варнинги мешают вставки данных
Akina,

таки смотря о какой версии mysql говорим. Мне так помнится, что включен по дефолту он только в 5.7.
https://dev.mysql.com/doc/refman/5.7/en/upgrading-from-previous-series.html
мануалIncompatible change: In MySQL 5.7.5, these SQL mode changes were made:
Strict SQL mode for transactional storage engines (STRICT_TRANS_TABLES) is now enabled by default.
...
The changes to the default SQL mode result in a default sql_mode system variable value with these modes enabled: ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ENGINE_SUBSTITUTION.
Для марии не пойду перепроверять.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Варнинги мешают вставки данных / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]