我在表中有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}}
我认为我的触发器存在一些问题。
你能帮助我吗?
答案 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位数的问题,请保持这种状态。