強大的修改資料庫修改語句ALTER TABLE(一)[20160712]

2021-01-11 CSDN技術社區

今天開始的時間比昨天晚,其實午休的時間是差不多的,只是起來後稍微看了一點新聞,10分鐘時間就沒有了,所以要養成一個好習慣還真不容易,另外就是工作時間少看新聞,太浪費時間。

昨天在執行一個alter SQL語句時總是提示錯誤,看了好久才發現忘記寫表名了,這也反映出對於基本的SQL操作還是不熟練,所以今天記錄一下,由於alter table的內容很多,所以今天只是分析一下和add有關的內容。

一、語法定義

還是參考官方文檔,其定義如下:

從這個定義上我們可以看到,必要的語句是

alter table tbl_name [command].

同時,這條語句還支持多個命令,相信很多人在修改一個表,比如增加幾列時,都會寫多個alter語句,但實際上一條就搞定了。

 

二、語義詳解:

  下面我們對add相關的語法進行詳細分析

  1. ADD  [COLUMN] col_name column_definition  [FIRST | AFTER col_name ]  | ADD [COLUMN] (col_name column_definition,...)

       通過這個定義我們可以知道以下知識點:

   1)column關鍵字是可以省略的,以前我就鬧過這個笑語,有同事寫了個add 語句問我哪兒錯了,我說是沒有寫column關鍵字。。現在想起簡直好尷尬。

           2)一條語句可以寫多個add語句

   3)我們可以指定把這個列添加到某一列後面,或者是讓其作為第一列,相應使用after col_name或first.

           4)列的定義與創建表時報定義方式一致,即我們在寫create table時怎麼給列進行定義的,這兒就怎麼定義

  2.  ADD {INDEX|KEY} [index_name] [index_type] (index_col_name,...) [index_option] 

  這是添加普通索引的定義,主要有以下幾點需要注意:

   1)需要使用INDEX或KEY來表明這是添加的一個索引,索引的名字可選。

   2)對於某些支持多種索引類型的引擎來說,我們可以指定索引的類型,指定的語句是使用USING 索引類型名,如果未指定,則使用第一個,具體如下:

Storage EnginePermissible Index TypesInnoDBBTREEMyISAMBTREEMEMORY/HEAPHASH, BTREENDBHASH, BTREE (see note in text)

     從上表我們可以看到,對於常用的InnoDB和MyISAM來說,其索引都只能是BTREE,所以這個index_type其實是沒有必要指定的,通常情況下。

   3)index_col_name的定義是col_name[(length)] [ASC|DESC],即要作為索引的列及其順序,支持多個列構成一個索引,默認情況下升序

   4)  index_option 指索引的一些附加信息,常用的是注釋,形如comment 'this is a index'. 

      3.  ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...) [index_option]

         這個語句表示添加主鍵約束,對於index_type,(index_col_name,..)及[index_option]來說前面已經解釋過了,這裡再解釋一下 constraint [symbol].

   constraint 是約束的意思,後面可指定一個自定義的約束名,如果不提供,則mysql會自己生成一個約束名

       4. ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...) [index_option] ...

         這個語句表示添加惟一約束,如果symbol和index_name都指定的話,則索引名取index_name,否則哪個指定了就取哪個,如果都沒指定取列名,如果有多個列,取第一列的列名作為索引名

      5.  ADD FULLTEXT [INDEX|KEY] [index_name] (index_col_name,...) [index_option] .

         本語句表示添加全文索引, 其可選項不必再解釋

      6. ADD SPATIAL [INDEX|KEY] [index_name] (index_col_name,...) [index_option]

      本語句表示添加空間索引, 其可選項也不必再解釋

      7. ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) reference_definition

         本語句表示添加外鍵,需要注意的是reference_definition, 其形式如下:REFERENCES tbl_name (index_col_name,...), 即要指明關聯到哪個表的哪個欄位,或者是哪些欄位。

 

三、總結

    通過分析我們可以發現,使用alter table add類的語句,主要用於添加新的列和新的索引,對於索引的創建來說,有專門的create index 語句,這個相當於是另一種寫法。記住了這個語句,我們就可以很方便的去對表結構做一些調整。

  

