热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

系统视图,系统表,系统存储过程的使用-mysql教程

系统视图,系统表,系统存储过程的使用获取数据库中用户表信息1、获取特定库中所有用户表信息select*fromsys.tablesselect*fromsys.objectswheretypeU--用户表第二条语句中当typeS时是系统表2、获取表的字段信息select*fromsys.columns

系统视图,系统表,系统存储过程的使用 获取数据库中用户表信息 1、获取特定库中所有用户表信息 select * from sys.tables select * from sys.objects where type=U --用户表 第二条语句中当type=S时是系统表 2、获取表的字段信息 select * from sys.columns


系统视图,系统表,系统存储过程的使用
获取数据库中用户表信息
1、获取特定库中所有用户表信息
select * from sys.tables
select * from sys.objects where type='U' --用户表
第二条语句中当type='S'时是系统表
2、获取表的字段信息
select * from sys.columns where object_id=object_id('表名')
select * from syscolumns where id=OBJECT_ID('表名' )
3、获取当前库中表的字段及类型信息
(1)select '字段名'=a.name,
'类型名'=b.name,
'字段长度'=a.max_length,
'参数顺序'=a.column_id
from sys.columns a left join sys.types b
on a.user_type_id=b.user_type_id
where object_id=object_id('表名')
syscolumns与sys.columns表用法类似。

获取索引或主键信息

获取对象及对应的索引的信息

select '对象名'=A.name,

'对象类型'=a.type,

'索引名'=B.name,

'索引类型'=case b.type when 1 then '聚集索引'

when2 then '非聚集索引'

when3 then 'xml索引'

else'空间索引' end,

'主键否'=case when b.is_primary_key=1 then '主键'

else'' end

FROM sys.objects A JOIN sys.indexes B ON A.object_id=B.object_id

WHERE A.type='U' AND B.name IS NOT NULL order by a.name

获取表的主键及对应的字段

(1)select '表名'=d.name ,'主键名'=a.name,'字段名'=c.name

from sys.indexes a join sys.index_columns b

on a.object_id=b.object_id and a.index_id=b.index_id

join sys.columns c on a.object_id=c.object_id and

c.column_id=b.column_id

join sys.objects d on d.object_id=c.object_id

where a.is_primary_key=1

(2)SELECT '表名'=OBJECT_NAME(b.parent_obj),

'主键名'=c.name,

'字段名'=a.name

FROM syscolumns a,sysobjects b,sysindexes c,sysindexkeys d

WHERE b.xtype = 'PK' AND b.parent_obj = a.id AND c.id = a.id

AND b.name =c.name AND d.id = a.id

AND d.indid = c.indid AND a.colid = d.colid

(3)select '所属架构'=s.name ,

'表名'=t.name,

'主键名'=k.name ,

'列名'=c.name,

'键列序数'=ic.key_ordinal

from sys.key_constraints as k

join sys.tables as t

on t.object_id = k.parent_object_id

join sys.schemas as s

on s.schema_id = t.schema_id

join sys.index_columns as ic

on ic.object_id = t.object_id

and ic.index_id = k.unique_index_id

join sys.columns as c

on c.object_id = t.object_id

and c.column_id = ic.column_id where k.type = 'pk';

(4)使用系统存储过程获取指定表的主键信息

EXEC sp_pkeys '表名' --表名只能是当前数据库下的单独表名不能带上架构名

查询哪些表创建了主键

select '表名'=a.name from

(select name,object_id from sys.objects where type='u') a

left join

sys.indexes b

on a.object_id=b.object_id and b.is_primary_key=1

where b.name is not null

注:查询哪些表没有创建主键,将where条件改成 is null 即可。

查找视图信息

查看视图属性信息

exec sp_help '视图名'

查看创建视图脚本

exec sp_helptext '视图名'

查看当前数据库所有视图基本信息

select * from sys.views

select * from sys.objects where type='V'

select * from INFORMATION_SCHEMA.VIEWS

查看视图对应的字段及字段属性

select '视图名'=a.name,

'列名'=b.name,

'字段类型'=TYPE_NAME(b.system_type_id),

'字段长度'=b.max_length

from sys.views a join sys.columns b

on a.object_id=b.object_id order by a.name

获取视图中的对象信息

