MySQL 之 表操作

來源:互聯網
上載者:User

標籤:字元   gif   區別   data-   編碼   rename   cell   label   datetime   

一 什麼是表

  表(TABLE) 是一種結構化的檔案,可用來儲存某種特定類型的資料。表中的一條記錄有對應的標題,標題 稱之為 表的欄位。

  

二 建立表 
12345 CREATE TABLE 表名(欄位名1 類型[(寬度) 約束條件],欄位名2 類型[(寬度) 約束條件],欄位名3 類型[(寬度) 約束條件])ENGINE=innodb DEFAULT CHARSET utf8;

create table student(
id int not null auto_increment primary key,
name varchar(250) not null,
age int not null,
sex enum(‘男‘,‘女‘) not null default ‘男‘,
salary double(10,2) not null
)engine=innodb default charset=utf8;

ps: not null :表示此列不可為空
auto_increment :表示自增長,預設每次增長+1
注意:自增長只能添加在主鍵或者唯一索引欄位上

primary key :表示主鍵(唯一且不為空白)
engine =innodb :表示指定當前表的儲存引擎
default charset utf8 :設定表的預設編碼集

主鍵,一種特殊的唯一索引,不允許有空值,如果主鍵使用單個列,則它的值必須唯一,如果是多列,則其組合必須唯一。            create table tb1(                nid int not null auto_increment primary key,                num int null            )            或            create table tb1(                nid int not null,                num int not null,                primary key(nid,num)            )
自增,如果為某列設定自增列,插入資料時無需設定此列,預設將自增(表中只能有一個自增列)            create table tb1(                nid int not null auto_increment primary key,                num int null            )            或            create table tb1(                nid int not null auto_increment,                num int null,                index(nid)            )注意:1、對於自增列,必須是索引(含主鍵)。         2、對於自增可以設定步長和起始值     show session variables like ‘auto_inc%‘;     set session auto_increment_increment=2;     set session auto_increment_offset=10;      show global  variables like ‘auto_inc%‘;      set global auto_increment_increment=2;      set global auto_increment_offset=10; 
三.查詢表資料
1234567891011 #查詢表資料select 欄位(多個以","間隔) from 表名;例:  select name,sex from student;或者: select from student;   #查看錶結構desc 表名;例: desc student; #查看建立表資訊show create table student;  
 四.修改表結構
1234567891011121314151617 #添加表欄位alter table 表名 add 欄位名 類型 約束;例如: alter table student add age int not null default after name;ps: after name 表示在name欄位後添加欄位 age.  #修改表欄位方式一: alter table student modify 欄位 varchar(100) null;方式二: alter table student change 舊欄位 新欄位 int not null default 0;ps:二者區別:change 可以改變欄位名字和屬性modify只能改變欄位的屬性    #刪除表欄位 :alter table student drop 欄位名;  #更新表名稱:rename table 舊錶名 to 新表名;

 

 更新主鍵操作

#添加主鍵 :
alter table student add primary key(欄位,"多個","間隔");

#移除主鍵 :
alter table student drop primary key;

ps:如果主鍵為自增長,以上方式則不被允許執行,請先去掉主鍵自增長屬性,然後再移除主鍵
alter table student modify id int not null,drop primary key

更新主鍵操作

 外鍵更新操作

#添加外鍵:
alter table 從表 add CONSTRAINT fk_test foreign key 從表(欄位) REFERENCES 主表(欄位);

#移除外鍵:
alter table 表 drop foreign key 外鍵名稱;

ps:如果外鍵設定後想修改,那麼只能是先刪除,再添加

外鍵更新操作

 預設值更新操作
#修改預設值 : alter table 表 alter 欄位 set default 100;#刪除預設值 :alter table 表 alter 欄位 drop default;
五.刪除表
12345 #刪除表drop table 表名; #清空表truncate table 表名;  
六.複製表
1234567 #只複製表結構和表中資料CREATE TABLE tb2 SELECT FROM tb1;ps:主鍵自增/索引/觸發器/外鍵 不會 被複製   #只複製表結構create table tb2 like tb1;ps: 資料/觸發器/外鍵 不會被複製 
七 資料庫儲存引擎

   詳情參考: http://www.cnblogs.com/wangfengming/p/7930333.html

八.資料類型

 MySQL支援多種類型,大致可以分為四類:數值、字串類型、日期/時間和其他類型。

 資料類型

二進位類型:
bit[(M)]
二進位位(101001),m表示二進位位的長度(1-64),預設m=1

整數類型:
tinyint[(m)] [unsigned] [zerofill]

小整數,資料類型用於儲存一些範圍的整數數值範圍:
有符號:-128 ~ 127.
無符號:255

特別的: MySQL中無布爾值,使用tinyint(1)構造。

int[(m)][unsigned][zerofill]

