扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
INSERT INTO mt_message (`id`,`name` ,`tel` ,`email` )VALUES (NULL,'111111111', '11', '1')
信丰网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、自适应网站建设等网站项目制作,到程序开发,运营维护。创新互联公司从2013年开始到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司。
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 可组成良好的开发环境。
当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中要向数据库中保存数据我们最常用的一种方法就是直接使用Insert into语句来实现了,下面我来给大家详细介绍Insert into语句用法
INSERT用于向一个已有的表中插入新行。INSERT…VALUES语句根据明确指定的值插入行。让我们先来看一下insert语句标准的定义,放在[]内的都是可以省略的:
语法
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
VALUES ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
实例
create table links (name varchar(255) not null default '', address varchar(255) not null default '');
最简单的插入方法
代码如下
复制代码
Mysqlinsert into worker values(‘tom’,’tom@yahoo.com’),(‘paul’,’paul@yahoo.com’);
或
insert into links values('jerichen','gdsz');
批量保存数据
假如我们想一次性的往数据库里插入多条数据咋办?一定要写多条语句吗?肯定是不会的,因为MySQL设计的还是很人性的。其提供insert语句的
一种非标准格式,即,values(字段值1,字段值2,字段值3),(另一个字段1的值,另一个字段2的值,另一个字段3的值);
# 同时插入两条数据,看语法说明,那个into被我省略了
代码如下
复制代码
insert links (name,url) values('jerichen','gdsz'),('alone','gdgz');
使用INSERT…SELECT语句插入从其他表选择的行
当我们在上一节学习创建表时,知道可以使用select从其它表来直接创建表,甚至可以同时复制数据记录。如果你已经拥有了一个表,你同样可以从select语句的配合中获益。
从其它表中录入数据,例如:
代码如下
复制代码
mysqlinsert into tbl_name1(col1,col2) select col3,col4 from tbl_name2;
你也可以略去目的表的列列表,如果你每一列都有数据录入。
代码如下
复制代码
mysqlinsert into tbl_name1 select col3,col4 from tbl_name2;
INSERT INTO ... SELECT语句满足下列条件:
查询不能包含一个ORDER BY子句。
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是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语句当然也不能用于将其他表的数据插入到原表中了。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流