相關焦點

  • 用SQL語句在資料庫中對表的列進行添加、修改、刪除及增加約束
    用SQL語句在SQL Server中進行各種操作是非常常見的操作,今天整理了一下用SQL語句在SQL Server中進行創建表,然後對表的列添加、修改、刪除及增加約束。語句修改列的數據類型修改一下列EmpAddr的數據類型為varchar(1000)alter table Employees alter column EmpAddr varchar(1000)SQL語句增加一個主鍵約束為列EmpId增加一個主鍵約束
  • MySQL資料庫之修改表結構
    2.修改欄位名語句:alter table 表名 change 原欄位名 新欄位名 列類型 列屬性;說明:就算是僅修改欄位名,那麼欄位的原始類型,原屬性也要重新書寫,不然就變為刪除。3.修改列類型語句:alter table 表名 modify 欄位名 列類型 列屬性;4.修改表名語句:alter table 表名 rename to 新表名;5.修改表選項
  • 如何用SQL語句添加和修改欄位?
    用SQL語句添加欄位並不難,下面小編整理了SQL添加和修改欄位的基本命令,希望對各位小夥伴有所幫助。增加欄位:alter table 表名 add 欄位名 type not null default 0在指定位置插入新欄位:alter table 表名 add [column] 欄位名 欄位類型 是否可為空 comment '注釋' after
  • MySQL 實戰筆記 第04期:alter table 語句進度評估
    有沒有一種途徑能讓我們隨時能了解 alter table 語句的執行狀況呢?答案是肯定的,今天我們就來一起學習下 MySQL alter table  語句進度評估。1 官方文檔首先我們來看下官方文檔對 alter table 語句的解釋。
  • ER圖和關係模型到MySQL資料庫表
    設計資料庫表的主要工具是ER圖,使用ER圖設計資料庫表詳見《資料庫實體聯繫模型與關係模型》一文。mooc資料庫表的ER圖如下。創建資料庫表的MySQL命令語句如下:create table table_name (column_name column_type [約束條件] [, column_name column_type [約束條件]…]);其中,create table為命令串,table_name為創建表的名稱,column_name為欄位名稱,column_type為欄位數據類型
  • 工作中,我們經常用到哪些SQL語句呢?
    工作中我們基本上每天都要與資料庫打交道,資料庫的知識點呢也特別多,全部記住呢也是不可能的,也沒必要把所有的記住(有些語句命令可能我們一輩子都用不到)。所以呢在工作之餘,把工作中經常用到的一些語句整理出來,忘記的時候可以當做字典來查。個人在工作中用Oracle資料庫比較多,就以關係型資料庫Oracle為例進行整理,後面可能會整理一些非關係型資料庫,如mogodb之類的。
  • DDL跟資料庫關係介紹
    SQL語言包括四種主要程序設計語言類別的語句:數據定義語言(DDL),數據操作語言(DML),數據控制語言(DCL)和事務控制語言(TCL)。查詢語句的重寫的實現主要是對SQL語言中的兩大類語句進行重寫,即數據定義語言DDL和數據操縱語言DML。DDL描述的模式,必須由計算機軟體進行編譯,轉換為便於計算機存儲、查詢和操縱的格式,完成這個轉換工作的程序稱為模式編譯器。
  • MySQL資料庫筆記
    alter table 表名添加新列 add 列名 數據類型同時添加多個新列 add(列 數據類型,列 數據類型)例如:alter table student add address varchar(200);例如:alter
  • MariaDB 5.3 將支持 ALTER TABLE 的進度提示 - OSCHINA - 中文...
    該進度報告將會通過以下幾種方式顯示: SHOW PROCESSLIST 增加新的列顯示中的進度 (0-100 %) INFORMATION_SCHEMA.PROCESSLIST 增加新列,可直接查看出執行進度 客戶端接收到的進度信息 新的 mysql 客戶端將會直接支持進度報告顯示,顯示的方式如下: MariaDB [test]> alter
  • sqlserver修改表結構
    增加欄位: alter table 表名 add 新增欄位名 欄位類型 默認值...修改欄位類型:alter table 表名 alter column 欄位名 typealter table [stu] alter column [jj] VARCHAR(200)修改欄位名:exec sp_rename '表名.原欄位名','新欄位名'exec sp_rename 'stu.jj','gg'提示:注意: 更改對象名的任一部分都可能會破壞腳本和存儲過程
  • 2020 年資料庫高頻面試題|原力計劃
    記錄單元為每一行的改動,基本是可以全部記下來但是由於很多操作,會導致大量行的改動(比如alter table),因此這種模式的文件保存的信息太多,日誌量太大。(3)mixed,一種折中的方案,普通操作使用statement記錄,當無法使用statement的時候使用row。
  • 資料庫是什麼?有什麼特點
    而傳統的關係型資料庫在一些傳統領域依然保持了強大的生命力。[2]查詢語句:SELECT param FROM table WHERE condition 該語句可以理解為從 table 中查詢出滿足 condition 條件的欄位 param。
  • Mysql資料庫部分
    數據表連接問題,左外連接、右外連接、內連接等一、交叉連接(CROSS JOIN)交叉連接(CROSS JOIN):有兩種,顯式的和隱式的,不帶ON子句,返回的是兩表的乘積,也叫笛卡爾積。例如:下面的語句1和語句2的結果是相同的。
  • 資料庫按章分類?啊啊啊
    設計資料庫的有力工具,是資料庫設計人員與用戶交流的語言。數據模型的概念、作用、組成數據模型是資料庫用來對現實世界進行抽象的工具,是資料庫總用於提供信息表示和操作手段的形式架構。第三章 關係資料庫標準語言SQLSQL特點綜合統一,高度非過程化,面向集合操作,語言簡潔易學易用。資料庫資料庫可以有一個內模式,一個模式,任意個外模式。
  • WordPress更改資料庫表前綴無法進入後臺解決方法
    在這裡記錄一個解決修改資料庫表前綴後無法登陸後臺的解決方案。備份資料庫必須且一定要備份資料庫,避免操作中翻車,還能補救。更改WordPress配置文件打開根目錄下的wp-config.php文件,把裡面的 wp_ 改為 new_ (這裡用new_做示例)。
  • SELECT語句的基本介紹
    SELECT 語句的作用是從資料庫中返回信息一、SELECT基本語句的編寫1.SELECT 語句作用列選擇(投影操作) :能夠使用 SELECT 語句的列選擇功能選擇表中的列,這些列是我們想要用查詢返回 的。