它本身並不是不好的做法,但它可能是值得擁有的不同的「傳統」數字主鍵字段,以保證表的結構完整性,並有另一場發票號碼。
然後,您可以使用不同的邏輯來填充該發票號碼,或者只是簡單的MAX + 1或者通過從密鑰表中查找,以允許針對不同類型的發票使用不同的編號順序。
例如:
CREATE TABLE `keys` (
`id` INT NOT NULL auto_increment,
`type` VARCHAR(10) NOT NULL,
`prefix` VARCHAR(10) NOT NULL,
`value` INT(10) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
);
INSERT INTO `keys` (`type`, `prefix`) VALUES
('Sales Receipt', 'SRI'),
('Sales Invoice', 'SIN'),
('Sales Refund', 'SRF');
然後在你的(僞)碼,你可以做
Database.BeginTransaction;
NewInvNum = Database.Query("SELECT `value` FROM `keys` WHERE `type` = 'SIN'");
MyInvoice.InvoiceNumber = NewInvNum;
Database.SaveInvoice(MyInvoice);
Database.Query("UPDATE `keys` SET `value` = {0} WHERE `type` = 'SIN'", NewInvNum+1);
Database.CommitTransaction;
交易(或其他一些併發保護反正)是很重要的,所以,當越來越比一張發票正在創建的過程中,他們沒有得到相同的號碼。
一次又一次,人們嘗試用AUTO_INCREMENT東西它並不適合。使用另一個爲您編號的查詢,不要依賴auto_increment。依賴任何類型的順序編號的auto_increment是不好的做法,並且完全錯誤地使用該類型的列。 –