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-privileges或mysqladmin 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-privileges或mysqladmin reload命令让它重新读取表

浙公网安备 33010602011771号