在数据库中,schema,catalog分别指的是什么

在数据库中,schema,catalog分别指的是什么,第1张

数据库 Catalog Schema 概念解读

按照SQL标准的解释,在SQL环境下Catalog和Schema都属于抽象概念,可以把它们理解为一个容器或者数据库对象命名空间中的一个层次,主要用来解决命名冲突问题。从概念上说,一个数据库系统包含多个Catalog,每个Catalog又包含多个Schema,而每个Schema又包含多个数据库对象(表、视图、字段等),反过来讲一个数据库对象必然属于一个Schema,而该Schema又必然属于一个Catalog,这样我们就可以得到该数据库对象的完全限定名称从而解决命名冲突的问题了;例如数据库对象表的完全限定名称就可以表示为:Catalog名称Schema名称表名称。

详细信息如下:

In Oracle:

server instance == database == catalog: all data managed by same execution engine

schema: namespace within database, identical to user account

user == schema owner == named account: identical to schema, who can connect to database, who owns the schema and use objects possibly in other schemas

to identify any object in running server, you need (schema name + object name)

In PostgreSQL:

server instance == db cluster: all data managed by same execution engine

database == catalog: single database within db cluster, isolated from other databases in same db cluster

schema :namespace within databaseIt allows many users to use one database without interfering with each other

user == named account: who can connect to database, own and use objects in each allowed database separately

to identify any object in running server, you need (database name + schema name + object name)

In MySQL:

server instance == not identified with catalog, just a set of databases

database == schema == catalog: a namespace within the server

user == named account: who can connect to server and use (but can not own - no concept of ownership) objects in one or more databases

to identify any object in running server, you need (database name

--首先,用下面的语句,检查/修复数据库/并整理索引碎片(需要比较长的时间,请在系统空闲时进行此工作)

USE MASTER

GO

sp_dboption '你的数据库名', 'single user', 'true'

Go

DBCC CHECKDB('你的数据库名', REPAIR_REBUILD)

Go

USE 你的数据库名

go

exec sp_msforeachtable 'DBCC CHECKTABLE('''',REPAIR_REBUILD)'

exec sp_msforeachtable 'DBCC DBREINDEX('''')'

go

sp_dboption '你的数据库名', 'single user', 'false'

Go

--然后用这个压缩数据库日志文件

SET NOCOUNT ON

DECLARE @LogicalFileName sysname,

@MaxMinutes INT,

@NewSize INT

--Select From Sysfiles

USE YSERP -- 要 *** 作的数据库名

SELECT @LogicalFileName = 'YSERP_Log' , -- 日志文件名

@MaxMinutes = 10, -- Limit on time allowed to wrap log

@NewSize = 20 -- 你想设定的日志文件的大小(M)

-- Setup / initialize

DECLARE @OriginalSize int

SELECT @OriginalSize = size

FROM sysfiles

WHERE name = @LogicalFileName

SELECT ' Original Size of ' + db_name() + ' LOG is ' +

CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +

CONVERT(VARCHAR(30),(@OriginalSize8/1024)) + ' MB '

FROM sysfiles

WHERE name = @LogicalFileName

CREATE TABLE DummyTrans

(DummyColumn char (8000) not null)

DECLARE @Counter INT,

@StartTime DATETIME,

@TruncLog VARCHAR(255)

SELECT @StartTime = GETDATE(),

@TruncLog = ' BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY '

DBCC SHRINKFILE (@LogicalFileName, @NewSize)

EXEC (@TruncLog)

-- Wrap the log if necessary

WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not

/expired/ AND @OriginalSize = (SELECT size FROM sysfiles WHERE name =@LogicalFileName) AND (@OriginalSize 8 /1024) > @NewSize

BEGIN -- Outer loop

SELECT @Counter = 0

WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))

BEGIN -- update

INSERT DummyTrans VALUES ( ' Fill Log ' )

DELETE DummyTrans

SELECT @Counter = @Counter + 1

END

EXEC (@TruncLog)

END

SELECT ' Final Size of ' + db_name() + ' LOG is ' +

CONVERT(VARCHAR(30),size) + ' 8K pages or ' +

CONVERT(VARCHAR(30),(size8/1024)) + ' MB '

FROM sysfiles

WHERE name = @LogicalFileName

DROP TABLE DummyTrans

SET NOCOUNT OFF

--其次是压缩主数据文件

企业管理器->所有任务->压缩数据库->压缩文件->文件->压缩到最终大小->输入最小值即可

select from 数据库名dbosysobjects where xtype = 'U' order by name asc

