PHP学习mysql课件 高级篇

 更新时间:2008年06月15日 13:09:25   作者:  
MySQL数据库管理 数据库的启动与关闭,安全、访问控制和权限,数据库的备份与恢复,导入和导出记录

授予用户特定的权限:
  使用grant语句添加一个可以从本地机连接的MySQL服务器的用户user1,并且只授予其针对sales数据库中employee表的select和insert权限。
  mysql> grant select,insert on sales.employee to user1@localhost identified by ‘user1pass';
  说明:使用:# mysql –u user1 –puser1pass 登录数据库以后可以做如下操作:
  mysql> use sales;    //打开sales数据库
  mysql> show tables;    //只能看到employee表
  mysql> select * from employee;    //可进行查看操作
  mysql> insert into employee …….  //可进行插入操作。

撤销用户权限:
语法:REVOKE priv_type[(column_list)][,priv_type[(column_list)]…]
    ON {*.* | * | db_name.* | db_name.tbl_name | db_name}
    FROM user_name [,user_name…]
  例如:撤消用户user1针对sales数据库中employee表的insert权限:
    mysql> revoke insert on sales.employee from user1@localhost;
    //返回如下信息,表明权限撤销成功。
    Query OK, 0 row in set affected (0.00 sec)
```````````````````````````````````````````````````````````````````````````````````````````
    权限更改何时生效
当mysqld启动时,所有的授权表内容被读进存储器并且从那点生效。 
用GRANT、REVOKE或SET PASSWORD对授权表施行的修改会立即被服务器注意到。 
如果你手工地修改授权表(使用INSERT、UPDATE等等),你应该执行一个FLUSH PRIVILEGES语句或运行mysqladmin flush-privileges告诉服务器再装载授权表,否则你的改变将不生效,除非你重启服务器。 

    权限更改的影响
当服务器注意到授权表被改变了时,现存的客户连接有如下影响: 
表和列权限在客户的下一次请求时生效。 
数据库权限改变在下一个USE db_name命令生效。 
全局权限的改变和口令改变在下一次客户连接时生效。 

    数据库的备份与恢复
1、数据库的备份:
A、用mysqldump备份数据库:
  语法: mysqldump [OPTIONS] database [table]
实例:
  将数据库sales备份成sales_bak030630.sql文件。
  # mysqldump –u root –p  --opt sales > sales_bak030630.sql
  //返回如下信息,表明备份成功
  -rw-r--r-- 1 root root  2296 Jun 29 23:30 sales_bak030630.sql

B、用直接拷贝的方法备份数据库:
不用mysqldump 来备份数据库或表的另一种方法是直接拷贝表文件。通常可利用像cp、tar 或cpio 这样的实用程序来进行。当使用直接拷贝备份( direct-copy backup)方法时,必须确保没有使用这些表。如果在拷贝一个表的同时服务器正在修改它,则拷贝无效。

    确保拷贝完整性的最好方法是关闭服务器,拷贝文件,然后重新启动服务器。


2、数据库的恢复:
数据库系统出现崩溃时,应该使用最近的一次备份对数据库进行恢复,如果启用了更新日志,还需要重新执行更新日志中最近一次备份之后对数据库进行修改的任何查询,以尽可能将数据恢复到崩溃时刻所处的状态。
    # mysql –u root –p sales < sales_bak030630.sql

    优化表
在大多数情况下,优化表的做法很值得。当一个表被多次修改,那它的结构将很快变得支离破碎,其结果是导致性能的下降。这个时候可以使用OPTIMIZE   TABLE 命令来刷新,清理出空间。
mysql>OPTIMIZE  TABLE   tablename;

    导入和导出记录
INSERT语句不是向表中插入记录的唯一方法,MySQL还允许使用LOAD  DATA  INFILE  命令一次性插入多条记录。这个命令可以从文本文件读出原始数据(该文件可以放置在连接服务器上或者客户端),在列和行界定符号的基础上进行分析,然后自动产生INSERT 语句来向一个表写数据。


    导入数据
默认情况下,MySQL认为数据文件是在服务器上,在LOAD DATA INFILE 语句中指定位置。
如果想要使用客户机上的数据,可以在语句中添加LOCAl关键字,告诉MySQL在客户机的文件系统上查找文件。
mysql>LOAD  DATA  LOCAL  INFILE  ‘c:\\data.txt' 
  INTO  TABLE user  
  FIELDS TERMINATED  BY  ‘,'  LINES  TERMINATED  BY  ‘\n';

最好在此之前加上如下命令
mysql>LOAD  DATA  LOW_PRIORITY  INFILE  ‘data.txt'  INTO  TABLE  user;
当然还有IGNORE    REPLACE等关键字。

    导出数据
如果不指定一个FIELDS子句,缺省值与这样写的相同: 
  FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' 
如果不指定一个LINES子句,缺省值与这样写的相同: 
  LINES TERMINATED BY '\n' 
  换句话说,缺省值导致读取输入时,LOAD DATA INFILE表现如下: 
在换行符处寻找行边界 
在定位符处将行分成字段 
不要期望字段由任何引号字符封装 
将由“\”开头的定位符、换行符或“\”解释成字段值的部分字面字符 

    导出数据
相反,缺省值导致在写入输出时,SELECT ... INTO OUTFILE表现如下: 
在字段之间写定位符 
不用任何引号字符封装字段 
使用“\”转义出现在字段中的定位符、换行符或“\”字符 
在行尾处写换行符 
注意,为了写入FIELDS ESCAPED BY '\\',对作为一条单个的反斜线被读取的值,你必须指定2条反斜线值。
php_mysql_高级.rar

相关文章

最新评论