相关疑难解决方法(0)

如何在MySQL中"插入,如果不存在"?

我开始使用谷歌搜索,发现这篇文章讨论了互斥表.

我有一张约有1400万条记录的表格.如果我想以相同的格式添加更多数据,有没有办法确保我想要插入的记录不存在而不使用一对查询(即,一个查询要检查,一个要插入是结果集是空)?

unique对某个字段的约束是否保证insert如果它已经存在则会失败?

似乎只有一个约束,当我通过php发出插入时,脚本呱呱叫.

php mysql sql performance primary-key

781
推荐指数
9
解决办法
66万
查看次数

什么是错误"每个派生表必须在MySQL中拥有自己的别名"?

我在MySQL上运行此查询

SELECT ID FROM (
    SELECT ID, msisdn
    FROM (
        SELECT * FROM TT2
    )
);
Run Code Online (Sandbox Code Playgroud)

并且它给出了这个错误:

每个派生表都必须有自己的别名.

是什么导致了这个错误?

mysql subquery mysql-error-1248 mysql-dependent-subquery

359
推荐指数
4
解决办法
39万
查看次数

SQL Server插入(如果不存在)

我想在我的表中插入数据,但只插入我的数据库中不存在的数据!

这是我的代码:

ALTER PROCEDURE [dbo].[EmailsRecebidosInsert]
  (@_DE nvarchar(50),
   @_ASSUNTO nvarchar(50),
   @_DATA nvarchar(30) )
AS
BEGIN
   INSERT INTO EmailsRecebidos (De, Assunto, Data)
   VALUES (@_DE, @_ASSUNTO, @_DATA)
   WHERE NOT EXISTS ( SELECT * FROM EmailsRecebidos 
                   WHERE De = @_DE
                   AND Assunto = @_ASSUNTO
                   AND Data = @_DATA);
END
Run Code Online (Sandbox Code Playgroud)

错误是:

消息156,级别15,状态1,过程EmailsRecebidosInsert,第11行
关键字'WHERE'附近的语法不正确.

sql sql-server stored-procedures sql-server-2008

205
推荐指数
10
解决办法
49万
查看次数

如何正确创建复合主键 - MYSQL

这是我正在使用的激烈设置的粗略过度简化.table_1并且table_2两者都有自动增加代理主键作为ID.info是一个包含有关table_1和的信息的表table_2.

table_1 (id, field)  
table_2 (id, field, field)
info ( ???, field)
Run Code Online (Sandbox Code Playgroud)

我试图决定,如果我应该做的主键info的ID从复合材料table_1table_2.如果我这样做,哪一个最有意义呢?
(在这个例子中,我将ID 11209与ID 437相结合)

INT(9)11209437 (我可以想象为什么这很糟糕)
VARCHAR (10) 11209-437
DECIMAL (10,4)11209.437

或者是其他东西?

将它用作MYSQL MYISAM数据库的主键可以吗?

mysql myisam primary-key composite-key composite-primary-key

166
推荐指数
5
解决办法
29万
查看次数

NULL的唯一键

这个问题需要一些假设的背景.让我们考虑一个employee有列的表name,date_of_birth,title,salary使用MySQL作为RDBMS.因为如果任何一个人的姓名和出生日期与另一个人相同,那么根据定义,他们是同一个人(除非我们有两个人在1809年2月12日出生的亚伯拉罕·林肯出生的惊人巧合),我们将把独特的按键namedate_of_birth,意思是"不存储同一个人两次." 现在考虑这些数据:

id name        date_of_birth title          salary
 1 John Smith  1960-10-02    President      500,000
 2 Jane Doe    1982-05-05    Accountant      80,000
 3 Jim Johnson NULL          Office Manager  40,000
 4 Tim Smith   1899-04-11    Janitor         95,000
Run Code Online (Sandbox Code Playgroud)

如果我现在尝试运行以下语句,它应该会失败:

INSERT INTO employee (name, date_of_birth, title, salary)
VALUES ('Tim Smith', '1899-04-11', 'Janitor', '95,000')
Run Code Online (Sandbox Code Playgroud)

如果我尝试这个,它会成功:

INSERT INTO employee (name, title, salary)
VALUES ('Jim Johnson', 'Office Manager', '40,000')
Run Code Online (Sandbox Code Playgroud)

