MySQL小提示

  1. 使用配置向导时,可以将MySQL注册为系统服务,MySQL会随Windows自动启动。这样免除了每次手动输入启动命令的麻烦,如果不想安装服务,可以取消【Install As Windows Service】选项旁边的复选按钮。如果读者不需要经常使用MySQL,可以在配置向导中不选择【Launch the MySQL Server automatically】选项,根据需要使用net命令启动或者关闭MysQL服务,这样也减少了系统资源的浪费。
  2. 安装过程失败,多是由于重新安装MySQL的缘故,因为MySQL在删除的时候,不能自动删除相关的信息。解决方法,把以前安装的目录删除。删除在C盘的program file文件夹里面mysql的安装目录文件夹;同时删除MySQL的DATA目录,该目录一般为隐藏文件,其位置一般在"c:\Documents and Settings\All Users\Application Data\MySQL"目录下,删除后重新安装即可。
  3. SHOW ENGINES查看系统中所有的存储引擎                  SHOW VARIABLES查看默认存储引擎,如:mysql>SHOW VARIABLES LIKE 'storage_engine';该执行结果直接显示了当前默认的存储引擎。MySQL不同版本中的默认存储引擎不同,MySQL允许修改默认存储引擎,方法是修改配置文件。在Windows平台下,设置数据库默认存储引擎需要修改默认文件my.ini。例如,将MySQL5.5的默认存储引擎修改为MyISAM。首先打开my.ini,将[mysqld]字段下面的default-storage-engine参数后面的值,由“InnoDB”改为“MyISAM”,保存文件,重新启动MySQL即可。
  4. 表删除操作将把表的定义和表中的数据一起删除,并且MySQL在执行删除操作时,不会有任何的确认信息提示,因此执行删除操作时,应该慎重。在删除表前,最好对表中的数据进行备份,这样当操作失误时,可以对数据进行恢复,以免造成无法挽回的结果。同样的,在使用ALTER TABLE 进行表的基本修改操作时,在执行操作过程前,也应该确保对数据进行完整的备份,因为数据库的改变是无法撤销的,如果添加了一个不需要的字段,可以将其删除;相同的,如果删除一个需要的列,该列下面的实验数据将失去。
  5. 并不是每一个表中都需要主键,一般的,如果多个表之间进行连接操作时,需要用到主键。因此,并不需要为每一个表建立主键,而且有些情况最好不使用主键。
  6. 外键约束(FOREIGN KEY)不能夸引擎使用。MySQL支持多种存储引擎,每一个表都可以指定一个不同的存储引擎,但是要注意:外键约束是用来保证数据的参照完整性,如果表之间需要关联外键,却指定不同的存储引擎,这些表之间是不能创建外键约束的。所以说,存储引擎的选择也不完全是随意的。
  7. 默认的,在MySQL中,AUTO_INCREMENT的初始值是1,每新增一条记录,字段值自动加1.设置自增属性(AUTO_INCREMENT)的时候,还可以指定每一条插入记录的自增字段的值,这样新插入的记录的自增字段值从初始值开始递增,如在tb_emp8中插入第一条记录,同时指定id值为5,则以后插入的记录的id值就会从6开始往上增加。添加唯一性的主键约束时,往往需要设置字段自动增加属性。
  8. 诸如单引号('),双引号("),反斜线(\)等符号,这些符号在MySQL中不能直接输入使用,否则会产生意料之外的结果。在MySQL中,这些特殊字符称为转义字符,在输入时需要以反斜线(‘\’)开头,所以在使用单引号和双引号时应分别输入(\')或者(\"),输入反斜线时应该输入(\\),其他特殊字符还有回车符(\r),换行符(\n),制表符(\tab),退格符(\b)等。在向数据库中插入这些特殊字符时,一定要进行转义处理。
  9. MySQL中的BLOB和TEXT字段类型可以存储数据量较大的文件,可以使用这些数据类型存储图像,声音或者是大容量的文本内容,例如网页或者文档。虽然使用BLOB或者TEXT可以存储大容量的数据,但是对这些字段的处理会降低数据库的性能。如果并非必要,可以选择只存储文件的路径。
  10. 在Windows平台下,MySQL是不区分大小的,因此字符串比较函数也不区分大小写。如果想执行区分大小写的比较,可以在字符串前面添加BINARY关键字,例如默认情况下,‘a’=‘A’返回结果为1,如果使用BINARY关键字,BINARY‘a'=’A‘结果为0,在区分大小写的情况下,‘a'=’A‘并不同等。
  11. MySQL中,日期时间值以字符串形式存储在数据表中,因此可以使用字符串函数分别截取日期时间值的不同部分,例如某个名称为dt的字段值“2010-10-01 12:00:30”,如果只需要获得年值,可以输入LEFT(dt,4),这样就获得了字符串左边开始长度为4的字符串,即YEAR部分的值;如果需要获得月份值,可以输入MID(dt,6,2),字符串第6个字符开始,长度为2的子字符串正好为dt中的月份值。同理,读者可以根据其他日期和时间的位置,计算并获得相应的值。
  12. CONVERT()函数改变指定字符串的默认字符集,在开始的章节中,向读者介绍使用GUI图形化安装配置工具进行MySQL的安装和配置,其中的一个步骤是可以选择MySQL的默认字符集。但是,如果只改变字符集,没有必要把配置过程重新执行一遍,在这里,一个简单的方式是修改配置文件。在Windows中,MySQL配置文件名称为my.ini,该文件在MySQL的安装目录下面。修改配置文件中的default-character-set和character-set-server参数值,将其改为想要的字符集名称,如gbk,gb2312,latin1等,修改完之后重新启动MySQL服务,即可生效。读者可以在修改字符集时使用SHOW VARIABLES LIKE 'character_set_%';命令查看当前字符集,以进行对比。
  13. 查询结果中,如果需要对列进行降序排序,可以使用DESC,这个关键字只能对前面的列进行降序排列。例如,要对多列都进行降序排序,必须要在每一列的列名后面加DESC关键字。而DISTINCT不同,DISTINCT不能部分使用。换句话说,DISTINCT关键字应用于所有列而不仅是它后面的第一个指定列。例如,查询3个字段s_id,f_name,f_price,如果不同记录的这3个字段的组合值都不同,则所有记录都会被查询出来。
  14. 在使用ORDER BY字句时,应保证其位于FROM字句之后,如果使用LIMIT,则必须位于ORDER BY之后,如果字句顺序不正确,MySQL将产生错误信息。
  15. 在查询的时候,会看到在WHERE字句中使用条件,有的值加上了单引号,而有的值未加。单引号用来限定字符串,如果将值与字符串类型列进行比较,则需要限定引号;而用来与数值进行比较则不需要用引号。
  16. 如何时候使用具有AND和OR操作符的WHERE字句,都应该使用圆括号明确操作顺序。如果条件较多,即使能确定计算次序,默认的计算次序也可能会使SQL语句不易理解,因此使用括号明确操作符的次序,是一个好的习惯。
  17. MySQL中存储字符串数据时,可能会不小心把两端带有空格的字符串保存到记录中,而在查看表中记录时,MySQL不能明确的显示空格,数据库操作者不能直观的确定字符串两端是否有空格。例如,使用LIKE‘%e’匹配以字母e结尾的水果的名称,如果字母e后面多了一个空格,则LIKE语句不能将该记录查询出来。解决方法是使用TRIM函数,将字符串两端的空格删除之后再进行匹配。
  18. 不管使用哪种INSERT语法 ,都必须给出VALUES的正确数目。如果不能提供字段名,则必须给每个字段提供一个值,否则将产生一条错误信息。如果要在INSERT操作中省略某些字段,这些字段需要满足一定条件:该列定义为允许空值;或者表定义时给出默认值,如果不给出值,将使用默认值。
  19. 所有的UPDATE和DELETE语句全都在WHERE字句中指定了条件。如果省略WHERE字句,则UPDATE或DELETE将被应用到表中所有的行。因此,除非确实打算更新或者删除所有记录,否则要注意使用不带WHERE字句的UPDATE或DELETE语句。建议在对表进行更新和删除操作之前,使用SELECT语句确认需要删除的记录,以免造成无法挽回的结果。
  20. 为数据库选择正确的索引是一项复杂的任务。如果索引列较少,则需要的磁盘空间和维护开销都较少。如果在一个大表上创建了多组索引,索引文件也会膨胀很快。而另一方面,索引较多可覆盖更多的查询。可能需要试验若干不同的设计,才能找到最有效的索引。可以添加,修改和删除索引而不影响数据库架构或应用程序设计。因此,应尝试多个不同的索引从而建立最优的索引。
  21. 对字符串类型的字段进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或30个字符内,多数值是唯一的,则不需要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间,减少I/O操作。
  22. MySQL存储过程和函数在本质上都是存储程序。函数只能通过return语句返回单个值或者对象;而存储过程不允许执行return,但是可以通过out参数返回多个值。函数限制比较多,不能用临时表,只能用表变量,还有一些函数都不可用等等;而存储过程的限制相对就比较少。函数可以嵌入在SQL语句中使用,可以在SELECT语句中作为查询语句的一个部分调用;而存储过程一般是作为一个独立的部分来执行。
  23. 目前,MySQL还不提供对已存在的存储过程代码的修改,如果必须修改存储过程,必须使用DROP语句删除之后,再重新编写代码,或者创建一个新的存储过程。
  24. 存储过程包含用户的SQL语句集合,可以使用CALL语句调用存储过程,当然在存储过程中也可以使用CALL语句调用其他存储过程,但是不能使用DROP语句删除其他存储过程。
  25. 在定义存储过程参数列表时,应该注意把参数名与数据库表中的字段名区别开来,否则将出现无法预期的结果。
  26. 一般情况下,可能会出现存储过程中传入中文参数的情况,例如某个存储过程根据用户的名字查找该用户的信息,传入的参数值可能是中文。这时需要在定义存储才的时候,在后面加上character set gbk,不然调用存储过程使用中文参数会出错,比如定义userInfo存储过程,代码如下:        CREATE PROCEDURE useInfo(IN u_name VARCHAR(50) character set gbk,OUT u_age INT)
  27. MySQL中视图和表的区别:1)视图是已经编译好的SQL语句,是基于SQL语句的结果集的可视化的表,而表不是。2)视图没有实际的物理记录,而基本表有。3)表是内容,视图是窗口。4)表占用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但是视图只能用创建的语句来修改。5)视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度看,视图可以防止用户接触数据表,因此用户不知道表结构。6)表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。7)视图的建立好删除只影响视图本身,不影响对应的基本表。     联系:视图是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有记录)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系。
  28. 在使用触发器的时候需要注意,对于相同的表,相同的事件只能创建一个触发器,比如对表account创建了一个BEFORE INSERT触发器,那么如果对表account再次创建一个BEFORE INSERT触发器,MySQL将会报错,此时,只可以在表account上创建AFTER INSERT或者BEFORE UPDATE类型的触发器。
  29. 触发器定义之后,每次执行触发事件,都会激活触发器并执行触发器中的语句。如果需求发生变化,而触发器没有进行相应的改变或删除,则触发器仍然会执行旧的语句,从而会影响新的数据的完整性。因此,要将不再使用的触发器及时删除。
  30. 已经将一个账户的信息从数据库中完全删除,为什么用户还能登录数据库?   出现这种情况的原因可能有多种,最有可能是在user数据表中存在匿名账户。在user表中匿名账户的User字段值为空字符串,这会允许任何人连接到数据库,检测是否存在匿名登录用户的方法是,输入以下语句:           SELECT *FROM user WHERE User='';如果有记录返回,说明存在匿名账户,需要删除该记录,以保证数据库的安全,删除语句为: DELETE FROM user WHERE user='';
  31. 创建用户的几种方法:GRANT语句,CREATE USER语句和直接操作user表。一般情况,最好使用GRANT或者CREATE USER语句,而不要直接将用户信息插入user表,因为user表中存储了全局级别的权限以及其他的账户信息,如果意外破坏了user表中的记录,则可能对MySQL服务器造成很大的影响。
  32. mysqldump备份的文本文件实际是数据库的一个副本,使用该文件不仅可以在MySQL中恢复数据库,而且通过对该文件的简单修改,可以使用该文件在SQL Server或者Sybase等其他数据库中恢复数据库。这在某种程度上实现了数据库之间的迁移。
  33. 直接复制数据文件是最为直接,快速的备份方法,但缺点是基本是不能实现增量备份。备份时必须确保没有使用这些表。如果在复制一个表的同时服务器正在修改它,则复制无效。备份文件时,最好关闭服务器,然后重启服务器。为了保证数据的一致性,需要在备份文件前,执行以下语句:                   FLUSH TABLES WITH READ LOCK;也就是把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证复制过程中不会有新的数据写入。这种方法备份出来的数据恢复也很简单,直接复制回原来的数据库目录即可。                                        mysqlhotcopy是一个PERL程序,它使用LOCK TABLES,FLUSH TABLES 和cp或scp来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件所在的机器上,并且mysqlhotcopy只能用于备份MyISAM表。mysqlhotcopy适合于小型数据库的备份,数据量不大,可以使用mysqlhotcopy程序每天进行一次完全备份。                             mysqldump将数据表导成SQL脚本文件,在不同的MySQL版本之间升级时相对比较合适,这也是最常用的备份方法。mysqldump比直接复制慢些。
  34. 使用mysqldump备份整个数据库成功,把表和数据库都删除了,但使用备份文件却不能恢复数据库?  出现这种情况,是因为备份的时候没有指定--databases参数。默认情况下,如果只指定数据库名称,mysqldump备份的是数据库中所有的表,而不包括数据库的创建语句,例如:         mysqldump -u root -p booksDB>c:\backup\booksDB_20110101.sql              该语句只备份了booksDB数据库下所有的表,读者打开该文件,可以看到文件中不包含创建booksDB数据库的CREATE DATABASE语句,因此如果把booksDB也删除了,使用该sql文件不能还原以前的表,还原时会出现ERROR 1046 (3D000):No database selected的错误信息。必须在MySQL命令下创建booksDB数据库,并使用use语句选择booksDB之后才可以还原。而下面的语句,数据库删除之后,可以正常还原备份时的状态。                                                          mysqldump -u root -p --databass booksDB>c:\backup\booksDB_20110101.sql   该语句不仅备份了所有数据库下的表结构,而且包括创建数据库的语句。
  35. 日志即会影响MySQL的性能,又会占用大量磁盘空间。因此,如果不必要,应尽量可能少地开启日志。根据不同的使用环境,可以考虑开启不同的日志。例如,在开发环境中优化查询效率低的语句,可以开启慢查询日志;;如果需要记录用户的所有查询操作,可以开启通用查询日志;如果需要记录数据的变更,可以开启二进制日志;错误日志是默认开启的。
  36. 二进制日志主要用来记录数据变更。如果需要记录数据库的变化,可以开启二进制日志。基于二进制日志的特性,不仅可以用来进行数据恢复,还可以用于数据复制。在数据库定期备份的情况下,如果出现数据丢失,可以先用备份恢复大部分数据,然后使用二进制日志恢复最近备份后变更的数据。在双机热备情况下,可以使用MySQL的二进制日志记录数据的变更,然后将变更部分复制到备份服务器上。
  37. 慢查询日志主要用来记录查询时间较长的日志。在开发环境下,可以开启慢查询日志来记录查询时间较长的查询语句,然后对这些语句进行优化。通过配置long_query_time的值,可以灵活地掌握不同程度的慢查询语句。
  38. 合理的索引可以提高查询的速度,但不是索引越多越好。在执行插入语句的时候,MySQL要为新插入的记录建立索引。所以过多的索引会导致插入操作变慢。原则上是只有查询的字段才建立索引。
  39. 在一些情况下,查询语句中使用了带有索引的字段。但索引并没有起作用。例如,在WHERE条件的LIKE关键字匹配是字符串以 “开头,这种情况下索引不会起作用。又如,WHERE条件中使用OR关键字连接查询条件,如果有1个字段没有使用索引,那么其他的索引也不会起作用。如果使用多列索引,但没有使用多列索引中的第1个字段,那么多列索引也不会起作用。
  40. 查询缓冲区可以提高查询的速度,但是这种方法只适合查询语句比较多,更新语句比较少的情况。默认情况下查询缓冲区的大小为0,也就是不可用。可以修改query_cache_size和query_cache_type的值如下所示:                                    [mysqld]                                                                            query_cache_size=512M                                                                  query_cache_type=1                                                                                    query_cache_type=1表示开启查询缓冲区。只有在查询语句中包含SQL_NO_CACHE关键字时,才不会使用查询缓冲区。可以使用FLUSH QUERY CACHE语句来刷新缓冲区,清理查询缓冲区中的碎片。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值