Как concat_ws primarykey (id) и дата в новом столбце на той же таблице? (MySQL) - PullRequest
0 голосов
/ 11 января 2019

Мне нужно добавить новый столбец с именем date_id, используя concat_ws ('-', curdate, id) в той же таблице, id - это primarykey и auto_increment. Как это сделать?

Я попытался добавить столбец и обновил его. это сработало, но когда я вставил какую-то новую строку, ошибка показала, что Filed 'id' не имеет значения по умолчанию. Как это решить?

ALTER TABLE table1 ADD date_id VARCHAR(50);
UPDATE table1 SET date_id = CONCAT_WS('-',date_format(CURDATE(),'%Y%m%d'),id);

обновить вопрос

Я создал таблицу:

USE table_name;
CREATE TABLE IF NOT EXISTS `gzsrieQA`(
   `id` INT(3) UNSIGNED ZEROFILL AUTO_INCREMENT,
   `record_id` VARCHAR(50),
   `date` date,
   `pro_name` VARCHAR(50),
   `error_info` VARCHAR(255),
   `error_describe` VARCHAR(255),
   `reason` VARCHAR(255),
   `solution` VARCHAR(255),
   `solution_file` BLOB,
     `solution_file_name` VARCHAR(50),
   PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER table_name AUTO_INCREMENT = 001;
UPDATE table_name SET record_id = CONCAT_WS('-','SRIE-DSJ-QA',date_format(CURDATE(),'%Y%m%d'),id);

Когда я вставляю в некоторые новые данные, результат показывает, что 'record_id' равен нулю. значит мне нужен триггер? Но вопрос в том, если я вставлю много данных, триггер будет слишком медленным. Есть ли какое-то решение, чтобы решить эту проблему, если я не использую триггер?
Например:

|id|record_id|name|
|-----|-----|-----|
|001| |ABC|
|002| |xyz|

# I want to get:
|id|record_id|name|
|-----|-----|-----|
|001|ABC001|ABC|
|002|xyz002|xyz|

# and when I insert into name=AAA, the result is:
|id|record_id|name|
|-----|-----|-----|
|001|ABC001|ABC|
|002|xyz002|xyz|
|003|aaa003|AAA|

СПАСИБО!

1 Ответ

0 голосов
/ 11 января 2019

Я попробовал MySQL, и он позволил ваше утверждение, однако вы можете установить значение по умолчанию, а затем удалить его.

select version();
| version() |
| :-------- |
| 8.0.13    |
create table table1 (id int auto_increment primary key);
insert into table1(id) values (NULL),(NULL),(NULL),(NULL)
ALTER TABLE table1 ADD date_id VARCHAR(50)  default '';
UPDATE table1 SET date_id = CONCAT_WS('-',date_format(CURDATE(),'%Y%m%d'),id);
select * from table1
id | date_id   
-: | :---------
 1 | 20190111-1
 2 | 20190111-2
 3 | 20190111-3
 4 | 20190111-4
show create table table1
Table  | Create Table                                                                                                                                                                                                            
:----- | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
table1 | CREATE TABLE `table1` (<br>  `id` int(11) NOT NULL AUTO_INCREMENT,<br>  `date_id` varchar(50) DEFAULT '',<br>  PRIMARY KEY (`id`)<br>) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
alter table table1 alter column date_id DROP DEFAULT, ALGORITHM=INPLACE, LOCK=NONE;
show create table table1;
Table  | Create Table                                                                                                                                                                                                 
:----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
table1 | CREATE TABLE `table1` (<br>  `id` int(11) NOT NULL AUTO_INCREMENT,<br>  `date_id` varchar(50),<br>  PRIMARY KEY (`id`)<br>) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

дБ <> скрипка здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...