MySQL--從零開始(1)

轉義字符: \ 反斜线

GRANT ALL ON menagerie.* TO 'your_mysql_name'@'your_client_host';

CREATE DATABASE menagerie;

USE menagerie

mysql -h host -u user -p menagerie : menagerie是你的 密码。如果你想要在命令行上在-p选项后提供 密码,则不能插入空格(例如,如-pmypassword,不是-p mypassword)。

SHOW TABLES;

DESCRIBE pet; --描述表結構

插入表資料:

mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;

请注意如果用Windows中的编辑器(使用\r\n做为行的结束符)创建文件,应使用:

mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet

    -> LINES TERMINATED BY '\r\n';

 

NULL值請使用\N(反斜线,字母N)

在字符类型列上可以使用BINARY强制执行区分大小写的分类功能,如:ORDER BY BINARY col_name.

比较MM-DD值的表达式部分的值一般为1或0,如:(RIGHT(CURDATE(),5)<RIGHT(birth,5))

查询使用death IS NOT NULL而非death != NULL,因为NULL是特殊的值,不能使用普通比较符来比较

mysql> SELECT name, birth FROM pet
    -> WHERE MONTH(birth) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH));
请注意在MySQL中,0或 NULL意味着假而其它值意味着真。布尔运算的默认真值是1。
在GROUP BY中,两个NULL值视为相同
执行ORDER BY时,如果运行 ORDER BY ... ASC,则NULL值出现在最前面,若运行ORDER BY ... DESC,则NULL值出现在最后面。
SQL模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符)。在 MySQL中,SQL的模式默认是忽略大小写的
进行模式匹配测试时,使用REGEXP和NOT REGEXP操作符
mysql> SELECT * FROM pet WHERE name REGEXP '^b'; --不區分大小寫
mysql> SELECT * FROM pet WHERE name REGEXP BINARY '^b'; --區分大小寫
mysql> SELECT * FROM pet WHERE name REGEXP 'w';
mysql> SELECT * FROM pet WHERE name REGEXP '^.{5}$';
 

如果表有索引,SHOW INDEX FROM tbl_name生成有关索引的信息。

mysql < batch-file > mysql.out
如果你想要在批模式中得到交互输出格式,使用mysql -t。为了回显以输出被执行的命令,使用mysql -vvv
你还可以使用源代码或 \.命令从mysql提示符运行脚本:
mysql> source filename;
mysql> \. Filename
 
安全:

o 通过SHOW GRANTS语句检查查看谁已经访问了什么。然后使用REVOKE语句删除不再需要的权限。

不要将纯文本密码保存到数据库中。如果你的计算机有安全危险,入侵者可以获得所有的密码并使用它们。相反,应使用MD5()、SHA1()或单向哈希函数。
不要从词典中选择密码
 

当mysqld启动时,所有授权表的内容被读进内存并且从此时生效。

当服务器注意到授权表被改变了时,现存的客户端连接有如下影响:

  • 表和列权限在客户端的下一次请求时生效。     
  • 数据库权限改变在下一个USE db_name命令生效。     

· 全局权限的改变和密码改变在下一次客户端连接时生效。

如果用GRANT、REVOKE或SET PASSWORD对授权表进行修改,服务器会注意到并立即重新将授权表载入内存。

如果你手动地修改授权表(使用INSERT、UPDATE或DELETE等等),你应该执行mysqladmin flush-privilegesmysqladmin reload告诉服务器再装载授权表,否则你的更改将不会生效,除非你重启服务

表名

列名

可能的设置元素

tables_priv

Table_priv

'Select',   'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References',   'Index', 'Alter'

tables_priv

Column_priv

'Select',   'Insert', 'Update', 'References'

columns_priv

Column_priv

'Select',   'Insert', 'Update', 'References'

procs_priv

Proc_priv

'Execute',   'Alter Routine', 'Grant'

服务器使用的授权表:

· user表范围列决定是否允许或拒绝到来的连接。对于允许的连接,user表授予的权限指出用户的全局(超级用户)权限。这些权限适用于服务器上的all数据库。

· db表范围列决定用户能从哪个主机存取哪个数据库。权限列决定允许哪个操作。授予的数据库级别的权限适用于数据库和它的表。

· 当你想要一个给定的db表行应用于若干主机时,db和host表一起使用。例如,如果你想要一个用户能在你的网络从若干主机使用一个数据库,在用户的db表行的Host值设为空值,然后将那些主机的每一个移入host表。释:host表不受GRANT和REVOKE语句的影响。大多数MySQL安装根本不需要使用该表。

· tables_priv和columns_priv表类似于db表,但是更精致:它们在表和列级应用而非在数据库级。授予表级别的权限适用于表和所有它的列。授予列级别的权限只适用于专用列。

· procs_priv表适用于保存的程序。授予程序级别的权限只适用于单个程序。

管理权限(例如RELOAD或SHUTDOWN等等)仅在user表中被指定。这是因为管理性操作是服务器本身的操作并且不是特定数据库,因此没有理由在其他授权表中列出这样的权限。事实上,只需要查询user表来决定你是否执行一个管理操作。

FILE权限也仅在user表中指定。它不是管理性权限,但你在服务器主机上读或写文件的能力与你正在存取的数据库无关。

mysqld服务器启动时,将授权表的内容读入到内存中。你可以通过FLUSH PRIVILEGES语句或执行mysqladmin flush-privilegesmysqladmin reload命令让它重新读取表

posted @ 2013-03-18 14:55  邪见  阅读(116)  评论(0)    收藏  举报