MySql数据库学习

一、mysql安装与卸载:

       安装步骤网上都有步骤或者教程。注意以下几点:

      选择典型安装

      MySql Server默认位置为: c:\program files\mysql目录

      Server Data File数据文件默认位置为: C:\Documents and Settings\All Users\Application Data\MySQL 目录

      配置mysql默认字符集(my.ini ----mysql的配置文件)

              默认latin1字符集,改为utf8

    测试是否安装成功

    运行cmd,输入命令:mysql -u root -p 回车 输入密码,如果出现 mysql> 则安装成功。

    注意:

     mysql服务器要先启动。

     在运行中输入  service.msc

     查找到mysql服务,如果未启动,启动即可。

      卸载:在控制面板中卸载就行,卸载完成后将数据文件删除,即my.ini文件和datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"下文件

二、重置root密码

      1)停止mysql服务器,运行输入services.msc,停止mysql服务

      2)在cmd下输入mysqld --skip-grant-tables 启动服务器 光标不动 (不要关闭该窗口)

      3)新打开cmd输入mysql -u root -p  不需要密码

   use mysql;

   update user set password=password('abc')  WHERE User ='root';

       4)关闭两个cmd窗口,在任务管理器结束mysqld进程

       5)在服务管理页面,重启mysql服务,密码修改完成。

三、数据库创建与操作

      mysql数据库是以database为单位

      oracle数据库是以用户为单位。

      1、创建数据库

            格式:  create database 数据库名称;                         

           create database db_mysql;

            格式:  create database 数据库名称 character set 字符编码 collate 校验规则。         

          create database db_mysql character set utf8 collate utf8_general_ci;

       2、显示数据库

                   show databases; 显示所有数据库

                   show create database 数据库名称;显示创建数据库

        3、删除数据库

                     drop database 数据库名;

         4、修改数据库

                     alter database 数据库名称  character set 字符编码 collate 校验;          

         alter database mydb character set gbk collate gbk_chinese_ci;

          5、切换数据库

                     use 数据库名称;     

         use db_mysql;

          6、查看当前使用的数据库       

         select database();

          查看服务器中的数据库,并把其中某一个库的字符集修改为utf8;

        show databases; 
        alter database mydb character set utf8;

四、数据库表创建与操作

        首先需要切换到要使用的数据库中。

        use 数据库名;

        1、创建表

              create table 表明(

                         字段 类型,

                          字段 类型,

                        ...................

               ) character set 字符编码 collate 校验;

           在mysql数据库中的数据类型

           

java数据类型mysql数据类型
byteTINYINT
shortSMALLINT
intINT
longBIGINT
booleanBOOLEAN  BIT
floatFLOAT
doubleDOUBLE
charvarchar或者char,char定长,varchar不定长
Stringvarchar或者char,char定长,varchar不定长
java.sql.DateDATETIME---包含了日期与时间(年月日小时分钟秒)
java.sql.TimeDATE(年月日)
java.sql.TimeStampTIME(小时,分钟,秒)
大数据:大文本(clob),大二进制(blob)TIMESTAMP(毫秒值)
  

java中java.util.Date与java.sql.Date转换 

private java.util.Date uDate = new Date();
	private java.sql.Date sDate = new java.sql.Date(100);
	@Test
	public void sqlDateUtilDate(){
	    java.util.Date utilDate = new java.util.Date(sDate.getTime());
	    System.out.println(utilDate.getClass());
	    java.sql.Date sqlDate = new java.sql.Date(uDate.getTime());
	    System.out.println(sqlDate.getClass());
	}
 查看当前数据下的表:

   show tables;

  查看表结构

       desc 表名;

     例子:

      创建员工表

create table employee(
	id int primary key auto_increment, --定义id为主键
	eid int unique ,   --员工编号  
	name varchar(20) not null,
	gender varchar(10),
	birthday datetime,
	entry_date datetime,
	job varchar(20),
	salary float,
	resume  text						
);
2、约束

      数据库中一种有6个约束

      主键:唯一不为空。在表中设计主键时,一般没有任何意义,就是用来标识。

                  一般会对主键自增,

                 mysql 使用 auto_increment,sqlserver使用identity(1,1),oracle使用sequence。

        非空约束:not null

         唯一约束:unique

 3、表结构的修改

       alter table 表名;

        1.add(添加列)

              alter table 表名 add 列名 类型;

         2.modify(修改) --修改列的类型

               alter table 表名 modify 列名 类型

          3.drop (删除列)

                alter table 表名 drop 列名 

          4.修改表名

              rename table 旧表名 to 新表名

          5.修改表的字符集

               alter table 表名  character set 字符集

           6.查看表创建语句

               show create table 表名

            7.修改列的名称

                alter table 表名 change [column] 旧列名  新列名  类型.

