2019-01-22学习数据库小记

昨天的补充:

在将数据文件导入数据库之前,要先将其复制到该安全路径;

若导入的是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 值的表达式部分的值一般为 10;

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模式时,不能使用=!=;而应使用LIKENOT 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提供的模式匹配的其它类型是使用扩展正则表达式。

使用REGEXPNOT REGEXP操作符(或RLIKENOT 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;//按种类和性别组合分类的动物数量

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值