数据(Data)
描述事物的符号记录
包括数字,文字、图形、图像、声音、档案记录等
以“记录”形式按统一的格式进行存储
表
将不同的记录组织在一起
用来存储具体数据
数据库
表的集合,是存储数据的仓库
以一定的组织方式存储的相互有关的数据集合
数据库管理系统(DBMS)
是实现对数据库资源有效组织、管理和存取的系统软件
是一个人机系统,由硬件、OS、数据库、DBMS、应用软件和数据库用户组成
用户可以通过DBMS或应用程序操作数据库
第一代数据库
自20世纪60年代起,第一代数据库系统问世
是层次模型与网状模型的数据库系统
为统一管理和共享数据提供了有力的支撑
第二代数据库
20世纪70年代初,第二代数据库——关系数据库开始出现
20世纪80年代初,IBM公司的关系数据库系统DB2问世,开始逐步取代层次与网状模型的数据库,成为行业主流
到目前为止,关系数据库系统仍占领数据库应用的主要地位
第三代数据库
自20世纪80年代开始,适应不同领域的新型数据库系统不断涌现
面向对象的数据库系统,实用性强、适应面广
20世纪90年代后期,形成了多种数据库系统共同支撑应用的局面
—些新的元素被添加进主流数据库系统中:例如,Oracle支持的(“关系-对 象”数据库模型
SQL Server(微软公司产品)
面向Windows操作系统
简单、易用
Oracle(甲骨文公司产品)
面向所有主流平台
安全、完善,操作复杂
DB2 (IBM公司产品)
面向所有主流平台
大型、安全、完善
ySQL(甲骨文公司收购)
免费、开源、体积小
关系数据库
关系数据库系统是基夭关系模型的数据库系统
关系模型的数据结构使用简单易懂的二维数据表
关系模型可用简单的“实体-关系”(E-R)图来表示
E-R图中包含了实体(数据对象)、关系和属性三个要素
实体
也称为实例,对应现实世界中可区别于其他对象的“事件”或“事物,如银行客户、银行账户等
属性
实体所具有的某一特性,一个实体可以有多个属性,如“银行客户”实体集中的每个实体均具有姓名、住址、电话等属性
联系
实体集之间的对应关系称为联系,也称为关系,如银行客户和银行账户之间存在“储蓄”的关系
所有实体及实体之间联系的集合构成一个关系数据库
关系数据库的存储结构是二维表格
在每个二维表中
每一行称为一条记录,用来描述─个对象的信息
每—列称为一个字段,用来描述对象的一个属性
关系型数据库
Oracle, MySQL
SQLServer、Sybase
Informix、access
DB2、FoxPRO
应用举例
12306用户信息系统
淘宝账号系统
联通手机号信息系统
银行用户账号系统
网站用户信息系统
非关系数据库也被称作NoSQL (Not Only SQL)
存储数据不以关系模型为依据,不需要固定的表格式
非关系型数据库的优点
数据库可高并发读写
对海量数据高效率存储与访问
数据库具有高扩展性与高可用性
常用的非关系数据库:Redis、mongoDB等
一款深受欢迎的开源关系型数据库
Oracle旗下的产品
遵守GPL协议,可以免费使用与修改
特点
性能卓越、服务稳定
开源、无版权限制、成本低
多线程、多用户
基于C/S(客户端/服务器)架构
安全可靠
MySQL商业版是由MySQL AB公司负责开发与维护,需要付费才能使用
MySQL社区版是由分散在世界各地的MySQL开发者、爱好者一起开发与维护,可以免费使用
两者区别
商业版组织管理与测试环节更加严格,会比社区版更稳定
商业版不遵守GPL,社区版遵从GPL可以免费使用
商业版可获得7*24小时的服务,社区版则没有
第一阵营:5.0-5.1阵营,可说是早期产品的延续
第二阵营:5.4-5.7阵营,整合了MySQL AB公司、社区和第三方公司开发的存储引擎,从而提高性能
第三阵营:6.0-7.1阵营,就是MySQL Cluster版本,为适应新时代对数据库的集群需求而开发
下载网址:http://www.dev.mysql.com/downloads
DDL(Date Definition Language,数据定义语言):用来建立数据库、数据库对象和定义字段,如CREATE、ALTER、DROP。
DML(Date Manipulation Language,数据操纵语言):用来插入、删除和修改数据中的数据,如INSERT、UPADTE、DELETE
DQL(Date Query Language,数据查询语言):用来查询数据中的数据,如SELECT
DCL(Data Control Language,数据控制语言):用来控制数据库组件的存取许可、存取权限等,如COMMIT、ROLLBACK、GRANT、REVOKE
格式:
create table 表名(字段01名称 字段01类型 字段01约束,字段02名称 字段02类型 字段02约束,…)存储引擎,字符集
字段名称、类型、约束解释:
字段01名称:属性名称,自定义
字段01类型:int(4) 整型 代表0000-9999
double 浮点型
decimal(5,2)有效数字是5位,小数点后面保留2位 100.00;099.50
float 单精度浮点 4字节
char 字符
char (10)固定长度字符串,字符串要用单引号引起来
varchar(50)可变长度字符串
字段01约束:
非空约束:内容不允许为空 not null
主键约束:非空且唯一 标识 primary key(主键)
默认约束:假如没有填数据,默认预先设定的值填写 default ‘未知’
自增特性:id 1 2 3 4 auto_increment(自动增长)
存储引擎:myisam innodb
字符集:UTF-8
创建数据库
create database a;
使用数据库
use a;
创建表
create table aaa(id int(5) auto_increment primary key, age int(3) not null, name varchar(128) not null, height varchar(128));
char和varchar
1、char的长度是不可变的,而varchar的长度是可变的
字段b:类型char(10),值为: abc,存储为: abc (abc+7个空格)
字段d:类型varchar(10),值为: abc,存储为: abc(自动变为3个的长度)
2、超出长度自动截取
字段c:类型char(3),值为: abcdefg,存储为: abc (defg自动删除)
字段e:类型varchar(3),值为: abcdefg,存储为:abc(defg自动删除)
3、var(10)和char(10),都表示可存10个字符,无论存放的是数字、字母还是UTF8汉字(每
个汉字3字节),都可以存放10个
4、char最多可以存放255个字符
varchar的最大长度为65535个字节,varchar可存放的字符数跟编码有关
字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766个字符
字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845个字符
数据表中插入列
alter table aaa add column weight varchar(64);
删除表
格式:drop table 库名.表名;
查看已存在数据库信息
show databases;
mysql默认4个数据库
information_schema:定义访问数据库元数据的方式。数据库名和表名,列的数据类型、访问权限等。
mysql:核心数据库,负责存储数据库用户、权限、关键字等用户自己需要使 用的控制和管理信息。
performance_schema:数据库的性能参数,存储引擎等。
sys:sys系统库下包含许多视图,它们以各种方式对preformance_schema表进行聚合计算展示。
查看数据库表信息
show tables;
DML语句用于对表中的数据进行管理
包括的操作
insert:插入新数据
update:更新原有数据
delete:删除不需要的数据
注意:对数据的操作用DELETE,对库和表用drop
向数据表中插入新的数据内容
insert into aaa(age,name,height,weight) values(17,'zhangsan',80,111),(18,'lisi',85,112),(18,'wangwu',86,113),(19,'zhaoliu',87,114);
查看插入的信息
select * from aaa;
修改、更新数据表中的数据记录
update aaa set age=100,height=100 where name='zhangsan'
格式:delete from 表名 where 条件表达式(不带where代表删除表中所有记录)
delete from a.aaa where name='zhangsan';
清空表
delete from info;
truncate table info;
truncate清空表,表还在;drop是删除表中所有记录。
truncate和delete是两者的新值初始id不同。
临时表
临时建立的表,用于保存一些临时数据,不会长期存在
create temporary table a(id int(4) not null auto_increment, name varchar(32) character set utf8 collate utf8_bin not null,age int(10) not null, primary key(id))engine=innodb default charset=utf8;
添加数据
insert into a(id,name,age) values(22,'zhangsan',17),(23,'lisi',20);
可以查看到表中添加的数据;但是查看表的时候,没有这张表
第一种
复制的是表结构,没有数据
create table aa like a;
方法二
show create table a\G;
CREATE TABLE "bbb" (
"id" int(5) NOT NULL AUTO_INCREMENT,
"age" int(3) NOT NULL,
"name" varchar(128) NOT NULL,
"height" varchar(128) DEFAULT NULL,
"weight" varchar(64) DEFAULT NULL,
PRIMARY KEY ("id")
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
insert into bbb select * from aaa;