是否可以更改Extra
/ SHOW COLUMNS
句子中显示的DESCRIBE
列的te值?
有关此专栏的文档规定如下:
额外
有关给定列的任何其他可用信息。的 在以下情况下,值是非空的:
对于具有AUTO_INCREMENT属性的列,auto_increment。
在更新CURRENT_TIMESTAMP的TIMESTAMP或DATETIME列时 具有ON UPDATE CURRENT_TIMESTAMP属性。
对于生成的列为VIRTUAL GENERATED或VIRTUAL STORED。
DEFAULT_GENERATED用于具有表达式默认值的列。
我有下一个表格列的信息,但是我希望删除Extra
列的start_date
值。
有没有办法做到这一点?
+--------------------+--------------------+------+-----+-------------------+-------------------+ | Field | Type | Null | Key | Default | Extra | +--------------------+--------------------+------+-----+-------------------+-------------------+ | id_machine_product | "int(10) unsigned" | NO | PRI | NULL | auto_increment | | ... | ... | ... | ... | ... | ... | | start_date | timestamp | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED | +--------------------+--------------------+------+-----+-------------------+-------------------+
编辑:
我已经在PHP中实现了一种指纹验证方法,该方法可以区分DESCRIBE表的值,即使这些列具有表达式默认值,我的生产数据库版本也没有该Extra值,所以目前,我希望更改该值,因此在开发环境中实现的指纹验证方法不会出错。
生产数据库位于Mysql <8.0中,因此,按照Bill Karwin的回答,我的MySQL开发环境版本8.0遇到了问题
答案 0 :(得分:2)
不清楚您要删除为什么的问题。只是注意到该列的默认值是一个表达式。
要使Extra字段为空,必须将列的默认值设置为常数或NULL。
mysql> create table foo ( id int unsigned primary key, start_date timestamp not null default current_timestamp);
mysql> show columns from foo;
+------------+------------------+------+-----+-------------------+-------------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+-------------------+-------------------+
| id | int(10) unsigned | NO | PRI | NULL | |
| start_date | timestamp | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
+------------+------------------+------+-----+-------------------+-------------------+
mysql> alter table foo modify start_date timestamp default null;
mysql> show columns from foo;
+------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+-------+
| id | int(10) unsigned | NO | PRI | NULL | |
| start_date | timestamp | YES | | NULL | |
+------------+------------------+------+-----+---------+-------+
请注意,额外信息“ DEFAULT_GENERATED”仅在MySQL 8.0中存在。我怀疑它与支持DEFAULT子句中的表达式的新功能有关。任何其他表达式也会导致此额外信息。
mysql > alter table foo modify start_date timestamp default (now() + interval 1 hour);
mysql> show columns from foo;
+------------+------------------+------+-----+---------------------------+-------------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------------------------+-------------------+
| id | int(10) unsigned | NO | PRI | NULL | |
| start_date | timestamp | YES | | (now() + interval 1 hour) | DEFAULT_GENERATED |
+------------+------------------+------+-----+---------------------------+-------------------+
答案 1 :(得分:1)
Topicstarters评论
我已经在PHP中实现了一种指纹验证方法,该方法与众不同 DESCRIBE表的值,我有生产中的数据库版本 即使这些列有一个 表达式默认值,所以目前,我希望更改该值,以便 我实现的指纹验证方法没有错误 在我的开发环境中。
更标准的SQL方法将适用于MySQL 8
查询
SELECT
information_schema.COLUMNS.COLUMN_NAME AS 'Field'
, information_schema.COLUMNS.COLUMN_TYPE AS 'Type'
, information_schema.COLUMNS.IS_NULLABLE AS 'Null'
, information_schema.COLUMNS.COLUMN_KEY AS 'Key'
, information_schema.COLUMNS.COLUMN_DEFAULT AS 'Default'
, information_schema.COLUMNS.EXTRA AS 'Extra'
FROM
information_schema.TABLES
INNER JOIN
information_schema.COLUMNS ON information_schema.TABLES.TABLE_NAME = information_schema.COLUMNS.TABLE_NAME
WHERE
information_schema.TABLES.TABLE_NAME = '<table>'
此查询应与DESCRIBE
的输出匹配
然后,您可以在REPLACE()
输出上使用information_schema.COLUMNS.EXTRA
来删除或编辑所需的方式。
例如,删除DEFAULT_GENERATED
或VIRTUAL GENERATED
(generated columns)之类的额外功能
答案 2 :(得分:0)
您需要一个alter table语句。像
ALTER TABLE `document` MODIFY COLUMN `start_date ` INT AUTO_INCREMENT;
您可以设置默认值
DEFAULT 1 NOT NULL