数据库简述(以MySQL为例)
⼀、数据库中的概念
1.数据库是⽤户存放数据、访问数据、操作数据的存储仓库,⽤户的各种数据被有组织地存放在数据库中。可以随时被有权限的⽤户查询、统计、添加、删除和修改。可以说,数据库是长期存储在计算机内的,有组织、可共享的数据集合。
javascript 数组求和在实际使⽤中,数据库和应⽤程序的关系是:应⽤程序被⽤来向数据库请求数据、并显⽰结果,它可以向数据库发出操作和查询指令,数据库系统安装在数据库服务器上,数据库⽤来存储数据,数据库服务器向应⽤程序响应和提供数据。
另外,数据库系统成熟的标志是数据库管理系统的出现。
数据库管理系统(DataBase Managerment System,简称DBMS)是管理数据库的⼀个软件,它充当所有数据的知识库,并对它的存储、安全、⼀致性、并发操作、恢复和访问负责,是对数据库的⼀种完整和统⼀的管理和控制机制。数据库管理系统不仅让我们能够实现对数据的快速检索和维护,还为数据的安全性、完整性、并发控制和数据恢复提供了保证。数据库管理系统的核⼼是⼀个⽤来存储⼤量数据的数据库。DBMS是所有数据的知识库,并对数据的存储、安全、⼀致性、并发操作、恢复和访问负责。
DBMS有⼀个数据字典(有时被称为系统表),⽤于贮存它拥有的每个事物的相关信息,例如名字、结构、位置和类型,这种关于数据的数据也被称为元数据(metadata)。
⼀个真正的数据库系统由硬件和软件两个⽅⾯构成。⽐如,我们要使⽤Oracle数据库,需要安装Oracle公司提供的数据库服务器软件和⼀台⽤于安装数据库管理系统的⾼性能的计算机服务器。
当今应⽤最普遍的是关系型数据库管理系统。⽬前,市场上流⾏的⼏种⼤中型数据库,如Oracle、DB2、Sybase、MS SQL Server、MySql等都是关系型数据库管理系统。
2.关系模型数据库采⽤“表”组织数据(表称为“关系”),⼀个数据库由许多个表组成,多个表数据之间存在着关系,在这些表上的数据操作依赖于关系,关系⽤来描述多个表之间的数据依存,包括了⼀对⼀、⼀对多、多对多的关系。
数据库中的若⼲概念有:
(1)概念模型:它是基于客户的想法和观点所形成的认识和抽象。
(2)实体(Entity):指客观存在的、可以被描述的事物,例如员⼯、部门。
(3)属性(Attribute):⽤于描述实体所具有的特征或特性,如使⽤编号、姓名、⼯资等级等属性来描述员⼯的特征。
(4)关系(Relationship):指实体之间的联系,主要包括⼀对⼀、⼀对多和多对多的关系。
(5)数据模型:也叫关系模型,是实体、属性、关系在数据库中的具体体现。
(6)关系数据库:⽤于存储各种类型数据的”仓库”,是⼆维表的集合。
(7)表:实体的映射。
(8)⾏和列:⾏代表⼀个具体的实体的数据,也叫⼀条记录;列是属性的映射,⽤于描述实体的。
(9)主键和外键:主键(primary key)是能确定⼀条记录的唯⼀标识,⽐如,⼀个表⾥包括⾝份证号、姓名、年龄三个属性,其中,⾝份证号是可以唯⼀确定⼀条记录的,其他属性值都可能会有重复,所以⾝份证号是这个表的主键。外键(Foriegn Key)⽤于与另⼀张表的关联,是能确定另⼀张表中某条记录的字段,⽤于保持数据的⼀致性,⽐如,A表中的⼀个字段,是B表的主键,那么该字段还可以是A表的外键。
3.数据库中的数据最终还是存储在磁盘上的;数据库存在的意义在于能够⾼效地管理和操作数据。
我们平时听到数据库有⼤型、中型和⼩型之分,这是基于数据库在较⼤数据量时能否依然维持较⾼的操作效率来划分的。
我们接下来以⼀种开源的中型数据库MySQL为例,了解数据库的有关操作。默认情况下,在mysql中创建表时不指定表的存储引擎,则会使⽤配置⽂件my.ini中default-storage-engine=InnoDB作为存储引擎。
⼀般情况下,mysql的存储引擎有:
(1)MyISAM。应⽤于以读写操作为主,很少更新、删除,并对事务的完整性、并发性要求不⾼的情形。
(2)InnoDB。应⽤于对事务的完整性要求较⾼,在并发条件下要求数据的⼀致性的情形。InnoDB是mysql默认的存储引擎。
(3)MEMORY。表的数据存储在内存中,访问效率⾼,但是⼀旦服务关闭,表中的全部数据丢失。
(4)MERGE。是⼀组MyISAM表的组合,可以突破对单个MyISAM表⼤⼩的限制,并提⾼访问效率。
我们在创建表时,可以显式地指定表的存储引擎,如:create table (...)engine=MyISAM;
⼆、数据库操作
1.假定我们在电脑上(Win7OS)安装了MySQL数据库,然后可以通过在CMD窗⼝中输⼊net start mysql开启mysql服务,接着在电脑上
安装navicat客户端来操作mysql。我们还可以在DOS窗⼝中以某个⽤户权限进⼊mysql(如:mysql -uroot -p 对应的密码)。
2.数据库中包含的对象主要有:
(1)表,table。基本的数据存储对象,以⾏和列的形式存在,列是字段,⾏是记录。
(2)约束,constraint。执⾏数据校验,保证数据完整性。⼤部分数据库⽀持这些完整性约束:NOT NULL⾮空,UNIQUE Key唯⼀
键,PRIMARY KEY主键,FOREIGN KEY外键,Check 约束。创建约束的时机主要有两个,⼀个是在建表的同时创建,另⼀个是在建表后创建(修改表)。可以定义列级或表级约束,还可以有单列约束和多列约束。
(3)数据字典。就是系统表,存放数据库相关信息的表。
(4)视图,view。⼀个或者多个表数据的逻辑显⽰。
(5)索引,index。⽤于提⾼查询的性能。
3.SQL(Structured Query Language,结构化查询语⾔)是在关系型数据库上执⾏数据操作、数据检索以及数据维护的标准语⾔。
我们先普及下数据表的列类型:
数值型,分为整数和浮点数类型,整数类型有int等,浮点数类型有float、double、decimal等;
⽇期类型,有date、time、timestamp等;
字符串类型,有char(n)、varchar(n)、blob、text等。
在MySql数据库中,SQL语句主要可以划分为以下⼏类:
(1)DDL(Data Definition Language):数据定义语⾔,定义对数据库对象(库、表、列、索引)的操作。包括:CREATE、DROP、ALTER、RENAME、 TRUNCATE等。例:
#查看有哪些数据库
show databases;
#创建⼀个数据库
create database itszt;
#使⽤⼀个数据库
use itszt;
#删除⼀个数据库
drop database itszt;
#创建⼀个表
create table user(id int primary key auto_increment,stuno varchar(8) unique,stuname varchar(12) not null);
#显⽰⼀个表的结构
desc user;
#向表中新增⼀列
alter table user add hobby varchar(10);
#改变表的名称
alter table user rename student;
#还可以这样改变表的名称
rename table user to student;
#清空表中所有的记录
truncate user;
(2)DML(Data Manipulation Language): 数据操作语⾔,定义对数据库中记录的操作。包括:INSERT、DELETE、UPDATE、SELECT等
#向表user中增加三条记录
insert into user(stuno,stuname) values('20170001','张三');
insert into user(stuno,stuname) values('20170002','李四');
insert into user(stuno,stuname) values('20170003','王五');
#删除表中的⼀条记录
delete from user where stuno='张三';
#更新表中的⼀条记录
update user set stuname='赵六' where stuno='20170003';
#查看表中的所有记录
select * from student;
#多表连接主要有交叉连接(笛卡尔积连接),内连接,⾃然连接,左外连接,右外连接,全外连接(同交叉连接),⾃连接
create table dept(dept_id char(3) primary key,dept_name varchar(7) not null,dept_addr varchar(50) not null);
create table emp(emp_id int primary key,emp_name varchar(7) not null,dept_id char(3),constraint for
eign key dept_fk(dept_id) references dept(dept_id));
#交叉连接/全外连接
select * from emp cross join dept;
#内连接
select * from emp inner join dept on emp.dept_id=dept.dept_id;
delphi报表控件#⾃然连接
select * from emp natural join dept;
#左外连接
select * from emp left join dept on emp.dept_id=dept.dept_id;
#右外连接
select * from emp right join dept on emp.dept_id=dept.dept_id;
#⾃连接
select * from dept d1,dept d12 where d1.dept_addr=e2.dept_addr and d1.dept_id<>d2.dept_id;
(3)DCL(Data Control Language): 数据控制语⾔,定义对数据库、表、字段、⽤户的访问权限和安全级别的操作。包括:GRANT、REVOKE等。
(4)Transaction Control:事务控制,包括:COMMIT、ROLLBACK、SAVEPOINT等。
事务的4个特性:原⼦性(atomic,确保事务中的所有操作要么都发⽣,要么都不发⽣),⼀致性(consistency,⼀个事务⼀旦结束,系统所处的状态和业务规则是⼀致的,确保数据不被破坏),隔离性(isolation,多个事务操作同⼀数据时,每个事务都有各⾃的完整数据空间),持久性(durability,⼀旦事务完成,事务的结果应该持久化)。
数据库管理系统通过采⽤重执⾏⽇志确保事务的原⼦性、⼀致性和持久性,采⽤锁机制来实现隔离性。
springboot基础教程#mysql默认事务⾃动提交;为此,先将⾃动提交设置为⼿动提交
mysql查看所有存储过程set autocommit=false;
#开启事务
start transaction;
begin;
#向user表中插⼊两条记录
insert into user(stuno,stuname) values('20170004','(●—●)');
insert into user(stuno,stuname) values('20170005','⼩⽩');
#回归
rollback;
#更新数据并设置保存点
update user set stuname='韦⼩宝' where stuno='20170004';
#设置保存点
savepoint a1;
update user set stuname='⼩⽞⼦' where stuno='20170005';
#回滚⾄保存点matlab是什么语言写的
易语言打包rollback to a1;
#执⾏事务
commit;
4.触发器,trigger。
#先创建两个表作为演⽰⽤,⼀个是仓储表,另⼀个是销售表;销售出去⼀件产品,则仓储中该产品就会减少⼀件
create table store(storeid int(5) primary key ,storename varchar(20),storenum int(10));
insert into store(storename,storenum) values('⼩⽶6' 5000);
insert into store(storename,storenum) values('iphone6' 5000);
create table sale(orderid int(5) primary key auto_increment,ordername varchar(20),ordernum int(10),storeid int(5) references store(storeid));
#创建触发器
create trigger tg1 after insert on sale for each row
begin
update store set dernum where storeid=sale.storeid;
end;
5.存储过程。
#创建⼀个存储过程,该存储过程实现查询user表中的所有记录
create procedure go()
begin
select * from user;
end;
#调⽤存储过程go(),相当于执⾏select * from user;
call go();
#注:存储过程go()的()中可以传⼊参数,⽽且语句块可以更为复杂些
create procedure go2(num int(5))
begin
declare temp integer;
declare total integer;
set temp=1;
set total=1;
while temp<=num do
set total=total+temp;
set temp=temp+1;
end while;
select total;
end;
#调⽤存储过程,并传⼊参数
call go2(100);
6.⾃定义函数。
函数与存储过程的重要不同之处在于,函数可以有返回值。
#模仿go2(),创建⼀个函数go3(),并返回⼀个整型变量
create function go3(num int(5)) returns int
begin
declare temp integer;
declare total integer;
set temp=1;
set total=1;
while temp<=num do
set total=total+temp;
set temp=temp+1;
end while;
return total;
end;
#由于函数有返回值,所以直接通过select调⽤函数的返回值即可
select go3(100);
三、数据库设计
切记,数据库设计三范式:
第⼀范式:表不可再分割,即"表中不能再有表";
第⼆范式:主键必须全部依赖,不能部分依赖;
第三范式:主键不能传递依赖。
1.良好的数据库设计,应该遵循这样三个原则:
(1)节省数据的存储空间;
(2)能够保证数据的完整性;
(3)⽅便进⾏数据库应⽤系统的开发。
2.⼀般来说,⼀个软件项⽬开发周期,包括这样⼏个阶段:
(1)需求分析阶段。分析客户的业务和数据处理需求。
(2)概要设计阶段。设计数据库的E-R模型图(概念模型),确认需求信息的正确和完整。
(3)详细设计阶段。将E-R图转换为多张表(物理模型),进⾏逻辑设计,并应⽤数据库设计的三⼤范式进⾏审核。
(4)代码编写阶段。选择具体数据库进⾏物理实现,并编写代码实现前端应⽤。
(5)软件测试阶段。
(6)安装部署。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论