目录
菜鸟学习数据库
一、目录
第一章-数据库概述
学习目标:明白什么是数据库,数据库管理系统的作用,以及功能
内容:
三级模式二级映像
在学习以下几章节的操作,建议自行安装数据库sql server
第二章 数据库、表和数据操作
数据库的常用操作
约束
修改表
表的 查询
like语句的语法格式是
sql常用函数
常用的字符函数以及功能
常用的日期函数
常用的数据表操作有:建立表,修改表和删除表
数据查询及用法
简单查询
连接查询1
连接查询2
子查询
联合查询
数据更新
数据插入1
插入成批查询结果2
用select into 插入数据3
数据修改
视图
视图的概念
视图的作用
视图的创建
视图的重命名
视图的修改
删除视图
视图查询与表查询相一致
视图规则
索引
索引的基础知识
索引的分类
创建索引
查看索引
重建索引
删除索引
- 熟悉数据,数据处理和数据库的概念
- 数据库的特点,内容以及应用
- 了解概念模型与数据模型
- 了解什么是数据库,什么是DBMS
DBMS的主要功能:
- 数据定义功能
- 数据存取功能
- 运行管理功能
- 数据组织、管理和存储
- 数据库的建立和维护功能
数据库的基本语法(下列语法仅为了解,后续章节再深入学习)(增删改查)
数据操作:
- select:从数据库中检索数据
- insert:把新的数据记录插入数据库中
- update:更新数据记录
- merge:有条件的插入/跟新/删除记录
- delete:从数据库中删除记录
数据定义
- create table:创建新表
- drop table:删除新表
- alter table:更改表内结构
- create view:创建视图
- drop view:删除视图
- create index:创建索引
- drop index:删除索引
- create schema:创建模式
- drop schema:删除模式
- create domain:创建新的数据值式
- alter domain:更改域定义
- drop domain:删除域
访问控制
- grant:授权用户访问 权限
- revoke:撤销用户访问权限
- create role:创建角色
- grant role:授权角色包含用户访问权限
- drop role:删除角色
事务控制
- commit:结束事务(成功提交)
- rollback:放弃事务(回滚事务,撤销事务执行)
- set transaction:定义当前事务的数据访问特权
- start transaction:显式的开始小心事务
- savepoint:为事务设置一个保存点
- 程序化sql(t-sql(transaction-sql))
- declare:为查询定义一个游标
- explain:描述查询的数据访问计划
- open:打开游标
- close:关闭游标
- fetch:检索一条查询结果的记录
- prepare:为动态执行做准备sql语句
- execute:动态执行sql语句
- describe:描述已准备的查询
概念数据模型(实体-联系模型E-R模型)(实体,联系,属性,键,域)
菱形代表联系,矩形代表实体,椭圆形代表属性,连接线代表实体、联系和属性之间的关系或实体与联系之间的相连关系(关系对应有:1-1,1-n,n-m这几种)
数据库系统管理的主要特点:
- 采用数据模型组织和管理数据
- 具有较高的数据独立性
- 数据共享程度更高,兀余度比较小
- 由DBMS软件提供了对数据统一控制的功能
- 由DBMS提供了方便用户使用的接口
关系数据库系统(RDBMS)
- 三级模式的优点有三种:
- 有利于数据的安全性
- 有利于数据共享,减少数据兀余
- 简化接口,方便用户
2.二级映像
- 外模式/模式映像
外模式改变时,模式保持不变,保证了逻辑独立性
2.模式/内模式
当存储结构(内模式)发生改变时,模式保持不变,保证了数据的物理独立性
创建数据库:create database 数据库名
代码式:
create database 数据库 on primary --主数据文件 (name = 逻辑名, filename = 'd:\sql\xx.mdf',--地址 size = x, --文件大小 maxsize = 最大容量, filegrouth = 增长方式 ), filegroup stugroup -- 次数据文件 (name = 逻辑名, filename = 'd:\sql\xx.mdf',--地址 size = x, --文件大小 maxsize = 最大容量, filegrouth = 增长方式 ), log on --日志文件 (name = 逻辑名, filename = 'd:\sql\xx.mdf',--地址 size = x, --文件大小 maxsize = 最大容量, filegrouth = 增长方式)
使用数据库:use 数据库名
删除数据库:drop database 数据库名【cascade(全清式)|restrict(约束式)】
修改数据库文件:
alter database 数据库名 modify name|file 新数据库名 and --1.更改数据库名 alter database 数据库名 modify name = 新数据库名 --2.更改数据库文件 alter database 数据库名 modify file (name =‘逻辑名’, filename = 'd:\sql\xx.mdf',--地址 size =修改后大小 maxsize = 修改后最大容量, filegrouth = 修改后增长方式)
移除文件:remove file ‘文件’
系统表
- 不允许使用sql语言直接修改内容
- 不允许编写程序直接访问系统表中信息
- 如果需要系统表的信息,可以通过系统的存储过程和系统提供的函数进行访问
创建表:create table 表名
删除表:drop table 表名
约束
- 主键约束:constraint 约束名 primary key(不可以有null值,而unique只能有一个null)
- 空值约束:null/not null
- 唯一性约束:unique constraint(可以有多个列组合,一个表只可以有一个primary key约束,儿可以有多个unique约束)
- default约束:
- check约束:检查约束
修改表
alter table 表名
[add 新列名 数据类型 列完整性约束] --增加表
[drop column 列名
] --删除列 [modify 列名 数据类型 ] --修改列属性
alter column 列名 列数据类型
表的 查询
select * from 表名 --查询全表
where <查询条件>
group by 列名 having 分组条件
order by 列名(desc降序)(升序默认)
where 条件
- 比较:>、<、>=、<=、!=、!>、!<
- 确定范围:between...and,not between...and
- 字符匹配:Like,not like
- 空值:is null,is not null
- 多重:and、or
在sql结构化查询语言中,like语句有着至关重要的作用。
like语句的语法格式是
:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用是在一个字符型字段列中检索包含对应子串的。
A:% 包含零个或多个字符的任意字符串:
1、like'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。
2、like'%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。
3、like'%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。
B:_(下划线) 任何单个字符:
like'_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)。
C:[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符:
1,like'[CK]ars[eo]n' 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
2、like'[M-Z]inger' 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer)。
D:[^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符:
like'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如MacFeather)。
E:* 它同于DOS命令中的通配符,代表多个字符:
上面取自博客https://blog.csdn.net/yangshengwei230612/article/details/103779008?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162296630416780269877641%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162296630416780269877641&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-1-103779008.pc_search_result_cache&utm_term=sql%E4%B8%ADlike%E7%9A%84%E7%94%A8%E6%B3%95&spm=1018.2226.3001.4187
sql常用函数
count (*) 计算记录的个数,如人数 count(列名) 对某一列计数 sum(列名) 求某一列总和 avg (列名) 求平均值 max(列名) 最大值 min(列名) 最小值
- 注:在使用函数的时候,要记得与group by同用,否则可能会出错
常用的字符函数以及功能
ascll 返回字符表达式中最左侧的字符的ascll码
char 获取ascll码对应字符 left 用于截取从最左侧第一个字符开始,指定长度的字符串
eg:select left('qwerrttyyu',3)==>qwe
right 用于截取从最右侧第一个字符开始,指定长度的字符串 len 获取字符串长度
eg:select len('sdgfhgtdjh')==>10(10个字符)
lower 将大写转为小写 ltrim 删除前导空格字符串,返回删除了前导空格之后的字符串 ririm 清空右边连续的空格 reeplace(e1,e2,e3) 用e3表达式替换e1表达式中出现的e2表达式,并返回替换后的字符串
space 生成空格 str 数字向字符转换函数 substring 取子字符串
eg:select substring('hello',1,2)==>he
upper 将小写转换为大写
常用的日期函数
dateadd 更新的日期 DateDiff 返回跨两个指定日期的日期边界和时间边界 datepart 日期的字符串 day 返回一个整数,当天的datepart部分 getdate 系统时间 getutcdate 返回UTC时间 month 返回月 year 返回年
常用的数据表操作有:建立表,修改表和删除表
1,、创建表:
create table 表(列名 列数据类型 列完整性约束)
完整性约束有五种:主键约束、外键约束、唯一约束、空值约束、默认约束、检查约束
2.修改表:
alter table 表
add 列 数据类型 完整性约束 ---增加新的列
drop column 列 ---删除列
alter column 列 ---修改列3.删除表
drop table 表
数据查询及用法
简单查询
select *(所查询的内容) from 表
where 条件表达式
group by 列 (having 列条件表达式) --分组
order by 列 -- 排列
连接查询1
select 列
from 表1 join 表2 on 表1.列1=表2.列2
where 条件表达式
连接查询2
select 列
from 表1 , 表2
where 表1.列1=表2.列2(条件表达式)
子查询
select 列
from 表1
where 列1 in
(子查询select 列2 from 表2
where 条件表达式)
联合查询
select 列 1
from 表1
where 条件表达式
union 【all】
select 列2
from 表2
where 条件表达式
注:用union关键字联合两张表或多张表,各个select语句中列的个数、顺序、数据类型必须一致,列的名字或别名有第一个select的列名表决定,order by语句必须放在最后一个select语句中,在默认情况下,union将去除重复的行,而使用union all则会保留重复的行
连接查询是两张表的横向连接查询,而联合查询是两张表的纵向连接查询
数据更新
数据插入1
insert into 表1(列1,列2....)
values (列值1,列值2....)
(列值1,列值2....)...
(用于向表格中插入新的行)
插入成批查询结果2
insert into 表1(列1,列2...)
子查询
用select into 插入数据3
select into 语句从一个表中选取数据,然后把数据插入表2中,差用与创建表的备份复件或者用于记录进行存储
将表2中数据备份到表1中:
select * into 表1【in externaldate】
from 表2
在表2中的数据(某一列的数据)插入表1中:
select 表2.列 into 表1【in externaldate】
from 表2
数据修改
update 表
set 列 1= 表达式,(列 2= 表达式...)
where 条件表达式
视图
视图的概念
- 视图是有其他表或视图上查询定义的一种特殊表,是一个虚表
- 视图是查看数据库中数据的一种机制
- 数据库中只存放视图的定义,不存放视图包含的数据(在基本表中),视图不占用物理空间
- 视图中引用的表称为视图的基本表
- 定义视图后,可以查询和更新,但对视图的查询与更新最终转换为基本表的查询与更新
视图的作用
- 方便用户使用数据
- 提供安全的保护机制
- 增加操作灵活性
- 提供一定的逻辑独立性(外模式)
视图的创建
create view 视图名(列1,列2..)
as (子查询)
with check option
视图的重命名
sp_rename 视图名,新视图名
视图的修改
alter view 视图名
as (子查询)
删除视图
drop view 视图名
视图查询与表查询相一致
视图规则
- 行列子集视图可以更新
- 若视图有两个基本表导出,则此视图不能更新
- 被修改的列必须直接引用表列中的基础数据,不能用聚合函数计算得到
- 被修改的列不受group by和order by或distinct子句影响
视图可当做表一样操作,但规则要遵守,而且注意视图只是个虚表,不占物理空间
索引
索引的基础知识
索引是关系中一列或几列值的列表及相应的指向关系中标识这些值的数据项的逻辑指针
索引能提高查询效率
通过创建唯一索引,可以保证数据库行的唯一性
外键上建立索引,可以加速连接,有益于实现数据的参照完整性
(简而言之就是省时以及提高性能)
索引和视图不同,创建聚簇索引会占用内存(物理空间)
索引的分类
聚簇索引:有且只能有一个
非聚簇索引:数据与 索引的存储位置相互独立,索引顺序与数据的物理排列顺序无关,可以建立等多个非聚集索引(与物理存储顺序无关)
唯一索引(其他索引):唯一的索引值对应表中唯一的数据
索引类型 | |
聚簇索引 | 空间 |
非聚簇索引 | XML |
唯一索引 | 计算列上的索引 |
分区索引 | 带有包含列的索引 |
筛选 | 列存储 |
全文 | 等等 |
创建索引
create (unique)(clustered | nonclustered)index 索引名 on 表(列)(次序1),(列)(次序2)....
查看索引
exec sp_helpindex 表名
重建索引
dbcc dberindex(‘表’,索引,填充因子)
删除索引
drop index 索引 on 表或视图
注:索引在MySQL为重点掌握部分,在此文章为次重点掌握,在校考试则为了解部分
建议用书:数据库系统(封面为红色)(主学)、数据库系统原理及应用 (封面白色,手感略粗糙起点)(参考符练习本)以及数据库系统原理与应用技术(封面红白色)(参考)
练手的话去牛客网连选择题
由于小编的能力有限,欢迎各位大佬中的大佬前来评论指点出小编的错误
待更ing.....