首页 > 代码库 > MySQL必知必会笔记<2>

MySQL必知必会笔记<2>

【英】ben Forta著

5

  1.0  *使用扩展查询*

        |---->select note from table   where Match(note) Against(‘anl‘);

                       |--->where  Match(note) Against(‘anl‘  WITH QUERY EXPANSION);

                       |--->按等级返回与第一行(优先级最高)有关的行,表中行越多,使用扩展查询结果越好。

  2.0  *关于insert*

      |--->insert操作耗时,可能降低等待处理的select语句性能。解决方案:

                                     |-->在insert和into之间插入LOW_PRIORITY(降低优先级)

                                     |-->同样适用于 UPDATAE ,DELETE语句。

    *提高insert性能*------>MySQL用单条insert语句处理多个插入比使用多条insert语句快。==== values (),(),()...

    *关于 INSERT SELECT的使用,顾名思义就是把SELECT语句的内容作为INSERT的插入部分*

      |--->eg:      insert into 表名1(列) select 列 from 表名2

  3.0  *关于布尔文本搜索*    即使没有FULLTEXT索引也可以使用。

          eg:   select note

              from 表

              where Match(note) Against(‘heavy -ropt*‘ IN BOOLEAN MODE);

              |--->为了匹配包含heavy,但不包含以rope开始词的行。

       *全文本布尔操作符*

         

       ---- 几个经典例子:

                     

  4.0   *关于IGNORE*

          UPDATE 更新多行时,一行出错就会发生错误。

              |--->解决方案:UPDATE IGNORE .......

      *为了删除某个 列的值,可以设置他为NULL*

              |---->delete 删除整行而不是某个列,若删除列用update语句。

                           |---->删除行,所有的行,但不会删除表本身。

              *若要删除所有行,TRUNCATE TABLE (删除一个表,重新创建一个表)

  5.0  

         *MySQL没有撤销(undo)按钮*

                    |---》NULL值是没有值,不是空串,空串是有一个有效的值,不是无值。

            |---》AUTO_INCREMENT (每个表只允许一个这样的列,而且他必须被索引)

        select last_insert-id()

            |----->返回最后一个AUTO_INCREMENT值。

6

    1.0   *关于MSQL引擎*

                   |

        |--->InnoDB 创建表最后一句常用。|ENGINE = InnoDB;

           |---->可靠的事务处理引擎,不支持全文本搜索

       |

       |--->MEMORY 功能等同于MYISAM,由于数据存储在内存,比较快,适用于临时表。

       |

       |--->MyISAM(大多数默认的引擎)支持全文本搜索,不支持事务处理。

    ****    外键不能跨引擎 ***

          *ALTER TABLE 常用来定义外键*

             |---->  eg:   alter table 表名

             Add CONSTRAINT 列

            FOREIGN KEY () REFERENCE 表 (列)

 

  2.0

     *视图不能索引也不能有关联的触发器或默认值*

      SHOW CREATE VIEW  viewname;------>查看创建视图的语句

            *关于更新*---------->先DROP再用CREATE ,也可以用CREATE OR REPLACE VIEW

      |------->insert update delete 

        若有以下则不能更新:| 分组(group by having)

                  | 联结

                    | 子查询

                  |并

                  |聚集函数

                  |Distinct

                  |导出列

  3.0 

     *关于创建存储过程*

          | CREATE PROCEDURE 存储名()

                              BEGIN

                                   select语句

           END;

          引用存储过程的语句: CALL 存储名();

                    |--->将会显示select语句的查询结果。

        删除语句: DROP PROCEDURE 存储名;(如果删除的不存在将会出现    错误)

 

                                        |--->解决方案: DROP PROCEDURE IF EXISTS;

  4.0

       MYSQL命令行客户机分隔符

 

          DELTMITER //

           A

                            END //

                            DELTMITER ;(除\符号以外)

      5.0

      *存储过程本质是一个函数*

       注释语句:--

        SHOW CREATE PROCEDURE       存储名;

                     |---> STATUS LIKE ‘存储名‘;--------->like限制输出

  6.0

    *关于游标*  是一个存储在MYSQL服务器上的数据库查询,他不是一条select语句,而是被该语句检索出来的结果集。 不像多数DBMS,MYSQL游标只用于存储过程(函数)

    *触发器* ------->只有表才支持,视图不支持。

      CREATE TRIGGER ....

      FOR EACH ROW SELECT语句

         |----->对每个插入行都执行。

  7.0 

    事务处理用来维护数据库完整性。

      START TRANSACTIDN

      当COMMIT或ROLLBACK语句执行时,事务会自动关闭。

 

           如果不想让事务自动提交,则可以 SET AUTOCOMMIT = 0;(不自动提交)------------>针对的是连接,不是服务器。

7

    1.0       *关于安全*

            CREATE USER ben IDENTIFIED BY ‘p@123‘;(创建一个用户口令)

                        |---->指定口令为纯文本

            RENAME USER ben TO f;

            drop user ben;

                                           |--------->删除帐号以及相关帐号权限

            SET PASSWORD FOR ben = password(‘n3w p@1234‘);------------>更改口令。如果没有则更改的是自己。

    2.0 *关于权限的问题*

        GRANT 和REVOKE

            |----->GRANT ALL和REVOKE ALL,对应于整个服务器

            |----->ON DATABASE.*; 对应于整个数据库

            |----->ON DATABASE.TABLE;对应于特定的表

            |----->其他权限见下表

                 

                 

    3.0 *关于数据库的维护*

        *使用命令行实用程序MYSQLDUMP转储所有数据库内容到另外一个文件。

        *使用命令行实用程序MYSQLHOTCOPY从一个数据库复制所有数据。

        *ANALYZE TABLE用来检查表健是否正确。

        *CHECK TABLE用来针对许多问题对表进行检查。

    4.0 

        查看日志:

              错误日志 hostname.err 位于data目录中。可用--log-error命令选项更改

              查询日志:hostname.log  --log

               二进制日志:hostname-bin --log-bin

              缓慢查询日志: hostname-slow.log              --log-slow-queries

                 **在使用日志时,可用FLUSH LOGS语句来刷新和重新开始所有的日志文件**

    5.0

           *MYSQL变量都必须以@开始*

        存储过程的一个例子:

            |---->create procedure 名字 (out p1 Decimal(8,2))------->"Decimal 十进位"

            |        BEGIN SELECT MIN(列) INTO P1 end;

       *串在字符集之间进行转换,使用cast()或 convert()函数*