学习内容较为枯燥,好音乐陪伴你一起学习成长。
01/什么是数据库?
如果要理解数据库,我们就先要了解我们存放物品所用的仓库。仓库是用来集中存放物品用的,那么数据库从字面意思如何理解呢?
数据库是存放数据的仓库。仓库是用来集中存放物品的,而数据库是用来集中存放数据的。
如果要理解数据库,我们还需要理解数据和信息的概念,在现在世界中,我们使用和获取的都是信息,那么信息是如何存储为数据的呢?数据又是如何提取为信息的呢?
例如:现在发生的新型冠状病毒肺炎每天都会公布病例数据,其实这些数据是存放在数据库中的,通过提取这些数据,我们可以得到有用的信息。数据库中记录了病人所在的街道、地区、城市和省份,还记录了病人的基本信息,那么通过这些信息,我们就能够统计出每个省份的病例数以及每个城市的病例数等等。
数据从数据库中提取出来就变成了信息,信息是有用的数据。
所有信息都存储为数据,数据是信息的载体。
02/数据库的基本功能是什么?
通过数据库的概念,我们知道,数据库是存储和管理数据的仓库。那么数据库最基本的功能应该是:数据存储。
那么除了数据存储功能外,如果在一个位置的数据,另外一个位置通过网络也可以访问,这就是数据库的另外一个基本功能:数据共享。
也就是说,数据库最重要的两大功能:数据存储和数据共享。
例如:我现在在湖北省宜昌市开了一张银行卡账户,并存储了一笔钱,我现在要在北京市取出其中的一部分,那么这里就使用到了数据库的数据存储和数据共享功能。我们开户是将我们的基本信息存储到银行的数据库中,我们向银行存钱,那么银行就存储我们的账户信息,这就是数据存储的功能。而且因为银行共享了数据库,所以我在湖北省宜昌市开户、存钱,在中国的任何地方甚至是其他国家也可以取到这笔钱,这就是数据共享的功能。
常用的数据库管理软件有哪些?
我们要使用数据库,那么就需要借助于数据库管理软件,数据库管理软件使用得最广泛的有三种:
- Oracle
- SQL Server
- MySQL
Oracle和MySQL都是Oracle(甲骨文)公司的产品,Oracle公司是全球最大的数据库公司,最著名的软件产品是Oracle数据库管理软件,Oracle数据库在全球拥有最大的市场,是全球最大的商用数据库软件。而MySQL软件是全球最大的免费开源的数据库产品,因为产品免费,在全球也拥有很大的市场份额。
SQL Server数据库是微软公司的产品。微软公司是全球最大的软件公司,SQL Server是一种大中型的企业级数据库管理软件,在Windows操作系统上拥有最大的份额,是一种操作简单容易的数据库,我们数据库基础课程讲解的是SQL Server数据库。
数据库到底是有什么作用?看下图应该就明白了。
就是在应用程序发送请求操作时,到服务器数据库中查询数据,然后再返回给应用程序。
数据库起到的作用是存储数据、检索数据、生成新的数据,相对应的要求是:统一、安全、性能。
数据库可以存储大量数据,方便检索和访问,能保持数据信息的一致、完整,共享和安全,通过组合分析,产生新的有用信息。
2|1数据库发展史
万物生长,如今使用的数据库也不是一蹴而就,也是慢慢发展而来。可分为四个阶段:
①萌芽阶段—文件系统,只是使用磁盘文件来存储数据
②初级阶段—第一代数据库Access,是网状模型和层次模型数据库
③中级阶段—第二代数据库SQL server、Mysql,是关系型数据库和结构化查询语言
④高级阶段—新一代数据库Oracle,是“关系-对象”型数据库
当下最流行的数据库是Oracle、SQL server、DB2
Oracle是“关系-对象”型数据库,它的特点是产品免费、服务收费
SQL server是关系型数据库,多版本,易用性好
DB2支持多操作系统、多种类型的硬件和设备
2|2数据库名词
DBA-----数据库管理人员
DB-------数据库
DBMS--数据库管理系统
系统数据库:master、model、tempdb、msdb,不能随意更改
数据文件为.mdf或.ndf
日志文件为.ldf
数据的默认路径为:C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data
2|3SQL组成
DML(数据操作语言)
——查询、插入、删除和修改数据库中的数据;
——SELECT、INSERT、 UPDATE 、DELETE等;
DCL(数据控制语言)
——用来控制存取许可、存取权限等;
——GRANT、REVOKE 等;
DDL(数据定义语言)
——用来建立数据库、数据库对象和定义其列
——CREATE TABLE 、DROP TABLE 等
TCL (事务控制语句)
变量说明、流程控制、功能函数
——定义变量、判断、分支、循环结构等
——日期函数、数学函数、字符函数、系统函数等
01启动数据库服务
如果要操作数据库,必须启动数据库服务,如果没有启动数据库服务,那么数据库中的任何操作都不能进行。
我们在安装数据库的时候,实际上是安装了两个软件,一个是数据库服务器端软件,一个是数据库客户端软件。如果我们要在本机上操作和管理数据库,必须在安装时两个软件同时安装成功。
如果数据库服务器端软件安装成功,那么我们就可以在计算机管理界面->SQL Server配置管理器中启动SQL Server服务。启动SQL Server服务是进行数据库操作的第一步。
启动SQL Server服务
启动SQL Server服务
02登录
当我们启动了数据库服务以后,我们应该打开SQL Server Management Studio管理工具,管理工具就是数据库客户端软件。
SQL Server Management Studio管理工具
启动管理工具后,会显示登录界面,我们可以使用Windows身份验证模式,它直接使用Windows用户身份进行登录,不用输入用户名和密码。我们也可以用SQL Server的超级管理员账户sa进行登录。登录完成后,就可以对数据库进行操作了。
03创建数据库和删除数据库
1、创建数据库
创建数据库
创建数据库
进行数据库的操作,首先要创建数据库,创建数据库一定要指定数据库的名称,如School数据库,也可以指定初始大小,自动增长,路径(存放位置)等属性。创建数据库的时候,SQL Server会自动创建两个文件,一个是数据文件,一个是日志文件。数据库中的所有数据都是存放到数据文件中的,数据文件的扩展名是.mdf;数据库中还必须至少有一个日志文件,日志文件用来记录数据库的操作信息,以便于今后出现灾难时恢复数据,所以又称为事务日志或恢复日志,日志文件的扩展名是.ldf。
注意:创建数据库一般都能正常创建,如果不能正常创建数据库,应该检查数据库存放位置是否存在,数据库是否已经创建过。
2、删除数据库
删除数据库
对于不需要的数据库,我们可以进行删除操作。删除数据库可通过直接在数据库上点击鼠标右键选择“删除”操作,或者使用键盘上的Del键进行删除。如果是正在使用的数据库,不能直接删除,必须选择“关闭现有连接”复选框。
04分离数据库和附加数据库
对于在单位或学校创建好的数据库,而且数据库中也存放了数据,我能不能把它们拷贝到家里去使用呢?如果直接使用复制命令是不可以的。在数据库中,数据库正在被使用的时候,是不能直接复制和删除数据库文件的,因为数据是共享的,你的操作可能会影响别人去使用数据库。
那么要实现将一个位置的数据迁移到另外一个位置怎么办呢?可以使用脱机操作(也就是先断开数据库的服务),再进行复制操作,这样是允许的。但是这种操作有很大的缺陷,我们数据库中通常有多个数据库,你脱机以后,所有数据库都不能正常使用了,这在实际应用中一般是不会出现的。
怎么样让我们当前一个数据库从数据库服务器中分离出来,而不影响其他数据库的正常使用呢?这就需要使用分离和附加数据库操作。分离和附加操作是一对操作,我们分离的数据库,一定要使用附加数据库来进行操作。而且我们一般是在一个位置进行分离,在另外一个位置进行附加。因为分离数据库是将某一个数据库从数据库服务器中分离出来的,所以不会影响其它数据库的正常使用。
1、分离数据库
分离数据库
分离数据库
分离数据库时,如果有其他用户正在访问此数据库,将不能正常分离。如果一定要分离数据库,请选择“删除连接”复选框。
2、附加数据库
在管理工具数据库文件夹上鼠标点击右键,选择“附加...”操作,然后选择附加的数据文件即可。
附加数据库
3|0数据库基本操作
3|1登录数据库
在安装成功后,在开始菜单中会看到如下所示文件夹:
点击SQL server management studio,即可出现如下登录界面:
3|2数据库远程连接设置
第一步,打开外围配置器设置
第二步,进行相应的设置
第三步,进行连接操作
3|3数据库的分离操作
分离是指默认情况下数据库在联机状态下我们不能对数据库文件进行任何复制删除等操作,如果将数据库分离的话就可以对数据文件进行复制、剪切、删除等操作了。一般想直接备份数据文件,就先分离数据库,之后把数据文件复制到别的地方,再把数据文件附加回去就可以了。
操作如下所示:
先将数据库进行分离操作:
完成上述操作,数据库便分离成功,然后就可以做相应的复制等操作了。
分离也可以使用代码实现,如下
1
sp_detach_db demo
再将分离的数据库附加到工作面板上:
附加也可以使用代码实现,如下:
sp_attach_db demo
3|4数据库的脱机、联机操作
脱机与联机是相对操作,先要有脱机才能执行联机操作,与分离不同的是,脱机后的数据库只是不能被访问了,但还在工作面板中,但分离后的数据库,是不存在工作面板中的。当要再想使用该数据库,脱机状态的数据库只需要联机即可,分离的数据库需要附加才可以。
脱机操作如下:
脱机也可使用代码实现,代码如下:
alter database demo set offline
联机操作如下:
联机也可使用代码实现,代码如下:
alter database demo set online
3|5数据库收缩操作
收缩是把数据库以及日志的内存收缩
操作如下
收缩数据库操作:
收缩日志文件操作:
搜索文件也可使用如下命令:
DBCC ShrinkFile('数据库名', targetsize); /* 收缩数据库文件 */ DBCC ShrinkFile('数据库名_log', targetsize); /* 收缩日志文件 */
需要注意的是:
Targetsize:单位为兆,必须为整数,DBCC SHRINKFILE 尝试将文件收缩到指定大小。
DBCC SHRINKFILE 不会将文件收缩到小于“实际使用的空间”大小,例如“分配空间”为10M,“实际使用空间”为6M,当制定targetsize为1时,则将该文件收缩到6M,不会将文件收缩到1M。
搜索数据库可使用如下命令:
DBCC SHRINKDATABASE(数据库名,百分比)
此处的百分比:即“收缩后文件中的最大可用空间”,取值范围“大于等于0, 小于100%”,实际使用中设为0即可。
3|6数据库的备份、还原操作
备份操作是为了保证数据的完整性以及避免异常操作而导致数据无法挽回的操作,个人觉得是非常非常有必要的。
数据库的备份分为如下几种:
完全备份: 备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件。(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份,换言之,清除存档属性)。完全备份也叫完整备份。
差异备份: 差异备份是针对完全备份:备份上一次的完全备份后发生变化的所有文件。(差异备份过程中,只备份有标记的那些选中的文件和文件夹。它不清除标记,即:备份后不标记为已备份文件,换言之,不清除存档属性)。
事务日志备份: 在特定事务日志备份之前执行的完整数据库备份和上次差异备份(如果有)。在完整数据库备份之后执行的所有事务日志备份或在特定事务日志备份之前执行的差异备份(如果您还原了差异备份)。如果你设置了恢复模式为【简单】,你将无法使用【事务日志】备份。SQL Server 2000 和 SQL Server 2005: 创建事务日志备份,您必须使用完整恢复或大容量日志记录恢复模型。
备份操作如下,此处选择的是完整备份:
还原数据库操作
3|7权限设置
权限设置就是设置登录名和用户名操作。
登录名与用户名的区别:
1.登录名是指可以使用新建的登录名和密码登录数据库这个程序软件,但不能打开或展开用户自己创建的数据库;
2.用户名是在登录名基础上,为用户自己创建的数据库新加的可查看用户,但要进行增查改删操作仍然需要为该用户添加使用权限。用户名可以与登录名相同,也可以不同。一个数据库可以拥有多个用户,一个用户也可以访问多个数据库。
先以sa为登录名登录做如下操作:
创建登录名:
使用刚创建的登录名登录,去使用由sa用户创建的数据库,发现不可用:
创建用户,分配权限
添加好后就可以对sa创建的数据库进行操作了
4|0基本语法
说了这么多,再来看数据库语法怎么操作,数据库四大操作,就是增删改查。在做这些操作的时候,首先得要有个数据库,有张表,这样才可以操作。把问题简单化,想成平时的档案室。数据库就是档案室,可以存放很多档案,表就是档案袋中的文件。
4|1创建数据库
建数据库和建表操作可手动创建,也可以使用代码创建,先看手动创建:
手动创建数据库操作如下:
完成上述两步就已经创建好一个数据库了。
在使用代码操作的时候,需要先做如下所示操作,并连接:
使用代码创建数据库,实现如下:
create database demo use demo
还有一种创建数据库语法,就是指定数据库文件参数和日志文件参数,语法如下:
create database 数据库名 on [primary] ( <数据文件参数> [,…n] [<文件组参数>] ) [log on] ( <日志文件参数> [,…n] )
举例如下:
CREATE DATABASE stuDB ON PRIMARY --默认就属于PRIMARY主文件组,可省略 ( NAME='stuDB_data', --主数据文件的逻辑名 FILENAME='D:\project\;, --主数据文件的物理名 SIZE=5mb, --主数据文件初始大小 MAXSIZE=100mb, --主数据文件增长的最大值 FILEGROWTH=15% --主数据文件的增长率 ) LOG ON ( NAME='stuDB_log', FILENAME='D:\project\;, SIZE=2mb, FILEGROWTH=1MB ) GO
若一次性要创建多个数据库或多个日志文件,在小括号外加个,号即可
4|2创建表
手动创建表,操作如下:
保存输入表名即可
使用代码创建表如下:
代码为:
create table demo ( nname nchar(10), age tinyint, sex int )
数据库和表已经创建好了
4|3首先来看增
1、插入一条数据:
方法一:安照列名依次给出数据值,不能交换顺序,数据类型不能出错
insert into demo values ('zhang',25,1)
方法二:
insert into demo (nname,age,sex) values ('san',18,0)
方法三:交换顺序,数值按照列名给就行
insert into demo (nname,sex,age) values ('san',1,22)
方法四:没给数值的列显示null
insert into demo (nname) values ('li')
2、插入多条数据:
使用select,union是指连接的意思
insert into demo(nname,age,sex)若不写列名,则默认插入所有列数据 select 'wang',28,0 union select 'wu',30,1
3、插入一列
alter table demo add sex int
4、复制demo表中数据到demo1表中:
insert into demo1(nname,nage,asex) select nname,age,sex from demo
注意事项
1:每次插入一行数据,不可能只插入半行或者几列数据,因此,插入的数据是否有效将按照整行的完整性的要求来检验;
2:每个数据值的数据类型、精度和小数位数必须与相应的列匹配;
3:不能为标识列指定值,因为它的数字是自动增长的;
4:如果在设计表的时候就指定了某列不允许为空,则必须插入数据;
5:插入的数据项,要求符合检查约束的要求
6:具有缺省值的列,可以使用default(缺省)关键字来代替插入的数值
4|4其次来看删
删除某一行:
delete from demo where nname='li'
删除某一列:
alter table demo drop column sex
删除整张表:
delete from demo --不加where条件就是删除整个表
清空整张表:
truncate table demo
注意:删除整张表操作和清空整张表操作对比
删除是删除了所有,包括表结构
清空只是清空了表中数据,但表结构还在,清空速度快些
删除数据库
drop database new
还可以先查询是否有该数据库,再做删除操作,代码如下:
if exists(select * from where name='new') drop database new
做了一个if判断,是指整个系统数据库,删除数据库的前提条件是,要删除的这个数据库没有被使用
4|5然后来看改
改某一列数据
update demo set age='28' where nname='zhang'
set是设置要改的数据
改多列数据:
update demo set nname='zhao', age='13', sex='0' where nname='li'
4|6最后就是查询
查询表中所有数据,*代表所有列:
select * from demo
查询表中某一行所有数据:
select * from demo where nname='li'
查询表中某一行某一列的数据:
select age from demo where nname='li'
查询出来的结果列用as取别名:
select age as '年龄' from demo where nname='li'
查询出来的结果列用=取别名:
select wname = nname from demo
注意:wname是新列名,nname是表中已存在的列名
4|7添加约束
约束目的:保证数据的完整性和有效性
约束分为如下几种:
1.主键约束:唯一非空(特点) primary key PK_
一个表里面只能存在一个主键
允许存在把两列作为一个主键
2.默认约束:默认值 default key DK_
当不填数据时默认采用设定好的值
3.唯一约束:数据不重复,允许一行数据为空 Unique Key 唯一允许一个为空
4.检查约束:用来检查填入的数据是否满足要求 Check Key
5.非空约束:不能为空 not null
6.外键约束:外键指的是,表A中的id为主键,但在表B中id不是主键,表A的id就是表B的id外键。
外键语法:
alter table 表名 add constraint FK_字段名--"FK"为外键的缩写 foreign key (字段名) references 关联的表名(关联的字段名) --注意'关联的表名'和'关联的字段名'
添加约束有三种方式,分别是建表中(在列名中添加和不在列名中添加),建表后
方法一:建表中在列名中添约束,语法为:列名 数据类型 约束条件,代码如下:
create table dome5 ( sid smallint primary key, sname nchar(10) not null default 'zhangsan', saddre nvarchar(20), sage tinyint unique key, semail char(20) check (semail like '%@%.%'), createtime datetime default getdate() )
方法二:建表中不在列名中添加约束,语法为:constraint 约束名 约束语法,代码如下:
create table stdent2 ( sid int, sname nchar(15) not null default 'zhangsan', saddress nvarchar(30), sage tinyint, semail char(20), stime datetime default getdate(), constraint PK_sid primary key(sid), constraint CK_sage check (sage>10), constraint CK_semail check (semail like '%@%.%') )
需要注意的是:默认约束只能在 列名 数据类型 后面添加,意思就是默认约束要使用在方法一添加
方法三:建完表后再添加约束,代码如下:
alter table stu add constraint ck_ssex check (ssex=0 or ssex=1)
alter是修改表结构
剩下内容我们下篇继续接着分享