Mysql 如何插入/插入SQL中不存在的位置

Mysql 如何插入/插入SQL中不存在的位置,mysql,sql,Mysql,Sql,我对下一句话有疑问: INSERT INTO `pasajeros` ( `nombre`, `apellidos`, `email`, `password`, `telefono` ) VALUES ( 'Alexandra', 'Gonzalez', 'cesa@cesar3.com', '1234567!', '04242344556' ) WHERE NOT EXISTS ( SELE

我对下一句话有疑问:

INSERT INTO `pasajeros` 
( 
    `nombre`,
    `apellidos`,
    `email`,
    `password`,
    `telefono`
) 
VALUES 
(
    'Alexandra',
    'Gonzalez',
    'cesa@cesar3.com',
    '1234567!',
    '04242344556' 
) 
WHERE NOT EXISTS 
( 
    SELECT  * 
    FROM    `transportistas` 
    WHERE   `email` = 'cesa@cesar3.com'
);

我的代码出了什么问题?如果电子邮件未在其他表中使用,我需要进行插入。这是我的方法,但我不明白为什么我的查询失败。

我不相信可以将值与where子句一起使用。但是您可以使用select语句插入,该语句可以很好地处理where子句

INSERT INTO `pasajeros` 
( 
    `nombre`,
    `apellidos`,
    `email`,
    `password`,
    `telefono`
) 
Select * from (
select 
     'Alexandra' as `nombre`,
     'Gonzalez' as `apellidos`,
     'cesa@cesar3.com' as `email`,
     '1234567!' as `password` ,
     '04242344556' as `telefono`
    ) i
WHERE NOT EXISTS 
( 
    SELECT  * 
    FROM    `transportistas` 
    WHERE   `email` = i.email
);

我认为不能将值与where子句一起使用。但是您可以使用select语句插入,该语句可以很好地处理where子句

INSERT INTO `pasajeros` 
( 
    `nombre`,
    `apellidos`,
    `email`,
    `password`,
    `telefono`
) 
Select * from (
select 
     'Alexandra' as `nombre`,
     'Gonzalez' as `apellidos`,
     'cesa@cesar3.com' as `email`,
     '1234567!' as `password` ,
     '04242344556' as `telefono`
    ) i
WHERE NOT EXISTS 
( 
    SELECT  * 
    FROM    `transportistas` 
    WHERE   `email` = i.email
);

正确的方法是定义唯一的索引/约束:

create unique index unq_pasajeros_email on pasajeros(email);
然后,数据库将保护数据


这比在应用层尝试这样做要好得多,因为如果有人手动更新数据,它可以防止重复。

正确的方法是定义唯一的索引/约束:

create unique index unq_pasajeros_email on pasajeros(email);
然后,数据库将保护数据


这比在应用层尝试这样做要好得多,因为如果有人手动更新数据,它可以防止重复。

错误是什么?1064-您的SQL语法有错误;请查看与您的MariaDB服务器版本对应的手册,以了解在“WHERE NOT EXISTS SELECT*FROM transportistas WHERE email=”附近使用的正确语法cesa@cesar3.c'第1行有什么错误?1064-您的SQL语法有错误;请查看与您的MariaDB服务器版本对应的手册,以了解在“WHERE NOT EXISTS SELECT*FROM transportistas WHERE email=”附近使用的正确语法cesa@cesar3.c“在第1行nombre=”Alexandra”-我认为这行不通。您应该会得到一个类似未知列的错误nombre@that这种东西在SQL server中也能工作……而我从来没有真正做过MySQL。你只能用as作为别名吗?@PaulSpiegel没错,Paul。我遇到了这些错误,我该如何修复它?@Brad更新的版本应该可以工作。然而,你甚至不需要任何别名。@PaulSpiegel,是的,我知道它们不是必需的,但为了清晰起见,我确实希望有它们。nombre='Alexandra'-我认为这不管用。您应该会得到一个类似未知列的错误nombre@that这种东西在SQL server中也能工作……而我从来没有真正做过MySQL。你只能用as作为别名吗?@PaulSpiegel没错,Paul。我遇到了这些错误,我该如何修复它?@Brad更新的版本应该可以工作。然而,你甚至不需要任何别名。@PaulSpiegel,是的,我知道它们不是必需的,但为了清晰起见,我确实希望有它们。什么是unq_pasajeros_电子邮件?在pasajeros和transportistas表中,电子邮件必须是唯一的,这两种情况下的字段都被调用email@CesarJrRodriguez . . . 然后需要两个唯一的索引,每个表一个索引。然而,你的问题只涉及帕萨杰罗斯。什么是电子邮件?在pasajeros和transportistas表中,电子邮件必须是唯一的,这两种情况下的字段都被调用email@CesarJrRodriguez . . . 然后需要两个唯一的索引,每个表一个索引。然而,你的问题只涉及帕萨杰罗斯。