如何从C#向SQL表添加顺序编号

时间:2014-08-29 13:33:32

标签: c# mysql sql

我希望我的表格都包含我的tableID列的唯一编号。

Insert sequential number in MySQL

这几乎是我试图完成的,但是来自我的C#app。

编辑:添加主键和自动增量的ID列是我需要做的。谢谢deterministicFail

2 个答案:

答案 0 :(得分:0)

不要从应用程序代码执行此操作。永远。应用程序代码的位置很差,无法保证唯一性,因为在多个同时尝试插入的客户端之间存在潜在的竞争条件。它也会变慢,因为应用程序代码在递增之前必须首先从数据库请求当前值,从而导致两个单独的数据库事务。

另一方面,数据库已经具有确保原子性和唯一性的功能,并且可以按顺序响应请求,从而将其定位为更快更好地完成这项工作。实际上,几乎所有数据库including MySq已经内置了这个功能。

答案 1 :(得分:0)

从您的错误日志中

ERROR 1067: Invalid default value for 'Status'
SQL Statement:
ALTER TABLE `lianowar_woodlandlumberbook`.`book`
CHANGE COLUMN `Customer_Ph` `Customer_Ph` VARCHAR(16) NOT NULL ,
CHANGE COLUMN `Status` `Status` VARCHAR(10) NOT NULL DEFAULT NULL ,
DROP PRIMARY KEY,
ADD PRIMARY KEY (`Customer_Name`, `Status`)

ERROR: Error when running failback script. Details follow.

ERROR 1050: Table 'book' already exists
SQL Statement:
CREATE TABLE `book` (
  `Customer_Name` varchar(20) NOT NULL,
  `Customer_Ph` varchar(16) DEFAULT NULL,
  `Customer_Ph2` varchar(30) NOT NULL,
  `Info_Taken_By` varchar(12) NOT NULL,
  `Project_Type` varchar(20) NOT NULL,
  `Project_Size` varchar(20) NOT NULL,
  `Date_Taken` varchar(5) NOT NULL,
  `Date_Needed` varchar(5) NOT NULL,
  `Sales_Order` varchar(5) NOT NULL,
  `Information` text NOT NULL,
  `Status` varchar(10) DEFAULT NULL,
  `tableID` varchar(5) DEFAULT NULL,
  PRIMARY KEY (`Customer_Name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

您尝试定义NOT NULL列并为其指定默认值NULL。你应该考虑你的数据类型,tableID应该是一个数字数据类型(顺便说一下名字不好,只是id或bookId会更好)。

问题: 您应该像这样定义表

CREATE TABLE `book` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `Customer_Name` varchar(20) NOT NULL,
  `Customer_Ph` varchar(16) DEFAULT NULL,
  `Customer_Ph2` varchar(30) NOT NULL,
  `Info_Taken_By` varchar(12) NOT NULL,
  `Project_Type` varchar(20) NOT NULL,
  `Project_Size` varchar(20) NOT NULL,
  `Date_Taken` varchar(5) NOT NULL,
  `Date_Needed` varchar(5) NOT NULL,
  `Sales_Order` varchar(5) NOT NULL,
  `Information` text NOT NULL,
  `Status` varchar(10) DEFAULT NULL,  
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

我不知道你真正需要哪种数据类型,因为我不知道你要存储的数据。但是要使用主键和Auto_increment功能,这将有所帮助。