数据库祥解



 下面的每个问题都需要针对Oracle,MySQL,SQLServer三种数据库类解答并附带示例:

注释

数据类型

完整的建库语句

完整的建表语句

修改表的结构

建立索引。



MYSQL注释

单行 #

多行 /*   */

Mysql有3种注释句法
# 注射掉注释符后面的本行内容
-- 注射效果同#
/* ... */  注释掉符号中间的部分

对于#号将是我们最常用的注释方法。
-- 号记得后面还得有一个空格才能起注释作用。
/*…*/  我们一般只用前面的/*就够了,因为后面的我们想加也不行,是吧?
如:
# this is a single line comment
/* this is a single line comment */
/* this,however,
is a multiple line
comment
*/
自MySQL3.23 版以来,可在C 风格的注释中“隐藏” MySQL特有的关键字,注释以“/ * !”而不是
以“ / *”起头。MySQL查看这种特殊类型注释的内部并使用这些关键字,但其他数据库服务器将这些
关键字作为注释的一部分忽略。这样有助于编写由MySQL执行时利用MySQL特有功能的代码,而且该代码
也可以不用修改就用于其他数据库服务器。下面的两条语句对于非MySQL的数据库服务器是等价的,但如
果是MySQL服务器,将在第二条语句中执行一个INSERT DELAYED 操作:
insert into absence
insert /*! delayed */ into absence






SQL Server 注释
标准的注释符“--” 用于单行注释;
C语言相同的程序注释符号,即“/**/”“/*”用于注释文字的开头,“*/”用于注释文字的结尾,可在程序中标识多行文字为注释。

MYSQL建表格:
mysql>CREATE TABLE data (name char(8),sex char(2));
上例建立名为data的表格,并有两个字段,分别是name(名字),字符型,长

度8;sex(性别),字符型,长度为2。表名data分区大小写。


SQL Server  建表格:

用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字节。在创建新表时,会分配给它一个初始只为一个盘区的存储空间。当增加表的存储空间时,以盘区为单位增加。

  • 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字节。在创建新表时,会分配给它一个初始只为一个盘区的存储空间。当增加表的存储空间时,以盘区为单位增加。

用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字节。在创建新表时,会分配给它一个初始只为一个盘区的存储空间。当增加表的存储空间时,以盘区为单位增加。

  • 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字节。在创建新表时,会分配给它一个初始只为一个盘区的存储空间。当增加表的存储空间时,以盘区为单位增加。





完整的建库语句
SqlServer:
1。展开服务器组,然后展开服务器实例
2。右击"数据库",然后单击"新建数据库"命令,打开"数据库属性"窗口.
3。键入新数据库的名称.
4。默认情况下,系统自动地使用指定的数据库名作为前缀创建主数据库和事务日志文件.
5。要更改新建主数据库文件的默认值,单击"数据文件"选项卡.
6。若要更改新建事务日志文件的默认值,单击"事务日志"选项卡.
7。要指定文件如何增长,请从以下选择中选择:
  *当需要更多的数据空间时,若要允许当前选定的文件增长,选择“文件自动增长”命令
  *要指定文件按固定步长增长,选择“按兆字节”命令并指定一个值
  *若要指定文件按当前大小不一的百分比增长,选择“按百分比”命令,并且指定一个值
8。建议指定文件的最大允许增长的大小
  #这样做可以防止文件在添加数据时无限制增大,以至用尽整个磁盘空间。   

完整的建库语句 SqlServer: 1。展开服务器组,然后展开服务器实例 2。右击"数据库",然后单击"新建数据库"命令,打开"数据库属性"窗口. 3。键入新数据库的名称. 4。默认情况下,系统自动地使用指定的数据库名作为前缀创建主数据库和事务日志文件. 5。要更改新建主数据库文件的默认值,单击"数据文件"选项卡. 6。若要更改新建事务日志文件的默认值,单击"事务日志"选项卡. 7。要指定文件如何增长,请从以下选择中选择:   *当需要更多的数据空间时,若要允许当前选定的文件增长,选择“文件自动增长”命令   *要指定文件按固定步长增长,选择“按兆字节”命令并指定一个值   *若要指定文件按当前大小不一的百分比增长,选择“按百分比”命令,并且指定一个值 8。建议指定文件的最大允许增长的大小   #这样做可以防止文件在添加数据时无限制增大,以至用尽整个磁盘空间。   

完整的建库语句 SqlServer: 1。展开服务器组,然后展开服务器实例 2。右击"数据库",然后单击"新建数据库"命令,打开"数据库属性"窗口. 3。键入新数据库的名称. 4。默认情况下,系统自动地使用指定的数据库名作为前缀创建主数据库和事务日志文件. 5。要更改新建主数据库文件的默认值,单击"数据文件"选项卡. 6。若要更改新建事务日志文件的默认值,单击"事务日志"选项卡. 7。要指定文件如何增长,请从以下选择中选择:   *当需要更多的数据空间时,若要允许当前选定的文件增长,选择“文件自动增长”命令   *要指定文件按固定步长增长,选择“按兆字节”命令并指定一个值   *若要指定文件按当前大小不一的百分比增长,选择“按百分比”命令,并且指定一个值 8。建议指定文件的最大允许增长的大小   #这样做可以防止文件在添加数据时无限制增大,以至用尽整个磁盘空间。   

MySql :

/*  create database accounts;      #accounts为数据库名
    use accounts;
*/


Oracle :
1。用Database Assistant创建典型的数据库
2。用Database Assistant自定义创建一个数据库
3。用PL/SQL语句创建数据库
    create database mydb
    logfile file1,file2 size nm    #file1,file2为文件名   size 为大小
    maxlogfiles n
    maxlogmembers n
    maxloghistory n
    Datafile file1 size nm         #file1为文件名
    maxdatafiles n
    maxinstances n
    archivelog  |  noarchivelog 

举例:
   create database mydb
   datafile '/disk03/mydb/system1.dbf' size 20m
   logfile '/disk04/mydb/log1.log',
   'disk05/mydb/log2.log' size 512k;      
             

建立索引

1 sql/oracle/的建立索引
 CREATE [UNIQUE][CLUSTERED|NONCLUSTERED]INDEX index_name
 ON {table|view}(column[ASC|DESC])

 UNIQUE参数创建唯一索引;
 CLUSTERED|NONCLUSTERED 聚集/非聚集索引;
 ASC 升序
 DESC 降序
 
 eg:
 为表Employee 创建基于Wage列的索引au_wage;
  CREATE INDEX au_wage ON Employee(wage)

2 mysql
  1).普通索引
  创建索引:CREATE INDEX indexName ON tableName(tableColumns(length));
    如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB 和 TEXT 类型,必须指定length。
  2).唯一索引
   创建索引:CREATE UNIQUE INDEX indexName ON tableName(tableColumns(length))
  3)主键索引
  CREATE TABLE testIndex(i_testID INT NOT NULL AUTO_INCREMENT,
                           vc_Name VARCHAR(16) NOT NULL,PRIMARY KEY(i_testID)); 

三种数据库数据类型


oracle数据类型分类:

Char 用于描述定长的字符型数据,长度<=2000字节
varchar2 用于描述变长的字符型数据,长度<=4000字节
nchar 用来存储Unicode字符集的定长字符型数据,长度<=1000字节
nvarchar2 用来存储Unicode字符集的变长字符型数据,长度<=1000字节
number 用来存储整型或者浮点型数值
Date 用来存储日期数据
Long 用来存储最大长度为2GB的变长字符数据
Raw 用来存储非结构化数据的变长字符数据,长度<=2000字节
Long raw 用来存储非结构化数据的变长字符数据,长度<=2GB
rowid 用来存储表中列的物理地址的二进制数据,占用固定的10个字节
Blob 用来存储多达4GB的非结构化的二进制数据
Clob 用来存储多达4GB的字符数据
nclob 用来存储多达4GB的Unicode字符数据
Bfile 用来把非结构化的二进制数据存储在数据库以外的操作系统文件中
urowid 用来存储表示任何类型列地址的二进制数据
float 用来存储浮点数

SQL-sever数据类型分类:

整数数据类型          INT或INTEGER  SMALLINT  TINYINT   BIGINT
浮点数据类型          REAL  FLOAT  DECIMAL   NUMERIC
二进制数据类型        BINARY   VARBINARY
逻辑数据类型          BIT
字符数据类型          CHAR   NCHAR  VARCHAR   NVARCHAR
文本和图形数据类型    TEXT   NTEXT  IMAGE
日期和时间数据类型    DATETIME   SMALLDATETIME
货币数据类型          MONEY   SMALLMONEY
特定数据类型          TIMESTAMP   UNIQUEIDENTIFIER
用户自定义数据类型    SYSNAME
新数据类型            SQL_VARIANT   TABLE


详解:

4.3.1 整数数据类型
    整数数据类型是最常用的数据类型之一。
     1、INT (INTEGER)
INT (或INTEGER)数据类型存储从-2的31次方 (-2 ,147 ,483 ,648) 到2的31次方-1 (2 ,147 ,483,647) 之间的所有正负整数。每个INT 类型的数据按4 个字节存储,其中1 位表示整数值的正负号,其它31 位表示整数值的长度和大小。
     2、SMALLINT
SMALLINT 数据类型存储从-2的15次方( -32, 768) 到2的15次方-1( 32 ,767 )之间的所有正负整数。每个SMALLINT 类型的数据占用2 个字节的存储空间,其中1 位表示整数值的正负号,其它15 位表示整数值的长度和大小。
     3、TINYINT
TINYINT数据类型存储从0 到255 之间的所有正整数。每个TINYINT类型的数据占用1 个字节的存储空间。
     4、BIGINT
BIGINT 数据类型存储从-2^63 (-9 ,223, 372, 036, 854, 775, 807) 到2^63-1( 9, 223, 372, 036 ,854 ,775, 807) 之间的所有正负整数。每个BIGINT 类型的数据占用8个字节的存储空间。

4.3.2 浮点数据类型
    浮点数据类型用于存储十进制小数。浮点数值的数据在SQL Server 中采用上舍入(Round up 或称为只入不舍)方式进行存储。所谓上舍入是指,当(且仅当)要舍入的数是一个非零数时,对其保留数字部分的最低有效位上的数值加1 ,并进行必要的进位。若一个数是上舍入数,其绝对值不会减少。如:对3.14159265358979 分别进行2 位和12位舍入,结果为3.15 和3.141592653590。
     1、REAL 数据类型
REAL数据类型可精确到第7 位小数,其范围为从-3.40E -38 到3.40E +38。 每个REAL类型的数据占用4 个字节的存储空间。
     2、FLOAT
FLOAT数据类型可精确到第15 位小数,其范围为从-1.79E -308 到1.79E +308。 每个FLOAT 类型的数据占用8 个字节的存储空间。 FLOAT数据类型可写为FLOAT[ n ]的形式。n 指定FLOAT 数据的精度。n 为1到15 之间的整数值。当n 取1 到7 时,实际上是定义了一个REAL 类型的数据,系统用4 个字节存储它;当n 取8 到15 时,系统认为其是FLOAT 类型,用8 个字节存储它。
     3、DECIMAL
DECIMAL数据类型可以提供小数所需要的实际存储空间,但也有一定的限制,您可以用2 到17 个字节来存储从-10的38次方-1 到10的38次方-1 之间的数值。可将其写为DECIMAL[ p [s] ]的形式,p 和s 确定了精确的比例和数位。其中p 表示可供存储的值的总位数(不包括小数点),缺省值为18; s 表示小数点后的位数,缺省值为0。 例如:decimal (15 5),表示共有15 位数,其中整数10 位,小数5。 位表4-3 列出了各精确度所需的字节数之间的关系。
   4、NUMERIC
NUMERIC数据类型与DECIMAL数据类型完全相同。
注意:SQL Server 为了和前端的开发工具配合,其所支持的数据精度默认最大为28位。但可以通过使用命令来执行sqlserver.exe程序以启动SQL Server,可改变默认精度。命令语法如下:SQLSERVR[/D master_device_path][/P precisim_leve1]
4.3.3 二进制数据类型
     1、BINARY
BINARY 数据类型用于存储二进制数据。其定义形式为BINARY( n), n 表示数据的长度,取值为1 到8000 。在使用时必须指定BINARY 类型数据的大小,至少应为1 个字节。BINARY 类型数据占用n+4 个字节的存储空间。在输入数据时必须在数据前加上字符“0X” 作为二进制标识,如:要输入“abc ”则应输入“0xabc ”。若输入的数据过长将会截掉其超出部分。若输入的数据位数为奇数,则会在起始符号“0X ”后添加一个0,如上述的“0xabc ”会被系统自动变为“0x0abc”。
     2、VARBINARY
VARBINARY数据类型的定义形式为VARBINARY(n)。 它与BINARY 类型相似,n 的取值也为1 到8000, 若输入的数据过长,将会截掉其超出部分。不同的是VARBINARY数据类型具有变动长度的特性,因为VARBINARY数据类型的存储长度为实际数值长度+4个字节。当BINARY数据类型允许NULL 值时,将被视为VARBINARY数据类型。
一般情况下,由于BINARY 数据类型长度固定,因此它比VARBINARY 类型的处理速度快。

4.3.4 逻辑数据类型
    BIT: BIT数据类型占用1 个字节的存储空间,其值为0 或1 。如果输入0 或1 以外的值,将被视为1。 BIT 类型不能定义为NULL 值(所谓NULL 值是指空值或无意义的值)。

4.3.5 字符数据类型
    字符数据类型是使用最多的数据类型。它可以用来存储各种字母、数字符号、特殊符号。一般情况下,使用字符类型数据时须在其前后加上单引号’或双引号” 。
     1 CHAR
CHAR 数据类型的定义形式为CHAR[ (n) ]。 以CHAR 类型存储的每个字符和符号占一个字节的存储空间。n 表示所有字符所占的存储空间,n 的取值为1 到8000, 即可容纳8000 个ANSI 字符。若不指定n 值,则系统默认值为1。 若输入数据的字符数小于n,则系统自动在其后添加空格来填满设定好的空间。若输入的数据过长,将会截掉其超出部分。
     2、NCHAR
NCHAR数据类型的定义形式为NCHAR[ (n) ]。 它与CHAR 类型相似。不同的是NCHAR数据类型n 的取值为1 到4000。 因为NCHAR 类型采用UNICODE 标准字符集(CharacterSet)。 UNICODE 标准规定每个字符占用两个字节的存储空间,所以它比非UNICODE 标准的数据类型多占用一倍的存储空间。使用UNICODE 标准的好处是因其使用两个字节做存储单位,其一个存储单位的容纳量就大大增加了,可以将全世界的语言文字都囊括在内,在一个数据列中就可以同时出现中文、英文、法文、德文等,而不会出现编码冲突。
     3、VARCHAR
VARCHAR数据类型的定义形式为VARCHAR [ (n) ]。 它与CHAR 类型相似,n 的取值也为1 到8000, 若输入的数据过长,将会截掉其超出部分。不同的是,VARCHAR数据类型具有变动长度的特性,因为VARCHAR数据类型的存储长度为实际数值长度,若输入数据的字符数小于n ,则系统不会在其后添加空格来填满设定好的空间。
一般情况下,由于CHAR 数据类型长度固定,因此它比VARCHAR 类型的处理速度快。
     4、NVARCHAR
NVARCHAR数据类型的定义形式为NVARCHAR[ (n) ]。 它与VARCHAR 类型相似。不同的是,NVARCHAR数据类型采用UNICODE 标准字符集(Character Set), n 的取值为1 到4000。

4.3.6 文本和图形数据类型
    这类数据类型用于存储大量的字符或二进制数据。
     1、TEXT
TEXT数据类型用于存储大量文本数据,其容量理论上为1 到2的31次方-1 (2, 147, 483, 647)个字节,在实际应用时需要视硬盘的存储空间而定。
SQL Server 2000 以前的版本中,数据库中一个TEXT 对象存储的实际上是一个指针,它指向一个个以8KB (8192 个字节)为单位的数据页(Data Page)。 这些数据页是动态增加并被逻辑链接起来的。在SQL Server 2000 中,则将TEXT 和IMAGE 类型的数据直接存放到表的数据行中,而不是存放到不同的数据页中。 这就减少了用于存储TEXT 和IMA- GE 类型的空间,并相应减少了磁盘处理这类数据的I/O 数量。
    2 NTEXT
NTEXT数据类型与TEXT.类型相似不同的,是NTEXT 类型采用UNICODE 标准字符集(Character Set), 因此其理论容量为230-1(1, 073, 741, 823)个字节。
    3 IMAGE
IMAGE数据类型用于存储大量的二进制数据Binary Data。 其理论容量为2的31次方-1(2,147,483,647)个字节。其存储数据的模式与TEXT 数据类型相同。通常用来存储图形等OLE Object Linking and Embedding,对象连接和嵌入)对象。在输入数据时同BINARY数据类型一样,必须在数据前加上字符“0X”作为二进制标识

4.3.7 日期和时间数据类型
    1 DATETIME
DATETIME 数据类型用于存储日期和时间的结合体。它可以存储从公元1753 年1 月1 日零时起到公元9999 年12 月31 日23 时59 分59 秒之间的所有日期和时间,其精确度可达三百分之一秒,即3.33 毫秒。DATETIME 数据类型所占用的存储空间为8 个字节。其中前4 个字节用于存储1900 年1 月1 日以前或以后的天数,数值分正负,正数表示在此日期之后的日期,负数表示在此日期之前的日期。后4 个字节用于存储从此日零时起所指定的时间经过的毫秒数。如果在输入数据时省略了时间部分,则系统将12:00:00:000AM作为时间缺省值:如果省略了日期部分,则系统将1900 年1 月1 日作为日期缺省值。
    2 SMALLDATETIME
SMALLDATETIME 数据类型与DATETIME 数据类型相似,但其日期时间范围较小,为从1900 年1 月1 日到2079 年6 月6:日精度较低,只能精确到分钟,其分钟个位上为根据秒数四舍五入的值,即以30 秒为界四舍五入。如:DATETIME 时间为14:38:30.283
时SMALLDATETIME 认为是14:39:00 SMALLDATETIME 数据类型使用4 个字节存储数据。其中前2 个字节存储从基础日期1900 年1 月1 日以来的天数,后两个字节存储此日零时起所指定的时间经过的分钟数。
    下面介绍日期和时间的输入格式
    日期输入格式
    日期的输入格式很多大致可分为三类:

英文+数字格式
此类格式中月份可用英文全名或缩写,且不区分大小写;年和月日之间可不用逗号;
年份可为4 位或2 位;当其为两位时,若值小于50 则视为20xx 年,若大于或等于50 则
视为19xx 年;若日部分省略,则视为当月的1号。以下格式均为正确的日期格式:
June 21 2000 Oct 1 1999 January 2000 2000 February
2000 May 1 2000 1 Sep 99 June July 00
数字+分隔符格式
允许把斜杠(/)、连接符(-)和小数点(.)作为用数字表示的年、月、日之间的分
隔符。如:
YMD:2000/6/22 2000-6-22 2000.6.22
MDY:3/5/2000 3-5-2000 3.5.2000
DMY:31/12/1999 31-12-1999 31.12.2000
纯数字格式
纯数字格式是以连续的4 位6、位或8 位数字来表示日期。如果输入的是6 位或8 位
数字,系统将按年、月、日来识别,即YMD 格式,并且月和日都是用两位数字来表示:
如果输入的数字是4 位数,系统认为这4 位数代表年份,其月份和日缺省为此年度的1 月
1 日。如:
20000601---2000 年6 月1 日 991212---1999 年12 月12 日 1998---1998 年
????
时间输入格式
在输入时间时必须按“小时、分钟、秒、毫秒”的顺序来输入。在其间用冒号“:”隔开。但可将毫秒部分用小数点“.” 分,隔其后第一位数字代表十分之一秒,第二位数字代表百分之一秒,第三位数字代表千分之一秒。当使用12 小时制时用AM。am 和PM(pm)分别指定时间是午前或午后,若不指定,系统默认为AM。AM 与PM 均不区分大小写。如:
    3:5:7.2pm---下午3 时5 分7 秒200 毫秒
    10:23:5.123Am---上午10 时23 分5 秒123 毫秒
    可以使用SET DATEFORMAT 命令来设定系统默认的日期-时间格式。

4.3.8 货币数据类型
货币数据类型用于存储货币值。在使用货币数据类型时,应在数据前加上货币符号,系统才能辨识其为哪国的货币,如果不加货币符号,则默认为“¥”。各货币符号如图4-2所示。
    1 MONEY
MONEY 数据类型的数据是一个有4 位小数的DECIMAL 值,其取值从-2的63次方(-922,337,203,685,477.5808到2的63次方-1(+922,337,203,685,477.5807),数据精度为万分之一货币单位。MONEY 数据类型使用8个字节存储。

   2 SMALLMONEY
SMALLMONEY数据类型类似于MONEY 类型,但其存储的货币值范围比MONEY数据类型小,其取值从-214,748.3648到+214,748.3647,存储空间为4 个字节。

4.3.9 特定数据类型
SQL Server 中包含了一些用于数据存储的特殊数据类型。
    1 TIMESTAMP
TIMESTAMP数据类型提供数据库范围内的惟一值此类型相当于BINARY8或VARBINARY(8),但当它所定义的列在更新或插入数据行时,此列的值会被自动更新,一个计数值将自动地添加到此TIMESTAMP数据列中。每个数据库表中只能有一个TIMESTAMP数据列。如果建立一个名为“TIMESTAMP”的列,则该列的类型将被自动设为TIMESTAMP数据类型。

    2 UNIQUEIDENTIFIER
UNIQUEIDENTIFIER 数据类型存储一个16 位的二进制数字。此数字称为(GUIDGlobally Unique Identifier ,即全球惟一鉴别号)。此数字由SQLServer 的NEWID函数产生的全球惟一的编码,在全球各地的计算机经由此函数产生的数字不会相同。

4.3.10 用户自定义数据类型
SYSNAME SYSNAME 数据类型是系统提供给用户的,便于用户自定义数据类型。它被定义为NVARCHAR(128),即它可存储128个UNICODE字符或256个一般字符。其具体使用方法请参见第7章“管理数据库表”中的“自定义数据类型”章节。

4.3.11 新数据类型
SQL Server 2000 中增加了3 种数据类型:BIGINT、SQL_VARIANT和TABLE。其中BIGINT数据类型已在整数类型中介绍,下面介绍其余两种:
    1 SQL_VARIANT
SQL_VARIANT数据类型可以存储除文本、图形数据(TEXT、NTEXT、IMAGE)和TIMESTAMP类型数据外的其它任何合法的SQL Server数据。此数据类型大大方便了SQL Server的开发工作。
    2 TABLE
TABLE 数据类型用于存储对表或视图处理后的结果集。这一新类型使得变量可以存储一个表,从而使函数或过程返回查询结果更加方便快、捷其、使用请参见第13章“游标、视图和自定


MySQL数据类型:

1. 数值值            TINYINT(非常小的整数)    SMALLINT(较小整数)       MEDIUMINT(中等大小的整数)    INT(标准整数)
       BIGINT(大整数)     FLOAT(单精度浮点数)     DOUBLE(双精度浮点数)    DECIMAL(一个串的浮点数)

2. (字符)串值      CHAR(固定长字符串)     VARCHAR(可变长字符串)    TINYBLOB(非常小的BLOB(二进制大对象))  BLOB(小BLOB)
                     MEDIUMBLOB(中等的BLOB)    LONGBLOB(大BLOB)      TINYTEXT(非常小的文本串)    TEXT(小文本串)
            MEDIUMTEXT(中等文本串)    LONGTEXT(大文本串)     ENUM(枚举)      SET(集合)

3. 日期和时间值      DATE("YYYY-MM-DD"格式表示的日期型)  TIME("hh:mm:ss"格式表示的时间型) DATETIME("YYYY-MM-DD hh:mm:ss"格式表示的时间日期型)
       TIMESTAMP("YYYYMMDDhhmmss"格式表示的时间日期型) YEAR("YYYY"格式的年份型)

4. NULL 值         NULL


Oracle 修改数据表结构

 (1)如图7.19所示



(2)出现如图7.20所示的编辑表的【一般信息】选项卡。
 (3)其他选项卡的操作比较简单.


 mysql修改数据表结构


     ALTER TABLE 语句
    ALTER TABLE 语句是MySQL中一条通用的语句,可用它来做许多事情。我们已经看过了它的几种功能(创建和删除索引以及将表从一种存储格式转换为另一种存储格式)。本节中,我们将介绍它的一些其他功能。ALTER TABLE 的完整语法在附录D 中介绍。
    在发现某个表的结构不再反映所希望的东西时, ALTER TABLE很有用处。可能希望用该表记录其他信息,或者它含有多余的值。或者有的列太小,或者其定义较实际需要来说太大,需要将它们改小以节省存储空间。或者发布CREATE TABLE 语句时给出的表名不对。等等,诸如此类的问题,都可以用ALTER TABLE 语句来解决。下面是一些例子:
       您正操纵一个基于Web 的问卷,将每份提交的问卷作为表中的一个记录。后来决定修改此问卷,增加一些问题。这时必须对表增加一些列以存放新问题。
       您正在管理一个研究项目。用AUTO_INCREMENT 列分配案例号来研究记录。您不希望经费延期太长产生多于50 000 个以上的记录,因此,令该列的类型为UNSIGNED SMALLINT,它能存储的最大惟一值为65 535。但是,项目的经费延长了,似乎可能另外产生50 000 个记录。这时,需要使该列的类型更大一些以便存储更多的件号。
       大小的更改也可能是反方向的。可能创建了一个CHAR(255) 列,但现在发现表中没有比100 个字符更长的串。这时可缩短该列以节省存储空间。ALTER TABLE 的语法如下:
           ALTER TABLE tbl_name action,...

    每个action 表示对表所做的一个修改。MySQL扩充了ALTER TABLE 语句,允许指定多个动作,各动作间以逗号分隔。这对于减少键盘输入很有用,但这个扩充的更为重要的原因是,除非能同时将所有VARCHAR 列更改为CHAR 列,否则不可能将表从行可变长的表更改为行定长的表。
    下面的例子示出了某些ALTER TABLE 的功能。
       对表重新命名。这很简单;只需给出旧表名和新表名即可:
           ALTER TABLE tbl_name RENAME AS new_tbl_name

    在MySQL3.23 中有临时表,重命名一个临时表为数据库中已经存在的名称将隐藏原始表,只要临时表存在就会隐藏原始表。这类似于通过用相同的名字创建一个临时表来隐藏一个表的方法。
      更改列类型。为了更改列的类型,可使用CHANGE 或MODIFY 子句。假如表my _ t b l中的列为SMALLINT UNSIGNED 的,希望将其更改为MEDIUMINT UNSIGNED 的列。用下面的任何一个命令都可完成此项工作:
           ALTER TABLE my_tbl MODIFY i MEDIUMINT UNSIGNED
           ALTER TABLE my_tbl MODIFY i i MEDIUMINT UNSIGNED

    为什么在CHANGE 命令中给出列名两次?因为CHANGE 可以做的而MODIFY 不能做的一桩事是,除了更改类型外还能更改列名。如果希望在更改类型的同时重新将i 命名为j,可按如下进行:
           ALTER TABLE my_tbl CHANGE i j MEDIUMINT UNSIGNED

    重要的是命名了希望更改的列,并说明了一个包括列名的列的完整定义。即使不更改列名,也需要在定义中包括相应的列名。
    更改列类型的一个重要原因是为了改善比较两个表的连接查询的效率。在两个列的类型相同时,比较更快。假如执行如下的查询:
           SELECT ... FROM t1,t2 WHERE t1.name = t2.name

    如果t1.name 为CHAR( 10 ),而t2.name 为CHAR( 15 ),此查询的运行速度没有它们两者都为CHAR(15) 时的快。那么可以用下面的任一条命令更改t1.name 使它们的类型相同:
           ALTER TABLE t1 MODIFY name CHAR(15)
           ALTER TABLE t1 CHANGE name name CHAR(15)

    对于3 . 2 3以前的MySQL版本,所连接的列必须是同样类型的这一点很重要,否则索引不能用于比较。对于版本3.23 或以上的版本,索引可用于不同的类型,但如果类型相同,查询仍然更快。
      将表从可变长行转换为定长行。假如有一个表chartbl 具有VARCHAR 列,想要把它转换为CHAR 列,看看能够得到什么样的性能改善。(定长行的表一般比变长行的表处理更快。)这个表如下创建:
            CREATE TABLE chartb1 (name VARCHAR(40),MODIFY address CHAR(80)

    这里的问题是需要在相同的ALTER TABLE 语句中一次更改所有的列。不可能一次一列地改完,或者说这个企图将不起作用。如果执行DESCRIBE chartbl,会发现两个列仍然是VARCHAR 的列!原因是如果每次更改一列, MySQL注意到表仍然包含有可变长的列,则会把已经更改过的列重新转换为VARCHAR 以节省空间。为了处理这个问题,应该同时更改所有VARCHAR 列:
            ALTER TABLE chartb1 MODIFY name CHAR(40),MODIFY address CHAR(80)

    现在DESCRIBE 将显示该表包含的都是CHAR 列。确实,这种类型的操作很重要,因为它使ALTER TABLE 能在相同的语句中支持多个动作。
    这里要注意,在希望转换这样的表时:如果表中存在BLOB 或TEXT 列将使转换表为定长行格式的企图失败。即使表中只有一个可变长的列都将会使表有可变长的行,因为这些可变长的列类型没有定长的等价物。
      将表从定长行转换为可变长的行。虽然, chartbl 用定长行更快,但它要占用更多的空间,因此决定将它转换回原来的形式以节省空间。这种转换更为容易。只需将某个CHAR 列转换为VARCHAR 列,MySQL就自动地转换其他的CHAR 列。要想转换chartbl 表,用下列任一条语句都可以:
            ALTER TABLE chartb1 MODIFY name VARCHAR(40)
            ALTER TABLE chartb1 MODIFY address VARCHAR(80)

      转换表的类型。如果从MySQL3.23 版以前的版本升级到3.23 版或更高,那么可能会有一些原来创建为ISAM 表的旧表。如果希望使它们为MyISAM 格式,如下操作:
            ALTER TABLE tb1_name TYPE = MYISAM



SQL sever修改数据表结构

 用Enterprise Manager 修改
在Enterprise Manager 中选择要进行改动的表,单击右键,从快捷菜单中选择“DesignTable”选项,则会出现如图7-4 所示的修改表结构对话框。可以在图7-4 所示的对话框中修改列的数据类型、名称等属性或添加、删除列,也可以指定表的主关键字约束。单击工具栏中的图标,出现如图7-5 所示的编辑表和约束的属性的对话框。可以在其中编辑各种约束和一些表的属性。







 用ALTER TABLE 命令修改
ALTER TABLE 命令可以添加或删除表的列、约束,也可以禁用或启用已存在的约束
或触发器。其语法如下:
ALTER TABLE table
{ [ALTER COLUMN column_name
{ new_data_type [ (precision[, scale] ) ]
[ COLLATE < collation_name > ]
[ NULL | NOT NULL ]
| {ADD | DROP} ROWGUIDCOL } ]
| ADD
{ [ <column_definition> ]
| column_name AS computed_column_expression
}[,...n]
| [WITH CHECK | WITH NOCHECK] ADD
{ <table_constraint> }[,...n]
| DROP
{ [CONSTRAINT] constraint_name
| COLUMN column
}[,...n]
| {CHECK | NOCHECK} CONSTRAINT
{ALL | constraint_name[,...n]}
| {ENABLE | DISABLE} TRIGGER
{ALL | trigger_name[,...n]}
}
<column_definition> ::= { column_name data_type }
[ [ DEFAULT constant_expression ]
| [ IDENTITY [(seed, increment ) [NOT FOR REPLICATION] ] ]
]
[ ROWGUIDCOL ]
[ COLLATE < collation_name > ]
[ <column_constraint>] [ ...n]
<column_constraint> ::= [CONSTRAINT constraint_name]
{ [ NULL | NOT NULL ]
| [ { PRIMARY KEY | UNIQUE }
[CLUSTERED | NONCLUSTERED]
[WITH FILLFACTOR = fillfactor]
[ON {filegroup | DEFAULT} ] ] ]
| [ [FOREIGN KEY]
REFERENCES ref_table [(ref_column) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
[NOT FOR REPLICATION ] ]
| CHECK [NOT FOR REPLICATION]
(logical_expression)}
<table_constraint> ::= [CONSTRAINT constraint_name]
{ [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED]
{ ( column [ ASC | DESC ] [,...n] ) }
[ WITH FILLFACTOR = fillfactor]
[ON {filegroup | DEFAULT} ] ]
| FOREIGN KEY
[(column[,...n])]
REFERENCES ref_table [(ref_column[,...n])]
[NOT FOR REPLICATION]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
| CHECK [NOT FOR REPLICATION]
(search_conditions)}
各参数说明如下:

  • table
    指定要修改的表的名称。如果表不在当前数据库中或表不属于当前的用户,就必须指明其所属的数据库名称和所有者名称。
  • ALTER COLUMN
  • new_data_type
    指定新的数据类型名称,其使用标准如下:
    列的原数据类型应可以转换为新的数据类型;
    新的数据类型不能为TIMESTAMP;
    新的数据类型允许列为NULL 值;
    如果原来的列是IDENTITY 列,则新的数据类型应支持IDENTITY 特性;
    当前的SET ARITHABORT 设置将被视为处于ON 状态。
  • precision
    指定新数据类型的位数。
  • scale
    指定新数据类型的小数位数。
  • NULL | NOT NULL
    指明列是否允许NULL 值。如果添加列到表中时,指定它为NOT NULL, 则必须指定此列的缺省值。选择此项后,new_data_type [(precision [, scale ])]选项就必须指定,即使precision 和scale 选项均不变,当前的数据类型也需要指出来。
  • WITH CHECK | WITH NOCHECK
    指定已经存在于表中的数据是否需要使用新添加的或刚启用的FOREIGN KEY 约束或CHECK 约束来验证。如果不指定,WITH CHECK 作为新添加约束的缺省选项,WITH NOCHECK 作为启用旧约束的缺省选项。
  • {ADD | DROP} ROWGUIDCOL
    添加或删除列的ROWGUIDCOL 属性。ROWGUIDCOL 属性只能指定给一个 UNIQUEIDENTIFIER 列。
  • ADD
    添加一个或多个列、计算列或表约束的定义。
  • computed_column_expression
    计算列的计算表达式。
  • DROP { [CONSTRAINT] constraint_name | COLUMN column_name }
    指定要删除的约束或列的名称。处于下列情况的列不能删除;
    用于复制的列;
    用于索引的列;
    用于CHECK FOREIGN KEY UNIQUE 或PRIMARY KEY 约束的列;
    定义了缺省约束或绑定了一个缺省值对象的列;
    绑定了规则(Rule)的列。
  • { CHECK | NOCHECK} CONSTRAINT
    启用或禁用FOREIGN KEY 或CHECK 约束。
  • ALL
    使用NOCHECK 选项禁用所有的约束,或使用CHECK 选项启用所有的约束。
  • {ENABLE | DISABLE} TRIGGER
    启用或禁用触发器。
  • ALL
    启用或禁用选项针对所有的触发器。
  • trigger_name
    指定触发器名称。
  • 其它参数与创建表和约束中所讲的相同。
    例7-13: 创建一个定货商信息表,然后修改简介列的数据类型。
    create table order_firm (
    order_firm_id char (8) primary key,
    firm_name varchar (50) not null
    firm_introduce char(50) null
    ) on [primary]
    alter table order_firm
    alter column firm_introduce varchar(250) null
    例7-14: 创建一个定货表再插入一个定货商编号列。
    create table orders(
    order_id char(8) ,
    p_id char(8) foreign key references products(p_id),
    order_quantity smallint check (order_quantity>=10),
    constraint pk_order_id primary key (order_id),
    ) on [primary]
    alter table orders
    add order_firm_id char(8) null
    constraint fk_order_firm_id foreign key references order_firm(order_firm_id)
    例7-15: 更改上例中的检查约束,并删除一个外关键字约束。
    alter table orders
    add constraint chk_order_quantity check (order_quantity>=100)
    drop constraint chk_order_quantity

     用存储过程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
    exec sp_rename 'orders.[p_id]', 'product_id', 'column'
    运行结果如下:
    Caution: Changing any part of an object name could break scripts and stored procedures.
    The column was renamed to 'product_id'.

    例7-17: 更改orders 表的名称为p_orders。
    exec sp_rename 'orders', 'p_orders''
    运行结果如下:
    Caution: Changing any part of an object name could break scripts and stored procedures.
    The object was renamed to 'p_orders'.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值