強大的修改資料庫修改語句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添加和修改欄位的基本命令,希望對各位小夥伴有所幫助。增加欄位:alter table 表名 add 欄位名 type not null default 0在指定位置插入新欄位:alter table 表名 add [column] 欄位名 欄位類型 是否可為空 comment '注釋' after
  • 工作中,我們經常用到哪些SQL語句呢?
    工作中我們基本上每天都要與資料庫打交道,資料庫的知識點呢也特別多,全部記住呢也是不可能的,也沒必要把所有的記住(有些語句命令可能我們一輩子都用不到)。所以呢在工作之餘,把工作中經常用到的一些語句整理出來,忘記的時候可以當做字典來查。個人在工作中用Oracle資料庫比較多,就以關係型資料庫Oracle為例進行整理,後面可能會整理一些非關係型資料庫,如mogodb之類的。
  • DDL跟資料庫關係介紹
    SQL語言包括四種主要程序設計語言類別的語句:數據定義語言(DDL),數據操作語言(DML),數據控制語言(DCL)和事務控制語言(TCL)。查詢語句的重寫的實現主要是對SQL語言中的兩大類語句進行重寫,即數據定義語言DDL和數據操縱語言DML。DDL描述的模式,必須由計算機軟體進行編譯,轉換為便於計算機存儲、查詢和操縱的格式,完成這個轉換工作的程序稱為模式編譯器。
  • SQL Server資料庫編程基本語法匯總
    【IT168 技術】一、定義變量  --簡單賦值  declare >  --select * into #t from dbo.ST_User  --添加一列,為int型自增長子段  alter
  • 如何在ubuntu20.04安裝MySQL並修改資料庫密碼
    帳號debian-sys-maint,進行登錄8、進入資料庫後,輸入命令,查看資料庫show database;查看資料庫 show databases;9、使用資料庫mysql,用命令use mysql;
  • 直擊資料庫面試題:資料庫查詢語句
    解釋存儲過程和觸發器 存儲過程是一組Transact-SQL語句,在一次編譯後可以執行多次。因為不必重新編譯Transact-SQL語句,所以執行存儲過程可以提高性能。 觸發器是一種特殊類型的存儲過程,不由用戶直接調用。創建觸發器時會對其進行定義,以便在對特定表或列作特定類型的數據修改時執行。
  • SQL-server資料庫管理系統試卷及答案A
    C、SYS開頭的系統表中的數據用戶不能直接修改,但可以通過系統存儲過程、系統函數進行改動、添加。D、12AM是中午,12PM是午夜。4、資料庫系統不僅包括資料庫本身,還要包括相應的硬體,軟體和( )。
  • 「Oracle資料庫」如何更改重做日誌文件的位置或者名稱?
    重做日誌文件重建後,有的時候我們需要修改它的名稱或者位置,舉個最常見的例子,本來日誌文件是在D盤,但是實際情況下D盤空間嚴重不足,這個時候我們就必須將D盤上的資料庫日誌文件移動到其它大的磁碟分區中,這就是比較常見的場景了。下面,小編為大家介紹具體的操作方法。
  • 2020 年資料庫高頻面試題|原力計劃
    可以嘗試在一個欄位未建立索引時,根據該欄位查詢的效率,然後對該欄位建立索引(alter table 表名 add index(欄位名)),同樣的SQL執行的效率,你會發現查詢效率會有明顯的提升(數據量越大越明顯)。
  • Oracle資料庫參數優化參考
    因此,獲得滿意的用戶響應時間有兩個途徑:一是減少系統服務時間,即提高資料庫的吞吐量;二是減少用戶等待時間,即減少用戶訪問同一資料庫資源的衝突率。資料庫性能優化包括如下幾個部分:1.調整數據結構的設計 這一部分在開發信息系統之前完成,程式設計師需要考慮是否使用Oracle資料庫的分區功能,對於經常訪問的資料庫表是否需要建立索引等。
  • 快速掌握MySQL資料庫中SELECT語句
    本文針對MySQL資料庫中的SELECT語句快速精細掌握。在很多的時候,你會發現MySQL擁有許多比PHP更為功能強大的函數。  STRAIGHT_JOIN、SQL_SMALL_RESULT、SQL_BIG_RESULT、HIGH_PRIORITY是MySQL對ANSI SQL92的擴展。如果優化器以非最佳次序聯結表,使用STRAIGHT_JOIN可以加快查詢。
  • 論文重複率太高不合格要怎麼修改?
    ②如果使用其他非知網檢測系統如萬方r、維普等檢測系統,一定將重複率修改到5%以下,否則學校知網檢測可能不能通過。③重複率修改常用方法,同義詞替換、語句倒換、概括總結法等,對照檢測報告,逐句修改,寶寶切莫閒麻煩。④在保持原文語義的前提下,儘可能的大幅度修改重複的文字部分,確保語句通順、流暢,效果槓槓滴!
  • 5天,2W+字整理資料庫實操指令,附練習題,再說資料庫學不明白
    3、資料庫管理系統 應用程式 圖書館管理系統將數據按照指定的方式存儲到資料庫中的系統稱之為資料庫管理系統可以高效率的取出存儲好的數據(重點)資料庫應用系統----給普通用戶使用的,像淘寶網等4、資料庫系統資料庫管理員資料庫資料庫管理系統資料庫應用系統用戶
  • SQL語言基礎:資料庫語言概念介紹
    1、概念介紹SQL(Structured Query Lanauage)結構化查詢語言是關係資料庫中最普遍使用的語言。主要包括查詢、數據操縱、數據定義、數據控制功能,是一種通用的、功能強大的關係資料庫的標準語言。
  • 圖資料庫和關係型資料庫的比較
    關係型資料庫中的圖數據在關係資料庫中,通常有兩個用於存儲社交關係的表格:一個表格保存用戶信息,另一個用於保存用戶的朋友關係用戶表和用戶朋友關係表以下為使用mysql資料庫創建表的SQL腳本-- 用戶表定義create table t_user ( id bigint not null name varchar(255)not null primary key (id));-- 用戶朋友關係表定義create
  • Mysql(Mariadb)資料庫主從複製
    master二進位日誌文件發生變化,則會把變化複製到自己的中繼日誌中,然後slave的一個SQL線程會把相關的「事件」執行到自己的資料庫中,以此實現從資料庫和主資料庫的一致性,也就實現了主從複製。一、準備工作:1.主從資料庫版本最好一致;2.主從資料庫內數據保持一致;主資料庫(master):192.168.3.91 /CentOS Linux release 7.5.1804 (Core)從資料庫( slave ) :192.168.3.218 /CentOS Linux release 7.5.1804 (Core)