exec sp_depends '视图名'

查看存储过程信息

1、基本信息

select * from sys.procedures

select * from sys.objects where type='P'

2、查看存储过程创建文本

sp_helptext 存储过程名称

select text from syscomments where id=object_id (存储过程名称)

3、查看存储过程的参数信息

(1)select '参数名称' = name,

'类型' = type_name(xusertype),

'长度' = length,

'参数顺序' = colid

from syscolumns

where id=object_id(存储过程名称)

(2)select '参数名称' = name,

'类型' = type_name(system_type_id),

'长度' = max_length,

'参数顺序' =parameter_id

from sys.parameters

where object_id=object_id(存储过程名称)

返回当前环境中可查询的指定表或视图的列信息。

exec sp_columns 表名

select * from sys.columns where object_id=OBJECT_id(表名)

select * from sys.syscolumns where id=OBJECT_ID(表名)

select * from information_schema.columns where TABLE_NAME=表名

查询存储过程或函数的参数的详细信息

select * from sys.parameters where object_id=object_id(函数或存储过程名称)

获取所有数据库信息

1、获取数据库的基本信息

select name from sysdatabases order by name

2、获取某个数据库的文件信息

select * from [数据库名].[架构名].sysfiles

3、获取数据库磁盘使用情况

exec sp_spaceused

4、获取数据库中表的空间使用情况

IF OBJECT_ID('tempdb..#TB_TEMP_SPACE') IS NOT NULL DROP TABLE #TB_TEMP_SPACE

GO

CREATE TABLE #TB_TEMP_SPACE(

NAME VARCHAR(500)

,ROWS INT

,RESERVED VARCHAR(50)

,DATA VARCHAR(50)

,INDEX_SIZE VARCHAR(50)

,UNUSED VARCHAR(50)

)

GO

SP_MSFOREACHTABLE 'INSERT INTO #TB_TEMP_SPACE execsp_spaceused ''?'''

GO

SELECT *

FROM #TB_TEMP_SPACE

ORDER BY REPLACE(DATA,'KB','')+0 DESC

获取触发器的相关信息

1、查看触发器定义及相关属性信息

(1)exec sp_help '触发器名'

(2)查看表中指定类型的触发器的属性信息

exec sp_helptrigger ['表名'][,['触发器类型']]

--参数2可选,省略参数2时返回该表中所有类型的触发器属性

2、获取触发器的创建脚本

exec sp_helptext '触发器名'

3、查看表中禁用的触发器

select name from sys.triggers where parent_id=object_id('表名') and is_disabled=1

注:is_disabled=0时为启用的触发器。

4、获取触发器的父类名,触发器名,触发器状态和触发器类型信息

select '父类名'=a.name,

'对象类型'=a.type,

'触发器名'=b.name,

'触发器状态'=case when b.is_disabled=1 then'禁用' else '启用'end,

'触发器类型'=case when b.is_instead_of_trigger=1 then 'instead of' else 'after' end

from sys.objects a join sys.triggers b on a.object_id=b.parent_id

注:查询单个表或视图的触发器信息加上a.object_id=object_id(表名)条件。

5、禁用和启用触发器命令

禁用:alter table表名disable trigger触发器名

启用:alter table表名enable trigger触发器名

注:禁用或启用多个触发器,触发器名之间用逗号隔开

禁用或启用表中全部触发器,将触发器名换成ALL。

6、指定第一个或最后一个触发的after触发器。

exec sp_settriggerorder '触发器名', '执行顺序', '触发事件'

查询触发触发器的对应事件

select * from sys.trigger_events where object_id=object_id('触发器名')

7、重命名触发器

exec sp_rename 旧名,新名

SQL语句创建登录名,数据库用户,数据库角色及分配权限

使用到的存储过程解释说明:

sp_addlogin 新增登录账号存储过程

语法:sp_addlogin [@loginame = ] 'login' --登录名

[ , [ @passwd = ] 'password' ] -–登录密码

[ , [ @defdb = ] 'database' ] --默认数据库

[ , [ @deflanguage = ]'language' ] --默认语言

[ , [ @sid = ] sid ] --安全标识号

[ , [ @encryptopt= ]'encryption_option' ] –密码传输方式

sp_grantlogin 创建sql server 登录名

