数据库在进行字符患上 比较时,默认会去掉字符串尾部的空格,且大小写不敏感,即:
select 'a'='a '; selct 'aa'='AA';结果都是1;但selct 'a'=' a';结果为0,字符串前面的空格不保留。
多表查询:
left join以左表为基础,即左表内容,右表匹配不上的显示NULL,如果where字句包含了右表信息,刚右表匹配不上的则舍弃该行。就类似inner join。
right join类似如上
inner join左右两表交集。
主键和索引:
所谓主键,就是可以唯一标识表中一行记录的属性或属性组。一个表只能有一个主键,但可以有多个索引。
***主键可以保证记录的唯一及非空,数据库管理系统会为主键自动生成唯一索引,所以主键是一种特殊的索引。
***主键是逻辑键,而索引是物理键,也即主键不实际存在,而索引实际存在数据库中。
索引,用来快速地查找那些具有特定值的记录,MYSQL索引都是用B树形式存储。
***对于索引中的每一项,MySQL在内部为它保存一个数据文件中实际记录所在位置的“指针”。当使用索引查找时会先查找索引表,然后再根据查出的结果找到数据表中对应的记录。
***索引分为:普通索引、唯一索引(UNIQUE)、主键、全文索引。
***索引也还有个称为最左前缀(Leftmost Prefixing)的概念,意即,如果我们有一个firstname、lastname、age列上的多列索引,我们称这个索引为fname_lname_age。当搜索条件是以下各种列的组合时,MySQL将使用fname_lname_age索引:
firstname,lastname,age
firstname,lastname
firstname
从另一方面理解,它相当于我们创建了(firstname,lastname,age)、(firstname,lastname)以及(firstname)这些列组合上的索引。下面这些查询都能够使用这个fname_lname_age索引。
***另MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE。可以在LIKE操作中使用索引的情形是指另一个操作数不是以通配符(%或者_)开头的情形。例如,“SELECT peopleid FROM people WHERE firstname LIKE 'Mich%';”这个查询将使用索引,但“SELECT peopleid FROM people WHERE firstname LIKE '%ike';”这个查询不会使用索引。