mysqlでレコードがない場合のみ挿入したい


mysqlでレコードを挿入する際に、挿入したいデータが既にレコードがある場合は挿入せず、ない場合にのみ挿入したいです。  
下記のsqlをコマンドラインから実行しました。

[code]

    insert into fileinfo (filename, url) values ("a", "aa") where not exists (select * from fileinfo where filename = "a");
    
[/code]

下記のエラーがでました。

[code]

    You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'where not exists (select * from fileinfo where filename = "a")' at line 1
    
[/code]

どこが間違っているのかわかりません

CentOS7  
mysql --version  
mysql Ver 15.1 Distrib 10.1.34-MariaDB, for Linux (x86_64) using readline 5.1  
です。

DB構造は下記の通りです。

[code]

    +----------+--------------+------+-----+---------+----------------+
    | Field    | Type         | Null | Key | Default | Extra          |
    +----------+--------------+------+-----+---------+----------------+
    | id       | int(11)      | NO   | PRI | NULL    | auto_increment |
    | filename | varchar(255) | YES  |     | NULL    |                |
    | url      | varchar(255) | YES  |     | NULL    |                |
    +----------+--------------+------+-----+---------+----------------+
    
[/code]

よろしくお願いいたします。




以下のリファレンスよりmariadbでは`insert into values`に直接`where`句は記述できません。  
[INSERT - MariaDB Knowledge Base](https://mariadb.com/kb/en/library/insert/)

次の参考URLより  
[mysqlでデータが存在するときinsertしないDML -
まがりの日記](http://oomatomo.hatenablog.com/entry/33737434)

[code]

    insert into fileinfo (filename, url) 
    select * from (select'a', 'aa') as tmp
    where not exists  (select * from fileinfo where filename = 'a') limit 1
    
[/code]

とすれば目的の通り、動作するようです。

`ignore`を使った方法も参考URLに記述されていますが、こちらはDBが出力する重複エラーを無視するという方法なので、あまりいい方法ではありません。

書いているうちにコメントで回答がありますね。  
せっかく書いたので投稿しておきます。




以下のリファレンスよりmariadbでは`insert into values`に直接`where`句は記述できません。  
[INSERT - MariaDB Knowledge Base](https://mariadb.com/kb/en/library/insert/)

次の参考URLより  
[mysqlでデータが存在するときinsertしないDML -
まがりの日記](http://oomatomo.hatenablog.com/entry/33737434)

[code]

    insert into fileinfo (filename, url) 
    select * from (select'a', 'aa') as tmp
    where not exists  (select * from fileinfo where filename = 'a') limit 1
    
[/code]

とすれば目的の通り、動作するようです。

`ignore`を使った方法も参考URLに記述されていますが、こちらはDBが出力する重複エラーを無視するという方法なので、あまりいい方法ではありません。

書いているうちにコメントで回答がありますね。  
せっかく書いたので投稿しておきます。

