Mysql 将列从 'allow null' 更改为 'not null' 并设置值
Mysql changing column from 'allow null' to 'not null' and setting value
CREATE TABLE `product` (
`product_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`category_id` int(10) unsigned DEFAULT NULL,
CONSTRAINT `product_category` FOREIGN KEY (`category_id`) REFERENCES `category` (`category_id`),
) ENGINE=InnoDB;
CREATE TABLE `category` (
`category_id` int(10) unsigned NOT NULL AUTO_INCREMENT
) ENGINE=InnoDB;
INSERT INTO `category` VALUES (1), (2);
INSERT INTO `product` (`product_id`, `category_id`) VALUES (1, 1), (2,2), (3, NULL);
我想更改列 category_id
的定义以禁止 NULL 值并将值 1 作为默认值。
我正在 运行 以下查询:
ALTER TABLE `product` CHANGE `category_id` `category_id` INT(10) UNSIGNED NOT NULL DEFAULT 1;
Table product
包含下一个值(成功更改查询后):
1 1
2 2
3 0
想要的结果:
1 1
2 2
3 1
FOREIGN_KEY_CHECKS 设置为 1 并且不会更改。
有人可以解释为什么设置为 0 而不是 1。
这就是为什么 unsigned int
的未定义值为零。默认值仅用于insert
语句。
CREATE TABLE `product` (
`product_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`category_id` int(10) unsigned DEFAULT NULL,
CONSTRAINT `product_category` FOREIGN KEY (`category_id`) REFERENCES `category` (`category_id`),
) ENGINE=InnoDB;
CREATE TABLE `category` (
`category_id` int(10) unsigned NOT NULL AUTO_INCREMENT
) ENGINE=InnoDB;
INSERT INTO `category` VALUES (1), (2);
INSERT INTO `product` (`product_id`, `category_id`) VALUES (1, 1), (2,2), (3, NULL);
我想更改列 category_id
的定义以禁止 NULL 值并将值 1 作为默认值。
我正在 运行 以下查询:
ALTER TABLE `product` CHANGE `category_id` `category_id` INT(10) UNSIGNED NOT NULL DEFAULT 1;
Table product
包含下一个值(成功更改查询后):
1 1
2 2
3 0
想要的结果:
1 1
2 2
3 1
FOREIGN_KEY_CHECKS 设置为 1 并且不会更改。
有人可以解释为什么设置为 0 而不是 1。
这就是为什么 unsigned int
的未定义值为零。默认值仅用于insert
语句。