创建数据库表

  在使用数据库的过程中,接触最多的就是数据库中的表。表是数据存储的地方。是数据库中最重要的部分,管理好表也就管理好了数据库。本章将介绍如何创建和管理数据库表。

表是由行和列组成的。创建表的过程主要就是定义表的列的过程,为此,应先了解表的列的属性。

7.1.1 列的属性
    表的列名在同一个表中具有惟一性,同一列的数据属于同一种数据类型。除了用列名和数据类型来指定列的属性外,还可以定义其它属性:NULL 或NOT NULL 属性和IDENTITY 属性。

(1) NULL 或NOT NULL
如果表的某一列被指定具有NULL 属性,那么就允许在插入数据时省略该列的值。反之,如果表的某一列被指定具有NOT NULL 属性,那么就不允许在没有指定列缺省值的情况下插入省略该列值的数据行。在SQL Server 中,列的缺省属性是NOT NULL。要设置缺省属性为NULL 或NOT NULL,可以在Enterprise Manager 中修改数据库属性选项中的“ANSI null default”为真或假。也可以使用如下两种语句来设定:

  • set ansi_null_dflt_on 或set ansi_null_dflt_off;
  • sp_dboption database_name, ‘ANSI null default’, true/false。

(2) IDENTITY
    IDENTITY 属性可以使表的列包含系统自动生成的数字。这种数字在表中可以惟一标识表的每一行,即表中的每一行数据在指定为IDENTITY 属性的列上的数字均不相同。指定了IDENTITY 属性的列称为IDENTITY 列。当用IDENTITY 属性定义一个列时,可以指定一个初始值和一个增量。插入数据到含有IDENTITY 列的表中时,初始值在插入第一行数据时使用,以后就由SQL Server 根据上一次使用的IDENTITY 值加上增量得到新的IDENTITY值。如果不指定初始值和增量值,则其缺省值均为1。
    IDENTITY 属性适用于INT、 SMALLINT、 TINYINT、 DECIMAL (P,0)、N::::::?
UMERIC (P,0)数据类型的列。
注意:一个列不能同时具有NULL属性和IDENTITY属性,只能二者选其一。

