mysql - 索引:“[列]”的默认值无效
问题描述
我正在开发一个已有 10 年历史的网络应用程序(!!!),目前正在本地运行 mysql,版本 5.7。
这是我目前正在处理的表:
CREATE TABLE `processes_history` (
`p_id` bigint(20) UNSIGNED NOT NULL DEFAULT '0',
`exec_id` bigint(20) UNSIGNED NOT NULL DEFAULT '0',
`feature` varchar(100) NOT NULL DEFAULT '',
`macro` tinyint(1) UNSIGNED NOT NULL DEFAULT '0',
`ts` date NOT NULL DEFAULT '0000-00-00',
`seen` int(10) UNSIGNED NOT NULL DEFAULT '1',
`seen_time` bigint(20) UNSIGNED NOT NULL DEFAULT '0',
`focus` int(10) UNSIGNED NOT NULL DEFAULT '0',
`focus_time` bigint(20) UNSIGNED NOT NULL DEFAULT '0',
`mouse` int(10) UNSIGNED NOT NULL DEFAULT '0',
`keyboard` int(10) UNSIGNED NOT NULL DEFAULT '0',
`interactive` int(10) UNSIGNED NOT NULL DEFAULT '0',
`interactive_time` bigint(20) UNSIGNED NOT NULL DEFAULT '0',
`last_seen` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=utf8
PARTITION BY RANGE (TO_DAYS(`ts`))
(
PARTITION p0 VALUES LESS THAN (736695) ENGINE=MyISAM,
PARTITION p201701 VALUES LESS THAN (736726) ENGINE=MyISAM,
PARTITION p201702 VALUES LESS THAN (736754) ENGINE=MyISAM,
PARTITION p201703 VALUES LESS THAN (736785) ENGINE=MyISAM,
PARTITION p201704 VALUES LESS THAN (736815) ENGINE=MyISAM,
PARTITION p201705 VALUES LESS THAN (736846) ENGINE=MyISAM,
PARTITION p201706 VALUES LESS THAN (736876) ENGINE=MyISAM,
PARTITION p201707 VALUES LESS THAN (736907) ENGINE=MyISAM,
PARTITION p201708 VALUES LESS THAN (736938) ENGINE=MyISAM,
PARTITION p201709 VALUES LESS THAN (736968) ENGINE=MyISAM,
PARTITION p201710 VALUES LESS THAN (736999) ENGINE=MyISAM,
PARTITION p201711 VALUES LESS THAN (737029) ENGINE=MyISAM,
PARTITION p201712 VALUES LESS THAN (737060) ENGINE=MyISAM,
PARTITION p201801 VALUES LESS THAN (737091) ENGINE=MyISAM,
PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE=MyISAM
);
--
-- Indexes for dumped tables
--
--
-- Indexes for table `processes_history`
--
ALTER TABLE `processes_history`
ADD PRIMARY KEY (`p_id`,`exec_id`,`feature`,`ts`),
ADD KEY `ts` (`ts`),
ADD KEY `exec_ts` (`exec_id`,`ts`),
ADD KEY `last_seen` (`last_seen`);
向以下位置添加索引时不断出现错误p_id, exec_id, ts
:
ALTER TABLE `dbname`.`processes_history` ADD INDEX `p_id,exec_id,ts` (`p_id`, `exec_id`, `ts`);
错误 SQL 查询:
更改表
dbname
。processes_history
ADD INDEXp_id,exec_id,ts
(p_id
,exec_id
,ts
) MySQL 说:文档1067 - 'ts' 的默认值无效
在这篇文章之后:https ://dba.stackexchange.com/questions/192186/on-create-index-invalid-default-value
据我了解,使用0000-00-00
默认值会破坏“日期”类型,这就是它不起作用的原因。
但我就是不明白这种情况的解决方案是什么。改用 TIMESTAMP 类型?
有没有办法在不破坏我完成整个网络应用程序的结构(至少现在)的情况下解决这个问题?许多事情都依赖于该表,我不想做一些冒险的事情来按照我想要的方式索引它。
解决方案
暂时使有问题的列可以为空也解决了这个问题。
推荐阅读
- sql - 将数据从一个表复制到另一个 postgresql
- django - Django admin - 在列表显示中同时编辑多个值
- angular - Angular创建空模型
- c# - 使用 RestSharp 反序列化带有子元素的 OData 类型 JSON
- angular - 无法绑定数据源,因为它不是表的已知属性 - angular4
- excel - 如何将此一维数组转置到另一个工作表?
- mongodb - Kafka 与 mongo oplog 连接
- html - 使用引导程序将复选框与其他输入组件垂直居中
- javascript - Typescript 接口,为动态第二个属性引用一个实例属性
- laravel-5 - Laravel - 多对多多态关系