Mysql DDL
用戶管理
數據庫操作
系統數據庫
- information_schema:主要存儲數據庫中的一些系統對象信息,例如用戶表、列、權限、字符集和分區等信息
- performance_schema:主要存儲數據庫性能參數
- mysq:主要存儲系統的用戶權限信息
- test:測試數據庫
數據庫操作
- 創建數據庫
mysql
Create database database_name
數據庫長度小于128。 - 查看數據庫
- 選擇數據庫
- 刪除數據庫
表
Create Table table_name( col_name col_type ,... ) ;describe table_name;show create table table_name;drop table table_name;alter table old_table_name rename [to] new_table_name;alter table table_name add col_name col_type [first | after col_name1 | ] ; alter table table_name drop col_name; alter table table_name modify col_name attributes; alter table table_name change old_col_name new_col_name col_type; alter table table_name change col_name1 col_type1 after | before col_name2;--完整性約束 NOT NULL DEFAULT DEFAULT value UNIQUE KEY (UK) PRIMARY KEY (PK) AUTO_INCREAMENT FOREIGN KEY (FK)Alter table tabname add primary key(col); Alter table tabname drop primary key(col)索引
create table xxx( , INDEX| KEY [indexname] ( col_name ...) )create index index_name on table_name ( col_name ,...) alter table table_name add index | key [index_name] ( col_name ,....)drop index index_name on table_name視圖
觸發器
數據庫類型
數值類型
整數類型
| tinyint | 1 | ||
| smallint | 2 | ||
| mediumint | 3 | -8388608 | 8388607 |
| int | 4 | ||
| bigint | 8 |
定點數
decimal與numeric在mysql中是相同類型
格式:decimal(M,D)
我們看到其中有兩個參數,即DECIMAL(M,D),其中M表示十進制數字總的個數,D表示小數點后面數字的位數,上例中的取值范圍為-999.99~999.99。
如果存儲時,整數部分超出了范圍(如上面的例子中,添加數值為1000.01),MySql就會報錯,不允許存這樣的值。
如果存儲時,小數點部分若超出范圍,就分以下情況:
若四舍五入后,整數部分沒有超出范圍,則只警告,但能成功操作并四舍五入刪除多余的小數位后保存。如999.994實際被保存為999.99。
若四舍五入后,整數部分超出范圍,則MySql報錯,并拒絕處理。如999.995和-999.995都會報錯。
M的默認取值為10,D默認取值為0。如果創建表時,某字段定義為decimal類型不帶任何參數,等同于decimal(10,0)。帶一個參數時,D取默認值。
M的取值范圍為1~65,取0時會被設為默認值,超出范圍會報錯。
D的取值范圍為0~30,而且必須<=M,超出范圍會報錯。
浮點數
| float | 4 | ||
| double | 8 |
浮點數是用來表示實數的一種方法,它用 M(尾數) * B( 基數)的E(指數)次方來表示實數,相對于定點數來說,在長度一定的情況下,具有表示數據范圍大的特點。但同時也存在誤差問題。
如果希望保證值比較準確,推薦使用定點數數據類型。
MySql中的浮點類型有float,double和real。他們定義方式為:FLOAT(M,D) 、 REAL(M,D) 、 DOUBLE PRECISION(M,D)。
REAL就是DOUBLE ,如果SQL服務器模式包括REAL_AS_FLOAT選項,REAL是FLOAT的同義詞而不是DOUBLE的同義詞。
“(M,D)”表示該值一共顯示M位整數,其中D位位于小數點后面。例如,定義為FLOAT(7,4)的一個列可以顯示為-999.9999。MySQL保存值時進行四舍五入,因此如果在FLOAT(7,4)列內插入999.00009,近似結果是999.0001。
FLOAT和DOUBLE中的M和D的取值默認都為0,即除了最大最小值,不限制位數。允許的值理論上是-1.7976931348623157E+308~-2.2250738585072014E-308、0和2.2250738585072014E-308~1.7976931348623157E+308。M、D范圍如下(MySql5.7實測,與IEEE標準計算的實際是不同的,下面介紹):
M取值范圍為0~255。FLOAT只保證6位有效數字的準確性,所以FLOAT(M,D)中,M<=6時,數字通常是準確的。如果M和D都有明確定義,其超出范圍后的處理同decimal。
D取值范圍為0~30,同時必須<=M。double只保證16位有效數字的準確性,所以DOUBLE(M,D)中,M<=16時,數字通常是準確的。如果M和D都有明確定義,其超出范圍后的處理同decimal。
FLOAT和DOUBLE中,若M的定義分別超出7和17,則多出的有效數字部分,取值是不定的,通常數值上會發生錯誤。因為浮點數是不準確的,所以我們要避免使用“=”來判斷兩個數是否相等。
MySql中的浮點數遵循IEEE 754標準。
內存中,FLOAT占4-byte(1位符號位 8位表示指數 23位表示尾數),DOUBLE占8-byte(1位符號位 11位表示指數 52位表示尾數)。IEEE754標準還對尾數的格式做了規范:d.dddddd…,小數點左面只有1位且不能為零,計算機內部是二進制,因此,尾數小數點左面部分總是1。顯然,這個1可以省去,以提高尾數的精度。由上可知,單精度浮點數的尾數是用24bit表示的,雙精度浮點數的尾數是用53bit表示的。所以就能算出取值范圍和準確的有效位數了,但MySql中其實略有不同。
bit
BIT數據類型可用來保存位字段值。BIT(M)類型允許存儲M位值。M范圍為1~64,默認為1。
BIT其實就是存入二進制的值,類似010110。
如果存入一個BIT類型的值,位數少于M值,則左補0.
如果存入一個BIT類型的值,位數多于M值,MySQL的操作取決于此時有效的SQL模式:
如果模式未設置,MySQL將值裁剪到范圍的相應端點,并保存裁減好的值。
如果模式設置為traditional(“嚴格模式”),超出范圍的值將被拒絕并提示錯誤,并且根據SQL標準插入會失敗。
b=b’001000’;
字符串類型
| char(M) | M | 默認255 | |
| varchar(M) | 0-M |
日期時間類型
ENUM
SET
總結