MySQL命令:
mysql –h localhost –u root –p
quit
select version()
select current_date
select version(), current_date
select sin(pi()/2)
select now()
select user()
show databases
grant all on database.* to ‘username’@’localhost’
use database
show tables
create table …
alter table …
describe table
load data方法:
创建一个文本文件,每个条目一行,用tab分开,各个列与create table中的列次序相对应,不知道的值为NULL用\N代替。
LOAD DATA LOCAL INFILE ‘/path/filename.txt’ INTO TABLE table_name;
注意windows中\r\n做为行的结束符因此应该使用
LOAD DATA LOCAL INFILE ‘/path/filename.txt’ INTO TABLE table_name LINES TERMINATED BY ‘\r\n’;
如果想一次增加一条新的记录使用INSERT语句
SELECT what_to_select
FROM which_table
WHERE conditions_to_satisfy;
SELECT * FROM table
UPDATE table SET …
SELECT DISTINCT column FROM table WHERE …
ORDER BY column
强制执行区分大小写ORDER BY BINARY column
ORDER BY column DESC/ASC
可以按照不同的方向对不同的列进行排序:
SELECT name, species, birth FROM pet ORDER BY species, birth DESC;
即按照species升序,按照birth降序
MySQL提供了丰富的日期处理函数:
MySQL提供几个日期部分的提取函数:YEAR(), MONTH(), DAYOFMONTH()
NULL需要使用IS NULL或者IS NOT NULL来判断
MySQL中的模式匹配:
<!--[if !supportLists]-->1. <!--[endif]-->标准的SQL模式匹配,不能使用=或!=,而应该使用LIKE或NOT LIKE
“_”匹配任何单个字符,”%”匹配任意数目的字符(包含零字符)
默认情况是不区分大小写
<!--[if !supportLists]-->2. <!--[endif]-->同时MySQL提供扩展的正则表达式匹配的格式
使用REGEXP和NOT REGEXP(或者叫做RLIKE和NOT RLIKE)
扩展的字符有:
. 匹配单个字符;
[…]匹配方括号内的任何字符,如[abc]
[a-z], [0-9]
*匹配0个或多个在它前面的字符,如x*
.*匹配任何数量的任何字符
同时可以定位一个模式必须匹配被匹配字符串的开始或结尾,可以在模式开始使用”^”结尾使用”$”
SELECT * FROM pet WHERE name REGEXP '^b';
寻找b开头的名字
模式匹配,使用SQL简单正规表达式比较。返回1 (TRUE) 或 0 (FALSE)。 若 expr 或 pat 中任何一个为 NULL,则结果为 NULL。
模式不需要为文字字符串。例如,可以被指定为一个字符串表达式或表列。
在模式中可以同LIKE一起使用以下两种通配符:
字符 |
说明 |
% |
匹配任何数目的字符,甚至包括零字符 |
_ |
只能匹配一种字符 |
mysql> SELECT 'David!' LIKE 'David_';
-> 1
mysql> SELECT 'David!' LIKE '%D%v%';
-> 1
若要对通配符的文字实例进行检验, 可将转义字符放在该字符前面。如果没有指定 ESCAPE字符, 则假设为‘\’。
字符串 |
说明 |
\% |
匹配一个 ‘%’字符 |
\_ |
匹配一个 ‘_’ 字符 |
mysql> SELECT 'David!' LIKE 'David\_';
-> 0
mysql> SELECT 'David_' LIKE 'David\_';
-> 1
要指定一个不同的转义字符,可使用ESCAPE语句:
mysql> SELECT 'David_' LIKE 'David|_' ESCAPE '|';
-> 1
转义序列可以为空,也可以是一个字符的长度。 从 MySQL <chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on">5.1.2</chsdate>开始, 如若 NO_BACKSLASH_ESCAPES SQL模式被激活, 则该序列不能为空。
以下两个语句举例说明了字符串比较不区分大小写,除非其中一个操作数为二进制字符串:
mysql> SELECT 'abc' LIKE 'ABC';
-> 1
mysql> SELECT 'abc' LIKE BINARY 'ABC';
-> 0
在MySQL中, LIKE 允许出现在数字表达式中。 (这是标准SQL LIKE 的延伸)。
mysql> SELECT 10 LIKE '1%';
-> 1
注释: 由于 MySQL在字符串中使用 C转义语法(例如, 用‘\n’代表一个换行字符),在LIKE字符串中,必须将用到的‘\’双写。例如, 若要查找 ‘\n’, 必须将其写成 ‘\\n’。而若要查找 ‘\’, 则必须将其写成 it as ‘\\\\’;原因是反斜线符号会被语法分析程序剥离一次,在进行模式匹配时,又会被剥离一次,最后会剩下一个反斜线符号接受匹配。
这相当于 NOT (expr LIKE pat [ESCAPE 'escape-char'])。
计数行
SELECT COUNT(*) …
和GROUP BY结合使用
查询多个表:
单个表的自连接;
多个表之间的连接;
批处理模式下使用MySQL:
Mysql <batch-file
其中batch-file即是要运行的脚本文件
如果想分页显示使用mysql <batch-file|more, 或者将结果输出到mysql <batch-file>mysql.out
MySQL一些查询的例子:
列的最大值MAX等,参看MySQL Tutorial.
用户变量:
可以先在用户变量中保存值然后在以后引用它;这样可以将值从一个语句传递到另一个语句。用户变量与连接有关。也就是说,一个客户端定义的变量不能被其它客户端看到或使用。当客户端退出时,该客户端连接的所有变量将自动释放。
使用用户变量的例子,
SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop;
mysql> SELECT * FROM shop WHERE price=@min_price OR price=@max_price;
可以使用LAST_INSERT_ID()函数获取插入新的记录的ID号
INSERT INTO person VALUES (NULL, 'Antonio Paz');
SELECT @last := LAST_INSERT_ID();
INSERT INTO shirt VALUES
(NULL, 'polo', 'blue', @last),
(NULL, 'dress', 'white', @last),
(NULL, 't-shirt', 'blue', @last);
或者使用mysql_insert_id()的MySQL API函数获取新插入记录的ID
一个比较灵活的例子是寻找两个通过OR组合到一起的关键字:
SELECT field1_index, field2_index FROM test_table
WHERE field1_index = '1' OR field2_index = '1'
该情形是已经优化过的。参见7.2.6节,“索引合并优化”。
还可以使用UNION将两个单独的SELECT语句的输出合成到一起来更有效地解决该问题。参见13.2.7.2节,“UNION语法
”。
每个SELECT只搜索一个关键字,可以进行优化:
SELECT field1_index, field2_index
FROM test_table WHERE field1_index = '1'
<place w:st="on"><span lang="EN-US" style='font-size: 10.5pt; font-family: "Times New Roman";'>UNION</span></place>
SELECT field1_index, field2_index
FROM test_table WHERE field2_index = '1';
更多的参考资料:
MySQL参考手册
MySQL教程
MySQL正则表达式