數據定義: CREATE、DROP、ALTER

来源:http://www.cnblogs.com/cykj/archive/2017/04/05/Data-definition-CREATE-DROP-ALTER.html
-Advertisement-
Play Games

數據定義: CREATE、DROP、ALTER ...


  1 CREATE DATABASE 句法
  2 
  3 CREATE DATABASE [IF NOT EXISTS] db_name
  4 
  5 CREATE DATABASE 以給定名字創建一個資料庫。允許的資料庫名規則在章節 6.1.2 資料庫、表、索引、列和別名 中被給出。 如果資料庫已經存在,並且你沒有指定 IF NOT EXISTS,這時會產生一個錯誤。 
  6 
  7 在 MySQL 中,資料庫以包含資料庫表對應文件的目錄實現的。因為資料庫在初始創建時沒有表,所以 CREATE DATABASE 語句只在 MySQL 數據目錄下創建一個目錄。 
  8 
  9 你也可以使用 mysqladmin 創建一個資料庫。查看章節 4.8 MySQL 客戶端腳本和實用程式。 
 10 
 11 6.5.2 DROP DATABASE 句法
 12 
 13 DROP DATABASE [IF EXISTS] db_name
 14 
 15 DROP DATABASE 移除資料庫是的所有表並刪除資料庫。如果你在一個符號鏈接(symbolic link)資料庫上執行一個 DROP DATABASE,鏈接與原始資料庫均會被刪除。要非常小心地使用這個命令! 
 16 
 17 DROP DATABASE 返回從資料庫目錄下刪除的文件數目。通常,它是表的數目的三倍,因為第張表通常對應於一個 “.MYD” 文件、一個 “.MYI” 文件和一個 “.frm” 文件。 
 18 
 19 DROP DATABASE 命令從給定的資料庫目錄下移除以下列為擴展名的所有文件: 
 20 
 21 擴展名  擴展名  擴展名  Ext  
 22 .BAK  .DAT  .HSH  .ISD  
 23 .ISM  .ISM  .MRG  .MYD  
 24 .MYI  .db  .frm   
 25 
 26 所有包含兩個數字的子目錄(RAID 目錄)也同樣被刪除。 
 27 
 28 在 MySQL 3.22 或以後的版本中,你可以使用關鍵詞 IF EXISTS 以防止如果資料庫不存在時發生錯誤。 
 29 
 30 你也可以使用 mysqladmin 移除資料庫。查看章節 4.8 MySQL 客戶端腳本和實用程式。 
 31 
 32 6.5.3 CREATE TABLE 句法
 33 
 34 CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]
 35 [table_options] [select_statement]
 36 
 37 or
 38 
 39 CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name LIKE old_table_name;
 40 
 41 create_definition:
 42   col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT]
 43             [PRIMARY KEY] [reference_definition]
 44   or    PRIMARY KEY (index_col_name,...)
 45   or    KEY [index_name] (index_col_name,...)
 46   or    INDEX [index_name] (index_col_name,...)
 47   or    UNIQUE [INDEX] [index_name] (index_col_name,...)
 48   or    FULLTEXT [INDEX] [index_name] (index_col_name,...)
 49   or    [CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name,...)
 50             [reference_definition]
 51   or    CHECK (expr)
 52 
 53 type:
 54         TINYINT[(length)] [UNSIGNED] [ZEROFILL]
 55   or    SMALLINT[(length)] [UNSIGNED] [ZEROFILL]
 56   or    MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]
 57   or    INT[(length)] [UNSIGNED] [ZEROFILL]
 58   or    INTEGER[(length)] [UNSIGNED] [ZEROFILL]
 59   or    BIGINT[(length)] [UNSIGNED] [ZEROFILL]
 60   or    REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]
 61   or    DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
 62   or    FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
 63   or    DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL]
 64   or    NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL]
 65   or    CHAR(length) [BINARY]
 66   or    VARCHAR(length) [BINARY]
 67   or    DATE
 68   or    TIME
 69   or    TIMESTAMP
 70   or    DATETIME
 71   or    TINYBLOB
 72   or    BLOB
 73   or    MEDIUMBLOB
 74   or    LONGBLOB
 75   or    TINYTEXT
 76   or    TEXT
 77   or    MEDIUMTEXT
 78   or    LONGTEXT
 79   or    ENUM(value1,value2,value3,...)
 80   or    SET(value1,value2,value3,...)
 81 
 82 index_col_name:
 83         col_name [(length)]
 84 
 85 reference_definition:
 86         REFERENCES tbl_name [(index_col_name,...)]
 87                    [MATCH FULL | MATCH PARTIAL]
 88                    [ON DELETE reference_option]
 89                    [ON UPDATE reference_option]
 90 
 91 reference_option:
 92         RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
 93 
 94 table_options:
 95     TYPE = {BDB | HEAP | ISAM | InnoDB | MERGE | MRG_MYISAM | MYISAM }
 96 or    AUTO_INCREMENT = #
 97 or    AVG_ROW_LENGTH = #
 98 or    CHECKSUM = {0 | 1}
 99 or    COMMENT = "string"