差数据库下的表名

SELECT FROM 数据库名dboSysColumns WHERE id=Object_Id('数据库名dbo表名')

sp_helpdb ----------查本服务器中所有数据库 可跟库名

例:sp_helpdb 库名

-------------------------------------------------------------

sp_databases -------------查看本服务器中可用的数据库

--------------------------------------------------------------------

sp_helpfile -------------------查看当前工作着的数据库

-----------------------------------------------------------

sp_helpfilegroup ---------------查看当前工作着的组的信息。可加参数,跟组名

例:sp_helpdb 库名

----------------------------------------------------------------

sp_renamedb -----------改数据库名

例:sp_renamedb 旧库名,新库名

----------------------------------------------------------------

select groupname from sysfilegroups where status=24

---------查看文件组 =8是查只读文件组 =16是查默认文件组 =24是查即只读又默认

---------------------------------------------------------------------------

sp_dboption ----------修改数据库选项值

例:sp_dboption 库名 选项 值

值决定真假 一般用:true/faule 或off/on表示

选项一般常用为:use only(数据库拥有者)single user(单一用户)read only(只读)

--------------------------------------------------------------------------

dbcc shrinkdatabase ---------收缩数据库

例:dbcc shrinkdatabase (库名,10)

收缩库,剩余空间保留10%,后面如果不加notruncate,则释放空间 *** 作系统,

加truncateonly,归还空间给 *** 作系统,但忽略所给的百分比数值。

----------------------------------------------------------------------

dbcc shrinkfile ---------收缩文件

用法与ddcc shrinkdatabase相同。

----------------------------------------------------------------------

alter database ---------------修改数据库

用法:这是起始句,告诉要做的是修改数据库,然后再接要做什么工作。每次只做一项工作

alter database 库名

add file 文件名to filegroup 文件组名

----------------增加库文件,格式与建库时括号里指定大小时的格式一样

add log file 文件名 -------------增加日志文件

remove file 文件名 ---------删除库内的文件

add filegroup 文件组名 -----------增加一个文件组

modify file 文件名 -------------修改文件属性

modify filegroup 组名 ------------修改文件组属性

---------------------------------------------------------------------------

drop database --------------删除数据库

例:drop database 库名1,库名2 ---------可同时删除两个库

------------------------------------------------------------------------

create table 表名

(列名 类型,

列名 类型) -------------------建立表

--------------------------------------------------------------------

select from 表名 ---------查询表结构

--------------------------------------------------------------------

select @@dbts ----------查询最后一次 *** 作

--------------------------------------------------------------------

insert into 表名

(列名,列名)

values (变量,变量) ------------向表中插入数据

如省略列名,则必须把每列的变量填全,不可缺少。可以省略 into

--------------------------------------------------------------------

sp_addtype 自定义类型名 系统类型名 -------用户自定义类型

--------------------------------------------------------------------

sp_droptype 自定义类型名 -----------删除自定义类型

如有数据库正在使用该自定义类型,则不能删除

--------------------------------------------------------------------

alter table ---------修改表结构

用法: alter table 表名

alter column 列名 类型 ---------修改列的类型

drop column 列名 --------删除列

add (column) 列名 --------增加列,实际用时不加 column

-----------------------------------------------------------------

sp_help -------------查看数据库中对象信息

用法: sp_help 表名 ---------------查表的信息

或 sp_help 库名 --------------查库信息

后面可以跟库名或者表名,是查数据库或者表的信息

-----------------------------------------------------------------

sp_spaceused --------查看对象占用的空间信息

用法: sp_spaceused ----------查当前库占用空间信息

或 sp_spaceused 表名 ----------查指定表占用空间信息

后面可以加表名查看表占空间信息。如不加,则查看当前数据库。

------------------------------------------------------------------

sp_depends ------------查看对象的相关性

用法: sp_depends 表名 -----------后面加表名

------------------------------------------------------------------

sp_rename ---------------重新命名

用法: sp_rename 旧表名,新表名 ---------改表名

或 sp_rename '表名旧列名','新列名' 'column' -------修改列名

--------------------------------------------------------------------

create index --------------创建索引

用法: create index 索引名 on 表名 (列名) ------创建索引

或: create unique clustered index 索引名 on 表名 (列名)

------创建簇集唯一索引 unique是建唯一索引 clustered是建簇集索引

---非簇集索引用:nonclustered

----------------------------------------------------------------------

select top ---------查表中前几行

用法: select top 3 from 表名 -------查表中前三行

或: select top 10 percent from 表名 -------显示表中前10%数据

