MySQL数据库
目录内容
【1】MySQL数据库介绍【2】SQL介绍【3】数据库(大存储单元)基本操作【4】数据表操作
【5】数据表记录操作【6】查询操作【7】排序、聚集函数、分组【8】limit(分页查询)
【MySQL数据库介绍】
MySQL是一种做数据存储软件,是一种文件系统,之所以是文件系统,是因为我们保存后的数据最终都会存储成文件保存到磁盘中, 在我们MySQL的安装目录中,有一个data文件夹(D:\mysql\data),里面存储都是数据库和表相关的数据。就是以文件的形式存储的,MySQL为我们 展现的时候,以数据列表形式给我们展现。其实就是获取的文件中的数据进行展现的。
MySQL存储结构
MySQL数据库软件
|--数据库(database,作为一个存储大单元)
|--数据表(table,作为具体某一类数据的存数单元)
|--表记录(是组成表的一条数据,一行就是一条记录)
【SQL介绍】
SQL是所有数据库所依赖的一种操作手段。这里的标准SQL,就和咱们学习的javascript当中的组成部分ECMAScript类似, ECMAScript是js的一个标准,在所有的浏览器中都应该可以被运行的,被所有浏览器所支持的,叫做标准。如果说谷歌浏 览器开发设计了一个新的js技术,IE和火狐能用么?不能有,那是人家自己扩展的功能,ECMAScript标准中没有,所以不 能用。这里的SQL也是一样的,标准SQL就是应该可以使用在所有常用数据库软件中。像MySQL数据库软件也有自己的一些SQL, 其他数据库软件也就不能使用了,因为它不属于标准SQL的范畴。
怎么理解这个SQL呢?
其实这个SQL就是操作数据库的一种命令,如同windows系统的DOS命令行,输入命令,给予反应。SQL也是这样,输入SQL 语句,展现数据或者得到一个操作结果。
SQL分类
DDL:DD(Definition)L 数据库定义语句,定义就是从新得到,创建一个新的,这里涉及到的SQL关键字:createDML:DM(Manipulation)L 数据定义语句,这里学习三种操作:增加、删除、修改,涉及到的SQL关键字:insert、delete、updateDQL:DQ(Query)L 数据查询语句,就是查询数据库中的数据,这也一个重点学习的内容,使用非常频繁,涉及到的关键字:select
我们使用这些东东用来操作数据库、数据表 以及 表记录
【数据库基本操作】
数据库是一个大的存储单元,所有的数据存储都是建立在数据库存在了,才能去存储具体的数据。
1、连接MySQL数据库服务
作为存储数据的服务,我们需要先连接才能使用。并且需要用户名和密码,并不是所有的人都能随便链接, 不然会有很大的安全隐患。就如同进入存储仓库需要用钥匙打开仓库门一样。
连接MySQL数据库:打开DOM命令行,输入>mysql -uroot -p123 回车
解读:mysql是连接命令,-uroot,其中-u代表用户名(username)参数,root是用户名,
-p代表密码(password)参数,123是密码,回车执行命令,然后连接
2、创建数据库
要使用MySQL,我们首先要有一个数据库,所以需要先创建
创建数据库:create database dbName;
3、使用(切换)数据库 这里的使用是指,如果要操作某个数据库中的数据了,需要先指明使用哪一个,也叫做切换到某个数据库中。 如同,你到仓库1找东西,是不是先要进入到仓库1呀,一个道理。
切换数据库:use dbName;
接下来就进入到了testdb1这个数据库中,可以操作里面的数据了
4、删除数据库
如果一个数据库没有利用价值了,留着占地方,这时候就需要删除掉。
这里的删除并不是使用的delete,而是drop关键字,drop是用来删除一个整体结构的。
删除数据库:drop database dbName;
5、查看所有数据库
查看当前有哪些数据库可用:show databases;
6、查看当前使用的是哪个数据库
如果想知道当前使用是哪个数据库:select database();
【数据表操作】
数据表 是进行数据存储的基本结构,往往某个表是对应某个业务或者事物的,比如用户信息,就存储一个用户表。创建表之前,需要指明在哪个数据库中创建表。
其中表中的字段是对应java实体类中字段的,也需要有对应的数据类型,常用的类型:
varchar字符串、int整数、float浮点数、decimal数值类型(代表十进制整数和小数)、boolean布尔、 datetime日期时间、timestamp日期时间
1、创建数据表
use dbName;
create table tableName(
id varchar(50),//主键id为varchar字符串时,设置长度大一点
username varchar(40),
password varchar(40),
age int,//像int数值类型不用指明长度
birthday datetime //最后一行不用写 逗号(,)
);//最后加上分号(;)
2、查看有哪些数据表
查看当前使用的数据库中有哪些有数据表(前提是切换好了数据库):show tables;
3、查看表结构(字段类型信息)
查看创建表时的一些字段、类型等信息:desc tableName;
4、常用约束
非空约束:not null表示不准为空,如果为空则报错
唯一性约束:unique字段不准有重复数据
主键约束(非空+唯一性):primary key 设置了主键约束必须非空,并且唯一;主键是用来标识一条记录的,要保证只有一个唯一且非空的主键和记录对应。
5、扩展:修改表信息(表名称、字段名,字段类型、添加字段、删除字段)
这部分内容没有任何技术含量,记住这个语句怎么写的就OK
(a)修改表名称:rename table oldName to newName;
(b)修改字段名
遇到创建表的时候字段写错了,需要修改字段名称:alter table tableName change oldColName newColName colType;
下面例子,我们以修改表主键tid为例:
(c)修改字段类型
如果主键本来是int,现在要改成varchar类型:
方法一:alter table tableName change colName colName colType[(size)];
这个其实就是修改字段名的方式,字段名称一样即可
方法二:alter table tableName modify colName colType[(size)];
(d)添加新字段
如果实体对象有新属性了,需要添加表字段:alter table tableName add newColName colType[(size)]; (e)删除字段 如果字段属性不需要了,应该删除掉:alter table tableName drop colName;
【数据库基本操作】
插入数据 向数据表中添加新数据,使用关键字:insert
方式一:insert into 表名 values("id001","zhangsan","123456");
查看表结构:
插入语句:insert into testtab2 values('1111','zhangsan','123',23,'2000-11-11 01:01:01');
在()里面要把五个字段全写上
插入结果:
方式二:insert into 表名(username,password) values("lisi","666a666");
查看表结构:
插入语句: insert into testtab2(id,username,password) values('2222','lisi','666a666');
表名(字段名列表) values(对应字段位置的值):需要插入哪几个字段就写哪几个字段
插入结果:
没有插入数据的字段数据为NULL
修改数据 对已经存在于数据表中的数据进行修改操作,使用关键字:update
书写格式:update 表名 set colName1=newValue1,colName2=newValue2... where 条件
原数据:
执行语句: update testtab2 set id='3333',age=32 where id='1111';
修改后数据:
删除数据 对于数据表中废弃没有用的数据需要清理删除,使用关键字:delete
书写格式:delete from 表名 where 条件;
原数据:
执行SQL: delete from testtab2 where id='3333';
执行结果:
如果delete语句没有写任何条件(不写where子句),代表删除表中的全部记录,
如果有这种删除全部数据的需求,可以使用另一个关键字truncate
truncate会清空表数据保留表结构:
原数据:
使用truncate: truncate table 表名;
执行sql:truncate table testtab2;
再次查看数据:
【查询操作】
查询是使用会最频繁的操作,使用关键字:select
基本SQL结构:select * from 表名 where 条件; select 字段列表 from 表名 where 条件;
实例1:
实例2:
条件查询:
原数据:查询全部数据
(1)< > <= >= <>(不等于)
查询年龄不等于24的用户名和年龄:select username,age from testtab2 where age<>44;
(2)在一组数据中 in
查询年龄在22,33,55的所有数据:select * from testtab2 where age in (22,33,55);
(3)条件并列 and
查询年龄大于33 并且 id在2222,3333,4444中的所有数据:select * from testtab2 where age>33 and id in ('2222','3333','4444');
(4)在两者之间 between ... and ...
查找birthday在 2015-11-03 00:01:01 和 2015-11-03 23:59:59之间的所有信息:
select * from testtab2 where birthday between '2015-11-03 00:01:01' and '2015-11-03 23:59:59';
(5)模糊查询:like 配合 %使用,%代表位置的字符串部分
查询username包含 i的数据:select * from testtab2 where username like '%i%';
查询username 以 zh开头的数据:select * from testtab2 where username like 'zh%';查询补充:如果想查询birthday为null的 或者 birthday不为null的怎么判断?
全部数据:
查询birthday为null的数据:
使用= 判断:不成功
使用 is 关键字:可以
使用isnull(colName)函数:可以
查询birthday 不为 null的数据:
使用 <> null:不可以
使用 <> 'null':null是字符串,可以
使用 is not null:可以
【排序、聚集函数、分组】
排序 对查询的结果根据某一列进行排序,顺序、倒序,使用关键字 order by desc/asc
基本结构:select * from 表名 order by 字段 asc/desc;
简单示例(根据年龄倒序排列):select * from testtab2 from testtab2 order by age desc;
order by 加上where子句:select * from testtab2 from testtab2 where age>22 order by age desc;
order by 应该放查询语句最后
聚集函数 这些函数是sql给我们提供好的函数,用于各种运算
(1)count():统计记录数,count(*)表的总记录数,count(字段)对应字段不为NULL的记录数
全部记录:select * from testtab2;
共7条记录
示例1:select count(*) from testtab2;
示例2:select count(birthday) from testtab2;
(2)sum():求和函数统计列数值的总和
示例:select sum(age) from testtab2;
(1+2)使用count()和sum()计算平均年龄:select sum(age)/count(*) from testtab2;
(3)avg():计算平均数
示例:计算平均年龄 select avg(age) from testtab2;
(4)max()最大值、 min()最小值
示例1:最大年龄 select max(age) from testtab2;
示例2:最小年龄 select min(age) from testtab2;
错误示例:在where条件子句中使用聚集函数
select sum(age) from testtab2 where sum(age)>20;
聚集函数不能使用在where子句中
如果非要使用这种方式可以使用 [having 条件] 这种格式(having在后面讲到):
分组操作 将同一类型的数据分成一组查看,使用关键字 group by
表数据:将按照age年龄分组
示例(查看每个年龄有多少人): select age, count(*) from testtab2 group by age;
如果在分组时需要聚集函数 作为查询条件,就不能使用where 子句了,前面有演示,需要使用 having关键字来代替
【limit(分页查询)】
如果想查询某几条连续的数据,从第几条开始,查询多少条,使用关键字:limit
全部数据:
使用1(查询最前面的多少条记录):select * from 表名 limit 记录数
示例1:查询前3条记录 select * from testtab2 limit 3;
使用2:select * from 表名 limit 开始位置,记录数
查询 limit 0,3 : 说明记录是从0开始计算的,和 limit 3效果是一样的
查询 limit 2,3 : 第一个参数 表示记录开始,第二个参数 表示记录数