MySQL数据库

1.1  MYSQL数据库:

1.1.1    什么是数据库:

数据库就是一个文件系统,但是这个文件访问需要通过标准SQL语句.

1.1.2    什么是关系型数据库:

关系型的数据库通常保存的是实体之间关系.

1.1.3    常见的关系型数据库:

MYSQL       :免费的小型的数据库,现在已经被Oracle收购了.

SQLServer   :微软公司研发的数据库产品.收费的中型数据库.

Oracle      :Oracle公司研发的数据库产品.收费的大型的数据库.

DB2         :IBM公司研发的数据库产品.收费的大型的数据库.

SyBase      :数据库已经退出历史舞台.留下PowerDesigner:数据建模工具.

SQLite      :嵌入式数据库.Android系统中使用.

1.2  MYSQL的安装和卸载:

1.2.1    MYSQL卸载:

1.找到MYSQL的安装路径:

* C:\Program Files (x86)\MySQL\MySQL Server 5.5\my.ini

2.找到两个路径:

* basedir="C:/Program Files (x86)/MySQL/MySQL Server 5.5/"

* datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"

3.在控制面板中卸载MYSQL:

4.需要将记录的路径中的残留的文件删除:

1.2.2    MYSQL安装:

1.自定义安装:

 

* 服务器安装路径:

C:\Program Files (x86)\MySQL\MySQL Server 5.5\

* 数据存放的路径:

C:\ProgramData\MySQL\MySQL Server 5.5\

2.MYSQL默认端口号:

3.设置MYSQL数据库字符集:

 

4.勾选:Include Bin Directory in WindowsPATH.

 

5.设置MYSQL数据库最高管理员root的密码:

 

6.四个对勾全部选中的情况下说明安装成功:

 

7.测试MYSQL是否安装成功:

* 在cmd的命令下输入:

* mysql -u root -p

1.2.3    重置root密码:

1.停止mysql服务:

* services.msc进入服务界面:

2.打开cmd的窗口:

* 输入:mysqld--skip-grant-tables 回车.(相当于启动了一个MYSQL的服务,跳过权限认证)

3.重新打开一个cmd的窗口:

* mysql -u root  -p

* 输入密码: 直接回车

4.使用数据库:

* use mysql;

5.输入命令:

* update user set password = password('123') where user='root';

6.关闭两个cmd的窗口:

7.在任务管理器中结束一个进程:mysqld.

8.进入到服务界面:重启mysql服务.

1.2.4    MYSQL内部存储结构:

一个软件对应一个数据库,在数据库内部可以存在多张表:一个实体类对应一张表.表中可以有多条记录的.一般情况下:一个类的实例对应一条记录.

1.3  SQL语句:

1.3.1    SQL的概述:

什么是SQL:

SQL:Structured QueryLanguage.结构化查询语言.

SQL的特性:

非过程性语言:

* 过程性语言:一条语句的执行需要依赖其他的语句.

* if(i < 3){

语句;

}

* 非过程性语言:一条语句的执行,就会有一个结果.不需要依赖其他语句.

 

为了增强SQL语言能力,各个数据库生产商增强了SQL语言.

* Oracle数据库中提供了PL/SQL

* SQL Server:T-SQL.

 

SQL的分类:

* DDL   :Data Definition Language.数据定义语言.

* create 、alter、drop ...

 

* DML   :Data Manipulation Language.数据处理语言.

* update 、insert 、 delete...

 

* DCL   :Data Control Language.数据控制语言.

* if 、grant...

 

* DQL   :Data Query Language.数据查询语言.

* select

1.3.2    SQL对数据库进行操作:(CRUD)

创建数据库:

语法:

* create database 数据库名[character set 字符集 collate 字符集校对规则];

 

练习:

创建一个数据库名称为mydb1数据库.

* create database mydb1;

创建一个使用utf8字符集的mydb2数据库.

* create database mydb2 character set utf8;

创建一个使用utf8字符集,并带有校对规则的mydb3数据库.

* create database mydb3 character set utf8 collate utf8_bin;

查看数据库:

查看数据库服务器中有哪些数据库:

* 语法:

* show databases;

 

查看数据库的定义的细节:

* 语法:

* show create database 数据库名;

 

练习:

查看当前数据库服务器中有哪些数据库 

* show databases;

查看前面创建的mydb2数据库定义信息:

* show create database mydb2;

删除数据库:

删除某个数据库 :

语法:

* drop database 数据库名;

 

练习:

删除前面创建的mydb1数据库:

* drop database mydb1;

修改数据库:

修改数据库:

* 语法:

* alter database 数据库名character set 字符集 collate 校对规则;

 

练习:

修改之前创建的mydb2数据库,将字符集改为gbk.