语法:sp_addlogin [ @loginame = ] 'login' --登录名

sp_droplogin 删除登录帐号存储过程

语法:sp_droplogin [@loginame = ] 'login' --登录名

sp_grantdbaccess 将数据库用户添加到当前数据库

语法:sp_grantdbaccess [@loginame = ] 'login' --登录名

[ , [ @name_in_db = ] 'name_in_db' [ OUTPUT ]] --数据库用户名

sp_addrole 创建数据库角色

语法:sp_addrole [ @rolename = ] 'role' –角色名

[ , [ @ownername = ] 'owner' ] --角色所有者

sp_addrolemember 为角色添加成员

语法:sp_addrolemember [ @rolename = ] 'role', --角色名

[ @membername = ] 'security_account' --成员用户

sp_droprolemember 删除角色成员

sp_helprole [ [ @rolename = ] 'role' ]

返回当前数据库中有关角色的信息

1、创建登录名

(1)exec sp_addlogin '登录名','密码','默认数据库'

(2)create login 登录名 with password='密码',default_database=默认数据库

2、为指定登录名为创建指定数据库上的用户

use 指定数据库

(1)execute sp_grantdbaccess '登录名','用户'

(2)create user 用户名 for login 登录名

3、授予用户拥有表的权限

grant 权限 on 对象 to 用户

4、添加数据库角色

execute sp_addrole '角色名'

create role 角色名 authorization 拥有新角色的数据库用户或角色

5、添加角色的成员

execute sp_addrolemember '角色名','用户名'

6、设置角色拥有对象的权限

grant 权限 on 对象名 to 角色名

--=================================================================

创建用户并分配权限

--新增登录名

create login administor with password='123',default_database=Mail

--新增用户

use Mail

create user admins for login administor

--为用户分配权限

grant select on A_Area to admins

--取消分配的权限

revoke select on A_Area to admins

--新增角色

create role ins

--为角色分配权限

grant select on A_MailZT to ins with grant option

--删除角色对表A_MailZT的查询权限

revoke select on a_mailzt to ins CASCADE

--添加角色ins成员admins

exec sp_addrolemember 'ins','admins'

--删除角色ins成员admins

exec sp_droprolemember 'ins','admins'

--删除角色

drop role ins --必须先删除角色中所有成员

--删除用户

drop user admins

--删除登录账户

drop login administor

--==================================================================

查看数据库关于权限的信息

--查询当前数据库角色信息

exec sp_helprole 角色名

--提供有关每个数据库中的登录及相关用户的信息

exec sp_helplogins 登录名

--报告有关当前数据库中数据库级主体的信息。

exec sp_helpuser 当前数据库用户或角色名

--返回有关当前数据库中某个角色的成员的信息

exec sp_helprolemember 角色名

--返回SQLServer 固定服务器角色的列表

exec sp_helpsrvrole 固定服务器角色名

sql数据库批量分配权限

declare @sql varchar(max)=''

select @sql=@sql+'grant insert on '+ name + ' to admins '+CHAR(10) from sysobjects where name like 'a_%'

exec (@sql)

????如何创建windows用户登录????

备份和还原数据库

1、创建备份设备

sp_addumpdevice [ @devtype = ] 'device_type' --备份设备类型

, [@logicalname = ] 'logical_name' --备份设备逻辑名称

, [@physicalname = ] 'physical_name' –物理名称

EXEC sp_addumpdevice 'disk', 'mydiskdump', 'd:\dump1.bak';

注:添加逻辑名为mydiskdump物理名为dump1.bak 的disk类型的备份设备

2、删除备份设备

sp_dropdevice [ @logicalname = ] 'device' --备份设备逻辑名称

[ , [ @delfile = ] 'delfile' ] --指定物理备份设备文件是否应删除

exec sp_dropdevice 'mydiskdump','delfile';

注:参数'delfile'不选时只将备份设备的逻辑名从数据库引擎中删除,并删除对应master..sysdevices表中的项。有参数时会同时删除对应的物理备份设备的文件。

查询数据库引擎中备份设备的信息

select * from master..sysdevices

select * from sys.backup_devices

备份数据库

backup database mail to disk=备份文件

backup database 数据库名 to 备份设备

数据恢复

数据库快照恢复

----------------------------------创建数据库DemoDB

