2 вопроса по mySQL
2055
1
mySQL 5a под altlinux.
CREATE TABLE `TEST`(
`Idx` int NOT NULL auto_increment,
`DAT` date NOT NULL,
`KOD` int NOT NULL,
`NAIM` varchar(64) NULL,
`ITOG` FLOAT NOT NULL ,
PRIMARY KEY (`Idx`),
CHECK (`ITOG`>0)
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = cp1251 COLLATE cp1251_general_ci;
insert into `TEST` (`naim`) VALUES ('test1');
Почему такой insert выполняется? Почему, если нет дефолтных значений в not null полях он вставляет нули. Но даже если он вставил нуль, то почему insert не зарезался на проверке CHECK?
CREATE TABLE `TEST`(
`Idx` int NOT NULL auto_increment,
`DAT` date NOT NULL,
`KOD` int NOT NULL,
`NAIM` varchar(64) NULL,
`ITOG` FLOAT NOT NULL ,
PRIMARY KEY (`Idx`),
CHECK (`ITOG`>0)
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = cp1251 COLLATE cp1251_general_ci;
insert into `TEST` (`naim`) VALUES ('test1');
Почему такой insert выполняется? Почему, если нет дефолтных значений в not null полях он вставляет нули. Но даже если он вставил нуль, то почему insert не зарезался на проверке CHECK?
в 5 мускуле check ничего не делает, а введен только для совместимости.
not null задает, как раз что поле не может быть пустым, и если не выставлено значение по умолчанию, то в зависимости от типа поля туда что-то вносится, например для int ноль.
not null задает, как раз что поле не может быть пустым, и если не выставлено значение по умолчанию, то в зависимости от типа поля туда что-то вносится, например для int ноль.