仓酷云

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

[学习教程] MYSQL编程:SQL数据操纵基本(中级)7

[复制链接]
老尸 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:34:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
MySQL对硬件的较低要求是其最大的优势之一,不过需要注意的是:内存越多越好,因为所有的重要数据存储都在内存中完成。数据用SQL创建索引

为了给一个表创建索引,启动义务栏SQLSever程序组中的ISQL/w程序。进进查询窗口后,输出上面的语句:

CREATEINDEXmycolumn_indexONmytable(myclumn)

这个语句创建了一个名为mycolumn_index的索引。你能够给一个索引发任何名字,但你应当在索引名中包括所索引的字段名,这对你未来弄分明创建该索引的企图是有匡助的。

注重:

在本书中你实行任何SQL语句,城市收到以下的信息:

Thiscommanddidnotreturndata,anditdidnotreturnanyrows

这申明该语句实行乐成了。

索引mycolumn_index对表mytable的mycolumn字段举行。这是个非聚簇索引,也是个非独一索引。(这是一个索引的缺省属性)

假如你必要改动一个索引的范例,你必需删除本来的索引偏重建一个。创建了一个索引后,你能够用上面的SQL语句删除它:

DROPINDEXmytable.mycolumn_index

注重在DROPINDEX语句中你要包括表的名字。在这个例子中,你删除的索引是mycolumn_index,它是表mytable的索引。

