Archive: ‘mySQL’ Category

mySQL的tinytext, text, mediumtext, longtext长度限制

No comments December 25th, 2011

tinytext, tinyBlob: 最大长度255个字元(2^8-1)
text, Blob: 最大长度65535个字元(2^16-1)
mediumtext, mediumBlob: 最大长度 16777215 个字元(2^24-1)
longtext, longBlob: 最大长度4294967295个字元 (2^32-1)

Blob (Binary large objects)储存二进位资料,且有分大小写

MySQL整型:TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT的范围

No comments October 15th, 2011

TINYINT:有符号的范围是-128至127,无符号的范围是0到255,2的8次方
SMALLINT: 有符号的范围是-32768至32767,无符号的范围是0到65535,2的16次方
MEDIUMINT:有符号的范围是-8388608至8388607,无符号的范围是0到16777215,2的24次方
INT(integer):有符号的范围是-2147483648至2147483647,无符号的范围是0到4294967295,2的32次方
BIGINT:有符号的范围是-9223372036854775808至9223372036854775807,无符号的范围是0到18446744073709551615,2的64次方

MySQL之join, left join

No comments May 14th, 2010

join: 左右两个表都必须有数据匹配到。

left join: 以左边表为准,只要左边的表有数据匹配到就行,右边表没数据以null补充。

这两天遇到一个问题就是因为没想到右边那个表的数据可能为空造成的,一开始用的是join,查出来的结果有时会少几条,一检查少的数据,发现是因为join后面的表里没有相应的记录。这时候才想到left join,换了之后结果是我想要的了。

SQL: UNION ALL / rand() / using

No comments April 23rd, 2010

1. 随机取3条记录,不连续:
select * from tbA JOIN (SELECT ceil(rand() * (select max(id) from tbA)) as ID) as r2 using (id) UNION ALL
select * from tbA JOIN (SELECT ceil(rand() * (select max(id) from tbA)) as ID) as r2 using (id) UNION ALL
select * from tbA JOIN (SELECT ceil(rand() * (select max(id) from tbA)) as ID) as r2 using (id) ;
这里的using(id)是什么意思?

2. 得到随机的3条连续记录:
select * from tbA as a join (select round(rand()* ((select max(id) from tbA where type=1)-(select min(id) from resume_message where type=1))+(select min(id) from resume_message where type=1)) as nid) as b where a.id>=b.nid and type=1 limit 3;

Some useful SQLs

1 comment April 20th, 2010

1. SHOW CREATE TABLE tbA;

2. UPDATE tbA JOIN tbB ON tbA.`id`=tbB.a`id` SET tbA.`name`=tbB.`name`;

3. SELECT * FROM tbA WHERE `name` LIKE BINARY ‘%中文%’;

4. INSERT INTO tbA (`bid`, `name`) (SELECT `id`, `name` FROM tbB);

5. INSERT INTO tbA (`bid`, `name`, `count`) VALUES (10, ‘abc’, 1) ON DUPLICATE KEY UPDATE `count`=`count`+1; # UNIQUE KEY `name` (`bid`,`name`)

6. SELECT *, COUNT(DISTINCT name) FROM table GROUP BY name