Bug #111702 | Alter default value with auto_increment column not report error | ||
---|---|---|---|
Submitted: | 10 Jul 2023 2:31 | Modified: | 12 Jul 2023 9:36 |
Reporter: | hangjie Mo | Email Updates: | |
Status: | Verified | Impact on me: | |
Category: | MySQL Server: DDL | Severity: | S3 (Non-critical) |
Version: | 8.0.33 | OS: | Any |
Assigned to: | CPU Architecture: | Any |
[10 Jul 2023 2:31]
hangjie Mo
[10 Jul 2023 6:43]
Frederic Descamps
Hello, I would like to add some details before the verification team takes a look at it. I was curious, so I tried it (my table name is `t5`). I created is as described, then I added some records: SQL> select * from t5; +---+---+ | a | b | +---+---+ | 1 | 1 | | 2 | 2 | | 3 | 3 | +---+---+ 3 rows in set (0.0006 sec) Did the alter to add the default to 3 and then tried to insert data: SQL> insert into t5 (b) values (4); ERROR: 1062 (23000): Duplicate entry '3' for key 't5.PRIMARY' But the biggest surprise is: SQL> show create table t5\G *************************** 1. row *************************** Table: t5 Create Table: CREATE TABLE `t5` ( `a` bigint NOT NULL AUTO_INCREMENT, `b` int DEFAULT NULL, PRIMARY KEY (`a`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 1 row in set (0.0008 sec) Where is the default ? SQL> select * from information_schema.columns where table_name='t5' and column_name='a'\G *************************** 1. row *************************** TABLE_CATALOG: def TABLE_SCHEMA: test TABLE_NAME: t5 COLUMN_NAME: a ORDINAL_POSITION: 1 COLUMN_DEFAULT: NULL IS_NULLABLE: NO DATA_TYPE: bigint CHARACTER_MAXIMUM_LENGTH: NULL CHARACTER_OCTET_LENGTH: NULL NUMERIC_PRECISION: 19 NUMERIC_SCALE: 0 DATETIME_PRECISION: NULL CHARACTER_SET_NAME: NULL COLLATION_NAME: NULL COLUMN_TYPE: bigint COLUMN_KEY: PRI EXTRA: auto_increment PRIVILEGES: select,insert,update,references COLUMN_COMMENT: GENERATION_EXPRESSION: SRS_ID: NULL If I create the sdi file for the table (ibd2sid), we can see for column a: "columns": [ { "name": "a", "type": 9, "is_nullable": false, "is_zerofill": false, "is_unsigned": false, "is_auto_increment": true, "is_virtual": false, "hidden": 1, "ordinal_position": 1, "char_length": 20, "numeric_precision": 19, "numeric_scale": 0, "numeric_scale_null": false, "datetime_precision": 0, "datetime_precision_null": 1, "has_no_default": false, "default_value_null": false, "srs_id_null": true, "srs_id": 0, "default_value": "AwAAAAAAAAA=", "default_value_utf8_null": true, "default_value_utf8": "", "default_option": "", "update_option": "", "comment": "", "generation_expression": "", "generation_expression_utf8": "", "options": "interval_count=0;", "se_private_data": "table_id=1596;", "engine_attribute": "", "secondary_engine_attribute": "", "column_key": 2, "column_type_utf8": "bigint", "elements": [], "collation_id": 8, "is_explicit_collation": false }, Here the default value is stored.
[11 Jul 2023 22:36]
MySQL Verification Team
Hi, Thank you for the report. I'm not sure it is a bug per se as that will set default value even if it does not make much sense to do so. I need to check with SQL standard what should be the norm for such case.
[12 Jul 2023 1:07]
hangjie Mo
The problem is that this doesn't behave the same as modify column which not support auto_increment with default value. ``` mysql> alter table t modify column a bigint auto_increment default 3; ERROR 1067 (42000): Invalid default value for 'a' ```
[12 Jul 2023 9:36]
MySQL Verification Team
Hi, yes, I agree there is a bug here somewhere, just need to figure out what should be the correct behavior.