我有一个有3列的表.每个都有一个独特的索引.
我想一次做多个插入(300个记录弹出).当出现重复条目时,它会完全取消插入.这意味着如果300中的1个是重复的,则不会插入任何一个.
有没有解决的办法?
一直在网上浏览一段时间,似乎没有能够遇到任何类似于我想要的东西.我知道这与我编写查询的方式有关,但任何帮助都会受到赞赏.
我想要做的基础是:
它以以下格式存在:
名称,条形码,项目,数量,位置,价格和日期
名称 - 可用于多行条形码 - 用于特定项目但可用作多个位置项目 - 与条形码相同但包含名称数量 - 自解释位置 - 这可以是不同的位置价格 - 附加到特定项目日期 - 上次购买该项目的时间
棘手的是,"名称"可以在不同的位置有几个项目(条形码和项目),价格不同.我们的想法是,客户可以看到他们在一定时间内购买了多少物品,因此他们知道他们需要多少钱来销售它.
然而,他们购买它的价格可能会有所不同,因此如果价格与之前的购买价格不同,他们需要在表格中创建另一行.
整个事情背后的想法是它记录每个位置的每个项目的"名称"有多少,然后记录他们上次购买时的价格.
希望有道理.
在伪代码中:
Insert into table if does not exist
- name, barcode, item, quantity, location, price and date
If name, barcode, item, location and price are the same
- Update quantity and date (if more recent)
Run Code Online (Sandbox Code Playgroud) 我正在寻找将数据插入多个MySQL表的最佳实践方法,其中一些列是外键依赖项.这是一个例子:
Table: contacts
--------------------------------------------------------------------
| contact_id | first_name | last_name | prof_id | zip_code |
--------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
'contacts'表有PRIMARY KEY(contact_id),它只是auto_increments,和FOREIGN KEY(prof_id)REFERENCES'专业'表,FOREIGN KEY(zip_code)REFERENCES'zip_code'表.这些表看起来像这样:
Table: profession
----------------------------
| prof_id | profession |
----------------------------
Run Code Online (Sandbox Code Playgroud)
其中'prof_id'是INT NOT NULL AUTO_INCREMENT PRIMARY KEY,和
Table: zip_code
--------------------------------
| zip_code | city | state |
--------------------------------
Run Code Online (Sandbox Code Playgroud)
其中'zip_code'是INT(5)NOT NULL PRIMARY KEY.
我有一个新人想要添加记录,让我们说:
first_name = 'John', last_name = 'Doe', profession = 'Network Administrator', city = 'Sometown', state = 'NY', zip_code = 12345
Run Code Online (Sandbox Code Playgroud)
这是我正在尝试做的事情:我想获取该信息并将其插入适当的表和列中.为了防止列中的重复值(例如专业),我首先要确保没有"网络管理员"的条目,如果有,我只想获取其键值,如果不插入它然后获取其键值.对于zip_code,city,state也是如此 - 如果它存在则只使用该zip_code键,否则插入新数据并获取相关密钥.然后,最后,我想使用提供的信息输入新联系人到'联系'表,包括与专业和位置相关的其他表中的相应键值.
我的问题是,推荐的最佳方法是什么?我知道我可以坐在这里写单个陈述以检查给定的职业是否存在,如果不存在则输入,然后获取密钥.为zip_code做同样的事情.然后最后将所有这些插入到联系人中,但是我知道必须有更好的方法来在更少(可能是一个)语句中完成此操作,特别是考虑到这可能会导致问题,例如,如果数据库在中间离线了一会儿所有这一切.有没有办法在这个INSERT中使用JOIN来基本上将所有内容级联到正确的位置?我应该用TRANSACTION系列语句来处理这个问题吗?
我正处于使用SQL的学习阶段,但我觉得到目前为止我使用的书籍和资源有点跳跃到使用嵌套查询和JOINS,假设我们已经填充了所有这些数据表.我甚至乐于接受关于我应该谷歌搜索什么以获得更好的知识的建议,或任何有助于填补这一空白的资源.理想情况下,我希望看到一些功能正常的SQL代码来做到这一点.如果需要,假设PHP作为与数据库交互的语言,但命令行sql是我的目标.提前谢谢,希望我把一切都清楚了.
我在将条件放入 MySQL 时遇到一些困难。我一直在尝试创建一个查询,该查询将遍历所有标题为电子邮件的列,如果它存在,我想做这样的事情:如果电子邮件存在,我希望它正确获取该列的现有值并添加php 变量 $ 更正它。但是,如果电子邮件不存在,那么我希望它添加一条新记录,其中值 $email 到 email 列中,并将 $ Correct 值添加到 Correct 列中。任何帮助将不胜感激。
这是我所拥有的但不起作用的:
IF (SELECT * FROM facebookqs WHERE email = '$email' > 0)
UPDATE facebookqs SET correct = correct + '$correct' where email ='$email'
Else
Insert into facebookqs (email, correct) VALUES ('$email', '$correct')
Run Code Online (Sandbox Code Playgroud) 伙计们,由于某些原因,这段代码在插入到我的数据库时出现了重复的记录
$qry = "INSERT IGNORE INTO reports (". implode(", ",array_keys($reports)) .") VALUES (". implode(", ",array_values($reports)) .");";
if(!mysql_query(trim($qry), $link)) { die('Error: ' . mysql_error()); }
Run Code Online (Sandbox Code Playgroud)
实际声明是这样的
INSERT IGNORE INTO reports (`inspection_number`, `report_date`, `customer`) VALUES ('996', '10-21-2012', 'Jd Daniel');
Run Code Online (Sandbox Code Playgroud)
DB 现在看起来像
19 NULL NULL NULL 996 NULL 0000-00-00 NULL Jd Daniel NULL NULL NULL NULL
20 NULL NULL NULL 996 NULL 0000-00-00 NULL Jd Daniel NULL NULL NULL NULL
21 NULL NULL NULL 996 NULL 0000-00-00 NULL Jd Daniel NULL NULL NULL …Run Code Online (Sandbox Code Playgroud) 我正在尝试将数据插入到新的空表中.但我一直收到错误(错误代码19:约束失败).我认为这个问题可能是由'INTEGER PRIMARY KEY AUTOINCREMENT'引起的.这是我的代码:
database.execSQL("CREATE TABLE IF NOT EXISTS contacts (cid INTEGER PRIMARY KEY AUTOINCREMENT, name varchar NOT NULL, user varchar NOT NULL, UNIQUE(user) ON CONFLICT REPLACE)");
...
String sql = "INSERT OR IGNORE INTO contacts ( name , user) VALUES (?, ?)";
database.beginTransaction();
SQLiteStatement stmt = database.compileStatement(sql);
stmt.bindString(1, name);
stmt.bindString(2, entry.getUser());
int i = (int)stmt.executeInsert();
stmt.execute();
stmt.clearBindings();
stmt.close();
// error: 06-11 20:50:42.295: E/DB(12978): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
Run Code Online (Sandbox Code Playgroud)
谁知道sql语句有什么问题?我怎么解决这个问题?谢谢
我已经阅读了很多关于stackoverflow的文章.但找不到任何与"插入或替换"+"INTEGER PRIMARY KEY AUTOINCREMENT"相关的帖子.
可能重复:
如何在MySQL中"插入,如果不存在"?
有SQL表:
CREATE TABLE IF NOT EXISTS `MyTable` (
`id` smallint(6) NOT NULL AUTO_INCREMENT,
`MyVar` varchar(40) DEFAULT NULL,
PRIMARY KEY (`id`)
)
Run Code Online (Sandbox Code Playgroud)
并且有两个PHP数组arr1[]=array("abc","bcd")和arr2[]=array("abc","cde").
假设我已将arr1 []值保存到SQL表中.现在让我们假设我需要将arr2 []值保存到同一个SQL表中.我需要编写哪个SQL INSERT查询以避免重复保存"abc"条目?结果必须是:
MyTable:
1 | abc
2 | bcd
3 | cde
Run Code Online (Sandbox Code Playgroud)
但不是:
MyTable:
1 | abc
2 | bcd
3 | abc
4 | cde
Run Code Online (Sandbox Code Playgroud)
更新:也许应该以这样的方式创建/定义MyTable,以便忽略重复的条目?
让说我有一个包含三列的MySQL表:id,a并b与指定的列id是一个AUTO INCREMENT字段.如果我将以下查询传递给MySQL,它将正常工作:
REPLACE INTO `table` (`id`, `a`, `b`) VALUES (1, 'A', 'B')
Run Code Online (Sandbox Code Playgroud)
但是,如果我跳过这个领域id它将不再有效,这是预期的.
我想知道查询中是否存在ignore某些字段的方法REPLACE.所以上面的查询可能是这样的:
REPLACE INTO `table` (`a`, `b`) VALUES ('A', 'B')
Run Code Online (Sandbox Code Playgroud)
为什么我需要这样的东西?
有时我需要使用查询检查数据库SELECT以查看是否存在行.如果它存在,那么我需要UPDATE现有的行,否则我需要INSERT一个新的行.我想知道我是否可以通过单个REPLACE查询获得类似的结果(但不相同).
为什么它不能是相同的结果?很简单,因为REPLACE将DELETE在现有行和将INSERT新行,这将失去当前primary key并会增加自动递增值.相反,在一个UPDATE查询primary key和AI字段将保持不变.
MySQL REPLACE.
我有一个客户。
CREATE TABLE `customer` (
`cNic` VARCHAR(50) NOT NULL DEFAULT '',
`cName` VARCHAR(100) NULL DEFAULT NULL,
`cAddress` VARCHAR(500) NULL DEFAULT NULL,
`cTp` VARCHAR(50) NULL DEFAULT NULL,
`cEmail` VARCHAR(50) NULL DEFAULT NULL,
`creditLimit` DOUBLE NULL DEFAULT NULL,
`CustomerStatus` INT(11) NULL DEFAULT '0',
PRIMARY KEY (`cNic`)
)
Run Code Online (Sandbox Code Playgroud)
当一个新行添加到这个客户表时,如果cNic新行的(主键)已经在客户表中,我想用其他字段更新现有(旧)行。( Update customer set cName='NewName' where cNic = 'enteredNic').
否则(如果cNic不在表中)插入一个新行。我知道我可以使用instead of触发器在 mssql 中做到这一点。有没有办法在mysql中做到这一点。
我正在使用Python-MySQL(MySQLdb)库将值插入数据库.我想避免重复的条目插入到数据库中,所以我unique在MySQL中将该约束添加到该列.我正在检查title列中的重复项.在我的Python脚本中,我使用以下语句:
cursor.execute ("""INSERT INTO `database` (title, introduction) VALUES (%s, %s)""", (title, pure_introduction))
Run Code Online (Sandbox Code Playgroud)
现在,当向数据库添加重复条目时,它将产生错误.我不希望出现错误消息; 我只是想要,如果找到重复的条目,那么它应该不会将该值输入数据库.我该怎么做呢?