什么是数据库
Excle的数据的确很方便,但是对于企业来说就不一样了。一个公司里面可能有成千上万的Excel表格,还在不同的电脑上,而他们的员工和客户需要实时看到企业给他们提供的所有数据,这种文件管理的方法就很麻烦,总不能每分钟都把一个新的巨大无比的Excel文件发给所有客户呀。
数据库呢,就是存储数据的地方,就像冰箱是存储食物的地方一样。正是因为有了数据库后,所有人可以直接在这个系统上查找数据和修改数据。例如你每天使用余额宝查看自己的账户收益,就是从后台数据库读取数据后给你的。
数据库的英文名称叫DB(Database),那么数据库里面有什么东东呢?
其实,数据库通常包含一个或多个表组成。如果你用过Excel,就会知道Excel是一张一张的二维表。每个表都是由列和行组成的,其中每一列都用名字来标识出来。同样的,数据库里存放的也是一张一张的表,只不过各个表之间是有联系的。所以,简单来说:
数据库=多张表+各表之间的关系
其实数据库是逻辑上的概念,它是一堆互相关联的数据,放在物理实体上,是一堆写在磁盘上的文件,文件中有数据。这些最基础的数据组成了表(table)。
常用的数据库软件,例如MySQL、Oracle、SQL Server等都是实现上面理论的数据库。各个数据库软件的使用差别大同小异,但是因为MySQL是开源的,成为各大公司使用的主流,面试也主要以MySQL为主。
数据库是按照数据的结构来组织,存储,和管理数据的仓库,简而言之,就是存放数据的仓库
数据库和SQL是什么关系?
结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
数据库里面放着数据,而SQL是用来操作数据库里数据的语言(工具)。
例如有一碗米饭(碗就是mysql,里面放的米是数据),你要吃碗里的米饭,拿什么吃?拿筷子(sql)。用筷子(sql)操作碗里(mysql)的米饭(数据)
数据库有哪些?
Oracle是最挣钱的数据库,出自甲骨文公司,市场占有率非常高,功能非常强大,被一些大型企业,电信,银行,证券公司所使用
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。MySQL目前最流行的开源数据库,被甲骨文公司所占用,威胁着老大Oracle的地位,开源,免费,支持多平台,易用
SQLServer,微软开发的数据库,仅支持Windows操作系统,号称是windows上最好用的数据库。数据库的天下不仅仅是MySQL和Oracle的,SQLServer也正在慢慢崛起,微软网罗了不少数据库的专家,推出了不少重磅功能。
MongoDB,最好用的文档型数据库,是NOSQL类型数据库的领导者之一,也是当前最成功的NoSQL类型数据库,数据存储格式采用JSON形式,非常灵活。
Redis,最好的内存级数据库,查询效率极高,并且在Redis 3.0之后,支持多种数据类型,String,Set,List,Hash等类型,开始支持集群,弥补了自身短板。是目前做缓存最流行的数据库
Neo4J,最好的图形化数据库,流行话较低,但是图形化数据库的绝对领导者。
SQLite,最流行的嵌入式数据库,占领手机行业的绝对领导者地位,Android和IOS两大手机系统,都内嵌了SQLite数据库,SQLite是一个完整的关系型数据库,支持标准SQL,支持事务操作,程序包非常小,是嵌入式设备的最佳选择。
数据类型的属性
MySQL关键字 | 含义 |
NULL | 数据列可包含NULL值 |
NOT NULL | 数据列不允许包含NULL值 |
DEFAULT | 默认值 |
PRIMARY KEY | 主键 |
AUTO_INCREMENT | 自动递增,适用于整数类型 |
UNSIGNED | 无符号 |
CHARACTER SET name | 指定一个字符集 |
表结构语句操作
选择数据库
user mydb1
创建MySQL数据表需要以下信息:
表名
表字段名
定义每个表字段
创建表
create table student(id int,name varchar(20),sex varchar(20),age int,salery float(6,2),birthday date)
删除表
drop table student;
查看所有表
show tables
查看表的创建细节
show create table student;
展示表结构
desc student
在原有的学生基础上添加address列
alter table student add address varchar(20)
在原有的学生基础上删除address列
alter table student drop address
在原有的学生基础上修改address列的类型和长度
alter table student MODIFY COLUMN address VARCHAR(40);
注意:(同样类型的数据字段增加长度是没问题的,也是经常使用的,但是减小长度可能会导致数据丢失;注意修改类型应该谨慎,因为类型之间数据需要转换,可能会导致数据出错或者丢失)
数据库操作语言
插入数据
insert into student values(1,’zhangsan’,’nan’,19,389.10,’1999-10-10’);
查询
select * from student
删除单条数据
delete from student where id=1;
修改数据
设置所有人的年龄加10岁
update student set age=age+10
普通条件查询
查询所有学生信息
select * from student;
查询id为1的学生信息
select * from student where id=1;
模糊查询
查询所有姓名中包含张的同学
select * from student where name like ‘%张%’
排序查询
按照数学成绩从小到大查询
select * from student order by math;
分页查询
limit是mysql的语法
select * from table limit m,n
分组查询
select * from employee group by sex;
报表查询
统计班级里边有多少学生
select count(*)from student;
统计总成绩大于250分的人数
select count(*)from student where (math+english+chinese)>250;
统计班级里边各科总成绩
select sum(math),sum(english),sum(chinese) from student
统计所有科目的总成绩
select sum(math+english+chinese) from student;
统计一下语文平均成绩
select sum(chinese)/count(*) from student;
select avg(chinese) from student;
统计一下班级语文最高分和最低分
select max(chinese) from student;
select min(chinese) from student;