7.1.2 用CREATE TABLE 命令创建表
用CREATE TABLE 命令创建表快捷、明了。其语法如下:
CREATE TABLE [database_name.[owner].| owner.] table_name
( {<column_definition> | column_name AS computed_column_expression |
<table_constraint>} [,...n] )
[ON {filegroup | DEFAULT} ]
[TEXTIMAGE_ON {filegroup | DEFAULT} ]
<column_definition> ::= { column_name data_type }
[ [ DEFAULT constant_expression ]
| [ IDENTITY [(seed, increment ) [NOT FOR REPLICATION] ] ] ]
[ ROWGUIDCOL ]
[ COLLATE < collation_name > ]
[ <column_constraint>] [ ...n]
各参数说明如下:

  • database_name
    指定新建的表属于哪个数据库。如果不指定数据库名,就会将所创建的表存放在当前数据库中。
  • owner
    指定数据库所有者的用户名。
  • table_name
    指定新建的表的名称,最长不超过128 个字符。
    对数据库来说,database_name.owner_name.object_name 应该是惟一的。
  • column_name
    指定新建的表的名称,最长不超过128 个字符。
    对数据库来说,database_name.owner_name.object_name 应该是惟一的。
  • computed_column_expression
    指定计算列(Computed column)的列值的表达式。表达式可以是列名、常量、变量、函数等或它们的组合。所谓计算列是一个虚拟的列,它的值并不实际存储在表中,而是通过对同一个表中其它列进行某种计算而得到的结果。例如:员工信息表中存储了员工的雇佣日期,那么员工的工龄就可以通过表达式“雇佣日期当前日期”计算出来,则工龄列就可作为一个计算列。
  • ON {filegroup | DEFAULT}
    指定存储表的文件组名。如果使用了DEFAULT 选项或省略了ON 子句,则新建的表会存储在默认文件组中。
  • TEXTIMAGE_ON
    指定TEXT、NTEXT、 和IMAGE 列的数据存储的文件组。如果无此子句,这些类型的数据就和表一起存储在相同的文件组中。
  • data_type
    指定列的数据类型
  • DEFAULT
    指定列的缺省值。当输入数据时,如果用户没有指定列值,系统就会用设定的缺省值作为列值。如果该列没有指定缺省值但允许NULL 值,则NULL 值就会作为缺省值。其中缺省值可以为常数、NULL 值、SQL Server 内部函数(如GETDATE()函数)、NILADIC 函数等。
  • constant_expression
    列缺省值的常量表达式,可以为一个常量或系统函数或NULL。
  • IDENTITY
    指定列为IDENTITY 列。一个表中只能有一个IDENTITY 列。
  • seed
    指定IDENTITY 列的初始值。
  • increment
    指定IDENTITY 列的增量。
  • NOT FOR REPLICATION
    指定列的IDENTITY 属性在把从其它表中复制的数据插入到表中时不发生作用,即不足的生成列值,使得复制的数据行保持原来的列值。
  • ROWGUIDCOL
    指定列为全球惟一鉴别行号列(ROWGUIDCOL是Row Global Unique Identifier Column 的缩写)。此列的数据类型必须为UNIQUEIDENTIFIER 类型。一个表中数据类型为UNIQUEIDENTIFIER 的列中只能有一个列被定义为ROWGUIDCOL 列。ROWGUIDCOL 属性不会使列值具有惟一性,也不会自动生成一个新的数值给插入的行。需要在INSERT 语句中使用NEWID()函数或指定列的缺省值为NEWID()函数。
  • COLLATE指明表使用的校验方式。
  • column_constraint 和table_constraint
    指定列约束和表约束,我们将在下一节中介绍其具体定义。
    其余参数将在后面的章节中逐步讲述。

注意:一个表至少有一列,但最多不超过1024个列。 每个数据库中最多可以创建200万个表。 表在存储时使用的计量单位是盘区(Extent)。一个盘区分为8个数据页,每页8KB字节。在创建新表时,会分配给它一个初始只为一个盘区的存储空间。当增加表的存储空间时,以盘区为单位增加。

7.1.3 用Enterprise Manager 创建表
在Enterprise Manager 中创建表按以下步骤进行:
(1) 在要创建表的数据库中选择“Tables” 对象后,单击右键,从快捷菜单中选择“New Table” 选项,或在工具栏中选择图标,即会出现如图7-1 所示的定义列对话框。在此可以是设定表的列名、数据类型、精度、缺省值等属性。

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

(3) 输入表名后单击“OK”按钮,即会将表保存到数据库中。然后图7-1 中工具栏右边原来不可用的几个按钮将变为可用,可以使用它们来设置表的其它信息,在以后的章节中将讲到它们的使用。

