您的位置:首页 > 数据库 > MySQL

MySQL常用知识

2005-12-07 11:39 302 查看
命令行装载
mysql -h site -u uid -p <filename
Load命令:文本文件,每条记录一行,字段用制表符分隔,用/N表示null
LOAD DATA LOCAL INFILE 'books.dat' INTO TABLE BOOK;
如果以逗号分隔
load data local infile 'books.dat' into table book fields terminated by ',';
从数据库复制到文件
select * into outfile 'books.dat' fields terminated by ',' from book;
转义符:
insert into tba(desc,location) values('stacie/'s Directory','c://personal//statice');
mysql查找配置文件的顺序
linux中
1)在/etc/my.cnf文件中
2)在datadir/my.cnf文件中
3)通过--defaults-extra-file=filename命令行选项指定的位置
windows中
1)winnt/system32/my.ini
2)c:/my.cnf
3)c:/mysql/data/my.cnf
4)--default-extra-file=filename
mysql将日志文件写作数据目录下
mysqldump产生SQL脚本
mysqldump --opt test > /usr/backups/testdb
mysqldump --help
检查表:检查表时确定mysql服务器没有运行
myisamchk和mysqlcheck只用于.MYI文件,isamchk用于.ISM文件
mysqlcheck appfuse person
mysqlcheck --extend appfuse person
修复表
mysqlcheck --repair appfuse person
Explain select生产查询计划
explain select first_name from person where id=2;
安全
mysqladmin -u root password '2@da#:k?'
grant语句添加新的用户并授予他们访问mysql对象的首选方法
使用grant语句时,任何不存在的用户都会被创建
grant select on book to andy identified by 'password';
grant all on library.* to andy,tim;
mysql在初始连接时,会察看user表以决定是否允许用户连接
mysql> select host,user from user;
+-----------+------+
| host | user |
+-----------+------+
| % | test |
| localhost | |
| localhost | root |
| localhost | test |
+-----------+------+
host和user是联合主键,MySQL通过用于连接MySQL的用户名和从其上连接的主机名来惟一的标示用户,从本地
机器连接的用户randy不同于从www.mysql.com连接的用户randy.
当用户试图连接MySQL时,用户向MySql发送用户名和口令,然后MySQL查看user表来确定用户是否可以连接,试图

连接的用户必须匹配User和Host值。
MySQl匹配时,首先考虑精确匹配,然后是混合值,然后是完全的通配符,最后考虑空User值

·在查询执行时,MySQL首先查看User标中用户连接时匹配的行,该行包含用户的全局特权,换句话说,如果用户

在User表中指定的特权上有一个‘Y’值,就不再进行下一步的检查。

·一旦运行客户连接,MySQL就为每个查询所执行的SQL语句进行安全检查,这些安全检查需要所有的安全表。这

些表依次是db:与每个数据库权限有关的特权;host:管理基于位置的特权;tables_priv:表级特权;

columns_priv:列级特权。这些表提供了对MySQL数据库特定资源的访问权限。MySQL会在两个事件发生时查看这些

表,即处事连接和执行任何语句时。

·db表存放数据库级别的特权,执行语句时,MySQL查找db表中User、Host和Db字段的精确匹配,如果没有精确匹

配时,它将搜索User和Db的完全匹配,但对于Host字段时“%”的行,则将在host表中查找匹配的值。

·host表是db表的扩展,它为发出的查询的主机提供默认的数据库访问特权,以确定是否允许用户的语句执行。

·如果查找完db和host表后,仍然没有找到肯定的权限,在如果执行语句的对象是数据库,或者操作时DROP,那

那么MySQL将拒绝该操作;如果查询目标是表或列,那么MySQL将检查tables_priv表。

·安全检查采用“明确优先”的规则,如果找到了一个匹配值,而且确认才特权的值是肯定的,那么操作就被允

许,如果特权值是否定的,MySQL将检查后续的安全表。

·遗忘口令恢复特权步骤
/etc/rc.d/init.d/MySQL stop

ps ax |grep MySQL
kill 2498
重新启动MySQL,绕过授权表
safe_mysqld --skip-grant-tables
确定可以访问数据库
mysql mysql
mysql>quit
指派新的口令
mysqladmin -u root password '2@da#:k?'
·只有当某列被用于where子句时,才能享受到索引带来的性能提升的好处。
尽量为所有where子句中被引用的列建立索引。
尽可能的使用唯一索引
如果在where子句中队某列使用了函数,那么将不会使用到该列的索引
如:select * from employee wehre left(name,6)='foobar'
MySQL同时使用名字和客户端主机来标示用户,换句话说,从www.imaginary.com连接和从www.mysql.com连接将是

不同的用户。如果没有指定位置,则指的是@"%"。
指定用户时,通过@符号分隔用户名和主机名
gerge@www.imaginary.com
用户名不区分大小写
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: