一次性插入多条记录: insert into tablename(field1,field2,…,fieldn) values(record1_value1,record1_value2,…,record1_valuen),(…) having和where的区别在于,having是对聚合后的结果进行条件的过滤,而where是在聚合前就对记录进行过滤,如果逻辑允许
- 一次性插入多条记录:
insert into tablename(field1,field2,…,fieldn)
values(record1_value1,record1_value2,…,record1_valuen),(…)
- having和where的区别在于,having是对聚合后的结果进行条件的过滤,而where是在聚合前就对记录进行过滤,如果逻辑允许,我们尽可能用where先过滤记录,这样因为结果集减小,将对聚合的效率大大提高,最后再根据逻辑看是否用having进行再过滤。
- 内连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录,外连接分为做连接和右连接。
- 记录联合
union和union all的使用,select … [union] | [union all] select …
区别:前者去重,后者不去重。
- int(5),括号里面指的是数字的宽度,如果小于5位就会用0填充,默认不显示,一般通过zerofill配合使用。默认是11。此外,当数值超过设定的参数后,并不会发生截断和报错。
- 对于小数的表示,MySQL分为两种方式:浮点数和定点数。浮点数包括float(单精度)和double(双精度),而定点数则只有decimal一种表示。(M,D)的用法是非标准用法,如果要用于数据库的迁移,则最好不要这么使用。float和double在不指定精度时,默认会按照实际的精度(由实际的硬件和操作系统决定),否则会四舍五入。而decimal在不指定精度时,默认的整数位为10,默认的小数位为0。如果用来表示货币等精度高的数据通常采用decimal。
- TIMESTAMP类型是4个字节,存储的时候是以数字值存储的,显示为“YYYY-MM-DD HH:MM:SS”如果经常插入或者更新日期为当前系统时间,则采用TIMESTAMP。如果想要获得数字值,应在TIMESTAMP列添加“+0”。此外,还有一个最重要的特点是,它与时区有关。但它有一个缺陷,取值范围小,局限于19700101080001到2038年的某一天。
- char和varchar类型区别:varchar是可变字符串,长度范围是0~255(mysql5.0.3版本以前)或者65535(5.0.3以后)。在检索的时候,CHAR列删除了尾部的空格,而VARCHAR则保留这些空格。
- 在使用concat(s1,s2,…,sn)函数拼接字符串时注意,任何字符串与NULL进行连接的结果都将是NULL。
- STRCMP(s1,s2)函数是比较字符串的ASCII码值的大小。如果后者比前者小,则-1,相等则为0,否则为1。
- TRUNCATE(x,y)返回数字x截断为y位小数的结果,但仅仅是截断,不四舍五入,ROUND(x,y)则四舍五入。如TRUNCATE(1.235,2)得到1.23。
12.