时间:2014-10-17 09:54:15 来源: 复制分享
insert into songinfo(songname,songtime,songpath) select 'aaa','bb' ,'cc' from dual where not exists(select * from songinfo where songname='123')
//上述命令在MYSQL3.x版本上不能执行,5.0.24的可以
比如我的Mysql当中某database存在url这张表,现在要有C API 将url,url_hash,domain这三个变量的值插入到数据库中,url_hash是主键,本来为了不至插入重复项,应该判断一下的,现在只要这一条SQL语句就行了,什么都不要管,减少了大量的查询和判断工作,我只能说一句:太爽了。如下:
SQL语句:
insert into TABLE(FIELD0,FIELD1...) select VALUE0,VALUE1 ,... from dual where not exists(select * from TABLE where FIELDN=VALUEN)
代码:
int store_url(char *url)
{
char *key, url_hash[HASHLEN], domain[DOMAINLEN], sqlstr[SQLSTRLEN];
......
sprintf (sqlstr, "insert into url(url,url_hash,domain) select '%s','%s','%s' from dual where not exists(select * from url where url_hash='%s') ", url, url_hash, domain, url_hash);
if (mysql_query (conn, sqlstr)) //大部分情况下失败是由于数据库关闭,所以可以在以下添加上再连接MySQL的代码,不赘写!
{
printf ("Error:%s\n", mysql_error (conn));
return;
}
}
清空表,在SQL和ACCESS中一般是delete * from tablename
而在MySQL中上述命令是不受支持的,
如下:
1,TRUNCATE TABLE TABLENAME
2,DELETE FROM TABLENAME