MySQL 中将一个表的数据插入另外一个表的方法

开发中,我们经常需要将一个表的数据插入到另外一个表,有时还需要指定导入字段,虽然这个实现起来非常简单,但是还是会困扰许多新手,因此专门发一篇文章备查。

如果2张表的字段一致,并且希望插入全部数据,可以用这种方法:

 
INSERT INTO 目标表 SELECT  * FROM 来源表;

比如要将 articles 表插入到 newArticles 表中,则是:

 
INSERT INTO newArticles SELECT  * FROM articles;

如果只希望导入指定字段,可以用这种方法:

 
INSERT INTO 目标表 (字段1, 字段2, ...) SELECT  字段1, 字段2, ...  FROM 来源表;

注意字段的顺序必须一致。

如果您需要只导入目标表中不存在的记录,可以参考另外一篇文章

MySQL 当记录不存在时插入(insert if not exists)

批量替换 MySQL 指定字段中的字符串

批量替换 MySQL 指定字段中的字符串是数据库应用中很常见的需求,但是有很多初学者在遇到这种需求时,通常都是用脚本来实现;其实,MySQL 内置的有批量替换语法,效率也会高很多;想了解具体方法,继续阅读本文吧 :)

批量替换的具体语法是:

 
UPDATE 表名 SET
指定字段 = replace(指定字段, ’要替换的字符串’, ’想要的字符串’) 
WHERE 条件;

如果你想把 article 表中 ID 小于5000的记录,content 字段中“解决”替换成“解放”,那么语法就是:

 
UPDATE article SET
content = replace(content, ’解决’, ’解放’) 
WHERE ID<5000;

是不是很方便 :)

PHP 连接 MSSQL 时 nvarchar 字段长度被截断为 255

许多用 PHP 连接 MSSQL 的新手经常遇到这个问题:数据库里面的 nvarchar 字段中数据一切正常,但是用 PHP 查询出来却发现长度只有 255,我们都知道,在 MySQL 里面 varchar 的长度只有 255,但是 MSSQL 却不是,不会是 PHP 将 nvarchar 按照 MySQL 的 varchar 处理了吧!本文给出了解决方法:

 
select cast(目标字段 as text) from 表名

假如你的 article 表中有个字段 summary 为 nvarchar,那么命令为:

 
select cast(summary as text) from article

关于 cast :

CAST ( expression AS data_type )

expression 为目标字段
data_type 为要转换成的数据类型

PHP 连接 MSSQL 时 text 字段被无故截断

第一次使用 PHP 连接 MSSQL 的朋友经常遇到这个问题:text 字段总是会被无故截断,只能发一两千字,有时截断时还出现乱码情况,而将执行插入的 SQL 语句输出却没有任何问题。呵呵,其实这个问题很简单:

PHP 的配置文件 php.ini 中 MSSQL 部分:

 
[MSSQL]
; Allow or prevent persistent links.
mssql.allow_persistent = On
 
; Maximum number of persistent links.  -1 means no limit.
mssql.max_persistent = -1
 
; Maximum number of links (persistent+non persistent).  -1 means no limit.
mssql.max_links = -1
 
; Minimum error severity to display.
mssql.min_error_severity = 10
 
; Minimum message severity to display.
mssql.min_message_severity = 10
 
; Compatability mode with old versions of PHP 3.0.
mssql.compatability_mode = Off
 
; Connect timeout
;mssql.connect_timeout = 5
 
; Query timeout
;mssql.timeout = 60
 
; Valid range 0 - 2147483647.  Default = 4096.
mssql.textlimit = 4096
 
; Valid range 0 - 2147483647.  Default = 4096.
mssql.textsize = 4096

请看这两个配置参数:

 
; Valid range 0 - 2147483647.  Default = 4096.
mssql.textlimit = 4096
 
; Valid range 0 - 2147483647.  Default = 4096.
mssql.textsize = 4096

相信你现在已经知道了问题的关键所在,只需要将这两个数值改大即可,不过,同时也要考虑:

 
; Maximum size of POST data that PHP will accept.
post_max_size = 2M

需要根据实际情况设置。