------------加入percent是百分比的意思。只以大于的最小整数,无小数

----------------------------------------------------------------------

select 列名,列名,列名 from 表名 -------显示表中特定的列

----------------------------------------------------------------------

select ,列名 from 表名 ----------查询表中所有,后面再加一列

----------------------------------------------------------------------

select distinct ----------查询不重复数据 distinct用于去掉重复数据

用法: select distinct from 表名 ---------查表中不重复数据

或: select distinct into 新表名 from 旧表名 ------查旧表中不重复数据同时生成新表

-------------------------------------------------------------------------------------

select 列名+列名 from 表名 -------允许有计算式出现,显示无列名的计算结果

如想加列名,则: select 列名+列名 as 新列名 from 表名

-------------------------------------------------------------------------

select 年龄,联系电话,cast (年龄 as varchar(2))+联系电话 from 表名

--------把整型数据年龄转化为字符型与字符型数据联系电话相加

----------------------------------------------------------------------------

ctrl+o(字母O) --------清空数据。空值与别的数据运算结果为空

----------------------------------------------------------------------------

select 原始列名 别名 from 表名

select 原始列名 as 别名 from 表名

select 别名=原始列名 from 表名

--------指定别名的三种方法。非法符号可''或[]引起来,不得直接使用。

----------------------------------------------------------------------------

select from 表名

where 年龄 between 20 and 30 ---------显示年龄在20到30之间的人

-------between是从条件一到条件二之间的限制

-----------------------------------------------------------------------

select from 表名

where 年龄 in (20,21,22) ---------显示年龄为20、21、22的人

--------in是限制在这些条件内的,是显示一个取值范围

-----------------------------------------------------------------------

select from 表名

where 联系电话 like '[1-3]%' --------查电话是1-3开头的人

--------like是像这些条件的语句,能用通配符:%、_、[]、[^]

--------意思分别代表:所有字符、一个字符、一位上可取值、一位上不可取值

----------------------------------------------------------------------

select from 表名

where 姓名 like '[e[]%'

or 姓名 like '%e]'

escape 'e' ------------显示以‘[’开头或以‘]’结尾的所有数据,中间有不显示

----------escape ''是指定通配符

-----------------------------------------------------------------------------

order by ---------给数据排序

用法: select from 表名

order by 年龄 -----------排序显示年龄。默认为升序(asc)要降序必须加desc

------------------------------------------------------------------------

select distinct top 3 from 表名

order by 年龄 desc --------显示最大的三种年龄

-------------------------------------------------------------------------

select from 表名

where 年龄 in (select distinct top 3 年龄 from 表名 order by 年龄)

order by 年龄 -----------显示年龄最小的所有人,并排序

-------------------------------------------------------------------------

select 姓名,

case

when MCSE成绩 >=80 and MCSE成绩<=100

then '考的不错'

when MCSE成绩 >=60 and MCSE成绩<80

then '考的一般'

when MCSE成绩 >=0 and MCSE成绩<60

then '不及格'

when MCSE成绩 is null

then '这小子没考试'

else '异常数据'

end

MCSE成绩

from 表名

-----------判断语句 null是空值的意思,不能用等号连接,只能用is

-----------case到end为一列里的判断,case在这里是取值,结果用于输出,不显示原值

-----------------------------------------------------------------------------

select 列名1,

case 列名2

when 1 then '男生'

when 0 then '女生'

else '未知'

end

from 表名

--------这里case取列名,是用于这一列每项取值比较,在这里列名2用的是bit型数据

-------------------------------------------------------------------------

select into 库1表1 from 库2表2

-----------把库2中表2移到库1中

------------------------------------------------------------------------

数据维护三个命令:

insert ---------向表中插入数据

update ---------修改表中的数据

delete ---------删除表中的数据

------------------------------------------------------------------------

insert into 表名 -----------(into可有可无)

(列1,列2,列3,列4) -----------表的原始列,用括号括起来

values ----------有这条命令只能插入一条数据

(数1,数2,数3,数4) ----------插入的数值

---------可以省略原始列清单,但必须把所有列都赋值

------------------------------------------------------------------------

insert into 表1

(列1,列2,列3,列4)

select from 表2 where sex=1

----------将表2中sex列等于1的数据信息插入表1中

-------------------------------------------------------------------------

update 表名

set 姓名='丁一'

where 姓名='李一' ----------把表中姓名叫李一的改为丁一。

------------where后面跟定位的列与值

-------------------------------------------------------------------------

update 表名

set 学号=14,

姓名=陈强