五、数据库操作(CRUD)

        1、添加

              insert into 表名(列名1,列名2,...) values(值1,值2,.....);

         2、修改

               update 表名 set 字段=值,字段=值;

         3、删除

               delete from 表名  where 条件;

          4、查询

                1)select 字段1,字段2,....from 表名  where 条件;

                      select * from 表名.---查询表中的所有记录;    DISTINCT 可以消除重复.

                 2)对列进行运算

                          将学生的姓名与三科总成绩显示出来.       

           select name,chinese+math+english from exam;

                          可以给列起别名          

           select name,chinese+math+english as '三科总分' from exam;

                  3)使用where进行条件过滤

                         1.关系运算
                            > >= < <=
                            =在mysql中表示=就使用一个=号就可以。
                            != 不等于. 还可以写成 <>
                            
                        2.逻辑运算符
                            and  并且
                            or   或者
                            not  取反

                        3.between and                

            select * from exam where math between 70 and 80;

                        4.in

                            将exam中chinese的成绩是70或90分的学生成绩查找出来.                    

             select * from exam where chinese=70 or chinese=90;
                            可以使用in                   
             select * from exam where chinese in(70,90);

                         5.is not

                            查找没有语文成绩的学生信息?               

            select * from exam where chinese is null;   
                            null值不能使用=比较,需要使用is null去判断                         
            select * from exam where chinese is not null;  //is not null 是一个整体.
            select * from exam where not chinese is null; // not代表取反

                         6.like
                            将所有姓名赵的信息查询出来

            select * from exam where name like '赵%';
            select * from exam where name like '赵__'; 
                            -匹配一个字符
                            %匹配多个字符

                         7.查询排序

                              order by 指定查询的结果进行排序.

                               select 字段  from 表名  order by 字段 asc(desc);
                               asc默认,它是升序.
                               desc  降序
                               对数学成绩排序后输出。       

              select * from exam order by math;
                               对总分排序按从高到低的顺序输出
              select name,ifNull(chinese,0)+ifNull(math,0)+ifNull(english,0) from exam order by ifNull(chinese,0)+ifNull(math,0)+ifNull(english,0) desc;
                                如果学生的成绩有一科为null,在相加时,全为null值。怎样解决?
                                如果这科成绩为null,我们将其设置为0.
                                                   ifNull
              select  name,ifNull(chinese,0),ifNull(math,0),ifNull(english,0) from exam;                   
                                对姓赵的学生成绩排序输出                       
             select * from exam where name like '赵%' order by ifNull(chinese,0)+ifNull(math,0)+ifNull(english,0);

                           8.sql聚合函数

                               求学生的三科成绩

             select chinese+math+english from exam;
                               如果有null值,结果就为null.
                               使用聚合函数可以完成上面的操作,并且可以解决null问题.
                               1)count(应用比较多)
                               可以统计当前数据表中一共有多少条数据.                     
             select count(*) from exam;
                               查询某一个字段一共有多少行.                        
             select count(name) from exam;

                               2)sum(求列的和)          

             select sum(chinese) from exam;

                               3)avg(求平均值)

                               4)最大值(max),最小值(min)

              select min(chinese) from exam;//求的时候没有计算null。
              select min(ifNull(chinese,0)) from exam;

                                5)group by(分组)

               create table orders(
                      id int,
                      product varchar(20),
                      price float
                );
               insert into orders(id,product,price) values(1,'电视',900);
               insert into orders(id,product,price) values(2,'洗衣机',100);
               insert into orders(id,product,price) values(3,'洗衣粉',90);
               insert into orders(id,product,price) values(4,'桔子',9);
               insert into orders(id,product,price) values(5,'洗衣粉',90);

                                统计一下orders表中的商品种类,并将商品总价格求出。

                                 1.查找出商品的种类.

               select distinct product from orders;
                                 2.查找出种类,在查找价格
               select distinct product,sum(price) from orders;
                                 这段代码执行后,求出的是所有的商品的价格。而不是某一种商品的价格。
                                  解决这个问题,需要使用分组函数 group by.          
               select product,sum(price) from orders group by product;

                                 在分组操作中,一般情况下,分组的字段应该在查询的字段中出现。
                                 求出部门中所有男员与女员工的平均工资.         

               select avg(salary) from employee group by sex;
                                 这段代码 求出的是员工中的男员的与女员工的平均工资。
                                  对数据进行分组后,在想对数据进行条件过滤,需要使用having。

                                having与where区别?
                                where是在分组前使用,having是在分组后使用.
                                where条件后面不能使用聚合函数,而having后可以使用聚合函数

                                select语句的完整结构
                                select 字段 from 表 where 条件 group by 分组 having 条件 order by 排序 ;
                                执行顺序: from  - where -  group by - having –select-  order by


