SQL查询 - INSERT,但仅限于记录尚不存在?

Rya*_*yan 2 php mysql

所以,我正在编写一个SQL查询,就像你一样,我偶然发现了一个问题.我想要做的是每次唯一用户访问某个页面时在数据库中触发查询.唯一性是通过session_id()完成的,因为它通常非常可靠.

我想要的是一个SQL查询,它将一行数据插入两列,但只有这两列不具有相同的值.

如果用户x访问了名为的页面page1,那么在数据库中,它将记录如下所示:

+------------+---------+
| page_name  | user_id |
+------------+---------+
|    page1   |    x    |
+------------+---------+
Run Code Online (Sandbox Code Playgroud)

我将如何编写一个检查表的查询,以查看插入的数据是否重复?

我当前的查询如下(它只是一个标准的插入查询):

INSERT INTO `page_views` (`page_name`, `user_id`) VALUES ('.$pageName.', \''.session_id().'\')
Run Code Online (Sandbox Code Playgroud)

Jit*_*lla 9

使用INSERT IGNORE而不是INSERT.如果记录没有复制现有记录,MySQL会像往常一样插入它.如果记录是重复的,则IGNORE关键字告诉MySQL以静默方式丢弃它而不会产生错误.

下面的示例没有错误输出,同时它不会插入重复的记录.

语法很简单 - 只需在"INSERT"之后添加"IGNORE",如下所示:

INSERT IGNORE INTO mytable
    (pk, f1, f2)
VALUES
    ('abc', 1, 2);
Run Code Online (Sandbox Code Playgroud)

插入多个记录当一次插入多个记录时,任何不能插入的记录都不会,但任何可能的记录都是:

INSERT IGNORE INTO mytable
    (pK, f1, f2)
VALUES
    ('abc', 1, 2),
    ('def', 3, 4),
    ('ghi', 5, 6);
Run Code Online (Sandbox Code Playgroud)

在上面的第二个例子中,如果'abc'和'def'已经存在记录,则不会插入这两个记录,但是'ghi'的记录将是.