* alter database mydb2 character set gbk;

切换数据库:

切换数据库 :

* 语法:

* use 数据库名;

显示当前正在使用的数据库:

查看当前正在使用的数据库 :

* 语法:

* select database();

---------------------------------------------------属于DDL语句------------------------------------------------------------

1.3.3    SQL语句对数据库中表进行操作:(CRUD)

创建表:

语法:

* create table 表名 (字段名 字段类型(长度) 约束,字段名 字段类型(长度) 约束..)character set 字符集 collate 校对规则;

 

一般情况下有一个实体,一般就会创建一个表.

* public class User{

private int id;

private String username;

private String password;

private double salary;

private int age;

}

 

MYSQL常用的数据类型:

Java                    MYSQL

String                  char/varchar

* char和varchar的区别:

* char  :代表的是固定长度的字符串.定义数据库中某个字段类型为char(8).存入一个hello.那么在hello字符串后面添加3个空格进行补齐.

* varchar:代表的是可变长度的字符串.定义数据库中某个字段类型为varchar(8).存入一个hello.那么存入数据库就是hello这个字符串.

byte                    TINYINT

short                   SMALLINT

int                     INT

long                    BIGINT

float                   FLOAT

double                  DOUBLE

boolean                 BIT

Date                    DATE/TIME/DATETIME/TIMESTAMP

* datetimetimestamp区别?

* datetime  :既有日期又有时间的日期类型.必须手动传入一个日期.

* timestamp:既有日期又有时间的日期类型.如果没有给这个列设置值,采用系统的当前的时间存入到这个列上.

File                    BLOB/TEXT

* BLOB  :存放一个二进制文件.

* TEXT  :存放一个文件文件.

***** Oracle数据库中用BLOBCLOB

 

练习:创建一个员工表:employee.

在创建表之前一定要选择一个数据库:

* create database web015;

* use web015;

* create table employee(

id int,

name varchar(20),

gender varchar(10),

birthday date,

entry_date date,

job varchar(50),

salary double,

resume text

);

***** 字符串长度必须写,其他类型都有默认的长度.int默认长度11.

 

建表约束:(单表约束)---为了保证数据完整性.

主键约束   :primary key.可以唯一确定表中一条记录的字段.(非空唯一).主键是整形可以使用auto_increment.

唯一约束   :unique.创建表中这个字段的时候,这个字段不允许出现重复的值.

非空约束   :not null.代表创建表中的这个字段的时候,不可以向这个字段插入空值.

 

练习:创建一个带有约束的表:

create table employee2(

id int primary key auto_increment,

name varchar(20) unique,

gender varchar(20) not null,

birthday date not null,

entry_date date not null,

job varchar(50) not null,

salary double not null,

resume text not null

);

查看表:

查看数据库中有哪些表:

* 语法:

* show tables;

查看表的结构:

* 语法:

* desc 表名;

修改表:

语法:

* alter table 表名 add 字段名 类型(长度) 约束;      ---修改表添加字段.

* alter table 表名 modify 字段名 类型(长度) 约束;   ---修改表修改字段的类型长度和约束.

* alter table 表名 drop 字段名;                   ---修改表删除表中这个字段.

* alter table 表名 change 旧的字段名 新的字段名 类型(长度) 约束;  ---修改表修改字段名

* rename table 旧表名to 新表名;                  ---修改表名.

* alter table 表名character set 字符集;          ---修改表的字符集.

 

练习:

在上面员工表中添加一个image列.

* alter table employee add image varchar(20);

修改job列,使其长度变为60.

* alter table employee modify job varchar(60);

删除gender列.

* alter table employee drop gender;

表名改为user

* rename table employee to user;

修改表的字符集utf8

* alter table user character set utf8;

修改列名name修改为username.

* alter table user change name username varchar(20);

删除表:

删除表语法:

* drop table 表名;

 

练习:

删除user表:

* drop table user;

 

----------------------------------------属于DDL语句------------------------------------------------------------------------.

1.3.4    SQL对数据库中表中的记录进行操作:(CRUD)

添加记录:

语法:

* 语法一:向表中插入部门字段.

* insert into 表名 (字段名1,字段名2,字段名3...) values (值1,值2,值3...);

* 语法二:向表中插入所有字段.

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

 

*****注意:

* 1.添加的过程中,字段的个数与类型与值的个数与类型一致!

* 2.添加字段的值的时候,值的长度不能超过字段设置最大长度!

* 3.添加字段的值的类型如果是字符串或者日期类型,那么在插入的值的时候,就需要使用单引号引起来.

 

练习:

向数据库中添加3条记录:

添加部分字段:

*insert into employee (id,name,gender,job,salary) values(1,'aaa','man','HR',4500);