7.1.4 创建临时表
可以用CREATE TABLE 命令创建表局部的或全局作用的临时表。其语法与创建一般表基本相同,只是在局部临时表的表名前要使用符号“#”,全局临时表的表名前要使用符号“##”以便与一般的表相区别。由于SQL Server 将临时表的表名存储到Tempdb数据库中sysobjects 表中时,会自动在其后面添加一个系统产生的12 位的数字后缀,因此临时表的表名最长只能指定116 个字符,以不超过128 个字符的命名限制。
例7-2 创建一个局部临时表test123
create table #test123 (
test_id smallint ,
test_name char(10) ,
) on [primary

时间: 2024-12-03 20:02:55

创建数据库表的相关文章

php-用PHP创建数据库表总是失败,代码如下,跪求大神。。

问题描述 用PHP创建数据库表总是失败,代码如下,跪求大神.. <?php$con = mysql_connect(""localhost""root""xxh2011010015"");if (!$con) { die('Could not connect: ' . mysql_error()); } // Create table in my_db databasemysql_select_db("&quo

hibernate 根据持久化类 创建数据库表的时候出现的错误如下,请大神帮忙解决?

问题描述 hibernate 根据持久化类 创建数据库表的时候出现的错误如下,请大神帮忙解决? 十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata 信息: table not found: DIC_TAB 十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata 信息:

PHP MySQL入门教程之创建数据库/表及保存数据

具体如下 为了让 PHP 执行上面的语句,我们必须使用 mysql_query() 函数.此函数用于向 MySQL 连接发送查询或命令. 例子 在下面的例子中,我们创建了一个名为 "my_db" 的数据库:  代码如下 复制代码 <?php $con = mysql_connect("localhost","peter","abc123"); if (!$con)  {  die('Could not connect:

JBuilder2005实战JSP之创建数据库表(8)

js|创建|数据|数据库 1.在Oracle的SQL Plus工具中,以具有DBA权限的用户登录数据库. system/manger@to_128 @后的to_128为数据库的连接串名,需要根据具体情况更改,如果数据库是在本地,则可以省略@和连接串. 2.创建jbuser用户,指定密码为abc. SQL> create user jbuser identified by abc; 3.为jbuser用户分配connect和resource角色权限. SQL> grant connect ,re

JSP实战:JBuilder2005中创建数据库表

js|创建|数据|数据库 1.在Oracle的SQL Plus工具中,以具有DBA权限的用户登录数据库. system/manger@to_128 @后的to_128为数据库的连接串名,需要根据具体情况更改,如果数据库是在本地,则可以省略@和连接串. 2.创建jbuser用户,指定密码为abc. SQL> create user jbuser identified by abc; 3.为jbuser用户分配connect和resource角色权限. SQL> grant connect ,re

JBuilder2005实战JSP之创建数据库表

js|创建|数据|数据库 1.在Oracle的SQL Plus工具中,以具有DBA权限的用户登录数据库. system/manger@to_128 @后的to_128为数据库的连接串名,需要根据具体情况更改,如果数据库是在本地,则可以省略@和连接串. 2.创建jbuser用户,指定密码为abc. SQL> create user jbuser identified by abc; 3.为jbuser用户分配connect和resource角色权限. SQL> grant connect ,re

MS SQL基础教程:创建数据库表

在使用数据库的过程中,接触最多的就是数据库中的表.表是数据存储的地方.是数据库中最重要的部分,管理好表也就管理好了数据库.本章将介绍如何创建和管理数据库表. 表是由行和列组成的.创建表的过程主要就是定义表的列的过程,为此,应先了解表的列的属性. 7.1.1 列的属性 表的列名在同一个表中具有惟一性,同一列的数据属于同一种数据类型.除了用列名和数据类型来指定列的属性外,还可以定义其它属性:NULL 或NOT NULL 属性和IDENTITY 属性. (1) NULL 或NOT NULL 如果表的某

C#创建数据库表的问题

问题描述 是这样,我用的是SQLserver2008R2数据库跟VS2010,我先在VS上创建了数据库A中的一个表a,然后用DROP语句删除整个表然后创建了一个全新的表b,名字和列明跟表a完全不同,但执行完之后我在服务资源管理器上看到的依然是a,就是说我之后我无论创建什么表最后生成的都是表a!!有没有大神知道怎么回事我是新手.. 解决方案 解决方案二:你怎么创建的解决方案三:在VS里"CREATETABLE表名"语句

EF5无法在远程数据库上创建数据库表

问题描述 用mvc4+EF5的开发环境下,在webconfig下配置本地的连接节点,可以在本地的数据库创建数据库文件和表,但是使用远程数据库连接语句,无法在远程的数据库上自动创建数据表?求教育,有没有已经成功的远程数据库连接语句 解决方案 解决方案二:你先确定远程数据库连上了,再纠结能不能创建表的问题都没连上当然创建不了解决方案三:你登录数据库的用户身份可以创建表解决方案四:..................吗?.得有权限解决方案五:引用1楼Z65443344的回复: 你先确定远程数据库连上了