大数据预备课程之mysql基础
一、数据库
1、概念
a.主要分为两大类:关系型数据库和非关系型数据库
b.所谓的关系型数据库就是指基于二维表的关系模型,即行和列所建立的数据库。常用的关系型数据库有Orcale、 MySQL、PostgreSQL。
c.非关系型数据库就是指列式数据库。常用的非关系型数据库有HBase、Redis内存数据库、MongoDB文档数据 库。
d.此外还有图形数据库如Titan,时序数据库如influxdb。
二、mysql常用命令
2、启动相关
service mysqld start 启动
service mysqld stop 关闭
service mysqld restart 重启
mysql -uroot -p123456 -h127.0.0.1; ok
mysql -uroot -p123456; ok
mysql -u root -p123456 -h 127.0.0.1; ok
mysql -u root -p 123456 -h 127.0.0.1; ok
3、创建表之前的命令
show databases; 进入mysql数据库后使用该命令查看当前存在的子数据库
use rzdata; 使用rzdata子数据库进行操作(创建表之前最好使用该命令指定使用的子数据库)
create database salary; 创建一个名为salary的子数据库
show tables; 展示当前子数据库下存在的所有表
4、数据类型
整型 int 19
浮点型 float/double 8.1
字符型 char a
字符串型 varchar abc
时间类型 timestamp 2017-11-12 00:00:00
5、创建一张表
create table stuinfo(id int,
money double,
grade char(1),
city varchar(128),
time timestamp
)CHARSET=utf8;
如果在create和table之间加上temporary,则创建的是临时表
注意:1.char和varchar后括号内所跟数字代表该类型的数值的最大位数
2. CHARSET=utf8 表示将该表的默认字符集改为utf8,通常mysql的默认字符集为
latinl,若不更改mysql的默认字符集,则最好创建每张表时都以这种方式指定表 的默认字符集为utf8.
6、增删改查之增操作
a、insert into rzdata.stuinfo(id,money,grade,city,time)values(1,10.2,'a',‘长沙’,'2017-11-12 00:00:00');
数据库.表名 数据库不写也行
b、 insert into stuinfo values(1,10.2,'a',‘长沙’,'2017-11-12 00:00:00');
a等价于b
c、insert into stuinfo(id,money,grade,city)values(1,10.2,'a',‘长沙’,);
只插入四个列所对应的数据,则未插入的列系统自动不写,时间补位系统当前时间,其余补NULL 。
7、增删改查之删操作
drop table stuinfo; 该操作会删除stuinfo所有表数据和表结构
delete from stuinfo; 该操作会删除 stuinfo所有表数据
delete from stuinfo where id=1; 该操作会删除 stuinfo所有id=1的数据
8、增删改查之改操作
update stuinfo set grade='b'; 将stuinfo表所有行grade列的值改为b
update stuinfo set grade='b' where id =1; 将stuinfo表id=1的行grade列的值改为b
9、增删改查之查操作
select * from stuinfo; 查询stuinfo表所有行数据
select * from stuinfo where id =1; 查询stuinfo表id=1的行的数据
select id,money,grade from stuinfo ; 查询stuinfo表id、money、grade列的数据
10、排序order by
select * from stuinfo order by money; 查询stuinfo表按money默认顺序(一般为升序)排列
select * from stuinfo order by money asc; 查询stuinfo表按money升序排列
select * from stuinfo order by money desc; 查询stuinfo表按mone降序排列
select * from stuinfo limit 2; 查询stuinfo表只取前两行
11、聚合函数
a、count()函数 求满足条件的行的数量之和
b、sum()函数 求满足条件的行的对应列的列值之和
c、 avg()函数 求满足条件的行的对应列的列值的平均值
select city,count(*) from stuinfo group by city; 统计stuinfo表相同城市的人数
select city,sum(money) from stuinfo group by city; 求个stuinfo表各城市学生金钱总额
select city,avg(money) from stuinfo group by city; 求个stuinfo表各城市学生金钱平均值
select city,cast(avg(money)as decimal(10,2)) from stuinfo group by dept;
求个stuinfo表各城市学生金钱平均值,并保留两位小数
select city,sum(money) from stuinfo group by city having sum(money)>10;
求个stuinfo表学生金钱总额大于10的城市
上面这条数据实现的功能可用子查询来实现:
select * from (select city,sum(money) from stuinfo group by city) a where a.sum(money)>10;
第一个括号内成为子表,a为子表的别名
12、别名
select * from stuinfo b; 查询stuinfo表所有行数据,并给该表取别名为b
select id as i,city as c from stuinfo; 查询stuinfo表id列和city列的数据,并给该两列取别名为i和c
13、多表查询
a、A left join B on A.列名=B.列名 A表为主,B表匹配A表,匹配的打印,缺失补NULL,多余去掉
b、A right join B on A.列名=B.列名 B表为主,A表匹配B表,匹配的打印,缺失补NULL,多余去掉
c、A inner join B on A.列名=B.列名 内连接,慎用
a用的最多,c最少
select A.*,B.deptno,B.dname from emp left join B on A.deptno=B.deptno ;
14、修改默认字符集
vi /etc/my.cnf
在[client]最后一行添加:default-character-set=utf8
在[mysqld]最后一行添加:character-set-server=utf8
查看mysql默认字符集:show variables like '%like%';
15、复制表
create table t1 select * from stuinfo; 完全复制
create table t1 select id,money from stuinfo; 部分复制
16、修改表结构
alter table stuinfo change city City varchar(128); 括号内数字比原来的大
alter table stuinfo add address varchar(128); 增加address列
17、表重命名
rename table old_name to new_name;
18、mysql用户管理
create user jepson identified by '123456'; 新增用户jepson,密码123456
set password for jepson =password('234567'); 将jepson用户密码修改为234567
19、权限管理
show grants for jepson; 查看jepson用户权限
grant select on ruoze_db.* to jepson; 将ruoze子数据库所有权限赋予jepson 用户
remove select on ruoze_db.* to jepson; 将ruoze子数据库所有权限赋予jepson 用户
grant all privileges on *.* to root@'%';
将所有子数据库所有权限赋予任何主机上登录的root用户
在mysql数据库的mysql子数据库中有一张user表,该表保存了所有mysql用户信息
select user,host,password from user; 查看user表用户密码登录主机等信息
update user set password=password('123456') where user='root';
将root用户密码改为123456
delete from user where user =''; 删除空用户