where 学号=1 ------------把学号为1的同学改为学号14,姓名陈强

-----------------------------------------------------------------------

update 表名

set 学号=年龄+7,

姓名='陈一强',

年龄=29

where 学号=14

-------把学号为14的同学资料改为年龄加七赋给学号姓名改为陈一强,年龄改为29

-------如果没用where定位,则修改全部值

------------------------------------------------------------------------

delete 表名

where 学号>30 ---------把学号大于30的资料删除

--------如不指定条件,则删表内所有数据。这是记录日志文件的 *** 作

----------------------------------------------------------------

truncate table 表名

-------清空表。不记录日志文件的 *** 作。

--------------------------------------------------------------------

create view 图名 -------------新建视图

用法: create view 图名

as

select 列名 from 表名

------------------------------------------------------------------------------

syscomments ------------这个表存着视图代码的信息

------------------------------------------------------------------------------

alter view 图名

with encryption

as

select 列名 from 表名 -----------用with encyption语句给视图原代码加密

-------------不可恢复,除非保留源代码

------------------------------------------------------------------------------

sp_helptext 图名 -----------查看视图源代码

-----------------------------------------------------------------------------

select text from syscomments

where id =(select id from sysobjects where name ='图名')

---------查视图的代码

-----------------------------------------------------------------------------

create view 图名

as

select from 源图名 ------------基于源图创建新视图

-----------------------------------------------------------------------------

create view 图名

as

select 列1 as 新列1,列2 新列2,列3=新列3 ---------起别名的三种方法

from 表名 -----------在新视图中为列起别名,则所见的是新起的别名

-----------------------------------------------------------------------------

sp_depends 表名 -----------查该表的相关性,有多少表、图与之相关。

-------------------------------------------------------------------------------

create view 图名

select from 表名

where 年龄<20

with check option ---------强制插入数据符合年龄小于20的条件,加在where后面

-----------是约束insert和update语句的

-------------------------------------------------------------------------------

select 男公民姓名,女公民姓名 from 男公民,女公民

where 男公民配偶编号=女公民编号

------------查结婚男女。较原始的语法,后被下列语法取代

或: select 男公民姓名,女公民姓名

from 男公民 join 女公民 on 男公民配偶编号=女公民编号

-------新的形式,在join之前省略了inner语句。

--可用左连接(=或left outer join)右连接(=或right outer join)全连接(full outer)

----where不能做全连接,但可以做连接的约束

-------------------------------------------------------------------------------

select from 男公民

where 配偶编号 in (select 编号 from 女公民)

--------嵌套查询,查配偶编号在女公民表中编号列中出现过的

-------------------------------------------------------------------------------

select distinct 客户表

from (select from 订单表 where 订单年份=2004) as d,客户表

where d客户号=客户表客户号

-----子查询放在from身后,也可以放在where身后

----------------------------------------------------------------------------

select (select 子查询语句) from 表名

-------这种格式要求子查询查出的必须是唯一的数据

----------------------------------------------------------------------------

select a员工编号,a员工姓名,b员工姓名 as 领导姓名

from 员工表 as a,员工表 as b

where a部门领导编号=b员工编号

select a员工编号,a员工姓名,b员工姓名 as 领导姓名

from 员工表 as a join 员工表 as b on a部门领导编号=b员工编号

select a员工编号,a员工姓名,

(select 员工姓名 from 员工表 as b where a部门领导编号=b员工编号) as 领导姓名

from 员工表 as a

---------三种查询员工领导的方法

------如果里面总经理领导编号是这空的,这种查询方法不显示空值。如要显示,则用左连接

-----------------------------------------------------------------------------

sp_tables -----------查当前数据库中的所有表

------------------------------------------------------------------------------

select from 男公民

union ------------联合。自动升序排序,并去掉重复语句

select from 女公民

-----查询结果是男公民和女公民表的总集。如果不去掉重复的,则用 union all

-----如果要降序排,则要在最后一个select语句后面加上order by 列名 desc

-----用union查询时,结果集内列数必须相同,并且数据类型必须相互兼容

-----多表联合查询加order by时,后面必须跟第一个结果集的列名

------------------------------------------------------------------------------

select top 2 成绩 from 表

order by 成绩 desc ---------查前两种最好成绩

-------------------------------------------------------------------------------

select top 2 with ties 成绩 from 表

order by 成绩 desc ---------查前两种最好成绩所有人的信息

-------------------------------------------------------------------------------

select top 1 a成绩

from (select distinct top 3 成绩 from 表 order by 成绩 desc) as a

