仓酷云

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

[学习教程] MSSQL网站制作之创立数据库表

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

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

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

x
InnoDB数据表的索引,与InnoDB数据表相比,在InnoDB数据表上,索引对InnoDB数据表的重要性要大得多。在InnoDB数据表上,索引不仅会在搜索数据记录时发挥作用,还是数据行级锁定机制的苊、基础。在利用数据库的过程当中,打仗最多的就是数据库中的表。表是数据存储的中央。是数据库中最主要的部分,办理好表也就办理好了数据库。本章将先容怎样创立和办理数据库表。

表是由行和列构成的。创立表的历程次要就是界说表的列的历程,为此,应先懂得表的列的属性。

7.1.1列的属性
表的列名在统一个表中具有唯一性,统一列的数据属于统一种数据范例。除用列名和数据范例来指定列的属性外,还能够界说别的属性:NULL或NOTNULL属性和IDENTITY属性。

(1)NULL或NOTNULL
假如表的某一列被指定具有NULL属性,那末就同意在拔出数据时省略该列的值。反之,假如表的某一列被指定具有NOTNULL属性,那末就不同意在没有指定列缺省值的情形下拔出省略该列值的数据行。在SQLServer中,列的缺省属性是NOTNULL。要设置缺省属性为NULL或NOTNULL,能够在EnterpriseManager中修正数据库属性选项中的“ANSInulldefault”为真或假。也能够利用以下两种语句来设定:<P>

  • setansi_null_dflt_on或setansi_null_dflt_off;
  • sp_dboptiondatabase_name,‘ANSInulldefault’,true/false。

(2)IDENTITY
IDENTITY属性可使表的列包括体系主动天生的数字。这类数字在表中能够唯一标识表的每行,即表中的每行数据在指定为IDENTITY属性的列上的数字均不不异。指定了IDENTITY属性的列称为IDENTITY列。当用IDENTITY属性界说一个列时,能够指定一个初始值和一个增量。拔出数据到含有IDENTITY列的表中时,初始值在拔出第一行数据时利用,今后就由SQLServer依据上一次利用的IDENTITY值加上增量失掉新的IDENTITY值。假如不指定初始值和增量值,则其缺省值均为1。
IDENTITY属性合用于INT、SMALLINT、TINYINT、DECIMAL(P,0)、N::::::?
UMERIC(P,0)数据范例的列。
注重:一个列不克不及同时具有NULL属性和IDENTITY属性,只能两者选其一。

7.1.2用CREATETABLE命令创立表
用CREATETABLE命令创立表快速、了然。其语法以下:
CREATETABLE[database_name.[owner].|owner.]table_name
({<column_definition>|column_nameAScomputed_column_expression|
<table_constraint>}[,...n])
[ON{filegroup|DEFAULT}]
[TEXTIMAGE_ON{filegroup|DEFAULT}]
<column_definition>::={column_namedata_type}
[[DEFAULTconstant_expression]
|[IDENTITY[(seed,increment)[NOTFORREPLICATION]]]]
[ROWGUIDCOL]
[COLLATE<collation_name>]
[<column_constraint>][...n]
各参数申明以下:<P>

  • database_name
    指定新建的表属于哪一个数据库。假如不指定命据库名,就会将所创立的表寄存在以后数据库中。
  • owner
    指定命据库一切者的用户名。
  • table_name
    指定新建的表的称号,最长不凌驾128个字符。
    对数据库来讲,database_name.owner_name.object_name应当是唯一的。
  • column_name
    指定新建的表的称号,最长不凌驾128个字符。
    对数据库来讲,database_name.owner_name.object_name应当是唯一的。
  • computed_column_expression
    指定盘算列(Computedcolumn)的列值的表达式。表达式能够是列名、常量、变量、函数等或它们的组合。所谓盘算列是一个假造的列,它的值其实不实践存储在表中,而是经由过程对统一个表中别的列举行某种盘算而失掉的了局。比方:员工信息表中存储了员工的雇佣日期,那末员工的工龄就能够经由过程表达式“雇佣日期以后日期”盘算出来,则工龄列便可作为一个盘算列。
  • ON{filegroup|DEFAULT}
    指定存储表的文件组名。假如利用了DEFAULT选项或省略了ON子句,则新建的表会存储在默许文件组中。
  • TEXTIMAGE_ON
    指定TEXT、NTEXT、和IMAGE列的数据存储的文件组。假如无此子句,这些范例的数据就和表一同存储在不异的文件组中。
  • data_type
    指定列的数据范例
  • DEFAULT
    指定列的缺省值。当输出数据时,假如用户没有指定列值,体系就会用设定的缺省值作为列值。假如该列没有指定缺省值但同意NULL值,则NULL值就会作为缺省值。个中缺省值能够为常数、NULL值、SQLServer外部函数(如GETDATE()函数)、NILADIC函数等。
  • constant_expression
    列缺省值的常量表达式,能够为一个常量或体系函数或NULL。
  • IDENTITY
    指定列为IDENTITY列。一个表中只能有一个IDENTITY列。
  • seed
    指定IDENTITY列的初始值。
  • increment
    指定IDENTITY列的增量。
  • NOTFORREPLICATION
    指定列的IDENTITY属性在把从别的表中复制的数据拔出到表中时不产生感化,即不敷的天生列值,使得复制的数据行坚持本来的列值。
  • ROWGUIDCOL
    指定列为环球唯一判别行号列(ROWGUIDCOL是RowGlobalUniqueIdentifierColumn的缩写)。此列的数据范例必需为UNIQUEIDENTIFIER范例。一个表中数据范例为UNIQUEIDENTIFIER的列中只能有一个列被界说为ROWGUIDCOL列。ROWGUIDCOL属性不会使列值具有唯一性,也不会主动天生一个新的数值给拔出的行。必要在INSERT语句中利用NEWID()函数或指定列的缺省值为NEWID()函数。
  • COLLATE指明表利用的校验体例。
  • column_constraint和table_constraint
    指定列束缚和表束缚,我们将鄙人一节中先容其详细界说。
    其他参数将在前面的章节中慢慢报告。
