添加1000条记录后,前缀显示错误的自动增量

时间:2018-04-16 17:47:15

标签: mysql auto-increment

我在表中有id,name,employee_id的字段。 id列是自动增量的主键。在此表中,

我需要一个名为A5001, A5002, A5003...and soon的列从CREATE TABLE table1_seq ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ); CREATE TABLE table1 ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), employee_id VARCHAR(30) NOT NULL DEFAULT '0' ); 开始。

我尝试了以下代码。

DELIMITER $$
CREATE TRIGGER tg_table1_insert
BEFORE INSERT ON table1
FOR EACH ROW
BEGIN
  INSERT INTO table1_seq VALUES (NULL);
  SET NEW.employee_id = CONCAT('A', LPAD(LAST_INSERT_ID(), 4, '500'));
END$$
DELIMITER ;

现在是触发器

INSERT INTO Table1 (name) 
VALUES ('ABC'),('ZXD'),('POI');

然后只需将行插入table1

1|ABC | A5001
2|ZXD | A5002
3|POI | A5003

最后,我得到了我的输出。

A6000, A6001, A6002.. and so on

等等

现在我的问题是,我在表中插入了1000行,所以我的id是1000但是我的employee_id存在一些问题,因为在获得A5999之后它从A1000开始,这是完全错误的我需要不断地像{{1}}

我认为我的触发器存在一些问题。

你能帮助我吗?

1 个答案:

答案 0 :(得分:1)

您可以使用数学加法而不是字符串填充:

import serial
import time
import csv

try:
ser = serial.Serial("COM4",
                     baudrate=2400,
                     bytesize=serial.EIGHTBITS,
                     parity =serial.PARITY_ODD)

except:
        print("Device not detected")   

def Reader():
    global ser
    try:                    
        data = ser.readline().decode('utf-8')
        data = str(data).replace("\r\n","")
        data = data.replace("\x000","")
        return data
    except:
        return "Data Unavailable"

def Start():
    date_now = time.strftime('%d.%m.%y')
    time_now = time.strftime('%H.%M.%S')
    file_name = date_now + '__' + time_now + '.csv'

    with open(file_name, 'w+') as f:
        csv_file = csv.writer(f)
        csv_file.writerow(['DATE','TIME','VALUE'])  

        while True:
            date_now = time.strftime('%d/%m/%y')
            time_now = time.strftime('%H:%M:%S')
            data = Reader()
            csv_file.writerow([date_now, time_now, data])
            print([date_now, time_now, data])

if __name__ =='__main__':

    Start()

<强>说明: 我只是将5000添加到最后一个插入ID。想一想:
第一个ID为5000 + 1 = 5001
第999个ID为5000 + 999 = 5999
第1000个ID为5000 + 1000 = 6000

它永远不会丢弃短于4位的ID,因此不需要SET NEW.employee_id = CONCAT('V', 5000 + LAST_INSERT_ID());

警告:您必须在第4999次插入后想到您想要的内容。它将导致5位数的ID(5000 + 5000 = 10000)。如果您没有5位数的问题,请保持这种状态。