目录
数据库介绍
MySQL重点总结
数据库操作
数据表操作
1.什么是数据库,数据库有什么作用?
数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。
2.常见数据库有哪些?
Oracle数据库,SQL Server数据库,Sybase数据库,MySQL数据库,DB2数据库。
3.关系型数据库
关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
数据库发展历程如下所示:
我们要学习的MySQL就是关系结构模型数据库管理系统,简称关系型数据库管理系统。
4.数据库管理系统(DBMS)
我们通常将数据库管理系统称为数据库,当我们安装了数据库(数据库服务器),就可以在数据库服务器中创建数据库,每个数据库中还可以包含多张表。
通过上述图我们知道了数据库与表之间的关系,那么我们的数据又是怎样存储在数据库中。
数据库中的表就是一个多行多列的表格。在创建表时,需要指定表的列数,以及列名称,列类型等信息。而不用指定表格的行数,行数是没有上限的。
表中的列我们称之为字段,表中的行我们称之为记录。
那么用我们熟悉的java程序来与关系型数据对比,就会发现以下对应关系。
类-------表
类中属性-------表中的字段
对象--------记录。
1、SQL介绍
1.SQL是什么,它的作用是什么
结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统
2.SQL分类
SQL一共分成四类,如下所示:
大家可能会对DDL和DML分的不太清楚,DDL是对数据库或表的结构进行操作,而DML是对表的记录进行操作(增、删、改)。以上四个分类,我们以后最常用的就是DDL、DML、DQL,其中,DQL是难点。
3.SQL语法
SQL的语法有以下要求:
2、创建数据库
1.使用默认的字符集与校对
create database 数据库名;
2.可以指定数据库字符
create database 数据库名 CHARACTER set gbk;
3.可以指定数据库字符与校对
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_general_ci;
3、查看数据库
查看当前数据库服务器下所有数据库
show databases;
查看创建数据库的语句
show create database 数据库名;
练习:
查看当前数据库服务器中的所有数据库
show databases;
查看前面创建的mydb2数据库的定义信息
show create database mydb2;
4、修改数据库
修改数据库操作我们很少使用,了解一下语法就可以。
修改数据库的编码集
alter database 数据库名称 character set 编码 collate 校对
练习:
查看服务器中的数据库,并把其中某一个库的字符集修改为utf8;
show create database mydb2;
alter database mydb2 character set utf8 collate utf8_general_ci;
5、删除数据库
删除数据库
drop database 数据库名
练习:
删除前面创建的mydb1数据库
drop database mydb1;
6、其它关于库的操作
1.切换数据库
use 数据库名称
2.查看当前所使用的事数据库
select database();
1、mysql中数据类型
类型 |
描述 |
int |
整型,和java中的int类型一样; |
double |
浮点型,例如double(5,2)表示该列存放的数据最多是5位,而且其中必须有2位小数,它的最大值是:999.99; |
decimal |
浮点型,用于保存对准确精度有重要要求的值,例如与金钱有关的数据。 |
char |
固定长度字符串类型,如果没有指定长度,默认长度是255,如果存储的字符没有达到指定长度,mysql将会在其后面用空格补足到指定长度; |
varchar |
可变长度字符串类型,它的长度可以由我们自己指定,它能保存数据长度的最大值是65535,如果存储的字符没有达到指定的长度,不会补足到指定长度; |
tinytext |
可变长度字符串类型,其存储范围是28-1B; |
text |
也是可变长度字符串类型,其存储范围是216-1B; |
mediumtext |
也是可变长度字符串类型,其存储范围是224-1B; |
longtext |
也是可变长度字符串类型,其存储范围是232-1B; |
tinyblob |
是可变长度二进制类型,其存储范围是28-1B; |
blob |
是可变长度二进制类型,其存储范围是216-1B; |
mediumblob |
也是可变长度二进制类型,其存储范围是224-1B; |
longblob |
也是可变长度二进制类型,其存储范围是232-1B; |
date |
日期类型,格式为yyyy-MM-dd,只有年月日,没有时分秒; |
time |
时间类型,格式为hh:mm:ss,只有时分秒,没有年月日; |
timestamp |
时间戳类型,格式为:yyyy-MM:dd hh:mm:ss,年月日,时分秒都有。 |
char与varchar区别?
char是一个定长字符串.指定长度不会随着内容的不足而改变
varchar是一个可变长度的字符串,它根据信息自动改变长度.(只在字符串长度小于指定长度情况下)
2、创建表与约束
一.创建表
1.创建表---使用默认的字符集与校对
create table 表名(
字段1 类型,
字段2 类型,
.....
);
2.创建表--指定字符集与校对
create table 表名(
字段1 类型,
字段2 类型,
.....
) character set 字符集 collate 校对;
表名后面的内容需要使用“()”括起来,里面的内容是表结构,由列名和列类型组成,列名与列类型之间用空格隔开,每一列之间用逗号隔开,最后一列后面不需要加逗号,语句结束后需要加“;”。
二.约束
它是用于限定表中字段。
我们在mysql课程中会介绍5种约束(注意:数据库中一共有六种约束,而mysql只支持五种)
1、主键约束
主键是用于标识当前记录的字段。它的特点是非空,唯一。
在开发中一般情况下主键是不具备任何意义,只是用于标识当前记录。
创建主键:
1.在创建表时,在字段后面加上 primary key.
create table tablename(
id int primary key,
.......
)
2.也可以表创建的最后来指定主键
create table tablename(
id int,
.......
primary key(id)
)
3.删除主键:
alter table tablename drop primary key ;
1、唯一约束
某一列的值不为重复可以使用唯一约束. unique
2、非空约束
not null
3、默认值约束
default 值
4、外键约束 REFERENCES
5、自动增长 auto_increment
6、扩展:
mysql : auto_increment 自动增长
sqlserver: identity(1,1)
oracle:sequence序列
3、表操作-查看修改删除表
查看表
1·查看表结构
desc 表名;
2·查看当前数据库下所有表
show tables;
3.查看表的字符编码集
show create table 表名;
修改表
1·修改表的结构语法格式:alter table 表名 关键字 ….;
关键字有以下几个:
1.add----添加列操作 alter table 表名 add 列名 类型;
2.modify--修改列的类型 alter table 表名 modify 列名 类型;
3.drop --删除列 alter table 表名 drop 列名.
4.change--修改列名称 alter table 表名 change 旧列名 新列名 类型;
2·修改表的名称
rename table 旧表名 to 新表名;
3·修改表的字符编码集
alter table 表名 character set 字符集;
4、记录操作
记录操作-insert操作
插入所有列值
insert into 表名(列名1,列名2, ...) values(列值1, 列值2, ...);
表名后面是当前表中所有字段名称
插入部分列值
insert into 表名(列名1,列名2) values(列值1, 列值2);
表名后面是当前表中部分字段名称
不指定列名
insert into 表名 values(列值1, 列值2, ...);
插入操作注意事项
注意:对于自动增长的列在操作时,直接插入null值即可.
记录操作-update操作
下面语句会将指定字段的值全部修改
update 表名 set 字段名称=值;
如果要修改多个字段
update 表名 set 字段1名称=值 ,字段2名称=值,...;
以上方式,进行修改,会将表中这个字段所有值都修改.在实际开发中,对于修改操作,都是有条件修改.
update 表名 set 字段=值 ,... where 条件.
记录操作-delete操作
delete操作是删除数据.
格式 delete from 表名.
这会将表中所有数据删除。在开发一般情况下有条件删除
delete from 表名 where 条件.
关于删除表与删除表数据区别:
1.删除表
drop table 表名
2.删除表中记录
1.delete from 表名
2.truncate table 表名
关于delete 与truncate的区别?(笔试题)
1.delete是一行一行删除 truncate是将表结构销毁,在重新创建表结构.如果数据比较多,truncate的性能高。
2.delete是dml语句 truncate是dcl语句
delete是受事务控制. 可以回滚数据.
truncate是不受事务控制. 不能回滚.
记录操作-编码问题
下面我们向user表中插入一条记录
insert into user(username,password) values(‘张三’,’123’);
当执行这条sql时,会报错ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'username' at row 1
原因:
因为mysql的客户端编码的问题我们的是utf8,而系统的cmd窗口编码是gbk
解决方案(临时解决方案):
修改mysql客户端编码就可以。
show variables like 'character%'; 查看所有mysql的编码
在图中与客户端有关的编码设置:
client,connetion, result 和客户端相关 、
database ,servers,ystem 和服务器端相关
将客户端编码修改为gbk.
set character_set_results=gbk; / set names gbk;
以上操作,只针对当前窗口有效果,如果关闭了服务器,失效。
如果想要永久修改,通过以下方式:
在mysql安装目录下有my.ini文件
default-character-set=gbk 客户端编码设置
character-set-server=utf8 服务器端编码设置
注意:修改完成配置文件,重启服务
记录操作-select基本查询
查询指定列
select 字段 from 表名;
查询指定字段信息,如果要查询多个字段
select 字段1,字段2,...from 表名;
查询所有列
select * from 表名;
查询表中所有字段.
注意:使用"*"在练习,学习过程中可以使用,在实际开发中,不建议使用。
去掉重复记录
select distinct 字段 from 表名;
distinct它的作用是去除重复.
使用别名
使用as 别名可以给表中的字段,表设置别名.
在查询中可以直接对列进行运算
我们在sql操作中,可以直接对列进行运算。
ifnull函数使用
在对数值类型的列做运算的时候,如果做运算的列的值为null的时,运算结果都为null,为了解决这个问题可以使用 ifnull函数
记录操作-where子句
我们在开发中,使用select操作,一般都是有条件查询,那以我们介绍一下关于where子句的使用
格式 :select 字段 from 表名 where 条件;
where条件种类:
1.比较运算符
> >= < <= = !=(<>)
2.逻辑运算符
and or not
3.between ...and
相当于 >= and <=
注意:between 后面的值必须是小值 and后面的是大值
4.in
可以比较多个值
5.like
模糊查询
通配符使用:
1.% 匹配多个
2._ 匹配一个
6.null值操作
is null; 判断为空
is not null; 判断不为空
记录操作-order by排序
在开发中,我们从数据库中查询出的数据经常需要根据某些字段进行排序,可以使用order by关键字,后面跟的就是要排序的列
order by 子句是select的最后的一个子句。
asc 升序 (默认)
desc 降序
记录操作-聚合函数
之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个单一的值;另外聚合函数会忽略空值。
如下五个聚合函数:
记录操作-分组操作
分组查询是指使用group by字句对查询信息进行分组,例如:我们要统计出products表中所有分类商品的总数量,这时就需要使用group by 来对products表中的商品根据category进行分组操作.
分组后我们在对每一组数据进行统计。
分组操作中的having子名是用于在分组后对数据进行过滤的,作用类似于where条件。
笔试题: having与where的区别:
1.having是在分组后对数据进行过滤.
where是在分组前对数据进行过滤
2.having后面可以使用分组函数(统计函数)
where后面不可以使用分组函数。
记录操作总结
综合查询相关关键字:select,from,where,group by,having,order by;它们的执行顺序是如下:
在SQL语言中,第一个被处理的子句是from字句,尽管select字句最先出现,但是几乎总是最后被处理。