注重:一个表最少有一列,但最多不凌驾1024个列。每一个数据库中最多能够创立200万个表。表在存储时利用的计量单元是盘区(Extent)。一个盘辨别为8个数据页,每页8KB字节。在创立新表时,会分派给它一个初始只为一个盘区的存储空间。当增添表的存储空间时,以盘区为单元增添。




7.1.3用EnterpriseManager创立表
在EnterpriseManager中创立表按以下步骤举行:
(1)在要创立表的数据库当选择“Tables”工具后,单击右键,从快速菜单当选择“NewTable”选项,或在工具栏当选择图标 ,即会呈现如-1所示的界说列对话框。在此能够是设定表的列名、数据范例、精度、缺省值等属性。



(2)单击-1工具栏中的保留按钮 ,即呈现如-2所示的输出新建表名的对话框。

(3)输出表名后单击“OK”按钮,即会将表保留到数据库中。然后-1中工具栏右侧本来不成用的几个按钮将变成可用,可使用它们来设置表的别的信息,在今后的章节中将讲到它们的利用。
7.1.4创立一时表
能够用CREATETABLE命令创立表部分的或全局感化的一时表。其语法与创立一样平常表基础不异,只是在部分一时表的表名前要利用标记“#”,全局一时表的表名前要利用标记“##”以便与一样平常的表相区分。因为SQLServer将一时表的表名存储到Tempdb数据库中sysobjects表中时,会主动在厥后面增加一个体系发生的12位的数字后缀,因而一时表的表名最长只能指定116个字符,以不凌驾128个字符的定名限定。
例7-2创立一个部分一时表test123
createtable#test123(
test_idsmallint,
test_namechar(10),
)on[primary

mysql使用内部操作字符集gbk来进行操作,即执行"SELECT*FROMtestWHEREname=xxxor1=1/*LIMIT1";从而注入成功
再现理想 该用户已被删除
沙发
发表于 2015-1-19 08:41:02 | 只看该作者
数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
只想知道 该用户已被删除
板凳
发表于 2015-1-25 11:42:29 | 只看该作者
至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。
飘飘悠悠 该用户已被删除
地板
发表于 2015-2-2 22:01:04 | 只看该作者
财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..
山那边是海 该用户已被删除
5#
发表于 2015-2-8 08:57:19 | 只看该作者
你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。
第二个灵魂 该用户已被删除
6#
发表于 2015-2-25 07:30:22 | 只看该作者
微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。
莫相离 该用户已被删除
7#
发表于 2015-3-7 18:19:01 | 只看该作者
而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
金色的骷髅 该用户已被删除
8#
发表于 2015-3-15 11:24:35 | 只看该作者
而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~
简单生活 该用户已被删除
9#
发表于 2015-3-22 00:36:44 | 只看该作者
换言之,只有在不断的失败中尝试成功,而关于失败的总结却是很少的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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