昨天的补充:
在将数据文件导入数据库之前,要先将其复制到该安全路径;
若导入的是sql文件,则用语句 source *.sql;
1、导出数据(该路径下不能有同名文件)
select 列1,列2,列3 into outfile '路径名' from 表名;
select name,age,dep into outflie into '/var/lib/mysql-files/out.txt' from employee;
2、备份
mysqldump -u root 数据库名 > 备份文件名;
mysqldump -u root 数据库名 表名 > 备份文件名;
3、恢复
mysql -u root 空数据库 < 备份的sql文件;
例:mysql -u root test < bak.sql;
4、mysql里的提示符(抄的)
mysql> | 准备好接受新命令 |
-> | 等待多行命令的下一行 |
'> | 等待以单引号开始的字符串 |
"> | 等待以双引号开始的字符串 |
`> | 等待以反斜点开始的识别符 |
/*> | 等待以 /* 开始的注释语句 |
5、SQL语句中的关键字是不区分大小写的,但是建议全部用大写(?);
6、创建一个表
CREATE TABLE emlpoyee (e_id INT(5),e_name VARCHAR(20),age INT(3));
7、插入新数据
INSERT INTO employee VALUES ('01100','Diane','34');
8、查询数据
SELECT * FROM pet WHERE species = 'dog' AND sex = 'f';
SELECT name, species, birth FROM pet WHERE species = 'dog' OR species = 'cat';
SELECT name, birth FROM pet ORDER BY birth DESC;
SELECT name, species, birth FROM pet ORDER BY species, birth DESC;
默认排序是升序,也就是最小的值排在第一。要想以降序排序,在你正在排序的列名旁边增加DESC
(降序 )关键字
注意DESC关键字仅适用于在它前面的列名(birth);不影响species列的排序顺序。
9、使用函数TIMESTAMPDIFF()可以
计算当前日期的年和出生日期之间的差也可以按照直接使用语句(YEAR(CURDATE())-YEAR(birth))
计算,其中函数CURDATE()
是计算当前的日期。如果当前日期的日历年比出生日期早,则减去一年。
SELECT name, birth, CURDATE(),
TIMESTAMPDIFF(YEAR,birth,CURDATE())
AS age
FROM pet ORDER BY name;
SELECT name, birth, CURDATE(),
(YEAR(CURDATE()) - YEAR(birth))
- (RIGHT(CURDATE(),5)<RIGHT(birth,5))
AS age
FROM pet ORDER BY age;
SELECT name, birth FROM pet WHERE MONTH(birth) = MOD(MONTH(CURDATE()), 12) + 1;
RIGHT()
提取日期最右面5个字符的 MM-DD
(月份和日期)部分。MM-DD
值的表达式部分的值一般为 1
或 0;
MySQL提供几个日期方面的提取函数,例如YEAR()
、MONTH()
和DAYOFMONTH()
。
10、关于NULL值
*不能使用算术比较操作符例如=
、<
或!=等。
*只能使用 1 IS NULL 或者 1 IS NOT NULL ,结果是1或者0;
*执行ORDER BY
语句排序时,如果运行ORDER BY ... ASC
,则NULL
值出现在最前面,若运行ORDER BY ... DESC
,则NULL
值出现在最后面。
有的字段是 NOT NULL约束,可以在该列内插入0
或空字符串,因为它们实际是NOT NULL
。
11、模式匹配
(1)SQL模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符)。
注意使用SQL模式时,不能使用=
或!=
;而应使用LIKE
或NOT LIKE
比较操作符。
SELECT * FROM employee WHERE name LIKE 'b%';//找出所有名字以b开头的数据
SELECT * FROM employee WHERE name LIKE '%w%';//要想找出包含“w”的名字:
SELECT * FROM employee WHERE name LIKE '_____';//要想找出正好包含5个字符的名字,使用“_”模式字符:
(2)MySQL提供的模式匹配的其它类型是使用扩展正则表达式。
使用REGEXP
和NOT REGEXP
操作符(或RLIKE
和NOT RLIKE
,它们是同义词)。
扩展正则表达式的一些字符是:
-
‘.’匹配任何单个的字符。
-
字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的范围,使用一个“-”。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。
-
“
*
”匹配零个或多个在它前面的东西。例如,“x*
”匹配任何数量的“x”字符,“[0-9]*
”匹配的任何数量的数字,而“.*
”匹配任何数量的任何东西。
*REGEXP
模式与被测试值的任何地方匹配,模式就匹配(这不同于LIKE
模式匹配,只有与整个值匹配,模式才匹配)。
*为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”。
*要实现强制查找小写 则在'^b'前面加上BINARY,
*为了找出包含正好5个字符的名字,使用“^”和“$”匹配名字的开始和结尾,和5个“.”实例在两者之间:
*可以使用“{n}”重复n次操作符,重写前面的查询:
SELECT * FROM pet WHERE name REGEXP '^b';//名字以b或B开头的数据
SELECT * FROM pet WHERE name REGEXP BINARY '^b';//名字以b开头的数据
SELECT * FROM pet WHERE name REGEXP 'fy$';//名字以fy结尾的数据
SELECT * FROM pet WHERE name REGEXP '^.....$';//查找只有5个字符的名字
SELECT * FROM pet WHERE name REGEXP '^.{5}$';
SELECT * FROM pet WHERE name REGEXP 'w';//查找名字包含w的数据
12、计算行数
SELECT COUNT(*) FROM employee;//有多少职员
SELECT dep,COUNT(*) FROM employee GROUP BY dep;//每个部门有多少人
SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;//按种类和性别组合分类的动物数量