要创建一个聚簇索引,可使用关头字CLUSTERED。)记着一个表只能有一个聚簇索引。(这里有一个怎样对一个表创建聚簇索引的例子:

CREATECLUSTEREDINDEXmycolumn_clust_indexONmytable(mycolumn)

假如表中有反复的纪录,当你试图用这个语句创建索引时,会呈现毛病。可是有反复纪录的表也能够创建索引;你只需利用关头字ALLOW_DUP_ROW把这一点告知SQLSever便可:

CREATECLUSTEREDINDEXmycolumn_cindexONmytable(mycolumn)

WITHALLOW_DUP_ROW

这个语句创建了一个同意反复纪录的聚簇索引。你应当只管制止在一个表中呈现反复纪录,可是,假如已呈现了,你可使用这类办法。

要对一个表创建独一索引,可使用关头字UNIQUE。对聚簇索引和非聚簇索引都可使用这个关头字。这里有一个例子:

CREATEUNIQUECOUSTEREDINDEXmyclumn_cindexONmytable(mycolumn)

这是你将常常利用的索引创建语句。不管什么时候,只需能够,你应当只管对一个对一个表创建独一聚簇索引来加强查询操纵。

最初,要创建一个对多个字段的索引──复合索引──在索引创建语句中同时包括多个字段名。上面的例子对firstname和lastname两个字段创建索引:

CREATEINDEXname_indexONusername(firstname,lastname)

这个例子对两个字段创建了单个索引。在一个复合索引中,你最多能够对16个字段举行索引。

用事件办理器创建索引

用事件办理器创建索引比用SQL语句简单的多。利用事件办理器,你能够看到已创建的索引的列表,并能够经由过程图形界面选择索引选项。

利用事件办理器你能够用两种体例创建索引:利用ManageTables窗口或利用ManageIndexes窗口。

要用ManageTables窗口创建一个新索引,单击按钮AdvancedOptions(它看起来象一个后面有一加号的表)。如许就翻开了AdvancedOptions对话框。这个对话框有一部分标名为PrimaryKey(见1.1)。

1。1

要创建一个新索引,从下拉列表当选择你想对之创建索引的字段名。假如你想创建一个对多字段的索引,你能够选择多个字段名。你还能够选择索引是聚簇的仍是非聚簇的。在保留表信息后,索引会主动被创建。在ManageTables窗口中的字段名中间,会呈现一把钥匙。

你已为你的表创建了“主索引”。主索引必需对不包括空值的字段创建。别的,主索引强迫一个字段成为独一值字段。

要创建没有这些限定的索引,你必要利用ManageIndexes窗口。从菜单当选择Manage|Indexes,翻开ManageIndexes窗口。在ManageIndexes窗口中,你能够经由过程下拉框选择表和特定的索引。(见1.2)。要创建一个新索引,从Index下拉框当选择NewIndex.,然后就能够选择要对之创建索引的字段。单击按钮Add,把字段加人到索引中。

1。2

你能够为你的索引选择很多分歧的选项。比方,你能够选择该索引是聚簇的仍是非聚簇的。你还能够指定该索引为独一索引。计划好索引后,单击按钮Build,创建该索引。

注重:

独一索引是指该字段不克不及有反复的值,而不是只能创建这一个索引。

SQL中心语句

在第十章,你学会了怎样用SQLSELECT语句从一个表中取数据。可是,到如今为止,还没有会商怎样增加,修正或删除表中的数据。在这一节中,你将进修这些内容。

拔出数据

向表中增加一个新纪录,你要利用SQLINSERT语句。这里有一个怎样利用这类语句的例子:

INSERTmytable(mycolumn)VALUES(‘somedata’)

这个语句把字符串’somedata’拔出表mytable的mycolumn字段中。将要被拔出数据的字段的名字在第一个括号中指定,实践的数据在第二个括号中给出。

INSERT语句的完全句法以下:

INSERT[INTO]{table_name|view_name}[(column_list)]{DEFAULTVALUES|

Values_list|select_statement}

假如一个表有多个字段,经由过程把字段名和字段值用逗号离隔,你能够向一切的字段中拔出数据。假定表mytable有三个字段first_column,second_column,和third_column。上面的INSERT语句增加了一条三个字段都有值的完全纪录:

INSERTmytable(first_column,second_column,third_column)

VALUES(‘somedata’,’somemoredata’,’yetmoredata’)

注重:

你可使用INSERT语句向文本型字段中拔出数据。可是,假如你必要输出很长的字符串,你应当利用WRITETEXT语句。这部份内容对本书来讲太初级了,因而不加会商。要懂得更多的信息,请参考MicrosoftSQLSever的文档。

假如你在INSERT语句中只指定两个字段和数据会怎样呢?换句话说,你向一个表中拔出一条新纪录,但有一个字段没有供应数据。在这类情形下,有上面的四种大概:

假如该字段有一个缺省值,该值会被利用。比方,假定你拔出新纪录时没有给字段third_column供应数据,而这个字段有一个缺省值’somevalue’。在这类情形下,当新纪录创建时会拔出值’somevalue’。
假如该字段能够承受空值,并且没出缺省值,则会被拔出空值。
假如该字段不克不及承受空值,并且没出缺省值,就会呈现毛病。你会收到毛病信息:
Thecolumnintablemytablemaynotbenull.

最初,假如该字段是一个标识字段,那末它会主动发生一个新值。当你向一个有标识字段的表中拔出新纪录时,只需疏忽该字段,标识字段会给本人赋一个新值。
注重:

向一个有标识字段的表中拔出新纪录后,你能够用SQL变量@@identity来会见新纪录

的标识字段的值。思索以下的SQL语句:

INSERTmytable(first_column)VALUES(‘somevalue’)

INSERTanothertable(another_first,another_second)

VALUES(@@identity,’somevalue’)

假如表mytable有一个标识字段,该字段的值会被拔出表anothertable的another_first字段。这是由于变量@@identity老是保留最初一次拔出标识字段的值。

字段another_first应当与字段first_column有不异的数据范例。可是,字段another_first不克不及是应当标识字段。Another_first字段用来保留字段first_column的值。

删除纪录

要从表中删除一个或多个纪录,必要利用SQLDELETE语句。你能够给DELETE语句供应WHERE子句。WHERE子句用来选择要删除的纪录。比方,上面的这个DELETE语句只删除字段first_column的值即是’DeleteMe’的纪录:

DELETEmytableWHEREfirst_column=’DeltetMe’

DELETE语句的完全句法以下:

DELETE[FROM]{table_name|view_name}[WHEREclause]

在SQLSELECT语句中可使用的任何前提都能够在DELECT语句的WHERE子句中利用。比方,上面的这个DELETE语句只删除那些first_column字段的值为’goodbye’或second_column字段的值为’solong’的纪录:

DELETEmytableWHEREfirst_column=’goodby’ORsecond_column=’solong’

假如你不给DELETE语句供应WHERE子句,表中的一切纪录都将被删除。你不该该有这类设法。假如你想删除应当表中的一切纪录,应利用第十章所讲的TRUNCATETABLE语句。

注重:

为何要用TRUNCATETABLE语句取代DELETE语句?当你利用TRUNCATETABLE语句时,纪录的删除是不作纪录的。也就是说,这意味着TRUNCATETABLE要比DELETE快很多如IBM公司最近宣布让渠道合作伙伴分销其SaaS应用程序的新计划。微软认为MySQL学习教程是销售其云计算服务的重要组成部分。然而即使有这种趋势,DBaaS仍然不同于内部数据库,解决方案提供商必须认识到这一点;否则,他们不仅仅是丢失几个客户,而是要失去的更多。
因胸联盟 该用户已被删除
沙发
发表于 2015-1-17 23:39:02 | 只看该作者
不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理?
不帅 该用户已被删除
板凳
发表于 2015-1-21 10:37:15 | 只看该作者
另一个是把SQL语句写到服务器端,就是所谓的SP(存储过程);
地板
发表于 2015-1-30 15:25:18 | 只看该作者
SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)
飘飘悠悠 该用户已被删除
5#
发表于 2015-2-16 08:44:44 | 只看该作者
是要和操作系统进行Socket通讯的场景。否则建议慎重!
若天明 该用户已被删除
6#
发表于 2015-3-5 02:18:59 | 只看该作者
以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了
第二个灵魂 该用户已被删除
7#
发表于 2015-3-11 22:45:13 | 只看该作者
还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。
冷月葬花魂 该用户已被删除
8#
发表于 2015-3-19 15:45:36 | 只看该作者
语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!
愤怒的大鸟 该用户已被删除
9#
发表于 2015-3-28 21:18:18 | 只看该作者
代替了原来VB式的错误判断。比Oracle高级不少。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-27 13:16

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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