create database DemoDB

on primary

(name='DemoDB_data',filename='d:\Demodb_log.mdf',size=5MB,maxsize=10MB)

log on

(name='DemoDB_log',filename='d:\Demodb_log.ldf',size=2MB,maxsize=10MB)

go

-------------------------------------在DemoDB创建数据表T1和T2

use DemoDB

create table T1(id int,name char(8),address char(13))

go

create table T2(id int,name char(8),address char(13))

go

---------------------------------------在DemoDB数据库的T1和T2插入数据

use DemoDB

Insert into T1 values(1,'jacky','suzhou')

Insert into T1 values(2,'Hellen','shanghai')

Insert into T2 values(1,'Tom','beijing')

Insert into T2 values(2,'Alice','hangzhou')

Go

--------------为DemoDB数据库创建数据库快照DemoDB_dbsnapshot_200510201600

create database DemoDB_dbsnapshot_200510201600

on

(name='DemoDB_data',filename='d:\DemoDB_dbsnapshot_201203091700.mdf')

as snapshot of DemoDB

go

----------------------------------------在数据库快照和数据库中查询T1和T2表

use DemoDB_dbsnapshot_200510201600

select * from dbo.T1

select * from dbo.T2

go

use DemoDB --在数据库中查看表T1和T2

select * from dbo.T1

select * from dbo.T2

go

---------------------------------------------在数据库中修改T1和T2

use DemoDB

update T1

set name='Tony' where id=1 --在DemoDB中更新数据

go

delete from T1 where id=2 --在DemoDB中删除数据

go

drop Table T2 --删除T2表

go

------------------------------在数据库快照和数据库中查询T1和T2表

use DemoDB_dbsnapshot_200510201600

select * from T1

select * from T2

go

use DemoDB

select * from T1

select * from T2

go

------------------使用数据库快照还原在DemoDB数据库的T1表误删除和更新的数据

update DemoDB.dbo.T1

set name=(select name from DemoDB_dbsnapshot_200510201600.dbo.T1 where id=1) where id=1

go

insert into DemoDB.dbo.T1

select * from DemoDB_dbsnapshot_200510201600.dbo.T1 where id=2

go

----------------------------使用数据库快照还原在DemoDB数据库误删除的T2表

use DemoDB

--复制进剪贴板中的创建T2的语句

go

select *into DemoDB.dbo.T2 from DemoDB_dbsnapshot_200510201600.dbo.T2

go

------------------------------------在数据库快照和数据库中查询T1和T2表

use DemoDB

select * from T1

select * from T2

go

use DemoDB_dbsnapshot_200510201600

select * from T1

select * from T2

go

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

--注:如果需要周期创建快照,可以创建作业

------------------------------------------在DemoDB中更新数据

use DemoDB

update T1 set name='Funny' where id=1

go

-----------------------------------------数据库快照和数据库中查询T1和T2表

select * from Demodb.dbo.T1

select * from DemoDB_dbsnapshot_200510201600.dbo.T1

select * from DemoDB_dbsnapshot_200510201600.dbo.T2

----------------------------------------在DemoDB中更新数据

use DemoDB

update T1 set name='Bob' where id=1

go

----------------------------------数据库快照和数据库中查询T1和T2表

select * from Demodb.dbo.T1

select * from DemoDB_dbsnapshot_200510201600.dbo.T1

select * from DemoDB_dbsnapshot_200510201600.dbo.T2

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

/*使用数据库快照还原整个数据库*/

-------------------------------------------使用数据库快照恢复DemoDB数据库

use master

restore Database DemoDB from Database_snapshot='DemoDB_dbsnapshot_200510201600'

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

select * from DemoDB.dbo.T1

select * from DemoDB_dbsnapshot_200510201600.dbo.T1

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

use master

drop database DemoDB_dbsnapshot_200510201600 --删除数据库快照

drop Database DemoDB --删除数据库

转载自:http://wenku.baidu.com/link?url=2TnLqDON6Lv_xY9j800t98axR_wswnGCepl8SPeMaaDtaKSSJKFXaR4Z2M0DS3Fd1udxmKLEkN7zX5kC79tUr1l6BU4p5uho5a3KszdrdbK


推荐阅读
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
author-avatar
Ai剧_本
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有