如何从C#向SQL表添加顺序编号
本文关键字:添加 顺序 编号 SQL | 更新日期: 2023-09-27 18:20:03
我希望所有表都包含一个唯一的tableID列编号。
在MySQL 中插入序列号
这几乎是我想要实现的,但来自我的C#应用程序。
编辑:添加带有主键和自动增量的ID列就是我所需要做的。谢谢你determisticFail
来自您的错误日志:
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功能,这就可以了。
不要从应用程序代码中执行此操作。曾经应用程序代码无法保证唯一性,因为在试图同时插入的多个客户端之间存在潜在的竞争条件。它也会更慢,因为应用程序代码必须首先从数据库请求一个当前值,然后再对其进行增量,从而产生两个独立的数据库事务。
另一方面,数据库已经具有确保原子性和唯一性的功能,并且可以按顺序响应请求,从而使其能够更快、更好地完成这项工作。事实上,几乎所有的数据库,包括MySql,都已经内置了这个功能。