我有一个表,它有两列是唯一的,如果第一列(或两列)有冲突,我想向上插入,但如果只有第二列有冲突,什么都不做。这可能吗?
CREATE TABLE test (
username VARCHAR(255) NOT NULL UNIQUE,
email VARCHAR(255) NOT NULL UNIQUE,
status VARCHAR(127)
);
Run Code Online (Sandbox Code Playgroud)
以下工作用于检查电子邮件中的冲突:
INSERT INTO test(username, email)
VALUES ('test', 'test@test.test')
ON CONFLICT(email) DO UPDATE SET status='upserted';
Run Code Online (Sandbox Code Playgroud)
但我想做这样的事情(下面的语法无效):
(INSERT INTO test(username, email)
VALUES ('test', 'test@test.test')
ON CONFLICT(email) DO UPDATE SET status='upserted')
ON CONFLICT DO NOTHING;
Run Code Online (Sandbox Code Playgroud) 当我尝试声明下面的内容时,索引页面工作,但其他页面都是404.我知道我的links.js文件不是问题,因为当我对for循环的输出进行硬编码时,链接都可以正常工作.我console.log路由器对象,它显示堆栈中的信息.但是当我尝试打开任何链接时,它们是404,并且没有任何内容记录到控制台.
是否无法使用for循环声明路由?代码复制如下.
var express = require('express');
var router = express.Router();
var config = require('../models/config.js');
var links = require('../models/links.js');
// homepage
router.get('/', function(req, res, next) {
res.render('index', { title: config.title });
});
for (var i = 0; i < links.length; i++) {
router.get(links[i].regex, function(req, res, next) {
console.log("trying to open " + links[i].url);
res.render(links[i].url, { title: links[i].title, link: links[i] });
});
}
module.exports = router;
Run Code Online (Sandbox Code Playgroud) 我的源HTML中包含以下内容:
<head>
...
<script>window.jQuery || document.write('<script src="/js/jquery.min.js"></script>');</script>
...
</head>
Run Code Online (Sandbox Code Playgroud)
但是它被我的浏览器(Chrome)解释为:
<head>
...
<script>window.jQuery || document.write('<script src="/js/jquery.min.js"></script>
</head>
<body>
"');"
...
Run Code Online (Sandbox Code Playgroud)
我试过在document.write字符串中转义斜线,但这没有用。有谁知道如何防止浏览器将其解释为结束脚本标记?