DDL-數據表的創建


-- DDL(*)(Data Definition Language):數據定義語言,用來定義數據庫對象:庫、表、列等;

-- 操作數據表,數據表的創建


-- 切換數據庫
use mydatabase;

-- 刪除數據表
drop table test;

-- CREATE TABLE  表名 ( 屬性名 數據類型 [完整性約束條件],
-- 屬性名 數據類型 [完整性約束條件],
-- ) [字符集];

-- 創建數據表

create table test (

-- 主鍵(主鍵約束) primary key 唯一的約束該字段裏面的數據,不能重複,不可爲空
-- 自增 AUTO_INCREMENT 自增長字段必須是數字,且爲鍵。一張表最多只能有一個自增長  使用:不寫,null,default
id int primary key auto_increment ,

-- 自動生成唯一值
id serial,

-- 唯一性(唯一約束)unique/unique key  字段具有唯一性,數據不能重複
tname VARCHAR(20) unique,    -- varchar:可變長度字符串類型

-- 非空約束 not null
tbirth date not null,-- date:日期類型,格式爲:yyyy-MM-dd;


-- 浮點型:超出指定範圍,會丟失精度,自動四捨五入
-- 當插入數據時,整數部分是不能超過長度的,但小數部分可以,四捨五入。因爲四捨五入二導致整數部分超出指定的長度,系統也運行成立
tsal double(5,2),       -- double:雙精度浮點數,例如double(5,2)表示最多5位,其中必須有2位小數 8字節
tcomm float(5,2),       -- float:單精度浮點數,用法同double,不加括號表示沒有小數部分 4個字節

-- 定點型:絕對的保證整數部分不會被四捨五入,不會丟失精度,理論上小數部分也不會丟失精度。
-- 整數部分不能超出長度,小數部分長度可以隨意超出,四捨五入。定點數長度溢出,是不會進位的,會報錯
tmoney DECIMAL(5,2),    -- DECIMAL/DEC(M,D):定點數類型,用法同浮點型,M+2個字節


-- 日期與時間類型
ttime time,          -- time:時間類型,格式爲:hh:mm:ss
tdate date,          -- date:日期類型,格式爲:yyyy-MM-dd
tdatetime datetime,  -- datetime:日期時間類型 yyyy-MM-dd hh:mm:ss
tyesr year(2),       -- year: 年份類型, 格式爲:YY year(2)或YYYY year(4)
tstamp timestamp,    -- timestamp:時間戳類型 yyyy-MM-dd hh:mm:ss  會自動賦值


-- 字符串類型
tchar char(20),        -- char:定長字符串,磁盤在定義結構的時候,就已經確定了最終數據的存儲長度 
                       -- char(L)在UTF8環境下,需要L*3=12個字節 L最大爲255
                       -- 定長的磁盤空間比較浪費,但效率高。如果數據基本上確定長度一樣,就使用定長  
                       
tvarchar varchar(20),  -- varchar:變長字符串,在分配空間的時候,按照最大的空間分配,但實際最終用了多少,是根據具體的數據來確定的 
                       -- varchar(L) utf8環境下,大小爲L*3+1(byte).理論長度是65536個字符,但會多出1~2個字節來確定存儲的實際長度
                       -- 變長的磁盤空間比較節省,但效率低,如果數據不確定長度(不同數據有變化),就使用變長 

ttext text,            -- text:文本字符串(儲存文字),如果數據量非常大,通常說超過了255個字符,就用文本字符串
tblob blob,            -- blob:文本字符串(存儲二進制數據)

-- 枚舉:在進行數據規範的時候,系統會自動建立一個數字和枚舉元素的對應關係,放到日誌中
-- 再進行數據插入的時候,系統自動將字符轉換成對象的數字,提取數據的時候,自動將數值轉換爲字符串 編號從1開始
gender enum('男','女') DEFAULT '男',

-- 集合字符串:和枚舉類似,實際存儲的是數字,不是字符串。
tset set('男','女') default'男'   -- 集合中的每一個元素都對應一個二進制位,將他們反過來,就是對應的十進制的數字。

-- default:默認值,在數據進行插入的時候,不給該字段賦值,直接使用DEFAULT代替值
-- comment:專門用來描述字段,會根據表創建語句保存。用來給程序猿進行了解的。



-- foreign key:外面的鍵,鍵不在自己表中。如果一張表中有一個字段指向另外一張表的主鍵,那麼該字段稱之爲外鍵
-- foreign key(外鍵字段) references 外部表(主鍵字段)
-- foreign key (ttext) references tuser(id)

-- primary key(主鍵字段列表)來創建聯合主鍵。
)charset utf8;




-- 追加主鍵
--  alter table 表名 add primary key(字段列表)
alter table t2 add primary key (id);
--  修改表字段屬性
-- alter  table 表名 modify 字段名 數據類型 primary key
alter  table t2 modify id int primary key;
    
-- 刪除主鍵 (主鍵不可更新)
-- alter table 表名 drop primary key
alter table t2 drop primary key ;


-- 追加外鍵 
-- alter table 表名 add [constraint 外鍵名字] foreign key (外鍵字段) references 父表(主鍵字段);
ALTER TABLE t1 ADD CONSTRAINT k_1 FOREIGN KEY (uid)REFERENCES test(id);
ALTER TABLE t1 ADD FOREIGN KEY (uid)REFERENCES test(id);

-- 刪除外鍵
-- alter table 表名 drop foreign key 外鍵名字
ALTER TABLE t2 DROP foreign KEY t_k;


-- 新建一張表t2,同時將另一張表的數據t1複製進去
CREATE TABLE t2 AS SELECT * FROM t1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章