Mysql 插入前检查是否存在时,我的语法出错

Mysql 插入前检查是否存在时,我的语法出错,mysql,sql,Mysql,Sql,我试图在插入之前确保行不存在,但遇到语法错误,以下是我的sql: IF NOT EXISTS ( SELECT * FROM profile_views WHERE (profile_view_user = ? AND profile_view_viewing = ?) )

我试图在插入之前确保行不存在,但遇到语法错误,以下是我的sql:

IF NOT EXISTS 
                (   SELECT  *
                    FROM    profile_views
                    WHERE   (profile_view_user = ?
                    AND     profile_view_viewing = ?)
                )
                BEGIN
                INSERT INTO profile_views
                (
                    profile_view_user,
                    profile_view_viewing,
                    profile_view_ip
                )
                VALUES
                (
                    ?,
                    ?,
                    ?
                )
                END;

CREATE TABLE IF NOT EXISTS `profile_views` (
  `profile_view_id` int(11) NOT NULL,
  `profile_view_user` int(11) NOT NULL,
  `profile_view_viewing` int(11) NOT NULL,
  `profile_view_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `profile_view_ip` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
我的错误是:

警告:PDOStatement::execute:SQLSTATE[42000]:语法错误或 访问冲突:1064您的SQL语法有错误;检查 与右边的MySQL服务器版本相对应的手册 使用“如果不存在,请从纵断面图中选择*”的语法,其中 1号线的“专业”

如何修复sql查询?

尝试使用:

INSERT INTO profile_views(profile_view_user, profile_view_viewing, profile_view_ip)
SELECT * FROM (SELECT ?, ?, ?) AS tmp
WHERE NOT EXISTS (
    SELECT  * FROM profile_views WHERE
         (profile_view_user = ? AND profile_view_viewing = ?') LIMIT 1;

在MySQL中,这个语句需要一个外壳,就像一个过程或函数一样。只有查询可以代表它们自己使用insert ignore?在尝试向表中插入记录之前,是否应该检查表是否存在?e、 如果表不存在,创建它,如果记录不存在,创建它们。而不是在记录不存在的情况下,在可能还不存在的表中创建它们?如果表不存在并且您正试图从中进行选择,那么第一个语句是否会以任何一种方式完全爆炸?此外,不需要选择*来检查是否存在,一列就足够了。如果为表定义主键,可以使用INSERT IGNORE忽略重复键错误,或者使用ON DUPLICATE KEY UPDATE来捕获重复密钥错误,这些是MySQL-specific@Kritner我认为表模式不是正在运行的查询的一部分,我可能错了。