我试图找出将记录插入单个表的最佳方法,但前提是该项目尚不存在.在这种情况下,KEY是NVARCHAR(400)字段.对于此示例,我们假设它是牛津英语词典中单词的名称/在此处插入您的fav词典.另外,我猜我需要将Word字段作为主键.(该表也将具有唯一标识符PK).
所以...我可能会得到这些我需要添加到表格中的单词...
例如.
所以传统上,我会尝试以下(伪代码)
SELECT WordID FROM Words WHERE Word = @Word
IF WordID IS NULL OR WordID <= 0
INSERT INTO Words VALUES (@Word)
Run Code Online (Sandbox Code Playgroud)
即.如果该单词不存在,则插入它.
现在..我担心的问题是我们得到了大量的命中..所以有可能这个词可以从SELECT和INSERT之间的另一个进程插入...这会引发一个约束错误?(即比赛条件).
然后我想我可能会做以下事情......
INSERT INTO Words (Word)
SELECT @Word
WHERE NOT EXISTS (SELECT WordID FROM Words WHERE Word = @Word)
Run Code Online (Sandbox Code Playgroud)
基本上,当它不存在时插入一个单词.
除了错误的语法之外,我不确定这是坏还是好因为它如何锁定表(如果它确实)并且不是表上的表现,它会获得大量读取和大量写入.
那么 - 你的Sql大师怎么想/做什么?
我希望有一个简单的插入和"捕获",任何错误抛出.
我有一个包含以下列的表:
id- INT UNSIGNED AUTO_INCREMENTname - VARCHAR(20)group - VARCHAR(20)我知道我可以像这样添加一行:
INSERT INTO table_name (name, group) VALUES ('my name', 'my group')
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种方法可以在不指定列名的情况下添加行,例如没有AUTO_INCREMENT列时?
我只有这两个表:
TAB_TEACHER
- id_teacher // primary key, autoincrement
- name_teacher // a varchar
TAB_STUDENT
- id_student // primary key, autoincrement
- name_student // a varchar
- id_teacher_fk // foreign key reference to a teacher (TAB_TEACHER)
Run Code Online (Sandbox Code Playgroud)
我想知道如何插入这两种情况:
案例1 - 使用预先存在的教师插入新学生,因此我必须使用教师姓名获取外键
案例2 - 使用新教师插入新学生(我正在创建学生的同时创建的老师)
我有以下数据:
FolioA Name1 100
FolioA Name2 110
FolioA Name3 100
FolioB Name1 100
FolioB Name3 106
FolioC Name1 108
FolioC Name2 102
FolioC Name3 110
Run Code Online (Sandbox Code Playgroud)
我想只插入唯一的名称(即Name1,Name2和Name3,每一次)
std::vector<std::string> name;
Run Code Online (Sandbox Code Playgroud)
当我遍历数据时.
所以,我有以下代码,我将数据存储在名为test的地图中:
std::map<std::string, std::map<std::string, double> >test;
std::map<std::string, std::map<std::string, double > >::iterator it1 = test.begin(), end1 = test.end();
while (it1 !=end1) {
std::map<std::string, double>::iterator it2 = it1->second.begin(), end2=it1->second.end();
**name.push_back(it2->first);**
++it2;
}
++it1;
}
Run Code Online (Sandbox Code Playgroud)
但是,目前通过按照我的方式将数据推送到名称的名称为Name1的2个实例,Name2的2个实例和Name3的3个实例,这是我的代码所期望的.如何修复它只有唯一的名称.
我知道有这样的LOAD DATA INFILE声明,它允许我将结构化数据插入到表中.
我很好奇的是,是否可以将文件的内容插入单列.所以,是这样的:
INSERT INTO my_table (stamp, what) VALUES (NOW(), LOAD DATA INFILE 'my_file');
Run Code Online (Sandbox Code Playgroud)
可能?
所以我试图将从字符串中获取的字符插入另一个字符串.在这里,我的行动:1.我想使用简单:
someString.insert(somePosition, myChar);
Run Code Online (Sandbox Code Playgroud)
2.我收到错误,因为insert需要(在我的情况下)char*或string
3.我通过stringstream将char转换为char*:
stringstream conversion;
char* myCharInsert;
conversion << myChar //That is actually someAnotherString.at(someOtherPosition) if that matters;
conversion >> myCharInsert;
someString.insert(somePosition, myCharInsert);
Run Code Online (Sandbox Code Playgroud)
一切似乎都在成功编译,但程序崩溃了
conversion >> myCharInsert;
Run Code Online (Sandbox Code Playgroud)
线.
5.我正在尝试用字符串替换char*:
stringstream conversion;
char* myCharInsert;
conversion << myChar //That is actually someAnotherString.at(someOtherPosition) if that matters;
conversion >> myCharInsert;
someString.insert(somePosition, myCharInsert);
Run Code Online (Sandbox Code Playgroud)
一切似乎都没问题,但是当它someAnotherString.at(someOtherPosition)变成空间时,程序会崩溃.
那么我该怎么做呢?
在vim,如果我从命令行执行以下操作
:normal! i
Run Code Online (Sandbox Code Playgroud)
vim不进入插入模式.同样的命令
:normal! A
Run Code Online (Sandbox Code Playgroud)
将光标移动到行尾,但光标仍处于插入模式.
任何想法为什么这不起作用?如果不这样,我想知道从vimscript函数的主体进入插入模式的另一种方法(并且当函数返回后,插入模式仍然存在).
编辑:看起来:startinsert会填满问题的第二部分,但我仍然想知道我怎么能做类似的事情:normal! A,:normal! a以及为什么那些不能简单地按预期工作.用箭头运动模拟"附加"是一个糟糕的解决方案,因为像空行等等.
我试图使用LinkedHashMap实现LRU缓存.在LinkedHashMap(http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html)的文档中,它说:
请注意,如果将键重新插入地图,则插入顺序不会受到影响.
但是,当我做以下投入时
public class LRUCache<K, V> extends LinkedHashMap<K, V> {
private int size;
public static void main(String[] args) {
LRUCache<Integer, Integer> cache = LRUCache.newInstance(2);
cache.put(1, 1);
cache.put(2, 2);
cache.put(1, 1);
cache.put(3, 3);
System.out.println(cache);
}
private LRUCache(int size) {
super(size, 0.75f, true);
this.size = size;
}
@Override
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
return size() > size;
}
public static <K, V> LRUCache<K, V> newInstance(int size) {
return new LRUCache<K, V>(size);
}
}
Run Code Online (Sandbox Code Playgroud)
输出是
{1=1, 3=3}
Run Code Online (Sandbox Code Playgroud)
这表明重新插入确实影响了订单.有人知道任何解释吗?
我的mongodb集合中有一个对象.它的架构是:
{
"instruments": ["A", "B", "C"],
"_id": {
"$oid": "508510cd6461cc5f61000001"
}
}
Run Code Online (Sandbox Code Playgroud)
我的收藏可能有这样的对象,但可能没有.我需要检查是否有关键的"乐器"对象存在(请notе,我不知道还有什么价值"仪器"就是在这个时候,它可能包含任何值或数组),如果存在-执行更新,否则 - 插入新值.我怎样才能做到这一点?
collection.find( { "instruments" : { $exists : true } }, function(err, object){
if (object) {
//update
} else {
//insert
}
});
Run Code Online (Sandbox Code Playgroud)
不起作用((
我想在我的数据库中插入大约数百万条记录,但它速度非常慢,速度大约为40,000条记录/小时,我不认为我的硬件速度太慢,因为我看到磁盘的速度低于2 MiB/s.我有很多表分隔在不同的.sql文件中.一条记录也非常简单,一条记录少于15列,一列少于30个字符.我使用mysql 5.3在archlinux下完成了这项工作.你们有什么想法吗?或者这个速度不慢?