Py学习  »  DATABASE

如何将ws primarykey(id)和date合并到同一表的新列中?(MySQL)

J.LOGAN • 5 年前 • 1362 次点击  

我需要在同一个表上使用concat ws('-',curdate,id)添加一个名为date_id的新列,id是primarykey和auto_increment。 怎么做?

我试着添加一个专栏并更新了它。它起作用了,但是当我插入一些新行时,错误显示文件'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|

谢谢!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40711
 
1362 次点击  
文章 [ 1 ]  |  最新文章 5 年前
danblack
Reply   •   1 楼
danblack    6 年前

我试过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

DB<gt;小提琴 here