仓酷云

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

[学习教程] MYSQL编程:跟我学SQL:(五)创立和修正表格

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

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

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

x
解决方案提供商应记住DBaaS通常仅仅是解决方案的一部分。客户之所以与他们的解决方案提供商协同工作,不仅是因为他们出售的产品,而且还因为他们所提供的服务。创立再次接待您离开SQL(布局化查询言语)基本系列教程。本文将先容数据库界说言语(DDL)用于创立数据库和表格和修正表格了局的指令。


当你利用这些指令时必定要当心――它很简单删往你的数据库中的次要布局令您丧失数据。以是,在您入手下手修正数据库之前,您必要晓得数据库是甚么。


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

数据库之间的差别
本文中的样品查询体系遵守SQL92ISO尺度。并非一切的数据库都遵守该尺度,有些数据库做了改善,这会发生不成意料的了局。假如你不克不及断定你的数据库是不是撑持该尺度,请参考响应的文档。


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

创立数据库
为了创立表格,你起首必要必要创立一个能够包容表格的数据库。SQL用于创立数据库的基础语句是:
CREATEDATABASEdbname;

你的数据库用户必需有创建数据库的得当权限。假如与你有关的用户不克不及收回用于创立新数据库的命令,请求数据库办理员为你创建数据库,你也作为办理员登录然后创建数据库并设置权限。

举个例子,用CREATE指令为一个使用程序创建一个数据库用于显现一个目次:
CREATEDATABASECatalog;

这给你一个用于在查询时与别的表格辨别的表格名字。下一步是创立用于输出它的表格。

创立表格
如你所知,表格是有多少个栏目所构成。当创立表格时,你能够界说栏目并分派字段属性。表格创建后,能够用ALTER表格指令来修正它,我们稍后将提到这一点。

你能够用上面这条指令来创立数据库,命令行的参数为表格名字、栏目名字,另有每栏的数据范例。
CREATETABLEtable_name
(column1data_type,column2data_type,column3data_type);

分歧的数据库供应商的尺度不同很年夜。你的匡助文档中应当有一段具体申明怎样利用每种数据、承受何种参数。为了通用,我在表A中列出了一些经常使用的数据范例。

表A

数据范例
用法
具体申明

Char
Char(8)
它包括了一个流动长度的字符串,其值经常是字符串长度。

Varchar
Varchar(128)
它包括了一个长度不年夜于指定值的长度可变的字符串。

Int
Int(32)
这是一个不年夜于指定值得整数,也做Number或Integer。

Decimal
Decimal(12,2)
这是一个总位数和小数点后位数不年夜于指定值得小数,也被称为Numeric或Number。

Binary
Binary
用于存储二进制工具,在数据库中它一样平常不成分化和显现,也称为Raw或Blob。

Boolean
Boolean
用来只是真或假,同样成为Bit或Byte。


通用数据范例


在本例中,我们创建了一个寄存库存商品信息的表格。所用到的栏目和数据范例如表B所示:

表B

栏目称号:
prod_id
prod_color
prod_descr
prod_size

数据范例:
Int(16)
Varchar(20)
Varchar(255)
Decimal(8,2)




在本例中,我利用了三种基础数据范例;但是,在实践利用时,依据数据库撑持的内容,我大概还用用上tinyint、文本和mediumtext数据范例。

收回以下指令来创建表格:
CREATETABLEProducts
(prod_idINT(16),prod_colorVARCHAR(20),prod_descrVARCHAR(255),prod_sizeDECIMAL(8,2));

假如这些指令顺遂完成,你就能够在表格中一般地拔出信息。你能够参到文章SQL基本一:数据查询"失掉具体申明。


除数据范例,你还能够在创立表格时界说主动增量字段(auto-incrementedfield)、关头字、索引和特别数值限定。在表格界说时,这些参数与数据范例一同传送。假如在创立表格Product时界说具有特别数值限定的主动增量prod_id,命令以下:
CREATETABLEProducts
(prod_idINT(16)AUTO_INCREMENT,prod_colorVARCHAR(20),prod_descrVARCHAR(255),prod_sizeDECIMAL(8,2),UNIQUE(`prod_id`));

假如把prod_id做为索引字段界说,能够用CREATEINDEX:
CREATEINDEXProdIndexONProduct(prod_id);

这里有需要重申:数据库供应商在关头字的处置上有所分歧。以是,详细情形请参考你的数据库供应商的文档。


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

关于索引的更多内容:

索引是一个对照深的课题。除先容有关关头字和索引的实际,Builder.com的供稿人EricRoland写了几篇很好的文章,你能够经由过程它们来学到更多的相干常识。

修正表格

当你入手下手对表格举行操纵时,你大概以为有需要修正表格的布局、字段范例等等。在后面,我激烈倡议你制止在临盆情况(productionenvironment)这么做。由于有些操纵,如增加、删除和修正字段大概会删除或损坏相干字段中的数据。

好,如今让我们看看怎样修正表格。起首,在表格Product中到场一栏。你能够指定该栏拔出的绝对别的栏的地位,也能够让它插到表格末了(默许):
ALTERTABLEProductADDprod_nameVARCHAR(20)AFTERprod_id;

用相似的语句删除一个栏目:
ALTERTABLEProductDROPprod_size;

最初,变动一个栏目标数据范例:
ALTERTABLEProductCHANGEprod_colorprod_color_idINT(20);

如今,你的表格如表C所示:

表C

栏目称号:
prod_id
prod_name
prod_color_id
prod_descr

数据范例:
Int(16)
Varchar(20)
Int(20)
Varchar(255))



注重,有些数据库不撑持关头字DROP。别的,假如你改动现有的某一栏的数据范例,年夜多半数据库会试图转化该栏目现无数据的数据范例。但是,假如是转为一个不撑持的数据范例,数据就有大概丧失。举例来讲,假如把一个范例为Varchar的包括人名字的字段改成Int范例,转换的了局多是整型的默许值。

删除表格和数据库
在删除表格和数据库之前,你必要确保丧失这些数据不会形成恶果。假如你删除数据库,库中的一切表格和内容城市被扫除。假如你删除一个表格,表格中的一切内容城市丧失,可是库中的别的表格没有影响。

在删除表格或全部栏目之前,你必需分明数据库的布局。假如你进进一个已存在的数据库并毛病删除某个元素,大概会影响到促发前提(?trigger)、存储历程和视图。有些数据库撑持用关头字RESTRICT和CASCADE往防备因为删除表格带来的丧失。RESTRICT一样平常按默许设置,防备丧失表格,而CASCADE用于删除与该表格有关的实体。

如今下面创建的表格Product是能够被删除的,我们入手下手删除它:
DROPTABLEProduct;

如今删除数据库:
DROPDATABASECatalog;


年夜多半数据库软件供应商撑持DROPDATABASE命令,只管它是在SQL99尺度中被界说而不是SQL92。

部分数据库供应了FLUSH命令,该命令可让你删除表格中的内容但又能够坚持表格的了局,:
FLUSHTABLEProduct;

如你所见,删除数据库中的次要布局并丧失所存的一切数据的简单水平使人不可思议,以是,必定要当心利用这些命令,而当你不分明数据库中的内容时,就不要利用这些命令。
数据库办理
在前一篇文章中,你学会了怎样在一个或多个表格中查找数据。如今,你学会了怎样把你操纵数据库布局。你学会了创立、修正并烧毁表格和数据。这些都是计划数据库驱动的使用程序的必需用的操纵。


WindowsAzureSQLDatabase并不支持数据压缩和表分区之类的功能,而且SQLDatabase支持的Transact-SQL语言只是完整版的一部分。另外,因为解决方案提供商不能控制物理资源,所以他们不能将数据文件和索引分配给特定的硬件。
灵魂腐蚀 该用户已被删除
沙发
发表于 2015-1-19 17:45:20 | 只看该作者
从底层原理到表层引用,书籍多的很。个人认为没有什么那本书好?这样的说法。主要看和个人的学习方法是否适合。
小妖女 该用户已被删除
板凳
发表于 2015-1-27 08:58:44 | 只看该作者
可以动态传入参数,省却了动态SQL的拼写。
老尸 该用户已被删除
地板
发表于 2015-2-5 05:42:00 | 只看该作者
一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。
分手快乐 该用户已被删除
5#
发表于 2015-2-11 06:30:28 | 只看该作者
连做梦都在想页面结构是怎么样的,绝非虚言
小魔女 该用户已被删除
6#
发表于 2015-3-1 23:07:58 | 只看该作者
学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了!
蒙在股里 该用户已被删除
7#
发表于 2015-3-11 00:54:46 | 只看该作者
SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。
莫相离 该用户已被删除
8#
发表于 2015-3-17 17:12:07 | 只看该作者
对于微软系列的东西除了一遍遍尝试还真没有太好的办法
愤怒的大鸟 该用户已被删除
9#
发表于 2015-3-24 15:52:25 | 只看该作者
原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-6 11:43

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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