`

alter常用法总结

阅读更多

修改表的一些常用语法:col,col1,col2都指列名称

  添加列:alter table user add col number;

  修改列:alter table user modify col1 varchar(40) not null;

  删除列:alter table user drop columns col_test;

  重命名列alter table user rename column col1 to col2;

  添加主键:alter table user add constraint pk_test primary key (LINEID);

  添加外键:alter table user add constraint fk_test foreign key(hid) references hek_test_headers

(hid)

  失效主键:alter table user disable constraint pk_test;

  失效外键:alter table user disable constraint fk_test;

  删除主键:alter table user drop constraint pk_test cascade;

  删除外键:alter table user drop constraint fk_test;

 

看了下面的东西总结了上面的东西

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

 

通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。

语法

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 ] [ WITH VALUES ]
    | [ 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 [ ,...n ] ) }
        [ WITH FILLFACTOR = fillfactor ]
        [ ON { filegroup | DEFAULT } ]
        ]
        |    FOREIGN KEY

            [ ( column [ ,...n ] ) ]
            REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]
            [ ON DELETE { CASCADE | NO ACTION } ]
            [ ON UPDATE { CASCADE | NO ACTION } ]
            [ NOT FOR REPLICATION ]
        | DEFAULT constant_expression
            [ FOR column ] [ WITH VALUES ]
        |    CHECK [ NOT FOR REPLICATION ]

            ( search_conditions )
    }

权限

ALTER TABLE 权限默认授予表的所有者、sysadmin 固定服务器角色成员、db_ownerdb_ddladmin 固定数据库角色成员且不可转让。

示例
A. 更改表以添加新列

下例添加一个允许空值的列,而且没有通过 DEFAULT 定义提供值。各行的新列中的值将为 NULL。

CREATE TABLE doc_exa ( column_a INT) 
GO
ALTER TABLE doc_exa ADD column_b VARCHAR(20) NULL
GO
EXEC sp_help doc_exa
GO
DROP TABLE doc_exa
GO
B. 更改表以除去列

下例修改表以删除一列。

CREATE TABLE doc_exb ( column_a INT, column_b VARCHAR(20) NULL) 
GO
ALTER TABLE doc_exb DROP COLUMN column_b
GO
EXEC sp_help doc_exb
GO
DROP TABLE doc_exb
GO
C. 更改表以添加具有约束的列

下例向表中添加具有 UNIQUE 约束的新列。

CREATE TABLE doc_exc ( column_a INT) 
GO
ALTER TABLE doc_exc ADD column_b VARCHAR(20) NULL 
   CONSTRAINT exb_unique UNIQUE
GO
EXEC sp_help doc_exc
GO
DROP TABLE doc_exc
GO
D. 更改表以添加未验证的约束

下例向表中的现有列上添加约束。该列中存在一个违反约束的值;因此,利用 WITH NOCHECK 来防止对现有行验证约束,从而允许该约束的添加。

CREATE TABLE doc_exd ( column_a INT) 
GO
INSERT INTO doc_exd VALUES (-1)
GO
ALTER TABLE doc_exd WITH NOCHECK 
ADD CONSTRAINT exd_check CHECK (column_a > 1)
GO
EXEC sp_help doc_exd
GO
DROP TABLE doc_exd
GO
E. 更改表以添加多个带有约束的列

下例向表中添加多个带有约束的新列。第一个新列具有 IDENTITY 属性;表中每一行的标识列都将具有递增的新值。

CREATE TABLE doc_exe ( column_a INT CONSTRAINT column_a_un UNIQUE) 
GO
ALTER TABLE doc_exe ADD 

/* Add a PRIMARY KEY identity column. */ 
column_b INT IDENTITY
CONSTRAINT column_b_pk PRIMARY KEY, 

/* Add a column referencing another column in the same table. */ 
column_c INT NULL  
CONSTRAINT column_c_fk 
REFERENCES doc_exe(column_a),

/* Add a column with a constraint to enforce that   */ 
/* nonnull data is in a valid phone number format.  */
column_d VARCHAR(16) NULL 
CONSTRAINT column_d_chk
CHECK 
(column_d IS NULL OR 
column_d LIKE "[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]" OR
column_d LIKE
"([0-9][0-9][0-9]) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]"),

/* Add a nonnull column with a default.  */ 
column_e DECIMAL(3,3)
CONSTRAINT column_e_default
DEFAULT .081
GO
EXEC sp_help doc_exe
GO
DROP TABLE doc_exe
GO
F. 添加具有默认值的可为空的列

下例添加可为空的、具有 DEFAULT 定义的列,并使用 WITH VALUES 为表中的各现有行提供值。如果没有使用 WITH VALUES,那么每一行的新列中都将具有 NULL 值。

ALTER TABLE MyTable 
ADD AddDate smalldatetime NULL
CONSTRAINT AddDateDflt
DEFAULT getdate() WITH VALUES
G. 禁用并重新启用一个约束

下例禁用用于限制可接受的薪水数据的约束。WITH NOCHECK CONSTRAINT 与 ALTER TABLE 一起使用,以禁用该约束并使正常情况下会引起约束违规的插入操作得以执行。WITH CHECK CONSTRAINT 重新启用该约束。

CREATE TABLE cnst_example 
(id INT NOT NULL,
 name VARCHAR(10) NOT NULL,
 salary MONEY NOT NULL
    CONSTRAINT salary_cap CHECK (salary < 100000)
)

-- Valid inserts
INSERT INTO cnst_example VALUES (1,"Joe Brown",65000)
INSERT INTO cnst_example VALUES (2,"Mary Smith",75000)

-- This insert violates the constraint.
INSERT INTO cnst_example VALUES (3,"Pat Jones",105000)

-- Disable the constraint and try again.
ALTER TABLE cnst_example NOCHECK CONSTRAINT salary_cap
INSERT INTO cnst_example VALUES (3,"Pat Jones",105000)

-- Reenable the constraint and try another insert, will fail.
ALTER TABLE cnst_example CHECK CONSTRAINT salary_cap
INSERT INTO cnst_example VALUES (4,"Eric James",110000)
H. 禁用并重新启用触发器

下例使用 ALTER TABLE 的 DISABLE TRIGGER 选项来禁用触发器,以使正常情况下会违反触发器条件的插入操作得以执行。然后下例使用 ENABLE TRIGGER 重新启用触发器。

CREATE TABLE trig_example 
(id INT, 
name VARCHAR(10),
salary MONEY)
go
-- Create the trigger.
CREATE TRIGGER trig1 ON trig_example FOR INSERT
as 
IF (SELECT COUNT(*) FROM INSERTED
WHERE salary > 100000) > 0
BEGIN
print "TRIG1 Error: you attempted to insert a salary > $100,000"
ROLLBACK TRANSACTION
END
GO
-- Attempt an insert that violates the trigger.
INSERT INTO trig_example VALUES (1,"Pat Smith",100001)
GO
-- Disable the trigger.
ALTER TABLE trig_example DISABLE TRIGGER trig1
GO
-- Attempt an insert that would normally violate the trigger
INSERT INTO trig_example VALUES (2,"Chuck Jones",100001)
GO
-- Re-enable the trigger.
ALTER TABLE trig_example ENABLE TRIGGER trig1
GO
-- Attempt an insert that violates the trigger.
INSERT INTO trig_example VALUES (3,"Mary Booth",100001)
GO

<!--RELATEDTOPICSLIST-->

分享到:
评论

相关推荐

    alter 的使用方法

    根据提供的标题、描述以及部分代码示例,我们可以深入探讨`ALTER`命令的具体用法及其应用场景。 ### 一、ALTER 命令概述 `ALTER`命令主要用于修改数据库对象,如表、视图等。对于表来说,`ALTER`命令可以用于添加...

    alter提升各种数据库脚本的方法

    通过以上介绍,我们可以看到不同的数据库系统虽然都支持ALTER命令来修改表结构,但在具体的语法和使用方法上存在一定的差异。了解这些差异对于跨数据库环境的开发人员来说是非常重要的,能够帮助他们在实际工作中...

    sql中的alter命令

    通过使用`ALTER`命令,数据库管理员或开发人员可以灵活地调整数据库表结构以适应业务需求的变化。 ### ALTER 命令概述 `ALTER`命令主要用于修改数据库表结构,常见的操作包括但不限于添加新列、删除现有列、更改列...

    alter table test rename test1; --修改表名alter table test add colum

    ### MySQL ALTER TABLE 语法与应用详解 #### 一、概述 在MySQL中,`ALTER TABLE`语句是一种非常实用的工具,它允许用户修改现有表的结构,包括但不限于添加、删除或修改列、更改表名以及调整表的存储引擎等。这种...

    Alter网络编程下载电缆

    ### Ethernet Blaster II 通信电缆概述与工作原理 #### 一、引言 Ethernet Blaster II 通信电缆作为一款先进的网络编程...无论是对于初学者还是专业人士而言,掌握 Ethernet Blaster II 的使用方法都是非常有益的。

    MySQL语句-ALTER DATABASE.pdf

    通过掌握这一命令的使用方法,可以有效地管理和优化数据库性能。此外,了解如何查看和修改字符集和校对规则对于处理多语言环境下的数据非常重要。希望本文能帮助读者更好地理解和应用 `ALTER DATABASE` 命令。

    alter、xilinx的rbf、bin生成

    #### 六、总结 本文详细介绍了FPGA配置文件的相关知识,尤其是针对Altera FPGA产品线的SOF、POF、RBF等文件的生成方法。此外,还讨论了如何生成网表文件以及添加约束文件的过程。理解这些文件的作用和生成方式对于...

    ​MySQL语句-ALTER EVENT详细介绍.pdf

    ### MySQL中的ALTER EVENT详解 #### 一、概述 在MySQL中,`EVENT`是一种非常有用的数据库对象,...通过深入理解并熟练掌握`ALTER EVENT`的使用方法,用户可以更加高效地管理数据库任务,提高系统的稳定性和可维护性。

    MySQL ALTER命令知识点汇总

    总结来说,MySQL的ALTER命令是数据库管理中的关键工具,它提供了灵活的方式对表进行各种变更,包括字段的增删改查、表的重命名、存储引擎的切换以及约束条件的调整。理解并熟练掌握这些用法,对于数据库的维护和优化...

    drupal使用hook_form_alter()修改表单实例

    在本文中,我们将深入探讨如何利用hook_form_alter()修改表单的实例,以及相关的实现方法和命名规范。 ### 使用hook_form_alter()修改表单实例 #### 修改多个表单 在Drupal中,可以使用hook_form_alter()根据表单...

    ORACLE重建索引总结

    使用`ALTER INDEX indexname REBUILD PARTITION partitionname TABLESPACE tablespacename`或`ALTER INDEX indexname REBUILD SUBPARTITION partitioname TABLESPACE tablespacename`命令,可以根据需要改变索引的...

    数据库知识小结一些select语句的用法

    在本文中,我们将深入探讨一些关于SELECT语句的常见用法,这些用法在日常数据库管理和开发中非常实用。 1. 列出数据库中所有表名: 使用`SELECT name FROM sysobjects WHERE type='U'`,这里的`sysobjects`是系统...

    Oracle JOB 用法小结

    以下是对Oracle JOB用法的详细总结: 首先,为了启用JOB队列,需要设置初始化参数`job_queue_processes`。通过SQL语句`alter system set job_queue_processes=n;`设置该参数,其中`n`代表期望的并发作业数量,最大...

    mysql用法小结

    ### MySQL使用小结 在日常工作中,MySQL作为一款广泛使用的开源关系型数据库管理系统,其重要性不言而喻。为了更好地理解和掌握MySQL的基本操作及管理技巧,本文将根据提供的文件内容进行详细的解释与扩展。 #### ...

    mysql 修改表方法总结

    ### MySQL 修改表方法总结 在MySQL数据库管理过程中,经常需要对现有的表结构进行调整以适应业务需求的变化。本文将详细介绍如何使用`ALTER TABLE`语句来实现这些需求,包括添加字段、重命名字段、修改字段类型等...

    Oracle 用法总结

    ### Oracle 用法总结 #### (一) 用户管理 **1. 创建用户** 在 Oracle 数据库中,创建用户是一项基本的数据库管理任务。这通常由数据库管理员执行,并且需要使用以下命令: ```sql CREATE USER user_name ...

    对分区表进行alter-switch时遇到的错误

    总结来说,对分区表进行`ALTER TABLE SWITCH`操作需要谨慎处理分区的预定义和数据的检查。确保目标分区符合预期,并且在切换前是空的,这是避免错误的关键。同时,动态分区虽然灵活,但也增加了操作复杂性,需要仔细...

Global site tag (gtag.js) - Google Analytics