添加所有字段:

*insert into employee values (2,'bbb','woman','1992-01-04','2013-02-03','WORKER',5600,'bbb');

添加带有中文的数据:

*insert into employee values (3,'张三','男','1994-01-04','2012-04-08','CEO',10000,'我是张三');

* 报错:Incorrect string value: '\xD5\xC5\xC8\xFD' forcolumn 'name'

* MYSQL数据库共有6个与字符集相关的参数!!!

* 其中有3个与mysql的客户端相关的参数,3个与mysql服务器相关参数.

***** 解决插入中文乱码问题:

* 找到mysql的安装路径:my.ini文件.

* [mysql]

default-character-set=utf8

* [mysqld]

character-set-server=utf8

* 通过show variableslike '%character%';---6个与字符集相关参数.

* 将my.ini中与客户端相关的字符集的地方修改为gbk.

* 重启mysql服务.

修改记录:

语法:

* update 表名set 字段名 = 值,字段名=值 [where 条件];

 

练习:

将所有员工的工资改为6000元.

* update employee set salary = 6000;

将姓名为张三的员工的工资改为3000元.

* update employee set salary = 3000 where name = '张三';

将姓名为bbb的员工的工资改为9000元,将job改为Manager.

* update employee set salary = 9000 , job='Manager' where name ='bbb';

将姓名为aaa的员工的工资在原有基础上加1000元.

* update employee set salary = salary + 1000 where name = 'aaa';

删除记录:

语法:

* delete from 表名[where 条件];

 

*****注意:

删除的是一条记录,不能删除一条记录的某个字段(修改).

删除的是表的记录,而不是整个表.删除整个表 droptable;

删除的时候一旦有外键的关联,删除表中记录的时候,先解除外键关系.

删除表中的记录truncate table 表名; 删除表中所有记录:deletefrom 表名;

 

练习:

删除表中姓名为张三记录:

* delete from employee where name = '张三';

删除表中的所有记录:

* delete from employee ;

使用truncatetable删除表中所有记录:

* truncate table employee;

  

***** truncatetable 和delete  from 区别?

* delete属于DML.事务可以作用在DML语句上.事务进行回滚!!!delete是一条记录一条记录的删除.

* truncate属于DDL.事务不能作用DDL上.truncate table 删除表中所有记录:直接将整个表进行删除.创建一个新的表.

------------------------------属于DML语句(insert,update,delete)--------------------------------------------------------------

查询记录:(*****)

创建一个学生考试成绩表:

create table exam(

id int primary key auto_increment,

name varchar(20),

math int,

english int,

chinese int

);

 

insert into exam values(null,'张三',62,83,79);

insert into exam values(null,'李四',73,92,81);

insert into exam values(null,'王五',81,83,65);

insert into exam values(null,'赵六',73,67,84);

insert into exam values(null,'孙七',93,75,93);

insert into exam values(null,'张八',72,69,95);

1.基本查询语句:

* 语法:

* select [distinct] *|[列名,列名...] from 表名;

* distinct:去掉查询记录的中重复的值.

 

练习:

查询表中所有学生信息:

* select * from exam;

查询表中所有学生的姓名与英语成绩的信息:

* select name,english from exam;

过滤表中的重复数据:(过滤英语成绩信息)

* select distinct english from exam;

 

2.执行运算及起别名:

* 语法:

* select 表达式from 表;

* select 列名as 别名,列名 as 别名 from 表名; ----as关键字可以省略的.

 

练习:

在所有学生的分数上加10分特长分:

* select name ,math + 10,english + 10 ,chinese + 10 from exam;

统计每个学生的总分:

* select name ,math+english+chinese from exam;

使用别名的方式表示学生的总分:

* select name ,math+english+chinese as sum from exam;

* select name ,math+english+chinese sum from exam;

 

3.select语句的条件过滤:

语法:

* select *|列名,列名 from 表名 where 条件;

 

练习:

查询姓名为张三的学生成绩信息:

* select * from exam where name ='张三';

查询英语成绩大于90分的学生信息:

* select * from exam where english > 90;

查询总分大于240分的所有学生信息:

* select name, math + english + chinese from exam where math +english + chinese > 240;

 

where子句后的运算符:

* > ,< ,>= ,<= ,= ,<>

* in    :一组值.

* like  :模糊查询.

使用占位符: _和%

* _代表的是一个字符:  where name like '张_';

* %代表的是任意个字符: where name like '张%';

张% :以张开头.

* %张 :以张结尾.

* %张%:包含张即可.

* is null

* and , or ,not 

 

练习:

查询英语分数在80-90分的学生的信息:

* select * from exam where english > 80 and english < 90;

