我希望我的表格都包含我的tableID列的唯一编号。
Insert sequential number in MySQL
这几乎是我试图完成的,但是来自我的C#app。
编辑:添加主键和自动增量的ID列是我需要做的。谢谢deterministicFail
答案 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功能,这将有所帮助。