大数据开发之安装mysql


前言

由于Hive元数据存于关系数据库中,而且也用类似sql方式操作hdfs,也是为hive实验做铺垫


一、安装mysql数据库(我们安装Mysql分支–MariaDB)

(1)先用rpm -qa | grep mariadb命令查看MariaDB有没有安装,若没有安装用yum install mariadb-server命令安装。
(2)用systemctl status mariadb.service命令查看mysql服务有没有启动。
(3)启动服务:systemctl start mariadb.service
并设置为开机启动:systemctl enable mariadb.service
(4)通过mysql -uroot -proot登录,mysql根用户为root,默认密码为空,提示输入密码时,直接回车就可以登进去。
(5)利用set password for root@localhost=password(‘root’) 将密码修改为root,root用英文单引号引起来。
(6)退出(exit)重新登录(mysql -uroot –p),检验密码是否生效。
(7)mysql提示符下查看字符集: show variables like ‘%character%’;
(8)为了避免数据库中汉字出现乱码,修改字符集(先exit退出) , sudo vim /etc/my.cnf
在 [mysqld]下增加两行:
character_set_server=utf8
init_connect=‘SET NAMES utf8’

请添加图片描述
(9)重启mysql服务,再次查看字符集,看(8)的修改是否生效。

二、熟悉mysql常用命令,包括sql命令

(1)systemctl start|status|restart|stop|enable|disable mariadb.service
start:启动服务
status:查看服务状态
restart:重启服务
stop:停止服务
enable:开机启动服务
disable:开机不启动服务
(2)登录mysql服务器
示例:mysql -h110.110.110.110 -uroot -pabc
-h后跟ip,如果登录本机则省略该参数。-u后跟用户名,-p后跟密码,中间都不需要空格。
(3)退出登录:exit
(4)修改密码
示例:set password for root@localhost=password(‘root’)
root为要修改密码的用户名,localhost为服务器地址,password函数里的新密码要引起来。
(5)数据库操作(命令都以分号结束,下同)

  1. 显示所有数据库:show databases;
  2. 显示某数据库下的表use dataname; //将该数据库设置 为当前数据库
    show tables;
  3. 建立数据库:create database 库名;
  4. drop database dbname;
  5. 数据库的备份与恢复
    ①备份某个数据库(备份文件格式为*.sql)
    在xshell窗口下输入命令:
    mysqldump -h(ip) -uroot -p(password) databasename > database.sql
    ②恢复某个数据库
    mysql -h(ip) -uroot -p(password) databasename < database.sql
    也可在mysql提示符下:
    use databasename;
    source database.sql
    ③备份所有数据库
    mysqldump --all-databases > all-databases.sql
    ④恢复所有数据库
    mysql -h(ip) -uroot -p(password) < all-databases.sql
    ⑤备份表
    mysqldump -h(ip) -uroot -p(password) databasename tablename > tablename.sql
    ⑥恢复表(操作前先把原来的表删除)
    mysql -h(ip) -uroot -p(password) databasename < tablename.sql
    mysql -u root -p --default-character-set=utf8 xiaocms<E:\xiaocms.sql
    (6)表操作
    创建表
    use dataname;
    create table teacher //建立表TEACHER
    (
    id int(3) auto_increment not null primary key,
    name char(10) not null,
    address varchar(50) default ‘深圳’,
    year date
    ); //建表结束
    注:在建表中
    ① 将ID设为长度为3的数字字段:int(3),并让它每个记录自动加一: auto_increment,
    并不能为空:not null,而且让它成为主字段primary key
    ②将NAME设为长度为10的字符字段
    ③将ADDRESS设为长度50的字符字段,而且缺省值为深圳。varchar和char有什么区别
    呢,只有等以后的文章再说了。
    ④将YEAR设为日期字段。
    如果你在mysql提示符键入上面的命令也可以,但不方便调试。 你可以将以上命令
    原样写入一个文本文件中假设为school.sql,然后复制到c:下,并在DOS状态键入以下命令:
    mysql -uroot -p密码 < c:\school.sql
    如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你
    只要将//的注释去掉即可使用)。
    查看表结构
    describe tablesname;
    或show create table tablesname;
    修改表结构
    为了改变列a,从INTEGER改为TINYINT NOT NULL(名字一样),
    并且改变列b,从CHAR(10)改为CHAR(20),同时重命名它,从b改为c:
    ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);
    增加一个新TIMESTAMP列,名为d:
    ALTER TABLE t2 ADD d TIMESTAMP;
    在列d上增加一个索引,并且使列a为主键:
    ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);
    删除列c:
    ALTER TABLE t2 DROP COLUMN c;
    增加一个新的AUTO_INCREMENT整数列,命名为c:
    ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT,ADD INDEX ©;
    注意,我们索引了c,因为AUTO_INCREMENT列必须被索引,并且另外我们声明c为NOT NULL,
    因为索引了的列不能是NULL
    表重命名
    alter table t1 rename t2
    删除表
    drop table tablename;
    添加记录
    insert into <表名>[(字段1,字段2。。)]
    values(常量1,常量2。。。)
    当字段列表是全部时可以省略:
    insert into <表名> values(常量1,常量2。。。)
    修改记录
    update <表名>
    set <字段1>=<表达式1>
    [, <字段2>=<表达式2> ]。。。
    [where<条件>]
    省略Where则更新表中全部记录。
    删除记录
    delete from <表名> [where<条件>]
    省略Where则删除全部记录.
    查询记录(详见查询专题)
    Select [all|distinct]
    <目标列1>[,<目标列2>] …
    from<表名1> [,<表名2>]…
    [where <条件表达式>]
    [group by <列名1>[having<条件表达式>]]
    [order by <列名2> [asc|desc] ]
    [limit startrecordno,recordnumber]
    (7)用户操作
    添加一个用户test1 密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令:

grant select,insert,update,delete on . to test1@“%” identified by “abc”;

增加一个用户test2密码为abc,让其只可以在localhost上登录,并可以对数据库test进行查询、插入、修改、删除的操作(localhost指本地主机,即mysql数据库所在的那台主机),这样用户即使知道test2的密码,也无法从internet上直接访问数据库,只能通过mysql主机上的web页来访问了。
grant select,insert,update,delete on test.* to test2@localhost identified by “abc”;

增加一个可以从任何地方连接服务器的一个完全的超级用户
grant all privileges on . to test3@“%” identified by ‘password’ with grant option;

删除授权
revoke select,insert,update,delete on test.* from test2@localhost ;
删除用户及权限
drop user 用户名@‘%’
drop user 用户名@localhost

三、命令专题

查询

1查询全体学生的学号和姓名。
select sno,sname from student

2查询全体学生的详细记录
Select * from student

3查询全体学生的姓名和出生年份
Select sname,2011-age from student
Select sname,2011-age as 出生年份 from student

4查询所有选修了课的学生学号。
Select distinct sno from sscore //distinct起去重的作用

5查询林学06-1班的学生信息。
Select * from student1 where bj=“林学06-1”; //注意是student1表

6查询年龄在20岁以下的学生信息。
select * from student where age<20

7查询年龄在20-23岁之间的学生信息。
select * from student where age between 20 and 23

8查询成绩有不及格的学生的学号。
select distinct sno from sscore where score<60

9查询姓张的学生的信息。
select * from student1 where xm like “张%”

10查询姓张的且名字为两个字的学生信息。
select * from student1 where xm like “张_”

11查询缺少成绩的学生的学号和课程号。
select * from sscore where score is null //is null代表score
字段没值

排序

12查询选修了0003号课程的学生的学号及其成绩,查询结果按分数降序排列。
select sno,score from sscore where cno=“0003” order by score desc

13查询全体学生情况,查询结果按专业班级降序排列,对同一专业的学生按学号升序排列。

统计
14查询学生总人数。
select count(*) from student1

15查询0003号课程的平均成绩,最高成绩。
select avg(score),max(score) from sscore where cno=“0003”

分类汇总

16查询各课程的选课人数。
Select cno,count(*) from sscore group by cno

17将课程平均成绩大于80分的课程号输出。
select cno,avg(score) from sscore group by cno having avg(score)>80

18查询各学生选修课程的门数。
select sno,count(*) from sscore group by sno

19将选修课程门数多于两门的学生学号、选课数目输出。
select sno,count() from sscore group by sno having count()>2

20查询各专业的学生人数。
select spe,count(*) from student group by spe

多表查询

21查询每个学生及其选修课的情况。
(1)查询结果包括学号,姓名,课程号,成绩。
select student.sno,sname,cno,score from student,sscore where student.sno=sscore.sno

(2)查询结果包括姓名,课程名,成绩。
select sname,cname,score from student,course,sscore where student.sno=sscore.sno and course.cno=sscore.cno

limit子句用法

22查询student1中前五名学生信息。
select * from student1 limit 0,5;

23查询student1中学号升序排列前五名学生信息。
select * from student1 order by xh limit 0,5

四、JAVA访问mysql

在eclipse下新建java工程jdbc,将mysql驱动jar包(见网盘mysql-connector-java-5.1.6-bin.jar)拷贝到工程下,并右击-buildpath-add to buildpath。
新建类Test1测试java程序更新表记录,新建类Test2测试查询记录。

Test1

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
 
public class Test1 {
    public static void main(String[] args) throws Exception {
        Class.forName("com.mysql.jdbc.Driver");// 加载驱动
        String url = "jdbc:mysql://localhost:3306/test"; // 连接字符串
        Connection con = DriverManager.getConnection(url, "root", "root");// 连接数据库
        // 执行语句1
        String sql1 = "insert into student1 values(?,?,?)";// 准备sql语句,?是占位符,内容待定
        PreparedStatement pst1 = con.prepareStatement(sql1);// 创建封装语句的对象
        pst1.setString(1, "20181234");// 给第1个占位符赋值
        pst1.setString(2, "张三");// 给第2个占位符赋值
        pst1.setString(3, "大数据");// 给第3个占位符赋值
        pst1.executeUpdate();// 执行sql语句1
        pst1.close();// 关闭语句对象,写到这执行一下,看记录是否添加到数据库中
        con.close();
    }
}

执行后,在xshell端验证

Test2

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
 
public class Test2 {
    public static void main(String[] args) throws Exception {
        Class.forName("com.mysql.jdbc.Driver");// 加载驱动
        String url = "jdbc:mysql://localhost:3306/test"; // 连接字符串
        Connection con = DriverManager.getConnection(url, "root", "root");// 连接数据库
        // 执行查询语句
        String sql2 = "select * from student1";// 准备sql语句
        PreparedStatement pst2 = con.prepareStatement(sql2);// 创建封装语句的对象
        ResultSet rs = pst2.executeQuery();// 查询结果返回到ResultSet中
        while (rs.next()) {// 利用循环输出ResultSet中的内容
            System.out.println(rs.getString(1) + "," + rs.getString(2) + "," + rs.getString(3));// 1,2,3分别代表第1,2,3列
        }
        rs.close();// 关闭结果集
        pst2.close();// 执行sql语句1
        con.close();// 关闭连接
 
    }
}
  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页
评论

打赏作者

Amfairy

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值