查询数学分数为62,81,93的学生的信息. 

* select * from exam where math in (62,81,93);

查询所有姓张的学生信息:

* select * from exam where name like '张%';

查询数学分数>80,并且语文>80的学生信息:

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

 

4.查询记录的排序

* 语法:

* select * from 表where 条件 order by 列名 asc/desc; ---asc:代表排序的时候按照升序排序.desc:代表排序的时候按照降序排序.默认值:asc:升序.

 

练习:

对数学成绩进行排序后输出:

* select * from exam order by math;

对总成绩按照从高到低顺序排序输出:

* select name,math  +english  + chinese from exam order bymath + english + chinese desc;

对学生的数学成绩进行降序排序,如果数学成绩相同,那么参照英语成绩进行降序.

* select * from exam order by math desc,english desc;

对姓张的同学进行总成绩的排序输出:

* select name,math+english+chinese from exam where name like '张%' order by math+english+chinese ;

 

5.聚集函数:(分组函数).

* count()       :统计表中记录的个数.

* 语法:

* select count(*|列名)from 表名;

练习:

统计exam中有多少个学生:

* select count(*) from exam;

统计数学成绩大于80分学生个数:

* select count(*) from exam where math > 80;

统计总成绩大于220分学生个数:

* select count(*) from exam where math+english+chinese > 220;

 

* sum()         :求和.  

* 语法:

* select sum(列名)from exam;

 

练习:

统计一个班级的数学总成绩:

* select sum(math) from exam;

统计一个班级数学,英语,语文各科总成绩:

* select sum(math),sum(english),sum(chinese) from exam;

统计一个班级语文,数学,英语的成绩总和:

* select sum(math)+sum(english)+sum(chinese) from exam;

* select sum(math+english+chinese) from exam;

* ifnull()  :ifnull(math,0)如果math这列的值为null 那么就使用0代表.

* select sum(ifnull(math,0)+english+chinese) from exam;

统计一个班级的语文成绩的平均分:

* select sum(chinese)/count(*) from exam;

 

* avg()         :求平均值.

* 语法:

* select avg(列名)from 表名;

 

练习:

求一个班级的语文成绩的平均分:

* select avg(chinese) from exam;

求一个班级总分的平均分:

* select avg(ifnull(math,0)+english+chinese) from exam;

 

* max()         :求最大值.

语法:

* select max(列名)from 表名;

练习:

查询语文成绩的最高分是多少分:

* select max(chinese) from exam;

* min()         :求最小值.

语法:

* select min(列名)from 表名;

练习:

查询英语成绩的最低分是多少分:

* select min(english) from exam;

 

6.分组统计:

* 语法:

* select * from 表where 条件 group by 列名;

 

* 创建表:

create table orders(

id int,

product varchar(20),

price float

);

insert into orders values (1,'电视',800);

insert into orders values (2,'洗衣机',1200);

insert into orders values (3,'冰箱',2300);

insert into orders values (4,'电视',800);

insert into orders values (5,'洗衣机',1200);

 

练习:

对订单表中的商品归类后,显示每类商品的总价格:

* select product,sum(price) from orders group by product;

对订单表中的商品归类后,显示每类商品的数量:

* select product,count(*) from orders group by product;

查询购买了几类商品,显示的是总价格大于2000的商品.

* select product,sum(price) from orders where sum(price) > 2000group by product; ---错误的!!!

* select product,sum(price) from orders group by product wheresum(price) > 2000 ; ---错误的!!!

***** where后面的条件不能使用聚集函数.

***** 使用另外一个关键字:having:----分组后的条件过滤.用于group by进行条件过滤.having后面可以跟聚集函数.

***** select product ,sum(price) from ordersgroup by product having sum(price) > 2000;

 

7.查询语句的总结:

* S...F...W...G...H...O...:

* select *|列名 from 表名 where 条件 groupby 列名 having 分组条件过滤 order by 列名;

-------------------------------------属于DQL---------------------------------------------------------------------------------

1.4  数据库的备份和还原:

1.4.1    数据库的备份:

数据库的备份:

* 语法:

* cmd>mysqldump -u root -p 数据库名称 > c:/web015.sql

 

1.4.2    数据库的还原:

数据库还原:

* 要还原数据库:首先必须有一个空的数据库:

* 语法

* cmd>mysql -u root -p 数据库名称 < c:/web015.sql

* 进入到mysql数据库中进入到数据库:

* source c:/web015.sql

1.5  可视化工具的使用:

1.5.1    第三方的可视化工具的使用:

以SQLyog为例来学习可视化界面:

* 连接后的界面:

* 创建数据库 :

* 创建成功后的界面:

 

* 创建表:

 

* 输入字段:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值