【问题标题】:How to add sequential numbering to SQL tables from C# [closed]如何从 C# 向 SQL 表添加顺序编号 [关闭]
【发布时间】:2014-08-29 13:33:31
【问题描述】:

我想让我的表都包含我的 tableID 列的唯一编号。

Insert sequential number in MySQL

这几乎是我想要完成的,但来自我的 C# 应用程序。

编辑:我需要做的就是添加带有主键和自动增量的 ID 列。谢谢确定性失败

【问题讨论】:

  • 邮政编码在这里,不要链接到外部网站上的图片。
  • 你不使用主键和auto_increment是否有原因
  • @deterministicFail 我不知道。现在试试谢谢。
  • 您拥有可以使用 ExecuteNonQuery 将其发送到服务器的 SQL。 (但可能是一个糟糕的设计理念)
  • @deterministicFail 我将自动增量添加到我的 SQL 表的行中,但由于某种原因它没有执行命令。这是日志link

标签: c# mysql sql


【解决方案1】:

来自您的错误日志:

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 功能,这就可以解决问题。

【讨论】:

  • 再次感谢您。解决了它。我遇到的另一个问题是当我试图将我的 ID 列定义为 INT 时,但因为我没有输入一个数字,它对我大喊大叫。我需要像 ID INT(3) 这样的东西。它现在似乎可以工作了!
【解决方案2】:

不要从应用程序代码中执行此操作。曾经。应用程序代码很难保证唯一性,因为您在尝试几乎同时插入的多个客户端之间存在潜在的竞争条件。它也会变慢,因为应用程序代码必须先从数据库请求一个当前值,然后再递增它,从而导致两个单独的数据库事务。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 2019-01-23
    相关资源
    最近更新 更多