扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
insert into是mysql中最常用的插入语句,它有6种写法。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、网络空间、营销软件、网站建设、朔城网站维护、网站推广。
如果插入的记录是数字的话要在数字的逗号后面加n:
通过以上实例我们可以看到insert into语句只能向原表中插入于其字段对应的数据,那么能不能通过insert into语句来把其他表的数据插入到原表中呢:
在MySQL中set方法:
ModifyStatement.Set Method 修改语句 set方法
Sets key and value. 设置键和值。
由于insert into语句是一个插入性的语句,所以它的功能要么向指定的表插入数据
也许你看到这个SQL语句是正确的,就觉得这样应该也可以:
mysql mysql insert into 4a set sname=4ainall.sname;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysql insert into 4a set sname=4ainall.sname' at line 1
或者这样也可以:
mysql mysql insert into 4a set sname="赵六";
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysql insert into 4a set sname="赵六"' at line 1
然后这样也是不可用:
mysql insert into 4a select * from 4ainall set sname=4ainall.sname;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from 4ainall set sname=4ainall.sname' at line 1
可以看出由于select是作用于4inall这个表的,而set方法也只能在select语句中,这就直接导致set方法只能作用于4inall这个表,而无法作用于4a这个表。
但是如果我们不用select语句的话编译器又怎么会知道4inall表中的数据在哪里?
显然select是用于查的而set则是一个用于改的方法,两者无法结合在一起——insert into set语句当然也不能用于将其他表的数据插入到原表中了。
当MySQL表字段设置 unique key 或者 primary key 时,被约束的字段就必须是唯一的。新插入数据直接使用 insert into ,如果出现唯一性冲突,就会抛出异常。我们应该根据需求选择合适的插入语句。
为了演示,我们先新建一张user表,SQL语句如下:
当插入数据时,如果唯一性校验出现重复问题,则报错;
如果没有重复性问题,则执行插入操作。
简单总结:重复则直接报错,sql 语句不执行,不重复则插入。
示例
执行结果
当插入数据时,如果唯一性校验出现重复问题,则忽略错误,只以警告形式返回,不执行此SQL语句;
如果没有重复性问题,则执行插入操作。
简单总结:重复则忽略,sql 语句不执行,不重复则插入。
示例
执行结果
当插入数据时,如果唯一性校验出现重复问题,则在原有记录基础上,更新指定字段内容,其它字段内容保留;
如果没有重复性问题,则执行插入操作。
简单总结:重复则更新指定字段,不重复则插入。
示例
执行结果
表记录, mobile_phone_number 从 '13800000077' 更新为 '13800000088' 了, update_time 也从 NULL 更新为有值了,但是 id 没有变:
replace into表示插入替换数据,当插入数据时,如果唯一性校验出现重复问题,删除旧记录,插入新记录;
如果没有重复性问题,则执行插入操作,效果和insert into是一样的。
简单总结:重复则先删除再插入新记录,不重复则插入
。
示例
执行结果
表记录, id 和 mobile_phone_number 变了, update_time 变为了字段默认值 NULL :
replace into 执行的逻辑:
示例一
示例一 insert into ... on deplicate key update 操作在 binlog 中记录为:
示例二
示例二 replace into 操作在binlog中记录为:
从示例可以看出,使用 replace into 会有以下问题:
执行结果
因为全部列都是指定的值,所以,相当于所有字段全部更新了一次。
binlog 中的记录:
如果出现重复异常,希望捕获异常,则使用 insert into ;
如果出现重复异常,希望保存旧纪录,忽略新纪录,则使用 insert ignore into ;
如果出现重复异常,希望更新指定字段,则使用 insert into … on duplicate key update ;
如果出现重复异常,希望删除旧记录,插入新记录,则使用 replace into 。
mysql中常用的三种插入数据的语句:
1、insert into表示插入数据,数据库会检查主键(PrimaryKey),如果出现重复会报错;
2、replace into表示插入替换数据,需求表中有PrimaryKey,或者unique索引的话,如果数据库已经存在数据,则用新数据替换,如果没有数据效果则和insert into一样;
3、REPLACE语句会返回一个数,来指示受影响的行的数目。该数是被删除和被插入的行数的和。如果对于一个单行REPLACE该数为1,则一行被插入,同时没有行被删除。如果该数大于1,则在新行被插入前,有一个或多个旧行被删除。如果表包含多个唯一索引,并且新行复制了在不同的唯一索引中的不同旧行的值,则有可能是一个单一行替换了多个旧行。
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
INSERT INTO mt_message (`id`,`name` ,`tel` ,`email` )VALUES (NULL,'111111111', '11', '1')
INSERT INTO mt_message(`id` ,`name` ,`tel` ,`email` ,`qita` ,`content` ,`shijian` ,`user` ,`huifu` ,`shenhe`
//)VALUES (NULL , '1', '2', '', '', '', NOW( ) , '', '', '')
只能说明:你从email开始后面的字段其中有一个是不能为空的,而且没有初始值
所以你第一个语句插入失败了
我估计应该问题就是在你的时间(shijian)字段,因为后面基本都是空的,只有时间不是
你可以去检查一个你的这张message表,在mysql命令行用:desc message
检查数据表的字段名和字段属性,如果不行你可以重新建立数据表的
要是想知道出错在哪里,你可以这样写:
?php
//..上面程序略
$sql="INSERT INTO mt_message (`id`,`name` ,`tel` ,`email` )VALUES (NULL,'111111111', '11', '1')";
$query=mysql_query($sql);
//执行
if($query)
//执行成功
echo 'OK';
else
echo '插入失败,错误报告是:'.mysql_error();
//输出mysql错误信息函数:mysql_error();
?
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流