| 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.
