一、基本概念
数据库(database):保存有组织的数据的容器(通常是一个文件或一组文件)
表(table):某种特定类型数据的结构化清单
模式(schema):关于数据库和表的布局及特性的信息
列(column):表中的一个字段。所有表都是由一个或多个列组成的
数据类型(datatype):所容许的数据的类型。每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据
行(row):表中的一个记录
主键(primary key):一列(或一组列)
外键(foreign key):外键为某个表中的一列, 它包含另一个表的主键值, 定义了两个表之间的关系
SQL(Structured Query Language):结构化查询语言,专门用来与数据库通信的语言。
关键字(key word):作为MySQL语言组成部分的一个保留字
子句(clause):一个关键字和所提供的数据组成
可移植性(portable):能运行在多个系统上的代码
可伸缩性(scale):能够适应不断增加的工作量而不失败
聚集函数(aggregate function):运行在行组上, 计算和返回单个值的函数
二 、数据库优化
1.最好别使用(*)通配符,除非确实需要表中的每个列
2.可在SQL语句内完成的许多转换和格式化工作都可以直接在客户机应用程序内完成。但一般来说,在数据库服务器上完成这些操作比在客户机中完成快得多, 因为DBMS是设计来快速有效地完成这种处理的
3.使用别名,在表列名包含不符合规定的字符(如空格)时重新命名它
4.多数SQL语句是可移植的,但是函数的可移植性不强,所以在决定使用函数时,应该保证做好代码的注释。
5.如果你要的是仅仅是日期,使用Date()是一个良好的习惯
6.MAX()、MIN()还可以返回文本列中的最大值
7.一般在使用GROUP BY子句时, 应该也给出ORDER BY子句,不要依赖GROUP BY排序数据。
8.格式化SQL(特别是在使用子查询的情况下),使其便于阅读
9.维护引用完整性:利用外键连接的列中应当只允许插入合法值
10.应当保证所有联结都有WHERE子句,否则返回的数据会多得多
11.不要联结不必要的表
12.用自联结而不用子查询
13.UNION要优于WHERE,UNION ALL 能够完成WHERE子句完成不了的任务
14.不要在导入数据时使用FULLTEXT,应当先导入数据,然后修改表,定义FULLTEXT
15.可针对每个表或每个用户,利用MySQL的安全机制禁止使用INSERT语句
16.如果数据检索是最重要的,则可以通过在INSERT和INTO之间添加关键字LOW_PRIORITY来降低INSERT语句的优先级
17.用单条INSERT语句处理多个插入比使用多条INSERT语句快
18.删除所有的行用TRUNCATE TABLE(更快),不要使用DELETE
19.使用默认值而不是NULL值
20.在部署使用了大量视图的应用前, 应该进行测试
21.事务处理可以用来管理INSERT、UPDATE和DELETE语句
22.校对是非常重要的
23.MySQL是一个多用户多线程的DBMS,如果遇到显著的性能不良,可使用SHOW PROCESSLIST显示所有活动进程,还可以使用KILL命令终结某个特定的进程
24.数据库索引用于减少SQL执行时扫描的数据量, 提高读取性能;数据库事务则规定了各个数据库操作的语义, 保证了多个操作并发执行时的ACID特性(原子性、一致性、隔离性、持久性)
三、MySQL注意事项
1.并非所有的引擎都支持全文本搜素,MyISAM支持全文本搜素,但是InnoDB不支持
2.MySQL不支持简化符*=和=*的使用
3.在过滤数据时,一定要验证返回数据中确实给出了被过滤列具有NULL的行
4.在引用的列可能出现二义性时, 必须使用完全限定列名
5.MySQL要求两个反斜杠(\\)自己解释一个,正则表达式库解释另一个
6.任何时候使用具有AND和OR操作符的WHERE子句, 都应该使用圆括号明确分组操作符
7.多数DBMS使用+或||来实现拼接,MySQL则使用Concat()函数来实现
8.AVG()函数只能用来确定特定列数值列的平均值,而列表名必须作为函数的参数给出。多个平均值必须使用多个,且AVG()函数忽略NULL值
9.WHERE是在数据分组前进行过滤,HAVING是在数据分组后进行过滤
10.搜索不区分大小写,除非使用BINARY方式
11.在布尔方式中, 不按等级值降序排序返回的行
12.NULL值不等于空串,NULL值是没有值
13.主键只能使用不允许NULL值的列
14.MySQL不允许使用函数作为默认值,它只支持常量
15.外键不能跨引擎
16.所有MySQL变量都必须以@开始
17.MySQL游标只能用于存储过程
18.DECLARE语句的发布存在特定的次序,定义的局部变量必须在定义任意游标或句柄之前定义,而句柄必须在游标之后定义
19.autocommit标志是针对每个连接而不是服务器的
20.严肃对待ROOT登陆的使用!
21.MySQL数据库是基于磁盘的,所以备份数据非常重要(mysqldump、mysqlhotcopy)