最近完成了建表、入库、连接和更新的工作。今日把最近的工作总结如下:
1、varchar 可变长字符串,是MySQL中比较常用的一种数据类型。在数据入库的时候,遇到了设置的字符长度不够用的情况,于是对varchar进行了较为深入的了解。
MySQL4.1以前,VARCHAR数据类型所支持的最大长度255,5.0以上版本支持65535字节长度,utf8编码下最多支持21843个字符(不为空)。
(1)使用比固定长度类型(char)占用更少存储空间(除了使用ROW_FORMAT=FIXED创建的MyISAM表)。
(2)使用额外的1-2字节来存储值长度,列长度<=255使用1字节保存,其它情况使用2字节保存。例如varchar(10)会占用11字节存储空间,varchar(500)会占用502字节存储空间。
(3)节约空间,所以性能会有帮助。在更新的时候会产生额外的工作。
(4)5.0以上版本,取值或设置值都会保存字符串末尾的空格,4.1之前的版本都会把字符串末尾的空格删除掉。
(5)最大长度远大于平均长度,很少发生更新的时候适合使用varchar,因为碎片更少了。
- char 特点
(1)使用固定长度。
(2)保存的时候会去掉字符串末尾的空格。
(3)适合保存MD5后的哈希值或经常改变的值,因为固定的行不容易产生碎片。
2、两个表或多个表的连接并更新其中一个表的数据
项目中,两个表(此处简称table1,table2)中有相同的字段pguid,但是在数据导入的过程中,table1是没有pguid这个字段的,需要入库之后,连接table1和table2来更新table1的pguid字段,两个表格通过p_number进行连接。
UPDATE table1 as t1 LEFT JOIN table2 AS t2 ON t1.p_number = t2.p_number SET t1.pguid = t2.pguid
这个语句很好理解,首先通过两个表格相同的字段进行连接,然后在更新需要更新的字段。