现在我的数据将如下所示:

id name        date_of_birth title          salary
 1 …
Run Code Online (Sandbox Code Playgroud)

mysql database null relational-model

38
推荐指数
4
解决办法
3万
查看次数

如果项目不存在,则仅插入表格

我的数据库有一个名为fruit:

fruit

+-------------+
| id | name   |
+ ----------- +
| 1  | apple  |
| 2  | orange |
| 3  | banana |
| 4  | grape  |
+-------------+
Run Code Online (Sandbox Code Playgroud)

id是主键.我想在表中添加条目,但前提是它们不存在.

查询

IF NOT EXISTS (SELECT name FROM fruit WHERE name = 'mango')
INSERT INTO fruit (name) 
VALUES ('mango')
Run Code Online (Sandbox Code Playgroud)

错误

我使用一个名为Sequel Pro的SQL GUI应用程序,此查询错误如下:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for …

mysql sql insert

23
推荐指数
1
解决办法
5万
查看次数

mysql插入竞争条件

你如何在MySQL中阻止竞争条件?手头的问题是由一个简单的算法引起的:

  1. 从表中选择一行
  2. 如果它不存在,请插入它

然后要么获得重复的行,要么通过唯一/主键阻止它,这是一个错误.

现在通常我认为事务在这里有帮助,但因为行不存在,事务实际上没有帮助(或者我错过了什么?).

LOCK TABLE听起来有点过分,特别是如果表每秒更新多次.

我能想到的唯一其他解决方案是GET_LOCK()用于每个不同的id,但是没有更好的方法吗?这里也没有可扩展性问题吗?而且,为每个表执行此操作听起来有点不自然,因为它听起来像是高并发数据库中一个非常常见的问题.

mysql locking transactions race-condition

11
推荐指数
1
解决办法
1万
查看次数

插入记录如果在sql中不存在,则重复列名

我想要一个解决方案来插入一个记录,如果它不存在所以我在这里搜索并找到了解决方案,但我有另一个问题

INSERT INTO closed_answers (question_id, subject_id)
SELECT * FROM (SELECT 2, 2) AS tmp
WHERE NOT EXISTS (
    SELECT question_id FROM closed_answers WHERE question_id = 2 AND subject_id = 2
) LIMIT 1
Run Code Online (Sandbox Code Playgroud)

输出是

#1060 - Duplicate column name '2'
Run Code Online (Sandbox Code Playgroud)

如果我使用任何不相同的2个数字它将起作用,但当2个数字相同时出现问题

mysql sql activerecord insert mysql-error-1060

7
推荐指数
1
解决办法
3866
查看次数

从S3下载xlsx并解析

我需要一项服务来从Amazon S3下载excel文件,然后使用node-xlsx进行解析

问题是我无法让xlsx解析文件。当我尝试回读刚写的文件时,代码中找不到该文件。

我不确定这是否是最好的方法,但这是我到目前为止得到的:

router.get('/process', (req, res) => {
    var fileName = 'https://some-bucket.s3.amazonaws.com/some-excel-file.xlsx'
    https.get(fileName, response => {
        var body = ''
        response.on('data', chunk => body += chunk)
        response.on('end', () => {

            //fs is being imported early on this file
            fs.writeFile(__dirname + '/test.xlsx', body)

            var f = fs.createReadStream(__dirname + '/test.xlsx')

            var book = xlsx.parse(f)
            book.forEach(sheet => console.log('sheet', sheet.name) )

            res.status(200)          
        })
        .on('error', e => {
            res.status(500)
        })
    })
    return
})
Run Code Online (Sandbox Code Playgroud)

excel node.js express

5
推荐指数
2
解决办法
3257
查看次数

如果条目不存在,则插入到表列中

在 Liquibase 中,如果尚未设置值,我想插入值。对于普通插入,我怀疑如果该值已经存在,则插入的值将覆盖先前的值。如果它不存在,我希望它插入任何内容。这能做到吗?

现在我正在使用插入,如下所示:

<insert tableName="state">
  <column name="name" value="fooFoo"/>
  <column name="enabled" valueBoolean="true"/>
</insert>
Run Code Online (Sandbox Code Playgroud)

java xml liquibase

4
推荐指数
1
解决办法
3814
查看次数