我有一个38.000记录的表,但没有任何自动增量列ID.
现在我要添加一个ID列,我想知道会有麻烦吗?
我有一个模型令牌,它有一个字段token_number,我需要自动递增(从1001开始),当且仅当用户不提供它.问题是,由于用户可以选择提供此字段,因此无法完全查询数据库并请求最大的token_number.我在这个论坛上找到了一个答案,但我确信必须有一个更好的方法来执行它而不是执行SQL语句?在Ruby on Rails中自动增加非主键字段
我正在尝试将文件加载到MySQL数据库,主键auto_incremented,如果我找到任何重复的行,我希望更新数据.但是,REPLACE关键字仅适用于主键,它是自动生成的,所以我卡住了.
如何能够拥有一个ID为auto_increments的表,同时能够使用LOAD DATA INFILE从文件中插入/更新数据?
这是表格
CREATE TABLE `oxygen_domain`.`TEST` (
`TEST_ID` int(11) NOT NULL AUTO_INCREMENT,
`NAME` varchar(255) NOT NULL,
`VALUE` varchar(255) DEFAULT NULL,
PRIMARY KEY (`TEST_ID`,`NAME`,`VALUE`)
)
Run Code Online (Sandbox Code Playgroud)
这是命令
LOAD DATA LOCAL INFILE 'C:/testData.txt'
REPLACE
INTO TABLE TEST
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(NAME, VALUE);
Run Code Online (Sandbox Code Playgroud)
这是样本数据
ignored name, ignored value
name1,value1
name2,value2
name3,value3
Run Code Online (Sandbox Code Playgroud)
用上述数据多次运行上述命令后所需的结束结果是
|TEST_ID |NAME |VALUE|
1, 'name1', 'value1'
2, 'name2', 'value2'
3, 'name3', 'value3'
Run Code Online (Sandbox Code Playgroud) 我有一个带有自动增量主键的表:
create table rt_table
(
rtID int PRIMARY KEY AUTO_INCREMENT,
rt_user_id BIGINT, /*user being retweeted*/
rt_user_name varchar(70), /*user name of rt_user_id*/
source_user_id BIGINT, /*user tweeting rt_user_id*/
source_user_name varchar(70), /*user name of source_user_id*/
tweet_id BIGINT, /*fk to table tweets*/
FOREIGN KEY (tweet_id) references tweets(tweet_id)
);
Run Code Online (Sandbox Code Playgroud)
我希望从另一个表的部分填充此表:
insert into rt_table
select rt_user_id, (select user_name from users u where u.user_id = t.rt_user_id),
source_user_id, (select user_name from users u where u.user_id = t.source_user_id),
tweet_id
from tweets t
where rt_user_id != -1;
Run Code Online (Sandbox Code Playgroud)
我收到一个错误,表示列数不匹配,这是因为主键(这是一个自动递增的值,因此不需要设置).我该如何解决这个问题?
我错误地从表格的id字段中删除了自动增量选项.谁能告诉我如何通过迁移重新插入自动增量选项?
我想遍历一组对象并将它们全部添加到表中.目标表具有自动增量字段.如果我添加一个对象没有问题.如果我添加两个主键为零的对象,则实体框架失败.我可以手动指定主键,但尝试EF的重点是让生活变得更轻松而不是更复杂.这是代码,接收的异常如下.
foreach (Contact contact in contacts)
{
Instructor instructor = InstructorFromContact(contact);
context.AddToInstructors(instructor);
}
try
{
context.SaveChanges();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Run Code Online (Sandbox Code Playgroud)
错误是:
System.InvalidOperationException:已成功提交对数据库的更改,但更新对象上下文时发生错误.ObjectContext可能处于不一致状态.内部异常消息:AcceptChanges无法继续,因为对象的键值与ObjectStateManager中的另一个对象冲突.在调用AcceptChanges之前,请确保键值是唯一的.在System.Data.Objects.ObjectContext.SaveChanges(SaveOptions选项)
的System.Data.Objects.ObjectContext.SaveChanges()在DataMigration.Program.CopyInstructors()在C:\ Projects\DataMigration\Program.cs:第52行
我的一个表有以下定义:
CREATE TABLE incidents
(
id serial NOT NULL,
report integer NOT NULL,
year integer NOT NULL,
month integer NOT NULL,
number integer NOT NULL, -- Report serial number for this period
...
CONSTRAINT PRIMARY KEY (id),
CONSTRAINT UNIQUE (report, year, month, number)
);
Run Code Online (Sandbox Code Playgroud)
你会如何去递增number列中为每次report,year和month 独立?我想避免创建用于每个序列或表(report,year,month)集.
如果PostgreSQL支持在 MySQL的MyISAM表中" 在多列索引中的辅助列上 "递增,那将是很好的,但我在手册中找不到这样的功能.
一个明显的解决方案是选择表 + 1中的当前值,但这对于并发会话显然是不安全的.也许预插入触发器可以工作,但它们是否保证是非并发的?
另请注意,我正在单独插入事件,因此我不能像其他地方一样使用generate_series.
我将使用Notepad ++在每行的开头逐步添加数字.这不是一个开始.但是,就像
when ID = '1' then data
when ID = '2' then data
when ID = '3' then data
.
.
.
.
when ID = '700' then
Run Code Online (Sandbox Code Playgroud)
有没有办法可以通过替换任何表达式来增加这些数字,或者是否有任何内置的记事本功能.
谢谢
我正在测试insert-select查询并注意到一个奇怪的结果.
CREATE TABLE `test` (
`cnt` int(11) NOT NULL AUTO_INCREMENT,
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL,
PRIMARY KEY (`cnt`)
)
CREATE TABLE `test_current` (
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL
)
Run Code Online (Sandbox Code Playgroud)
首先,我创建了两个表,并在test_current中插入一些值
mysql> insert into test_current (a,b) values (1,1),(2,2);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
Run Code Online (Sandbox Code Playgroud)
我做了这个查询
mysql> INSERT INTO test (a,b) SELECT a,b FROM test_current;
Query OK, 2 rows affected, 1 warning (0.00 sec)
Records: 2 Duplicates: 0 Warnings: …Run Code Online (Sandbox Code Playgroud) 当使用MySQL START TRANSACTION并由MySQL做出回滚决定时 - 如果一个表有一个AUTO_INCREMENT列 - 在回滚期间列是否会减少?
还是应该呢?
我遇到了一些问题,其中事务数据正在被正确回滚 - 但看起来表是自动递增的并且在回滚中没有减少.
# BOTH TABLES START OUT EMPTY // TABLE1 ID is **auto_increment**
START TRANSACTION;
INSERT INTO `TABLE1` (`ID` ,`NAME`) VALUES (NULL , 'Ted'); # MySQL TABLE1 **ID** is Auto incremented to 1
INSERT INTO `TABLE2` (`ID` ,`WRONGVALUE`) VALUES (NULL , 'some value'); # error. This TRANSACTION will not succeed
COMMIT; # Because of the error - this TRANSACTION is now rolled back and Ted is NOT added
Run Code Online (Sandbox Code Playgroud)
因为MySQL会自动增加第一个表上的ID - 无论事务成功还是失败 …
auto-increment ×10
mysql ×5
activerecord ×1
c# ×1
decrement ×1
exception ×1
insert ×1
notepad++ ×1
postgresql ×1
regex ×1
replace ×1
select ×1
transactions ×1