order by 成绩 ---------嵌套查询,查考成绩第三名的值

-------------------------------------------------------------------------------

select max (SQL成绩),min (MCSE成绩) from 表

-----查SQL最高分和MCSE最低分

-----常用的函数:max(最大),min(最小),sum(总和),avg(平均值)

-----count()统计表内数据的行数。count(列名)统计表内列里非空值的行数

-------------------------------------------------------------------------------

select count() from 表名 --------查表内有多少行数据

-------------------------------------------------------------------------------

select count(列名) from 表名 ------------查表内列中有多少行非空数据

-------------------------------------------------------------------------------

select min(成绩),max(成绩),sum(成绩),avg(成绩),count(),count(成绩) from 表名

--------返回显示数据只有一行。中间不能加列名,如想加,可以在后面加列。

-------------------------------------------------------------------------------

group by ---------分组统计,后面跟的是列名

---------上面select检索多少原始列,后面group by就要跟多少原始列

例: select 性别,avg(年龄) from 表名

group by 性别 -------统计性别的平均年龄

-------------------------------------------------------------------------------

select 年龄,avg(年龄) from 表名

where 年龄<23

group by 年龄 -------查年龄小于23岁的各年龄段平均年龄

-------或也可用如下方法:

select 年龄,avg(年龄) from 表名

group by 年龄

having<23 -------having是统计之后的条件,where是统计之前的条件

--------having是做为group by的子句出现的,不能单独使用

------------------------------------------------------------------------------

select 年龄,avg(年龄) from 表名

where 年龄<23

group by all 年龄 -------显示所有年龄,但只统计年龄小于23的,大于23的显示空值

------------------------------------------------------------------------------

select 品牌,颜色,sum(价格),avg(价格) from 汽车表

group by 品牌,颜色

with cube -------多维统计,按不同品牌不同颜色统计,也是group by的子句

--------其结果出现把各品牌统计一下,最后再统计所有品牌、所有颜色的总统计

------------------------------------------------------------------------------

select 品牌,颜色,sum(价格),avg(价格) from 汽车表

group by 品牌,颜色

with rollup ------只按第一列统计,也是group by的子句

---------即统计品牌各颜色和所有品牌所有颜色的总统计

------------------------------------------------------------------------------

select 品牌,颜色,价格 from 汽车表

compute sum(价格),avg(价格) ----------出现两个结果集

------------查原始列,另外统计所有的总和与平均值

-------------------------------------------------------------------------------

select 品牌,sum(价格),avg(价格) from 汽车表

group by 品牌 ------只对汽车品牌进行统计。进行分组的列不一定用来统计

------------------------------------------------------------------------------

select 品牌,颜色,价格 from 汽车表

order by 品牌

compute sum(价格),avg(价格) by 品牌

--------按品牌分组统计。分别显示品牌各款,然后再显示函数计算值

------------------------------------------------------------------------------

exists --------存在。相当于一个判断开关。说对了执行,说错了放弃

用法: select form 表名

where exists (select from 表名 where 性别='男')

------如果存在性别为男的,执行查询。如果不存在,则不执行命令。

-----------------------------------------------------------------------------

数据完整性:1实体完整性----用unique(唯一)或主键控制,数据不能重复

2值域完整性----用check控制。控制的是列中不能有非法数据

3引用完整性----一列的取值完全依赖于前一列时,用这个。

4用户自定义完整性

------------------------------------------------------------------------------

create table 表名

(列1 int primary key, --------设置列级主键,紧跟在设置列的后面。

列2 int)

-------------------------------------------------------------------------------

create table 表名

(列1 int,

列2 int,

primary key (列1)) --------设置表级主键,放在建表语句的最后面。

-------------------------------------------------------------------------------

create table 表名

(列1 int constraint pk_表 primary key,

列2 int)

--------把列1设为主键,并且起名叫:pk_表。constraint是命名的命令

create table 表名

(列1 int,

列2 int,

列3 int,

constraint pk_表 primary key (列1,列2))

-------把列1和列2合起来设为表级的联合主键,并起名叫pk_表

sp_helpconstraint ----------查表中约束的信息

用法: sp_helpconstraint 表名

alter table 表名

drop 约束名 ---------------删除约束

--------drop默认删的是约束,所以不用指定要删什么东西,直接给约束名就行

以上就是关于在数据库中,schema,catalog分别指的是什么全部的内容,包括:在数据库中,schema,catalog分别指的是什么、SQL数据库瘦身问题、ACCESS数据库SQL语句问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9866454.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存