Mysql更改列从'允许null'到“不是空”'和设定值

时间:2015-02-12 12:05:30

标签: mysql foreign-keys default-value alter

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;

product包含下一个值(成功更改查询后):

1 1
2 2
3 0

期望的结果:

1 1 
2 2
3 1

FOREIGN_KEY_CHECKS设置为1并且不会更改。

有人可以解释为什么设置为0而不是1。

1 个答案:

答案 0 :(得分:1)

这就是unsigned int的未定义值为零的原因。默认值仅用于insert语句。