`
pan_java
  • 浏览: 279954 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

mysql 5 权威指南笔记

阅读更多
第一部份(入门)

1.MyISAM 不支持事务,InnoDB支持事务

2.InnoDB 支持外键约束

3.MyISAM 表锁定,InnoDB行锁定

4.MyISAM不支持热备份,InnoDB 支持但收费.

5.MySQL不支持自定义数据类型和XML.

6.MyISAM数据表
   MyISAM Static:表中数据列各自都有预先定义好的固定长度.
   MyISAM Dynamic:表中有且只有一个变长字段(VARCHAR,XXXTEXT,XXXXBLOB).
   MyISAM Compressed:动态和静态MyISAM 表都可以用myisamchk 工具压缩.空间将减少原来的一半,访问速度也会变快.不能再数据进行修改.
  
7.InnoDB 数据表
   支持事务.
   数据行级锁定机制,自动终止死锁进程.
   外键约束.
   崩溃恢复.
   所有的数据和索引都保存在一个表空间里,只能增长,不能缩小.
   单条记录最多可以占用8000个字节,不包括TEXT和BOLB数据列.它们只有前512个字节是随其他数据列一起存储在数据库里的,超过放在表空间的其他页面.
   占表空间是同样大小MyISAM 的两倍.
   不支持全文索引.
   不能保存二维地理数据(GIS).
   COUNT()执行比MyISAM慢.
   管理访问权限的表不能转换为InnoDB.
  
  
   InnoDB 数据表与MyISAM数据表可以共存.如果最节约空间和时间方式来管理数据表,首选MyISAM,如果要应用到事务,
   更高的安全性,允许多个用户同时修改某个表.首选InnoDB.
  
  
8.HEAP数据表
  只存在于内存中,使用散列索引.存取快.用途充当临时数据表.
  不支持XXXTEXT,XXXBLOB.
  只允许使用=和<=> 不能使用 >,< <=,>=.
  不支持auto_increment
  只允许NOT NULL数据列进行索引
  对同一个数据库的其他连接可见.中断不会丢失数据.
  由max_heap_table_size 设定大小.
 
9.临时数据表
  create temporary table 创建
  对同一个数据库的不同连接不可见.
 
10.ARCHIVE 数据表
   保存和备份数据而设计.
   允许执行insert 不允许update delete.
   不能建立索引.

11.数据表文件
   每个数据表有一个*.frm文件.同个数据库frm文件放在同一个目录下.
   db.opt 文件整个数据库结构定义和设置.
   *.myd MyISAM表数据,*.myi MyISAM表索引文件
   *.idb InnoDB  表的数据和索引文件
   表空间和撤销日志存放在data/ibdatal,-2,-3等文件中.把InnoDB日志数据存放在data/ib_logfile0,-1,-2中.

12.数据类型
   tinyint  8位整数 -128 ~ 127
   smallint 16位整数  -32768 ~ 32767
   mediumint 24位整数  -8388608 ~ 8388607
   int,integer 32
   bigint 64
   serial
   对于INT 数据类型,宽度不影响取值范围和数据值位数.
  
  
   auto_increment整数
   数据列not null,primary key ,uniqure 同时使用
   一个表只能有一个.
   对于该列insert 可以设定指定的值.
   selelct last_insert_id() 获取刚插入的auto_increment值.
   auto_increment到达最大值不会再递增.
  
  
   BOOL是TINYINT 同义词
  
   float(m,d)
   double(m,d)
   real(m,d) double(m,d)的同义词
   m长度,d小数点后位数
  
   show warning 查看警告内容
  
   DATE    2003-12-13(格式)
   time    23:59:59
   datetime 2003-12-13 23:59:59
   year    2003
  
   对日期和时间数据进行合法检查由MYSQL系统变量sql_mode控制
   allow_invalid_dates 允许使用不正确数据作为日期时间值
   no_zero_date  0000-00-00 不再是一个合法的日期时间值
   no_zero_in_date 不允许使用0作为月份或日期
  
   TIMESTAMP 更新不给定具体的值或NULL 当前时间设置为这个字段的值.
  
   不要选用TIMESTAMP 数据列保存"真正的"日期/时间数据,最好选技DATETIME
  
   SELECT TS+0 FROM 老的格式显示时间
  
   SELECT DATE_FORMAT(birthdate,'%Y %M %e') FROM students  DATE_FORMAT格式化日期
  
  
   char 类型长度是严格限制的.
  
   char   固定长度,最多255个字符
  
   varchar 可变长,最多65535
  
   tinytext 可变长,最多255
  
   text 可变长,最多(2的16次方-1)
  
   mediumtext 可变长,最多(2的24次方-1)
  
   longtext 可变长,最多(2的32次方-1)
  
   xxxTEXT 不允许设置最大长度
  
   如果 n<4 varchar(n) 修改为 char(n)
   如果 n>3 并且在同一个数年表里还有其他的VARCHAR,TEXT,BLOB 数据列,CHAR(n) 将修改成 varchar(n),如果数据表里只有固定长度的数据列char(n)不发生改变.
  
   VARCHAR 前导和后导空格可以保存
  
   如果给CHAR和VARCHAR 加上BINARY,将视同为BLOB数据列来处理,BINARY带来的好处就是排序时字符初为二进制数.
  
   CHARACTER SET charactersetname COLLATE sortorder 指定一种字符的字符集和排序方式.
  
   BIT 最大宽度64 与TINYINT(1) 同义词
  
   适当的冗余有时反而的有必要的
  
  13. 外键 
 
  外键字段的数据类型应该与主键保持一致.不然where条件求解会很慢.
  
   create table titles(
      col1,col2,
      pubID INT,
      foreign key (pubID) REFERENCES publcs(pubsID),
   )
   titles.pubID 指向publcs.pubsID的外键.
  
   FOREIGN KEY [name] (col1) REFERENCES table2 (col2)
   [ON DELETE {cascade | set null | no action | restrict}]
   [ON UPDATE {cascade | set null | no action | restrict}]
  
   restrict 默认行认,DELETE 和UPDATE 时会报错.
  
   set null table2 数据表里的记录将被删除,table1受影响设置有NULL.
  
   cascade table2 数据表里的记录将被删除,table1也删除.
  
   no action 数据表里的记录将被删除,table1不采取任何动作.
  
   更新时一样(同上).但cascade时table2更新的值会传送到table1中.
  
   设置外键前提
   table1.col1 和table.col2 必须到少一个普通索引.
   table1.col1 和table.col2 无需进行类型转换直接就可以对比.
   外键约束一开始就要满足条件.
  
   ALTER TABLE tablename DROP FOREIGN KEY foreign_key_id 删除外键.
  
   set foreign_key_checks = 0 临时禁用外键约束条件检查.
  
14.索引
   DELAY_KEY_WRITE   等到全部记录插入/修改完毕之后再进行索引创建,提高效率.
   同一个表索引限制为16个.
   还提供多个字段组合创建索引,如where conuntry="A" and city="B"
  
   在WHERE 子句有不等号(where col2!=....) 无法使用索引.
  
   在WHERE 子句中使用了函数(where DAY(col2))无法使用索引.
  
   JOIN操作时,主键与外键数据类型相同时才使用索引.
  
   比较操作符LIKE 和 REGEXP ,搜索模板第一个字符不是通配符情况下才能使用索引,LIKE 'abc%' 使用,LIKE '%abc%' 不使用索引.
  
   ORDER BY 操作中,只有在排序条件不是一个查询条件表达式情况下才使用索引.
  
   index(col1,col2,col3) 建立复合索引.
  
   最大索引长度255个字符.
  
   InnoDB 不支持全文索引
  
   ALTER TABLE tablename ADD FULLTEXT(col1,col2) 全文索引创建.
  
   EXPLAIN  优化查询 .
  
  
15.视图
   CREATE VIEW v1 AS select titid,title,subtitle FROM titles ORDER BY title 创建视图
  
   能不能在某个视图里INSERT,UPDATE,DELETE命令,要取决于定义这个视图的SELECT命令.
  
   1.SELECT 不包括 GROUP BY ,DISTINCT,LIMIT,UNION
  
   2.如果数据来此一个以上的数据表,那它几乎是不可以的.
  
   CREATE [OR REPLACE] [ALGORITHM=UNDEFINED | MERGE | TEMPTABLE]
   VIEW name [(collist) AS select coommand]
   [WITH [CASCADED | LOCAL | CHECK OPTION]]
  
   WITH CHECK OPTION 将影响从其他视图派生出来的视图能不能修改.
  
   SHOW TABLE 命令将返回一个全体数据表和视图的清单,DROP VIEW name 删除视图.
  
  
SQL  入门

   1.除了数据库和数据库表的名字以外,MySQL不区分字母的大小安形式.
  
   2.确认表中有多少条内容不重复的数据记录:select count(distinct pubID) FROM titles.
  
   3.对查询结果的数据个数加以限制的好处是可以大大提高查询工作的效率.
  
   4.select tilte FROM titles LIMIT a,b  a--开始条数(0为开始) b--长度
  
   5.一条带有LIMIT的SELECT 命令里增加一个SQL_CALC_FOUND_ROWS 选项,就可以在下一查询命令里用SQL函数FOUND_ROWS()查出这条SELECT命令在不带LIMIT命令的总条数.
   SELECT SQL_CALC_FOUND_ROWS title FROM titles ORDER BY title LIMIT 3.
   SELECT FOUND_ROWS();
  
   6.临时改用结果的排序又慢又没有效率.SELECT authName FROM authors ORDER BY authName COLLATE latinl_german2 ci
  
     永久改变:ALTER TABLE author MODIFY authName VARCHAR(60) character SET latin1 COLLATE latinl_german2 ci.
    
   7.LIKE 操作符进行比较操作大的数据表会非常慢.
  
   8.WHERE,HAVING 同时出现先执行WHERE 再执行HAVING ,HAVING 只能用来对SELECT .... WHERE ...查询的结果做进一步的过滤.HAVING 的优点是查询条件还可以作用于有关字段的数学计算结果.
    
     HAVING 不像WHERE 子句那么容易优化,而这意味我们应该尽可能避免使用HAVING子句,除非找不到等价的WHREE 子句.
    
   9.MySQL 不支持colname=NULL这样的用法---如果打算对包含NULL值的数据记录进行搜索就要使用ISNULL(colname)函数.
  
   10.使用USING关联两个表查询 SELECT title pubName FROM titles LEFT JOIN publishers USING(pubID)
  
   11.合并查询结果UNION,各次查询结果的数据列在个数和数据类型上都是一样,否则,MySQL将把结果转换成为第一条SELECT 命令的数据类型.
      SELECT * FROM authors WHERE authName LIKE 'b%'
      UNION
      SELECT * FROM authors WHERE authName LIKE 'g%'
     
      UNION ALL 会保存重复的记录
     
      (SELECT * FROM a order by col LIMIT 10)
       UNION ALL
      (SELECT * FROM b order by col LIMIT 10)
       ORDER BY colc LIMIT 5
      
   12.统计函数GROUP_CONCAT()作用是把一些字符串归为一个分组.
  
   13.GROUP BY .... WITH ROLLUP
      如果GROUP BY 子句只有一个数据列,加上WITH ROLLUP 关键字的效果是MYSQL 将在查询的结果的最后一行将自动增加一条总数统计记录.
      如果GROUP BY 子句只有多个数据列,加上WITH ROLLUP 关键字,查询结果的第一列分组统计一个阶段性总和(相当于小计),最后记录统计一个最终的总和.
     
   14.create table newtable select * from table 创建备份表
  
   15.一次插入多条记录 insert into table (cola,colb) values(a,b),(d,c)
  
   16.LAST_INSERT_ID(),作用是返回上一条INSERT命令生成的AUTO_INCREMENT值.LAST_INSERT_ID()面向连接的函数,只对本次连接会话有效.
  
   17.UPDATE ...ORDER BY ..LIMIT
       update table set mydate = 0 order by name limit = 10 -- 更新满足条件的前十条记录.
      更新关联数据表里的数据记录
        update tab1,tab2 set tab1.name = tab2.name where tab1.id = tab2.id.
       
  18.DELETE
     DELETE t1,t2 FROM t1,t2,t3 WHERE cond1 and cond2
     这个语法将把数据表t1 和 t2 里满足where 条件的所有记录全部删掉,而WHERE 条件可以是t1,t2,t3,之间任何关联/引用关系.DELETE 只会FROM之前的表中删掉记录.
    
  19.set foreign key_check = 0 暂时关闭MySQL的外键约束条件机制 ,=1开启.
     DELETE FROM authors ORDER BY LIMIT 1 删除满足条件的第一条
    
  20.创建数据库
     CREATE DATABASE mylib  ,CREATE DATABASE mylib DEFAULT CHARACER SET latin1 COLLATE latin1_general_ci
 
  21.创建表
     CREATE [TEMPORARY] TABLE [IF NO EXISTS] tablename(
        colname1 coltype coloptons reference,
        [index1,...]
     )[ENGINE = MYISAM|INNODB|HEAP]
    
  22.创建索引
     CREATE TABLE titles(
        titleID,....,title....,publID,
        INDEX idxtitle(title)
     )
    
     CREATE INDEX idxtitle ON title (title)
    
     ALTER TABLE titles ADD INDEX idxtitle(title)
    
    
  23.ALTER TABLE
     1.增加一个数据列
       ALTER TABLE talname ADD newcolname coltype coloptions [FIRST | AFTER existingcolumn]
     2.修改一个数据列
       ALTER TABLE talname CHANGE oldcolname newcolname coltype coloptions
     3.删除一个数据列
       ALTER TABLE tblname DROP colname
     4.增加一个索引
       ALTER TABLE tblname ADD PRIMARY KEY (indexcols,....)
       ALTER TABLE tblname ADD INDEX [indexname] [indexcols....]
       ALTER TABLE tblname ADD UNIQUE [indexname] [indexcols....]
       ALTER TABLE tblname ADD FULLTEXT [indexname] [indexcols....]
     5.增加一个外键约束条件
       ALTER TABLE tblname ADD FOREIGN KEY [idxname] (colum1) REFERENCES table2 (column2)
     6.删除一个索引
       ALTER TABLE tblname DROP PRIMARY KEY
       ALTER TABLE tblname DROP INDEX indexname
       ALTER TABLE tblname DROP FOREIGN KEY indexname
     7.改变全体文本数据列上的字符集
       ALTER TABLE tblname CONVERT TO CHARACTER SET charsetname
     8.改变数据表的类型
       ALTER TABLE tblname ENGINE typename
      
      
第三部分 SQL 解决方案

   1.合并字符串
      CONCAT(s1,s2.....)
   2.截取字符串
      SUBSTRING(s,pos,n) 字符串第一个字符是pos=1,而不是pos=0
   3.CAHR_LENGTH(s)返回字符串的字符个数,LENGTH()返回字符串的字节长度值
  
   4.IF(a,b,c) 先对a 求值,结果为值返回b,为假返回c
   5.REPLACE(s,a,b)将字符串s中的a替换成b
   6.LOCATE()返回值是匹配模板在字符串里的位置
   7.CONVERT(x USING charset) 函数来改变给定字符串的字符集
   8.查看客户端字符集show variables like 'character_set\_%'
   9.REGEXP   a REGEXP b   在a里匹配格式b的文本,存在返回1,不存在返回0
   10.DATE_FORMAT() 格式化日期  DATE_FORMAT('2005-12-31','%M %d %Y')
   11.ADDDATE(),DATE_ADD():这两个等效的函数用来把一个时间间隔和一个日期相加
      SUBDATE(),DATE_SUB()相减
      DATEDIFF()返回两个日期之间的天数
      TIMEDIFF()返回两个时间或两个日期的时间差
   12.CONVERT_TZ()转换不同时区的时间
   13.ENUM
      ENUM数据类型可以管理一个成员多达65535个字符串集合.
   14.SET
      与ENUM之间的唯一区别就是我们可以把属于同一个集合的任意多个字符串的组合存入SET字段.
      同一个SET最多只能容纳64个字符.
      使用"="操作符来比较SET数据的意思是两组字符串组合必须完全匹配.
      select * from testset WHERE FIND_IN_SET('italic',fontattr)>0 使用FIND_IN_SET查询是否存在于SET
   15.变量
      普通变量 以@开头
      系统变量和服务器变量以@@开头
   16.CASE分支
       CASE expr
          WHEN var1 THEN result1
          WHEN var2 THEN result2
          ......
          ELSE resultn
       END
   17.表内容复制
      1.CREATE TABLE publishers SELECT * FROM a
      2.CREATE TABLE publishers LIKE a
        INSERT INTO  publishers SELECT * FROM a
       
   18.子查询
      SELECT ... WHERE col=[ANY|ALL](SELECT)
      子查询里不支持LIMIT,执行效率低下
     
   19.RAND() 随机
     select * from a ordery by rand() 随机排序
   20.全文索引
      select * from table where match(col1,col2) AGAINST('word1 word2 word3') >0.001
      MATCH...AGAINST 返回一个浮点数作为它本身的求值结果,这个结果反映了结果记录与被检索单词的匹配程序.没有匹配,记录太多被忽略返回0
      布尔检索表达式
      SELECT * FROM tablename WHERE MATCH(col1,col2) AGAINST('+word1 +word2 -word3' IN BOOLEN MODE)
      缺点只能返回1(匹配),0不匹配
      全文索引时,不允许使用LIKE等操作符的匹配模板.唯一的例外是word*,但是通配符'*'只允许出现在单词的末尾
      全文索引只能用于单个索引表,要想对多个关联表里的数据进行检索,必须每一个数据表配上必要的全文索引.
      进行全文索引,表里至少有3条记录,数据表越大,效果越好.
      单词长度必须为4个或更多字符才能参加全文检索.
      全文检索不区分大小字.
      创建全文索引比较慢
   21.锁定
     LOCK TABLE table1 locktype,table2 locktype
     READ.被锁定的数据表对全体MYSQL用户可读,但不允许修改.
     READ LOCK.类似READ,不影响INSERT命令执行.
     WRITE.被锁的数据表允许当前用户进行读和写.其他用户不能读和写和修改.
     LOW PRIORITY WRITE.类似于WRITE,但在它等待其他READ LOCK 和WRITE LOCK 全部结束的期间,允许其他用户先施加一个新的READ LOCK.
    
     解锁命令UNLOCK TABLE[S]
    
     不要对InnoDB数据表使用LOCK 和 UNLOCK.
    
     最好不要使用LOCK/UNLOCK 命令而使用GET_LOCK 和RELEASE_LOCK
     GET_LOCK(name,time) 持续锁的时间
     RELEASE_LOCK(name) 释放名为name的锁
     这个两个函数的锁其实与数据表无关,事实上在某个进程用GET_LOCK函数和给定义了一把锁之后,其他进程就不能再获取得一把与之同名的锁,第二个进程会在调用GET_LOCK函数时被阻塞并一直等待第一个进程锁释放.
    
   22事务
     特性:原子性,稳定性,隔离性,可靠性
     START TRANSACTION BEGIN 开启一个事务,COMMIT 或 ROLLBACK结束一个事务
     InnoDB数据表不允许以嵌套方式使用事务.
     自动提交模式可以用SET AUTOCOMMIT=0 命令关闭
    
   23.死锁
      innodb\_lock\_wait\_timeout = n 来设置死锁等待时间
     
访问权限与信息安全
     1.通过STATUS命令,查看当前设置的连接协议.允许使用的协议有tcp,socket,pipe,memory.
       mysql -u root -p --protocol=tcp
    
     2.用户名最多可以有16个字符,并且区分字母大小写.密码区分字母大小写,可以是任意字长.
    
     3.使用SQL,操作权限
       SELECT user,host,password FROM user ---查看用户信息
      
       UPDATE user SET password = PASSWORD('abc') WHERE USER = 'root'  ---设置密码
      
       UPDATE user SET user='myroot' WHERE user = 'root'  ---修改用户名
      
       如果host的值为%,表示任意主机都可以访问
       %.sol只允许本地的网络的主机访问
      
       利用SQL修改相关权限以后,利用FLUSH PRIVILEGES 刷新内存.
    
     4.GRANT
      
       GRANT ALL ON forum.* TO forumadmin@localhost IDENTIFIED BY '123'
       创建新用户forumadmin密码为123,让它具有forum数据库所有表的所有权限.
      
       GRANT select,insert,update,delete on forum.* to forumuser.localhost
      
       设置相关权限给forumuser用户
      
     5.忘记root密码处理
       在my.ini文件的 [mysqld] 部份输入 skip_grant_tables,重启mysql,再更改root 密码,再删除skip_grant_tables选项
      
     6.GRANT OPTION 权限表示MySQL用户可以分配访问权限.
    
     7.mysql 管理的访问权限是依靠数据库来实现的,名字是mysql.
    
     8.GRANT privileges ON [database.]table or database.spname TO user@host [IDENTIFIED BY 'password']
       REVOKE privileges ON [database.]table or database.spname FORM user@host
      
     9.授予访问单个数据列的权利
       GRANT SELECT(title,subtitle) on mylibary.books TO kathrine@localhost
      
     10.对所有本地用户授予访问数据库的权利
        GRANT select,insert,delete updata on mp3.* to ''@localhost
       
     11.查看用户权限
        SHOW GRANT FOR peter@localhost
       
     12.在my.ini文件中的[mysqld]组中增加skip-networking 选项禁MySQL服务器的网络功能会更安全.
    
     存储过程和触发器
    
     1.存储过程优点:1.更快的速度2.避免代码冗余3.提高数据库安全性.
    
     2.MySQL把SP集中存放在mysql.proc数据表里
    
     3.CREATE FUNCTION name ([paramterlist]) RETURNS datatype [options] sqlcode
       CREATE PROCEDURE name ([paramterlist]) [options] sqlcode
      
     4.DROP FUNCTION [IF EXISTS] name
       DROP PROCEDURE [IF EXISTS] name
      
     5.SHOW PROCEDURE STATUS 或 SHOW FUNCTION STATUS 命令将返回一份现有的过程和函数的清单.
    
     6.查看SP的代码 SHOW CREATE PROCEDURE name 或 SHOW CREATE FUNCTION name
    
     7.基本语法规则
       SP内部使用的局部变量和局部参数不加'@'前缀,在SP内允许使用普通的SQL变量,但它们加'@'前缀.
      
     8.SP定义和调用均不区分大小写,一个函数可以和一个过程同名.
    
     9.调用过程 CALL
    
     10.[IN or OUT or INOUT] 关键字IN,OUT,INOUT用来区分有关参数的用途是仅限于输入数据,输出数据,输入输出数据均可 
    
     11.命令的封装
        由一条以一的SQL命令构成的函数或过程必须以关键字BEGIN开头,以END结束.
        给一个BEGIN-END块加上标号的目的一般是为了使用LEAVE命令提前退出这个语句.
        blockname:BEGIN
            commands;
            IF condition THEN LEAVE blockname;END IF;
            further commands;
       END blockname;
      
     12.变量声明必须发生在BEGIN--END 语句块里,而且必须发生同一个BEGIN--END语句里其他命令之前.
         DECLARE valname1,valname2,......datatype [DEFAULT value];
        如果没有关键字DEFAULT另行设定,局部变量的初始值将是NULL.
        变量的作用域在不同的BEGIN--END块中.
   
     13.变量赋值
        SET val1= value1,val2= value2...
        SELECT var:=value
        SELECT 2*1 INTO var
        SELECT COUNT(*) FROM table WHERE condition INTO var
        SELECT title,subtitle FORM titles WHERE condition INTO mytitile,mysubtitle
     14.分支
        IF condition THEN
           commands;
        [ELSE IF condition THEN
           commands;
        ]   
        [ELSE
           commands;
        ]
        END IF;
       
        CASE分支
        CASE expression
          WHEN value1 THEN
             commands;
          [WHEN value2 THEN
             commands;
          ]
          [ELSE
             commands;]
         END CASE;
     
     
      15.循环
         1.REPEAT-UNTIL循环,在这个循环结构里,关键字REPEAT和UNTIL之间的语句将一直循环到给定条件第一次得到满足为止. 因为
          对条件表达式的救值发生在每次循环的末尾,所以整个循环至少会执行一次.
          [loopname:]REPEAT
            commands;
          UNTIL conditon
          END REPEAT [loopname];
         
         
          2.WHILE 循环
            [loopname:]WHILE condition DO
               commands;
            END WHILE [loopname];
           
          3.LOOP 循环
            在LOOP 和 END LOOP 之间的语句将一直循环到遇见一条LEAVE loopname 命令并因此而退出整个循环为止.
            loopname:LOOP
             commands;
             IF condition THEN LEAVE loopname: END IF;
            END LOOP loopname;
           
       16.LEAVE和ITEAR
          LEAVE loopname 命令将使程序的执行流程跳出一个循环.
          ITEAR loopname 命令的效果是把循环体里的命令再执行一遍.
         
       17.出错处理
          DECLARE type HANDLER FOR conition1,conition2..
         
       18.光标
           DECLARE cursorname CURSOR FOR SELECT ...声明光标.
           open cursorname 启用光标.
           FETCH cursorname INTO var1,var2....命令去遍历SELECT结果数据表里的数据通信;
           CLOSE cursorname 命令关闭光标.
           光标不足.
            光标是只读的确.
            光标只能前进.
            光标是敏感的.读取光标数据同时,所涉及到数据都不允许发生改变.
           
       19.触发器
           命令 CREATE TRIGGER
           OLD.columnname返回一条现有记录在被修改或删除之前的内容(UPDAE,DELETE)
           NEW.columnname返回一条新记录或被修改记录的新内容.
           在BEFORE INSERT 触发器和BEFORE UPDATE触发器里,可以改动NEW.columnname的内容数据.
           CREATE TRIGGER test_before_insert
             BEFORE INSERT ON test FOR EACH ROW
           BEGIN
              commands;
           END;
          
    管理与服务器配置
      1.设置默认的数据格式default-storage-engine=INNODB
     
      2.备份
        mysqldump命令,
        直接复制整个数据库目录,
        把日志文件和定期制作的增量备份文件相结合,
        利用镜像机制进行备份
        InnoDB Hot Backup工具
       
      3.日志
         二进制日志由配置文件里的log-bin选项启用.
         SET SQL_LOG_BIN=0 暂时停止日志功能
         SET SQL_LOG_BIN=1 启用日志功能
         log-error 错误日志启用
         log-slow-queries 慢查询日志
        
      4.镜像
          "主-从"镜像关系中的数据同步是通过主控系统的二进制日志文件实现的.
          创建镜像用户
          GRANT REPLICATION SlAVE ON *.* TO replicuser@savlehostname IDENTIFIED BY 'xxx'
     
      5.优化表
       ANALYZE TABLE . 提供关于索引内部管理状况的信息.
       CHECK TABLE. 检查数据表文件是否完好无损.
       OPTIMIZE TABLE.对数据表存储空间使用情况进行优化.
       REPAIR TABLE .尝试修复受损的数据表.
       压缩MyISAM数据表
     
      6.日志
        innodb_buffer_pool_size 选项大概是对InnoDB数据表驱动程序速度最有影响的选项.
        innodb_flush_method=O_DSYNS 加快InnoDB日志功能.
       
      7.优化内存
         key_buffer_size:索引缓冲区的长度.
         table_cache:同时打开数据表的个数.
         sort_buffer:排序缓冲区的长度.
         read_buffer_size:需要为每个线程保留多少内存供它从数据表读取连续排列的数据使用.
         read_rnd_buffer_size:与read_buffer_size选项作用类似.
         bulk_insert_buffer_size:一次插入多条记录的INSERT命令.
         join_buffer_size:索引可用的JOIN操作分配的缓冲区的长度
         tmp_table_size:HEAP类型临时表的最大长度.
         max_connections:同时打开的数据库连接的最大个数.
         show variables like '%size%' 查看更多设置
         
     
     
     
     
     
     
  
  
  
  
  
  
  
  

  
1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics