日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

第一章 SQL命令 ALTER TABLE(一)

發布時間:2023/12/9 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第一章 SQL命令 ALTER TABLE(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 第一章 SQL命令 ALTER TABLE(一)
  • 大綱
  • 參數
  • 描述
  • 權限和鎖
  • 重命名表
  • 添加列限制
    • 添加整數計數器
  • 更改列限制
  • 修改列的限制

第一章 SQL命令 ALTER TABLE(一)

修改表。

大綱

ALTER TABLE table alter-actionwhere alter-action is one of the following:ADD [(] add-action {,add-action} [)] |DROP [COLUMN ] drop-column-action {,drop-column-action} |DROP drop-action |DELETE drop-action |ALTER [COLUMN] field alter-column-action |MODIFY modification-spec {,modification-spec}RENAME tableadd-action ::= [CONSTRAINT identifier][(] FOREIGN KEY (field-commalist) REFERENCES table (field-commalist)[ON DELETE ref-action] [ON UPDATE ref-action] [NOCHECK] [)]|[(] UNIQUE (field-commalist) [)] |[(] PRIMARY KEY (field-commalist) [)] | DEFAULT [(] default-spec [)] FOR field|[COLUMN] [(] field datatype [sqlcollation] [%DESCRIPTION string][DEFAULT [(] default-spec [)] ][ON UPDATE update-spec ][UNIQUE] [NOT NULL][REFERENCES table (field-commalist) [ON DELETE ref-action] [ON UPDATE ref-action] [NOCHECK] ][)]drop-column-action ::= [COLUMN] field [RESTRICT | CASCADE] [%DELDATA | %NODELDATA] drop-action ::= FOREIGN KEY identifier |PRIMARY KEY |CONSTRAINT identifier |alter-column-action ::= RENAME newfieldname |datatype | [SET] DEFAULT [(] default-spec [)] | DROP DEFAULT | NULL | NOT NULL | COLLATE sqlcollationmodification-spec ::=oldfieldname RENAME newfieldname |field [datatype] [DEFAULT [(] default-spec [)]][CONSTRAINT identifier] [NULL] [NOT NULL]sqlcollation ::={ %EXACT | %MINUS | %MVR | %PLUS | %SPACE | %SQLSTRING [(maxlen)] | %SQLUPPER [(maxlen)] |%TRUNCATE[(maxlen)] }

參數

參數描述
table要更改的表的名稱。表名可以是限定的(schema.table),也可以是非限定的(table)。非限定的表名采用默認的架構名。不使用架構搜索路徑值。
identifier分配給約束的唯一名稱。必須是有效的標識符。
field要更改(添加、修改、刪除)的列的名稱。必須是有效的標識符。
field-commalist列的名稱或逗號分隔的列列表。即使只指定了一列,字段命令列表也必須用括號括起來。
datatype有效的SQL數據類型。
default-spec如果未被用戶提供的數據值覆蓋,則自動為此字段提供的默認數據值。允許的值有:文字值;以下關鍵字選項之一(NULL, USER, CURRENT_USER, SESSION_USER, SYSTEM_USER, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP);或者OBJECTSCRIPT表達式。不要將SQL零長度字符串用作默認值。
update-spec見CREATE TABLE中的更新。
COLLATE sqlcollation可選-指定以下SQL排序規則類型之一:%EXACT, %MINUS, %PLUS, %SPACE, %SQLSTRING, %SQLUPPER, %TRUNCATE, %MVR。默認值為名稱空間默認排序規則(除非更改,否則為%SQLUPPER)。%SQLSTRING、%SQLUPPER和%TRUNCATE可以使用可選的最大長度截斷參數(括在圓括號中的整數)指定。這些排序規則參數關鍵字的百分比符號(%)前綴是可選的。COLLATE關鍵詞是可選的。

描述

ALTER TABLE語句修改表定義;它可以添加元素、刪除元素或修改現有元素。在每個ALTER TABLE語句中只能執行一種類型的操作。

  • RENAME可以重命名表,也可以使用ALTER COLUMN或MODIFY語法重命名表中的現有列。
  • Add可以向表中添加多個列和/或約束。只需指定一次ADD關鍵字,后跟一個逗號分隔的列表。可以使用逗號分隔的列表向表中添加多個新列,向現有列中添加約束條件列表,或者同時向現有列中添加新列和約束條件。
  • DROP COLUMN可以從表中刪除多列。只需指定一次DROP關鍵字,然后是一個逗號分隔的列列表,每個列都有可選的級聯和/或數據刪除選項。
  • ALTER COLUMN可以更改單個列的定義。它不能更改多列。
  • MODIFY 可以更改單個列或逗號分隔的列列表的定義。它不支持ALTER COLUMN提供的所有選項。
  • 刪除可以從一個或一組字段中刪除約束。DROP只能對單個約束進行操作。

ALTER TABLE DROP關鍵字和ALTER TABLE DELETE關鍵字是同義詞。

要確定當前命名空間中是否存在指定表,請使用$SYSTEM.SQL.Schema.TableExists()方法。

權限和鎖

ALTER TABLE命令是特權操作。用戶必須具有%ALTER_TABLE管理權限才能執行ALTER TABLE。否則將導致SQLCODE-99錯誤 the %msg User 'name' does not have %ALTER_TABLE privileges.。

用戶必須對指定表擁有%ALTER特權。如果用戶是表的所有者(創建者),則會自動授予該用戶對該表的%ALTER權限。否則,必須授予用戶對該表的%ALTER特權。否則將導致SQLCODE-99錯誤 %msg User 'name' does not have required %ALTER privilege needed to change the table definition for 'Schema.TableName'.

要確定當前用戶是否具有%ALTER特權,請調用%CHECKPRIV命令。要確定指定用戶是否具有%ALTER權限,請調用$SYSTEM.SQL.Security.CheckPrivileve()方法。

要分配所需的管理權限,請使用具有%ALTER_TABLE權限的GRANT命令;這需要適當的授予權限。要分配%ALTER OBJECT權限,可以使用:

  • 具有%ALTER權限的GRANT命令。這需要適當的授予權限。
  • 在用于編輯角色或用戶的頁面上,管理門戶中的SQL表選項卡上的表的更改復選框。這需要適當的授予權限。

在嵌入式SQL中,可以使用$SYSTEM.Security.Login()方法以具有適當權限的用戶身份登錄:

DO $SYSTEM.Security.Login("_SYSTEM","SYS")&sql( )

必須具有%Service_Login:Use權限才能調用$SYSTEM.Security.Login方法。

  • 除非表類定義包括[DdlAllowed],否則不能對從持久類投影的表使用ALTER TABLE。否則,操作將失敗,并顯示SQLCODE-300錯誤the %msg DDL not enabled for class 'Schema.tablename'.
  • ALTER TABLE不能用于從部署的持久類投射的表。此操作失敗,并顯示SQLCODE-400錯誤the %msg Unable to execute DDL that modifies a deployed class: 'classname'.

ALTER TABLE獲取對TABLE的表級鎖。這可以防止其他進程修改表的數據。此鎖在ALTER TABLE操作結束時自動釋放。當ALTER TABLE鎖相應的類定義時,它使用當前進程的SQL Lock超時設置。

若要更改表,表不能在獨占模式或共享模式下被另一個進程鎖定。更改鎖定的表會導致SQLCODE-110錯誤,a %msg such as the following: Unable to acquire exclusive table lock for table 'Sample.MyTest'.

重命名表

可以使用以下語法重命名現有表:

ALTER TABLE schema.TableName RENAME NewTableName

此操作重命名其現有架構中的現有表。只能更改表名,而不能更改表架構。在NewTableName中指定架構名稱會導致SQLCODE-1錯誤。為舊表和新表指定相同的表名會生成SQLCODE-201錯誤。

重命名表會更改SQL表名。它不會更改相應的永久類名。

重命名表不會更改對觸發器中舊表名的引用。

如果視圖引用現有表名稱,則重命名該表將失敗。這是因為嘗試重命名表是一個原子操作,會導致視圖重新編譯,從而生成SQLCODE-30錯誤。 “Table 'schema.oldname' not found”.

添加列限制

添加列可以添加單個列,也可以添加逗號分隔的列列表。

如果嘗試通過ALTER TABLE TABLE NAME ADD COLUMN語句將字段添加到表中:

  • 如果該名稱的列已經存在,則該語句將失敗,并顯示SQLCODE-306錯誤。
  • 如果語句對列指定了NOT NULL約束,并且該列沒有默認值,則如果表中已存在數據,則該語句將失敗。這是因為,在完成DDL語句之后,不滿足所有預先存在的行的NOT NULL約束。這將生成錯誤代碼SQLCODE-304(試圖向包含數據的表中添加一個沒有默認值的非空字段)。
  • 如果語句對列指定了NOT NULL約束,并且該列有默認值,則該語句將更新表中的所有現有行,并將該列的默認值分配給該字段。這包括CURRENT_TIMESTAMP等默認值。
  • 如果該語句沒有對列指定NOT NULL約束,并且該列有默認值,則在任何現有行中都不會更新該列。這些行的列值為NULL。

要更改此默認的NOT NULL約束行為,參考SET OPTION命令的COMPILEMODE=NOCHECK選項。

如果指定了名為“ID”的普通數據字段,而RowID字段已經命名為“ID”(默認值),則添加列操作將成功。ALTER TABLE添加ID數據列,并將RowId列重命名為“ID1”以避免重復名稱。

添加整數計數器

如果通過ALTER TABLE TABLE NAME ADD COLUMN語句將整數計數器字段添加到表中:

  • 如果表沒有標識字段,則可以向該表添加標識字段。如果表已有標識字段,則ALTER TABLE操作將失敗,并顯示SQLCODE-400錯誤,并顯示如下%msg:ERROR #5281: Class has multiple identity properties: 'Sample.MyTest::MyIdent2'。使用添加列定義此字段時, IRIS將使用相應的RowID整數值填充此字段的現有數據行。

如果CREATE TABLE定義了位圖區索引,然后將標識字段添加到表中,并且標識字段不是MINVAL為1或更高的類型%BigInt、%Integer、%SmallInt或%TinyInt,并且表中沒有數據,則系統會自動刪除位圖區索引。

  • 可以向表中添加一個或多個序列(%Library.Counter)字段。使用“添加列”定義此字段時,此字段的現有數據行為空。可以使用UPDATE向此字段為NULL的現有數據行提供值;不能使用UPDATE更改非NULL值。
  • 如果表沒有ROWVERSION字段,則可以向該表添加ROWVERSION字段。如果表已具有ROWVERSION字段,則ALTER TABLE操作將失敗,并顯示SQLCODE-400錯誤,并顯示如下%msg:: ERROR #5320: Class 'Sample.MyTest' has more than one property of type %Library.RowVersion. Only one is allowed. Properties: MyVer,MyVer2.使用添加列定義此字段時,此字段的現有數據行為NULL;不能更新為NULL的ROWVERSION值。

更改列限制

ALTER COLUMN可以修改單個列的定義:

  • 使用語法ALTER TABLE TABLE NAME ALTER COLUMN oldname rename newname重命名列。重命名列會更改SQL字段名稱。它不會更改相應的持久類屬性名稱。ALTER COLUMN OLDNAME RENAME NEWNAME替換觸發器代碼和ComputeCode中的舊字段名稱引用。
  • 更改列特征:數據類型、默認值、NULL/NOT NULL和排序規則類型。

如果表包含數據,則不能更改包含數據的列的數據類型,如果更改將導致流數據類型為非流數據或非流數據類型為流數據。
嘗試這樣做會導致SQLCODE -374錯誤。
如果沒有現有數據,則允許這種類型的數據類型更改。

可以使用ALTER COLUMN添加、更改或刪除字段默認值。

如果表包含數據,如果列包含空值,則不能指定NOT NULL;
這將導致SQLCODE -305錯誤。

如果更改包含數據的列的排序規則類型,則必須重新構建該列的所有索引。

修改列的限制

MODIFY可以修改單個列或用逗號分隔的列列表的定義。

  • 使用語法ALTER TABLE tablename MODIFY oldname RENAME newname重命名該列。重命名列會更改SQL字段名稱。它不會更改相應的持久類屬性名稱。Modify oldname重命名newname替換觸發器代碼和ComputeCode中的舊字段名稱引用。
  • 更改列特征:數據類型、默認值和其他特征。

如果表包含數據,則不能將包含數據的列的數據類型更改為不兼容的數據類型:

  • 數據類型優先級較低(包含較少)的數據類型,如果這與現有數據值沖突。嘗試這樣做會導致SQLCODE-104錯誤,其中%msg指定哪個字段和哪個數據值導致錯誤。
  • 具有較小MAXLEN或MAXVAL/MINVAL(如果這與現有數據值沖突)的數據類型。嘗試這樣做會導致SQLCODE-104錯誤,其中%msg指定哪個字段和哪個數據值導致錯誤。
  • 數據類型從流數據類型改變為非流數據類型或從非流數據類型改變為流數據類型。嘗試這樣做會導致SQLCODE-374錯誤。如果沒有現有數據,則允許這種類型的數據類型更改。

可以使用修改來添加或更改字段默認值。不能使用修改來刪除字段默認值。

如果表包含數據,如果列包含空值,則不能為該列指定NOT NULL;這會導致SQLCODE-305錯誤。語法形式 ALTER TABLE mytable MODIFY field1 NOT NULL and ALTER TABLE mytable MODIFY field1 CONSTRAINT nevernull NOT NULL執行相同的操作。可選的約束標識符子句是為兼容而提供的無操作。不保留或使用此字段約束名稱。試圖通過指定此字段約束名稱刪除此字段約束會導致SQLCODE-315錯誤。

總結

以上是生活随笔為你收集整理的第一章 SQL命令 ALTER TABLE(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。