仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 541|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL教程之SQL 数据库表的修正

[复制链接]
跳转到指定楼层
楼主
发表于 2015-1-16 22:19:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
BlackHole黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继当表创立好后,大概依据必要要对表的列、束缚等属性举行增加、删除或修正,这就必要修正表布局。7.4.1用EnterpriseManager修正
在EnterpriseManager当选摘要举行修改的表,单击右键,从快速菜单当选择“DesignTable”选项,则会呈现如-4所示的修正表布局对话框。能够在-4所示的对话框中修正列的数据范例、称号等属性或增加、删除列,也能够指定表的主关头字束缚。单击工具栏中的图标 ,呈现如-5所示的编纂表和束缚的属性的对话框。能够在个中编纂各类束缚和一些表的属性。


7.4.2用ALTERTABLE命令修正
ALTERTABLE命令能够增加或删除表的列、束缚,也能够禁用或启用已存在的束缚
或触发器。其语法以下:
ALTERTABLEtable
{[ALTERCOLUMNcolumn_name
{new_data_type[(precision[,scale])]
[COLLATE<collation_name>]
[NULL|NOTNULL]
|{ADD|DROP}ROWGUIDCOL}]
|ADD
{[<column_definition>]
|column_nameAScomputed_column_expression
}[,...n]
|[WITHCHECK|WITHNOCHECK]ADD
{<table_constraint>}[,...n]
|DROP
{[CONSTRAINT]constraint_name
|COLUMNcolumn
}[,...n]
|{CHECK|NOCHECK}CONSTRAINT
{ALL|constraint_name[,...n]}
|{ENABLE|DISABLE}TRIGGER
{ALL|trigger_name[,...n]}
}
<column_definition>::={column_namedata_type}
[[DEFAULTconstant_expression]
|[IDENTITY[(seed,increment)[NOTFORREPLICATION]]]
]
[ROWGUIDCOL]
[COLLATE<collation_name>]
[<column_constraint>][...n]
<column_constraint>::=[CONSTRAINTconstraint_name]
{[NULL|NOTNULL]
|[{PRIMARYKEY|UNIQUE}
[CLUSTERED|NONCLUSTERED]
[WITHFILLFACTOR=fillfactor]
[ON{filegroup|DEFAULT}]]]
|[[FOREIGNKEY]
REFERENCESref_table[(ref_column)]
[ONDELETE{CASCADE|NOACTION}]
[ONUPDATE{CASCADE|NOACTION}]
[NOTFORREPLICATION]]
|CHECK[NOTFORREPLICATION]
(logical_expression)}
<table_constraint>::=[CONSTRAINTconstraint_name]
{[{PRIMARYKEY|UNIQUE}
[CLUSTERED|NONCLUSTERED]
{(column[ASC|DESC][,...n])}
[WITHFILLFACTOR=fillfactor]
[ON{filegroup|DEFAULT}]]
|FOREIGNKEY
[(column[,...n])]
REFERENCESref_table[(ref_column[,...n])]
[NOTFORREPLICATION]
[ONDELETE{CASCADE|NOACTION}]
[ONUPDATE{CASCADE|NOACTION}]
|CHECK[NOTFORREPLICATION]
(search_conditions)}
各参数申明以下:
<P>

  • table
    指定要修正的表的称号。假如表不在以后数据库中或表不属于以后的用户,就必需指明其所属的数据库称号和一切者称号。
  • ALTERCOLUMN

  • new_data_type
    指定新的数据范例称号,其利用尺度以下:
    列的原数据范例应能够转换为新的数据范例;
    新的数据范例不克不及为TIMESTAMP;
    新的数据范例同意列为NULL值;
    假如本来的列是IDENTITY列,则新的数据范例应撑持IDENTITY特征;
    以后的SETARITHABORT设置将被视为处于ON形态。
  • precision
    指定新数据范例的位数。
  • scale
    指定新数据范例的小数位数。
  • NULL|NOTNULL
    指明列是不是同意NULL值。假如增加列到表中时,指定它为NOTNULL,则必需指定此列的缺省值。选择此项后,new_data_type[(precision[,scale])]选项就必需指定,即便precision和scale选项均稳定,以后的数据范例也必要指出来。
  • WITHCHECK|WITHNOCHECK
    指定已存在于表中的数据是不是必要利用新增加的或刚启用的FOREIGNKEY束缚或CHECK束缚来考证。假如不指定,WITHCHECK作为新增加束缚的缺省选项,WITHNOCHECK作为启用旧束缚的缺省选项。
  • {ADD|DROP}ROWGUIDCOL
    增加或删除列的ROWGUIDCOL属性。ROWGUIDCOL属性只能指定给一个UNIQUEIDENTIFIER列。
  • ADD
    增加一个或多个列、盘算列或表束缚的界说。
  • computed_column_expression
    盘算列的盘算表达式。
  • DROP{[CONSTRAINT]constraint_name|COLUMNcolumn_name}
    指定要删除的束缚或列的称号。处于以下情形的列不克不及删除;
    用于复制的列;
    用于索引的列;
    用于CHECKFOREIGNKEYUNIQUE或PRIMARYKEY束缚的列;
    界说了缺省束缚或绑定了一个缺省值工具的列;
    绑定了划定规矩(Rule)的列。
  • {CHECK|NOCHECK}CONSTRAINT
    启用或禁用FOREIGNKEY或CHECK束缚。
  • ALL
    利用NOCHECK选项禁用一切的束缚,或利用CHECK选项启用一切的束缚。
  • {ENABLE|DISABLE}TRIGGER
    启用或禁用触发器。
  • ALL
    启用或禁用选项针对一切的触发器。
  • trigger_name
    指定触发器称号。