整數,資料類型用於儲存一些範圍的整數數值範圍:
有符號: -2147483648 ~ 2147483647
無符號:4294967295

bigint[(m)][unsigned][zerofill]
大整數,資料類型用於儲存一些範圍的整數數值範圍:
有符號:-9223372036854775808 ~ 9223372036854775807
無符號:18446744073709551615

作用:儲存年齡,等級,id,各種號碼等

注意:為該類型指定寬度時,僅僅只是指定查詢結果的顯示寬度,與儲存範圍無關,所以我們使用預設的就可以了
有符號和無符號的最大數字需要的顯示寬度均為10,
而針對有符號的最小值則需要11位才能顯示完全,所以int類型預設的顯示寬度為11是非常合理的

小數型:
decimal[(m[,d])] [unsigned] [zerofill]
準確的小數值,m是數字總個數(負號不算),d是小數點後個數。 m最大值為65,d最大值為30。

特別的:對於精確數值計算時需要用此類型
decaimal能夠儲存精確值的原因在於其內部按照字串儲存。

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
單精確度浮點數(非準確小數值),m是數字總個數,d是小數點後個數。
有符號:(-3.402823466E+38 to -1.175494351E-38),0,(1.175494351E-38 to 3.402823466E+38)
無符號:0,(1.175 494 351 E-38,3.402 823 466 E+38)

**** 數值越大,越不準確 ****

DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
雙精確度浮點數(非準確小數值),m是數字總個數,d是小數點後個數。

有符號:(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,
(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)
無符號:0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)

**** 數值越大,越不準確 ****

作用:儲存薪資、身高、體重、體質參數等

字元型:
char (m)
char資料類型用於表示固定長度的字串,可以包含最多達255個字元。其中m代表字串的長度。

PS: 即使資料小於m長度,也會佔用m長度,但是在查詢時,查出的結果會自動刪除尾部的空格

特點:定長,簡單粗暴,浪費空間,存取速度快

varchar(m)
varchar 資料類型用於變長的字串,可以包含最多達65535個字元(理論上可以,但是實際上在超出21845長度後,mysql會自動幫您轉換資料類型為文本類型)。
其中m代表該資料類型所允許儲存的字串的最大長度,只要長度小於該最大值的字串都可以被儲存在該資料類型中。

PS: varchar類型儲存資料的真實內容,例如:如果‘ab ‘,尾部的空格也會被存起來
強調:varchar類型會在真實資料前加1-2Bytes的首碼,該首碼用來表示真實資料的bytes位元組數(1-2Bytes最大表示65535個數字,正好符合mysql對row的最大位元組限制,即已經足夠使用)
如果真實的資料<255bytes則需要1Bytes的首碼(1Bytes=8bit 2**8最大表示的數字為255)
如果真實的資料>255bytes則需要2Bytes的首碼(2Bytes=16bit 2**16最大表示的數字為65535)
特點:變長,精準,節省空間的,存取速度慢

sql最佳化:建立表時,定長的類型往前放,變長的往後放
比如性別 比如地址或描述資訊
PS:雖然varchar使用起來較為靈活,但是從整個系統的效能角度來說,char資料類型的處理速度更快,有時甚至可以超出varchar處理速度的50%。
因此,使用者在設計資料庫時應當綜合考慮各方面的因素,以求達到最佳的平衡

text
text資料類型用於儲存變長的大字串,可以最多到65535 (2**16 ? 1)個字元。

枚舉類型(瞭解):
enum

An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.)

樣本:
CREATE TABLE user (
name VARCHAR(40),
sex ENUM(‘男‘, ‘女‘, ‘未知‘)
);
INSERT INTO user (name, sex) VALUES (‘人1‘,‘男‘), (‘人2‘,‘女‘),
(‘人3‘,‘未知‘),(‘人4‘,‘人妖‘);
PS:人4會插入成功嗎??
集合類型(瞭解):
set

A SET column can have a maximum of 64 distinct members.
樣本:
CREATE TABLE myset (col SET(‘a‘, ‘b‘, ‘c‘, ‘d‘));

INSERT INTO myset (col) VALUES (‘a,d‘), (‘d,a‘), (‘a,d,a‘), (‘a,d,d‘), (‘d,a,d‘);

日期/時間類型:

DATE 日期值

YYYY-MM-DD(1000-01-01/9999-12-31)

TIME 時間值或期間
HH:MM:SS(‘-838:59:59‘/‘838:59:59‘)

YEAR 年份值
YYYY(1901/2155)

DATETIME 混合日期和時間值

YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59)

TIMESTAMP 時間戳記

YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某時)

作用:儲存使用者註冊時間,文章發布時間,員工入職時間,出生時間,到期時間等

資料類型

詳情參考:

  • http://www.runoob.com/mysql/mysql-data-types.html
  • http://dev.mysql.com/doc/refman/5.7/en/data-type-overview.html

MySQL 之 表操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.