相关习题(答案不一定准确哦)

1.安装mysql数据库

2.创建一个mydb1数据库,并查看。

create database mydb1;

3.创建一个mydb2数据库,指定字符编码为gb2312;

create database mydb2 character set gb2312;

4.创建一个mydb3数据库,指定字符编码为utf8,并且指定校验规则;

create database mydb3 character set utf8  collate utf8_general_ci ;

update练习

drop table if exists employee;
create table if not exists employee
(
	id int,
	name varchar(20),
	sex varchar(10),
	birthday date,
	salary float,	
	resume text
);


insert into employee values(1,"zhangsan","male","1980-11-25",2000,"good body");
insert into employee values(2,"lisi","male","1980-04-25",1000,"good body");
insert into employee values(3,"xiaohong","female","1978-11-25",4000,"good girl");

将所有员工薪水修改为5000元。

update employee set salary =5000;

将姓名为’zhangsan’的员工薪水修改为3000元。

update employee set salary =3000 where name="zhangsan";


将姓名为’lisi’的员工薪水修改为4000元,sex改为female。

update employee set salary=4000,sex='female' where name="lisi";

将xiaohong的薪水在原有基础上增加1000元。

update employee set salary=salary+1000 where name="xiaohong";


select 练习

create table student(
	id int,
	name varchar(20),
	chinese float,
	english float,
	math float
);

insert into student(id,name,chinese,english,math) values(1,'张小明',89,78,90);
insert into student(id,name,chinese,english,math) values(2,'李进',67,53,95);
insert into student(id,name,chinese,english,math) values(3,'王五',87,78,77);
insert into student(id,name,chinese,english,math) values(4,'李一',88,98,92);
insert into student(id,name,chinese,english,math) values(5,'李来财',82,84,67);
insert into student(id,name,chinese,english,math) values(6,'张进宝',55,85,45);
insert into student(id,name,chinese,english,math) values(7,'黄蓉',75,65,30);



查询表中所有学生的信息。

select * from student;

查询表中所有学生的姓名和对应的英语成绩。;

select name,english from student;


过滤表中重复数据。

select distinct * from student;


统计每个学生的总分。

select name,chinese+english+math "学生总分" from student;
//select name,ifNull(chinese,0)+ifNull(english,0)+ifNull(math,0) "学生总分" from student;

在所有学生总分数上加10分特长分。

select name,chinese+english+math+10 "学生成绩" from student;
//select name,ifNull(chinese,0)+ifNull(english,0)+ifNull(math,0)+10 "学生总分" from student;

使用别名表示学生分数。

select name,chinese "语文",english "英语",math "数学" from student;

查询姓名为李一的学生成绩

select * from student where name="李一";

查询英语成绩大于90分的同学

select * from student where english>90;

查询总分大于200分的所有同学

select * from student where chinese+english+math >200;
//select * from student where ifNull(chinese,0)+ifNull(english,0)+ifNull(math,0) >200;

查询英语分数在 80-90之间的同学。

select * from student where english>80 and english<90;
select * from student where english between 80 and 90;

查询数学分数为89,90,91的同学。

select * from student where math in(89,90,91);

查询所有姓李的学生英语成绩。

select name,english from student where name like"李%";

查询数学分>80并且语文分>80的同学。

select * from student where math>80 and chinese>80;

查询英语>80或者总分>200的同学

select * from student where english>80 or chinese+english+math>200;
//select * from student where english >80 or ifNull(chinese,0)+ifNull(english,0)+ifNull(math,0)>200;

对数学成绩排序后输出。

select * from student order by math;

对总分排序后输出,然后再按从高到低的顺序输出

select name,chinese+english+math "学生总分" from student order by "学生总分";
//select name,ifNull(chinese,0)+ifNull(english,0)+ifNull(math,0) "学生总分" from student   order by "学生总分";
select name,chinese+english+math "学生总分" from student order by "学生总分" desc;
//select name,ifNull(chinese,0)+ifNull(english,0)+ifNull(math,0) "学生总分" from student   order by "学生总分" desc;

对姓李的学生成绩排序输出

select name,chinese+english+math "学生总分" from student where name like"李%" order by "学生总分";
//select name,ifNull(chinese,0)+ifNull(english,0)+ifNull(math,0) "学生总分" from student where name like"李%"  order by "学生总分" ;





            

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值