别的参数与创立表和束缚中所讲的不异。
例7-13:创立一个订货商信息表,然后修正简介列的数据范例。
createtableorder_firm(
order_firm_idchar(8)primarykey,
firm_namevarchar(50)notnull
firm_introducechar(50)null
)on[primary]
altertableorder_firm
altercolumnfirm_introducevarchar(250)null
例7-14:创立一个订货表再拔出一个订货商编号列。
createtableorders(
order_idchar(8),
p_idchar(8)foreignkeyreferencesproducts(p_id),
order_quantitysmallintcheck(order_quantity>=10),
constraintpk_order_idprimarykey(order_id),
)on[primary]
altertableorders
addorder_firm_idchar(8)null
constraintfk_order_firm_idforeignkeyreferencesorder_firm(order_firm_id)
例7-15:变动上例中的反省束缚,并删除一个外关头字束缚。
altertableorders
addconstraintchk_order_quantitycheck(order_quantity>=100)
dropconstraintchk_order_quantity

7.4.3用存储历程Sp_rename修正表名和列名
Sp_rename存储历程能够修正以后数据库顶用户工具的称号,如表、列、索引、存储历程等。其语法以下:
sp_rename[@objname=]object_name,
[@newname=]new_name
[,[@objtype=]object_type]
个中[@objtype=]object_type是要更名的工具的范例,其值能够为‘COLUMN’、‘DATABASE’、‘INDEX’、‘USERDATATYPE’、‘OBJECT’。值‘OBJECT’指代了体系表sysobjects中的一切工具,如表、视图、存储历程、触发器、划定规矩、束缚等。‘OBJECT’值为默许值。

例7-16:变动orders表的列p_id称号为products_id
execsp_renameorders.[p_id],product_id,column
运转了局以下:
Caution:Changinganypartofanobjectnamecouldbreakscriptsandstoredprocedures.
Thecolumnwasrenamedtoproduct_id.

例7-17:变动orders表的称号为p_orders。
execsp_renameorders,p_orders
运转了局以下:
Caution:Changinganypartofanobjectnamecouldbreakscriptsandstoredprocedures.
Theobjectwasrenamedtop_orders.
MySQL最初的开发者的意图是用mSQL和他们自己的快速低级例程(ISAM)去连接表格。经过一些测试后,开发者得出结论:mSQL并没有他们需要的那么快和灵活。
海妖 该用户已被删除
沙发
发表于 2015-1-19 08:40:52 | 只看该作者
也可谈一下你是怎么优化存储过程的?
再现理想 该用户已被删除
板凳
发表于 2015-1-25 11:46:13 | 只看该作者
分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。
分手快乐 该用户已被删除
地板
发表于 2015-2-2 22:01:13 | 只看该作者
多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。
简单生活 该用户已被删除
5#
发表于 2015-2-8 08:57:19 | 只看该作者
如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。
6#
 楼主| 发表于 2015-2-25 07:17:46 | 只看该作者
如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个SQL语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。
不帅 该用户已被删除
7#
发表于 2015-3-7 18:04:46 | 只看该作者
是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。
莫相离 该用户已被删除
8#
发表于 2015-3-15 10:44:39 | 只看该作者
sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西
再见西城 该用户已被删除
9#
发表于 2015-3-22 00:24:39 | 只看该作者
还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 23:40

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表