数据库学习笔记(一)

什么是数据库

所谓“数据库”是以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。
1.关系型数据库
关系型数据库是依据关系模型来创建的数据库,关系型数据可以很好地存储一些关系模型的数据,比如一个老师对应多个学生的数据(“多对多”),一本书对应多个作者(“一对多”),一本书对应一个出版日期(“一对一”)。
2.非关系型数据库
非关系型数据库主要是基于“非关系模型”的数据库(由于关系型太大,所以一般用“非关系型”来表示其他类型的数据库),主要有:1.列模型:存储的数据是一列列的。关系型数据库以一行作为一个记录,列模型数据库以一列为一个记录。(这种模型,数据即索引,IO很快,主要是一些分布式数据库)2.键值对模型:存储的数据是一个个“键值对”,比如name:liming,那么name这个键里面存的值就是liming 3.文档类模型:以一个个文档来存储数据,有点类似“键值对”。

数据库操作方法(以mysql数据库为例)

//以下数据库名   都以user为例:
//1.创建数据库
create database user;
//2.修改数据库
alter database user character set utf8 collate 校对规则;
//3.删除数据库
drop database user;
//4.显示所有数据库
show databases;
//5.查看当前数据库的创建SQL
show create database user;

数据库表操作方法

1.java中的字段对应mysql中的字段

java中类型 mysql数据库中类型
byte tinyint
short smallint
int int
long bigint
float float
double double
boolean bit
char/String char/varchar
Date date(只有日期)
time(只有时间)
datetime(日期时间都有,但默认初始化为null)
timestamp(日期时间都有,但默认初始化为当前时间)
File Blob/Text

2.数据库表操作语法

//1.创建数据库表语法:
create table 表名( 字段1 类型(长度) 约束, 字段2 类型(长度) 约束,字段3 类型(长度) 约束);
/* 
 约束
 主键约束 primary key ,auto_increment
 唯一约束 unique
 非空约束 not null
*/
//2.删除表
drop table 表名;
//3.查看所有表
show tables;
//4.查看创建表的SQL
show create table 表名;
//5.修改表结构
alter table 表名 add 列名 类型(长度) 约束;          //添加新列
alter table 表名 modify 列名 类型(长度) 约束;       //修改列
alter table 表名 change 旧名 新名 类型(长度) 约束;  //修改列名称
rename table 旧表名 to 新名;                       //修改表名
alter table 表名 character set 字符集;             //修改表的字符集

数据库表记录的增删改查

1.增加一条表记录

insert into 表名(列名1,列名2,...) values(值1,值2,...);   //这是插入一条记录,然后给特定的几个字段赋初值。
insert into 表名 values(值1,值2,...); //这里是默认给所有列都赋初值。

2.删除一条记录

//delete from 表名 [where 条件]   举例如下:
delete from user where id = 2;

注意:truncate table user;和 delete from user;
都是删除整个表.但第二种方式属于DML语句,是一条一条记录的删除,通过事务回滚可以再获取删除掉的数据;而第一种方式属于DDL语句,是删掉这张表,再创建一张具有同样字段的表,删除更高效,但删除掉的数据不可恢复。

3.修改一条记录

//update 表名 set 列名=值,列名=值  [where 条件]
update user set password='abc' where username = 'hello';

4.查询记录(重点

基本查询:
	select [distinct] *|列名 from 表 [条件];
	例如:   select * from exam;
		select name,englist from exam;
         	select distinct englist from exam;//distinct用来去掉重复值;	
		select name,englist+chinese+math from exam;//展示三门成绩相加的结果;
		select name,englist+chinese+math as sum from exam;//展示三门相加的结果并取别名sum(as,可以省略);
条件查询:
	举例:  select * from exam where name ='李四';
		select * from exam where name ='李四' and english > 90;
		select * form exam where name like'李%';//%和_作为占位符,_只能代表一个字符,而%代表一个或者多个字符;
		select * form exam where english in (69,79,85);//范围查询;
排序查询:
	使用 order by 字段名称 asc/desc
	举例:   select * from exam order by chinese;//按照Chinese升序进行排序;
		 select * from exam order by chinese desc;//按照Chinese倒序进行排序;
		 select * from exam order by chinese desc,english asc;//按照Chinese倒序进行排序,如果相同,按照英语成绩升序排序;
		 select * from exam where name like '李%' order by english asc;//把姓李的人按照英语进行升序排序;
分组统计查询:
	聚合函数使用
		sum();求和    count();个数    max();最大值   min();最小值  avg();平均值
		举例:   select sum(english) from exam;//获得英语成绩总和;
			select sum(english),sum(math) from exam where name like '李%';//获取所有姓李的人的英语成绩和数学成绩总和;
			select sum(english)+sum(math) from exam;  和select sum(english+math) from exam;//都是统计英语和数学的所有值,区别:当统计数据中有null时,结果会有差别;
				解决:使用ifnull(english,0)//如果结果有null,将其当作0处理;
			select count(*)from exam where name like '李%';//获得姓李的人的个数;
			select ave(chinese) from exam;//获取中文成绩平均值;
	分组查询:
		语法:使用group by 字段名称
		举例:
			select product,count(*) from orderitem group by product;
			select product,sum(price) from orderitem group by product;//where 后不能跟聚合函数,如果必须要写,将where改成having关键字就行;
			select product,sum(price) from orderitem group by product having sum(price) > 5000;

总结:正确的查询语句应有的顺序为:
s(select)… F(from)… W(where)… G(group by)… H(having)… O(order by)
select和from必须有,where,group by,having, order by可有可不有,按照实际需要确定。

你可能感兴趣的:(数据库学习笔记(一))