100 or    MAX_ROWS = #
101 or    MIN_ROWS = #
102 or    PACK_KEYS = {0 | 1 | DEFAULT}
103 or    PASSWORD = "string"
104 or    DELAY_KEY_WRITE = {0 | 1}
105 or      ROW_FORMAT= { default | dynamic | fixed | compressed }
106 or    RAID_TYPE= {1 | STRIPED | RAID0 } RAID_CHUNKS=#  RAID_CHUNKSIZE=#
107 or    UNION = (table_name,[table_name...])
108 or    INSERT_METHOD= {NO | FIRST | LAST }
109 or      DATA DIRECTORY="absolute path to directory"
110 or      INDEX DIRECTORY="absolute path to directory"
111 
112 select_statement:
113     [IGNORE | REPLACE] SELECT ...  (Some legal select statement)
114 
115 CREATE TABLE 以給定的名字在當前資料庫創建一個表。允許的表名規則在章節 6.1.2 資料庫、表、索引、列和別名 中被給出。如果沒有當前資料庫或表已經存在,一個錯誤將會發生。 
116 
117 在 MySQL 3.22 或以後的版本中,表名可以被指定為 db_name.tbl_name。不管有沒有當前資料庫,它也能正常工作。
118 
119 從 MySQL 3.23 開始,在創建一個表時,你可以使用關鍵詞 TEMPORARY。它的名字被限止在當前連接中,當連接關閉時,臨時表會自動地被刪除。這就意味著,兩個不同的連接可以使用同一個臨時表名而不會與另一個衝突,也不會與同名現有的表相衝突(現有表將被隱藏,只到臨時表被刪除)。從 MySQL 4.0.2 開始,為了能創建臨時表,你必須有 CREATE TEMPORARY TABLES 許可權。 
120 
121 在 MySQL 3.23 或以後的版本中,你可以使用關鍵詞 IF NOT EXISTS,因而如果表已存在,錯誤也不會發生。註意,它並不驗證表結構是否一致。 
122 
123 在 MySQL 4.1 中你可以使用 LIKE 來基於一個表定義創建另一個表。to create a table based on a table definition in another table. In MySQL 4.1 中,你同樣也可以為一個被生成的列指定類型: 
124 
125 CREATE TABLE foo (a tinyint not null) SELECT b+1 AS 'a' FROM bar;
126 
127 第張表 tbl_name 由資料庫目錄下的一些文件表示。對於 MyISAM 類型的表,你將得到: 
128 
129 文件  用途  
130 tbl_name.frm  表定義 (form) 文件  
131 tbl_name.MYD  數據文件  
132 tbl_name.MYI  索引文件  
133 
134 對於各種列類型的性質的更多信息,查看章節 6.2 列類型: 
135 
136 如果既沒有指定 NULL 也沒有指定 NOT NULL,列被視為指定了 NULL137 
138 一個整型列可以有附加屬性 AUTO_INCREMENT。當你插入一個 NULL 值(推薦)或 0 到一個 AUTO_INCREMENT 列,該列將被設置到 value+1,在這裡,value 是表中當前列的最大值。AUTO_INCREMENT 序列以 1 開始。查看章節 8.1.3.130 mysql_insert_id()。 如果你一個 AUTO_INCREMENT 列中包含最大值的行,對於 ISAM 或 BDB 表,該值會被重新使用,但是對於一個 MyISAM 或 InnoDB 表,卻不會被重用。如果你以 AUTOCOMMIT 模式執行 DELETE FROM table_name (沒有一個 WHERE 子句) 刪除表中的所有記錄行,對於所有的表序列均重新開始。 註意:每個表只能有一個 AUTO_INCREMENT 列,並且必須被索引。MySQL 3.23 同樣也只工作於 AUTO_INCREMENT 列只支持正值。插入一個負值將被當作插入一個很大的正值。這是為了避免數字從正到負“包裝”的精度問題,也是為了確保不會意外地得到一個包含 0 的 AUTO_INCREMENT 列。 在 MyISAM 和 BDB 表中,你可以指定 AUTO_INCREMENT 多列索引中的第二個列。查看章節 3.5.9 使用 AUTO_INCREMENT. 為了使 MySQL 相容某些 ODBC 應用程式,你可以用下列查詢找出最後被插入的記錄行: 
139 SELECT * FROM tbl_name WHERE auto_col IS NULL
140 
141 如果 MySQL 二進位日誌被使用,CREATE TABLE 將自動地提交當前 InnoDB 事務。 
142 
143 NULL 值對於 TIMESTAMP 列的處理不同於其它的列類型。你不能在一個 TIMESTAMP 列中 存儲一個文字 NULL;將列設置為 NULL 將設置它為當前的日期和時間。因為 TIMESTAMP 列的行為就是這樣,列的 NULLNOT NULL 屬性不以常態方式影響它,如果你指定它們,將被忽略。 另一方面,為了使 MySQL 客戶端更容易地使用 TIMESTAMP 列,伺服器報告這樣的列被賦值為 NULL 值(這是真的),即使 TIMESTAMP 實際上決不會包含一個 NULL 值。當你使用 DESCRIBE tbl_name 得到有關你的表的描述時,你就會明白這點。 註意,設置一個 TIMESTAMP 列為 0 不等同於設置它為 NULL,因為 0 是一個有效的 TIMESTAMP 值。 
144 
145 DEFAULT 值必須是一個常量,不可以是一個函數或一個表達式。 如果一個列沒有指定 DEFAULT 值,MySQL 將自動地賦於一個,規則如下: 如果列可以接受 NULL 作為一個值,預設值為 NULL。 如果列被定義為 NOT NULL,預設值取決於列的類型: 
146 對於沒有聲明 AUTO_INCREMENT 屬性的數字類型,預設值為 0。對於一個 AUTO_INCREMENT 列,預設值為序列中的下一個值。 
147 
148 對於非 TIMESTAMP 的日期和時間類型,預設值是該類型適當的零值。對於表中的第一個 TIMESTAMP 列,預設值為當前的日期和時間。查看章節 6.2.2 Date 和 Time 類型。 
149 
150 對於非 ENUM 的字元串類型,預設值是空字元串。對於 ENUM,預設值為第一個枚舉值。 
151 
152 預設值必須是常量。這意味著,例如,對於一個日期列,你不能將一個像 NOW() 或 CURRENT_DATE 的函數設置為預設值。 
153 
154 KEYINDEX 的同義詞。 
155 
156 在 MySQL 中,一個 UNIQUE 鍵只能有不同的值。如果你試圖以匹配一個現有行的鍵添加新行,將產生一個錯誤。 
157 
158 PRIMARY KEY 是一個唯一 KEY,它還有一個額外的約束,所有鍵列必須被定義為 NOT NULL。在 MySQL 中,該被命名為 PRIMARY。一張表只能有一個 PRIMARY KEY。如果在你的表中沒有一個 PRIMARY KEY,而某些應用程式要求 PRIMARY KEY,MySQL 將返回第一個沒有任何 NULL 列的 UNIQUE 鍵,做為 PRIMARY KEY159 
160 一個 PRIMARY KEY 可以是一個多列索引。然而,你不能在一個列規格說明中使用 PRIMARY KEY 鍵屬性來創建一個多列索引。這樣做將僅僅標記單個列做為主鍵。你必須使用 PRIMARY KEY(index_col_name, ...) 句法。 
161 
162 如果 PRIMARYUNIQUE 鍵只由一個列組成,並且列類型是整型,你可以用 _rowid 引用它。(在版本 3.23.11 中新加入)。 
163 
164 如果你不為一個索引指派一個名字,索引名將被指派為與第一個 index_col_name 相同的名字,以一個可選尾碼 (_2,_3, ...) 使它唯一。使用 SHOW INDEX FROM tbl_name 可以從一個表中查看索引名。查看章節 4.5.6.1 檢索有關資料庫、表、列和索引的信息。 
165 
166 只有 MyISAM、InnoDB 和 BDB 表類型支持在可以有 NULL 值的列上索引。在其它情況下,你必須聲明這個列為 NOT NULL 或者得到一個錯誤結果。 
167 
168 使用 col_name(length) 句法,你可以一個索引只使用一個 CHARVARCHAR 列的一部分。這可以使索引文件更小一點。查看章節 5.4.4 列索引。 
169 
170 只有 MyISAM 表類型運動在 BLOB 和 TEXT 列上索引。當在一個 BLOB 或 TEXT 列上放置一個索引時,你必須總是指定索引的長度: 
171 CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));
172 
173 當你對一個 TEXT 或 BLOB 列使用 ORDER BYGROUP BY 時,只有最前面 的 max_sort_length 位元組被使用。查看章節 6.2.3.2 BLOB 和 TEXT 類型。 
174 
175 在 MySQL 3.23.23 或更新的版本中,你也可以創建特殊的 FULLTEXT 索引。他們被用於全文搜索。只有 MyISAM 表類型支持 FULLTEXT 索引。他只能從 CHARVARCHARTEXT 列建立。索引總是建立在整個列上;部分索引是不支持的。詳細操作請查看章節 6.8 MySQL 全文搜索。 
176 
177 在 MySQL 3.23.44 或更新的版本中,InnoDB 表支持外鍵約束檢查。查看章節 7.5 InnoDB 表。註意,InnoDB 中的 FOREIGN KEY 句法比上面介紹的句法有更多的限制。InnoDB 不允許 index_name 被指定,參考表的列總是必須明確命名。從 4.0.8 開始,InnoDB 在外鍵上支持 ON DELETEON UPDATE 動作。精確句法查看 InnoDB 手冊章節。查看章節 7.5 InnoDB 表。對於其它的表類型,MySQL 伺服器對 CREATE TABLE 命令中的 FOREIGN KEYCHECKREFERENCES 句法作語法分析,但是沒有更進一步的行為。查看章節 1.8.4.5 外鍵。 
178 
179 每個 NULL 列占據額外的一個比特,取捨到最接近的位元組。 
180 
181 最大記錄的位元組長度可以按下麵的計算得出: 
182 row length = 1
183              + (sum of column lengths)
184              + (number of NULL columns + 7)/8
185              + (number of variable-length columns)
186 
187 table_options 和 SELECT 選項只在 MySQL 3.23 和以後的版本中被實現。 不同的表類型為: 
188 
189 表類型  含義  
190 BDB 或 BerkeleyDB  以頁鎖定的事務安全型表。查看章節 7.6 BDB 或 BerkeleyDB 表  
191 HEAP  這個表的數據只存放在記憶體中。查看章節 7.4 HEAP 表  
192 ISAM  最初的存儲引擎。查看章節 7.3 ISAM 表  
193 InnoDB  以行鎖定的事務安全型表。查看章節 7.5 InnoDB 表  
194 MERGE  做為一個表使用的 MyISAM 表的收集品。查看章節 7.2 MERGE 表  
195 MRG_MyISAM  MERGE 表的別名  
196 MyISAM  用於代替 ISAM 的新的輕便型二進位存儲引擎。查看章節 7.1 MyISAM 表  
197 
198 
199 查看章節 7 MySQL 表類型。 如果一個表類型被指定,而那個特殊類型是不可用的,MySQL 將選擇最接近於你所指定類型的表類型。例如,如果 TYPE=BDB 被指定,而當前版本的 MySQL 不支持 BDB 表,該將會做為 MyISAM 表代替被創建。 其它的表選項是用於優化表行為的。在大多數情況下,你不必指定他們中的任何一個。選項對所有表均適用,如果不適用則另外說明: 
200 
201 選項  含義  
202 AUTO_INCREMENT  你想要為你的表設定的下一個 AUTO_INCREMENT 值。(MyISAM)  
203 AVG_ROW_LENGTH  你的表的平均行長度的近似值。你只需為有變長記錄的大表設置它  
204 CHECKSUM  如果你希望 MySQL 對所有的記錄行維持一個檢驗和(這將使表在更新時變得更慢,但是使得更容易地發現損壞的表),設置它為 1。(MyISAM)  
205 COMMENT  對於你的表的一個 60 個字元的註釋  
206 MAX_ROWS  你計劃在表中存儲的最大記錄行數目  
207 MIN_ROWS  你計劃在表中存儲的最小記錄行數目  
208 PACK_KEYS  如果你希望有更小的索引,設置它為 1。這通常使的更新更加得慢,面讀取列快 (MyISAM, ISAM)。設置它為 0,將禁用所有鍵壓縮。設置它為 DEFAULT (MySQL 4.0),將告訴存儲引擎僅僅壓縮長的 CHAR/VARCHAR209 PASSWORD  以一個密碼加密 `.frm' 文件。在 MySQL 標準版中,這個選項不做任何事  
210 DELAY_KEY_WRITE  如果希望延遲鍵表更新,直到該表被關閉,設置它為 1。(MyISAM).  
211 ROW_FORMAT  定義記錄行如何被存儲。目前,這個選項只能工作於 MyISAM 表,它支持 DYNAMIC 和 FIXED 行格式。查看章節 7.1.2 MyISAM 表格式  
212 
213 
214 當你使用一個 MyISAM 表時,MySQL 使用 max_rows * avg_row_length 的乘積來最終表將有多大。如果你不指定上面的任何選項,一個表的最大民族教育將是 4G (或 2G ,如果你的操作系統僅支持 2G 的最大文件)。原因是僅僅是為了控制指針範圍使索引更小和更快,如果您真的不需要大文件。 如果你不使用 PACK_KEYS,預設僅僅壓縮字元串,不壓縮數字。如果你使用 PACK_KEYS=1,數字也將被很好地壓縮。 當壓縮二進位數字鍵時,MySQL 將使用 prefix 壓縮。這就意味著,如果有許多同樣的數字,你才能得到很大的益處。Prefix 壓縮意味著每個鍵都需要一個額外的位元組來指示前一個鍵有多少位元組與下一個鍵相同(註意,行指針被以高元組第一次序(high-byte-first-order)直接地存儲在鍵後,以改善壓縮)。這就意味著,如果在一個記錄行上有連續兩行的相等鍵,下麵所有“相同”的鍵通常只占用 2 個位元組(包括記錄行指針)。與通常情況下相比,下麵的“相同”鍵將占用 storage_size_for_key + pointer_size (通常 4) 個位元組。另一方面,如果所有的鍵都是不同的,你將在每個鍵上損失 1 位元組,如果該鍵不是一個可以有 NULL 值的鍵。(在這種情況下,壓縮後鍵的長度將存儲在用於鍵是否為 NULL 的位元組中。) 
215 
216 如果你在一個 CREATE 語句中指定一個 SELECT,MySQL 為 SELECT 中的所有元素創建新的欄位。例如: 
217 mysql> CREATE TABLE test (a INT NOT NULL AUTO_INCREMENT,
218     ->        PRIMARY KEY (a), KEY(b))
219     ->        TYPE=MyISAM SELECT b,c FROM test2;
220 
221 這將創建一個有三個列的 MyISAM 表,a、b 和 c 。請註意,SELECT 語句中的列被添加到表的右邊,而不是重疊在上面。看下麵的例子: 
222 mysql> SELECT * FROM foo;
223 +---+
224 | n |
225 +---+
226 | 1 |
227 +---+
228 
229 mysql> CREATE TABLE bar (m INT) SELECT n FROM foo;
230 Query OK, 1 row affected (0.02 sec)
231 Records: 1  Duplicates: 0  Warnings: 0
232 
233 mysql> SELECT * FROM bar;
234 +------+---+
235 | m    | n |
236 +------+---+
237 | NULL | 1 |
238 +------+---+
239 1 row in set (0.00 sec)
240 
241 對於表 foo 中每個記錄行,一個以從表 foo 來的值和新列的預設值組成的記錄行被插入到表 bar 中。 CREATE TABLE ... SELECT 不會為了自動地創建索引。這是故意這樣做的,是為了該命令儘可能地靈活。如果你希望在創建表時同時創建索引,你必須在 SELECT 語句之前指定它們: 
242 mysql> CREATE TABLE bar (UNIQUE (n)) SELECT n FROM foo;
243 
244 如果在拷貝數據到表中時發生任何錯誤,數據將被自動地刪除。 為了確保更新日誌/二進位日誌可用於重建最初的表,在 CREATE TABLE ... SELECT 過程中,MySQL 不允許併發的插入。 
245 
246 在不支持大文件的操作系統上,RAID_TYPE 選項可以幫助你打破 MyISAM 數據文件(非索引文件)的 2G/4G 限止。註意,這個選項在支持大文件的文件系統上不推薦使用! 將 RAID 目錄放在不同的物理磁碟上,可以通過 I/O 瓶頸得到更高的速度。RAID_TYPE 可以在任何操作系統上工作,只要你配置 MySQL --with-raid。目前 RAID_TYPE 只允許 STRIPED (1 和 RAID0 是它的別名)。 如果你對一個 MyISAM 表指定 RAID_TYPE=STRIPED ,MyISAM 將在資料庫目錄下創建 RAID_CHUNKS 子目錄,並命名為 00, 01, 02 。在每個目錄中,MyISAM 將創建一個 table_name.MYD。當將數據寫入數據文件中時,RAID 處理器將映射第一個 RAID_CHUNKSIZE *1024 位元組到第一個文件中,下一個 RAID_CHUNKSIZE *1024 位元組到下一個文件中,等等。 
247 
248 UNION 被用於當你希望將多個同樣的表收集為一個時。它僅僅與 MERGE 表一起配合使用。查看章節 7.2 MERGE 表。 目前,在你將幾個表映射為一個 MERGE 表時,你需要有對這些表的 SELECT、UPDATE 和 DELETE 許可權。所有被映射的表必須與 MERGE 表在同一個資料庫中。 
249 
250 如果你希望向一個 MERGE 表中插入數據,你不得不用 INSERT_METHOD 指定記錄行插入到哪一個表中。查看章節 7.2 MERGE 表。這個選項在 MySQL 4.0.0 中被引入。 
251 
252 在創建表時,PRIMARY 鍵必須放在第一位,然後是所有 UNIQUE 鍵,再後是普通鍵。這可以幫助 MySQL 優化程式區分哪個鍵優先使用,同時更快地檢測出重覆的 UNIQUE 鍵。 
253 
254 通過使用 DATA DIRECTORY="directory" 或 INDEX DIRECTORY="directory",你可以指定存儲引擎在什麼地方存放它的表和索引文件。註意,目錄必須以一個完整路徑指定(不是相對路徑)。 這僅僅工作於 MySQL 4.0 中的 MyISAM 表,並且你沒有使用 --skip-symlink 選項。查看章節 5.6.1.2 對錶使用符號鏈接。 
255 6.5.3.1 隱式的列定義變化
256 
257 在某些情況下,MySQL 隱式地改變一個在 CREATE TABLE 給定的列的規約。(這在 ALTER TABLE 中也可能發生。): 
258 
259 長度不超過四個位元組的 VARCHAR 列被改變為 CHAR。 
260 
261 如果在一個表中有任何一個列是變長的,則結果是整個記錄行也是變長的。因此,如果一個表中包含任何變長的列(VARCHAR、TEXT 或 BLOB),所有長於 3 個字元的 CHAR 列將被改變為 VARCHAR 列。這在任何方面都不影響你如何使用該列;在 MySQL 中,VARCHAR 只是存儲字元的另一個不同的方法。MySQL 執行這個轉換,是因為它節省空間,並且使表操作更快。查看章節 7 MySQL 表類型。 
262 
263 TIMESTAMP 的顯示尺寸必須是在 2 到 14 範圍之內的偶數。如果指定顯示尺寸為 0 或超過 14,尺寸被強制設為 14。從 1 到 13 範圍內的奇數值尺寸將被強製為下一個更大的偶數。 
264 
265 你不能在一個 TIMESTAMP 列中存儲一個文字 NULL;將一個 NULL 值賦給它將設置它為當前的日期和時間。因為 TIMESTAMP 列的行為就是這樣,列的 NULL 和 NOT NULL 屬性不以常態方式影響它,如果你指定它,將被忽略。DESCRIBE tbl_name 總是報告一個 TIMESTAMP 列被賦於了 NULL 值。 
266 
267 MySQL 將其它 SQL 資料庫供應商使用的列類型映射到 MySQL 類型。查看章節 6.2.5 使用來自其它的資料庫引擎的列類型。 
268 如果你希望知道在你創建或改變了你的表後, MySQL 是否使用了不同於你所指定的列類型,你可以發出一個 DESCRIBE tbl_name 語句。 
269 
270 如果你使用 myisampack 壓縮一個表,其它的某些列類型可能會發生改變。查看章節 7.1.2.3 壓縮表的特征。 
271 
272 6.5.4 ALTER TABLE 句法
273 
274 ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...]
275 
276 alter_specification:
277         ADD [COLUMN] create_definition [FIRST | AFTER column_name ]
278   or    ADD [COLUMN] (create_definition, create_definition,...)
279   or    ADD INDEX [index_name] (index_col_name,...)
280   or    ADD PRIMARY KEY (index_col_name,...)
281   or    ADD UNIQUE [index_name] (index_col_name,...)
282   or    ADD FULLTEXT [index_name] (index_col_name,...)
283   or    ADD [CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name,...)
284             [reference_definition]
285   or    ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
286   or    CHANGE [COLUMN] old_col_name create_definition
287                [FIRST | AFTER column_name]
288   or    MODIFY [COLUMN] create_definition [FIRST | AFTER column_name]
289   or    DROP [COLUMN] col_name
290   or    DROP PRIMARY KEY
291   or    DROP INDEX index_name
292   or    DISABLE KEYS
293   or    ENABLE KEYS
294   or    RENAME [TO] new_tbl_name
295   or    ORDER BY col
296   or    table_options
297 
298 ALTER TABLE 允許你改變一個現有表的結構。例如,你可以添加或刪除列,創建或撤銷索引,更改現有列的類型或將列或表自身更名。你也可以改變表的註釋和表的類型。查看章節 6.5.3 CREATE TABLE 句法。 
299 
300 如果你使用 ALTER TABLE 來改變一個列規約,但是 DESCRIBE tbl_name 顯示你的列並沒有被修改,這有可能是因為章節 6.5.3.1 隱式的列定義變化 描述的一個原因,使 MySQL 忽略了你的修改。例如,如果你嘗

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 用管理員身份cmd進入mysql安裝目錄bin里,執行 如果殺毒軟體攔截,添加為信任區 ...
  • 執行資料庫查詢時,有完整查詢和模糊查詢之分。 一般模糊語句格式如下: SELECT 欄位 FROM 表 WHERE 某欄位 LIKE 條件 其中關於條件,SQL提供了四種匹配模式: 1、% :表示任意0個或多個字元。可匹配任意類型和長度的字元,有些情況下若是中文,請使用兩個百分號(%%)表示。 例如 ...
  • 1、選取最適用的欄位屬性 MySQL可以很好的支持大數據量的存取,但是一般說來,資料庫中的表越小,在它上面執行的查詢也就會越快。因此,在創建表的時候,為了獲得更好的性能,我們可以將表中欄位的寬度設得儘可能小。 例如,在定義郵政編碼這個欄位時,如果將其設置為CHAR(255),顯然給資料庫增加了不必要 ...
  • 啟動該隨筆的原因,個人因為辭職較多空檔期,故本著重新學習的動力以及為了記錄自己學習 開始學習一些概念性的東西吧(PS:博主,PHP開發 一枚) Data 數據 :經過語義解釋的值 Database(DB) 資料庫 :數據的倉庫 Database Management System(DBMS) 資料庫 ...
  • 布爾查詢是最常用的組合查詢,不僅將多個查詢條件組合在一起,並且將查詢的結果和結果的評分組合在一起。當查詢條件是多個表達式的組合時,布爾查詢非常有用,實際上,布爾查詢把多個子查詢組合(combine)成一個布爾表達式,所有子查詢之間的邏輯關係是與(and);只有當一個文檔滿足布爾查詢中的所有子查詢條件... ...
  • 使用Sqoop遠程連接MySQL導入數據到HBase資料庫: 出現了拒絕連接的錯誤: 把主機名換成IP地址就正常了。 ...
  • 基本思路就是為mysql.user表增加一條記錄:'hadoop'@'%',這樣,任何主機上的用戶'hadoop'都可以遠程連接MySQL資料庫。於是輸入下麵的命令: 結果出現了錯誤: 這是因為指定了嚴格模式,不能直接往mysql.user表裡面insert用戶: 只能輸入下麵兩個命令來實現: 這樣 ...
  • MySQL — 連接器 連接器的概念 它們往往是一類Python包,或者是一類已經寫好的Python庫。這些庫提供了我們Python去連接資料庫伺服器的基本功能。 ​ 既然它是一個包,那麼我們首先學會導入這個包 #! /usr/bin/env python3 # coding: utf-8 ​ fr ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...