1. 程式人生 > 資料庫 >Mysql-DDL語言相關知識點

Mysql-DDL語言相關知識點

··· 庫的管理

一、建立庫
create database 【if not exists】 庫名【 character set 字符集名】;

二、修改庫
alter database 庫名 character set 字符集名;

三、刪除庫
drop database 【if exists】 庫名;

···表的管理

一、建立表
create table 【if not exists】 表名(
欄位名 欄位型別 【約束】,
欄位名 欄位型別 【約束】,
。。。
欄位名 欄位型別 【約束】
)

二、修改表

1.新增列
alter table 表名 add column 列名 型別 【first|after 欄位名】;

2.修改列的型別或約束
alter table 表名 modify column 列名 新型別 【新約束】;
3.修改列名
alter table 表名 change column 舊列名 新列名 型別;
4 .刪除列
alter table 表名 drop column 列名;
5.修改表名
alter table 表名 rename 【to】 新表名;

三、刪除表
drop table【if exists】 表名;

四、複製表
1、複製表的結構
create table 表名 like 舊錶;
2、複製表的結構+資料
create table 表名
select 查詢列表 from 舊錶【where 篩選】;

···資料型別

一、數值型
1、整型
tinyint、smallint、mediumint、int/integer、bigint
1 2 3 4 8

特點:
①都可以設定無符號和有符號,預設有符號,通過unsigned設定無符號
②如果超出了範圍,會報out or range異常,插入臨界值
③長度可以不指定,預設會有一個長度
長度代表顯示的最大寬度,如果不夠則左邊用0填充,但需要搭配zerofill,並且預設變為無符號整型

2、浮點型
定點數:decimal(M,D)
浮點數:
float(M,D) 4
double(M,D) 8

特點:
①M代表整數部位+小數部位的個數,D代表小數部位
②如果超出範圍,則報out or range異常,並且插入臨界值

③M和D都可以省略,但對於定點數,M預設為10,D預設為0
④如果精度要求較高,則優先考慮使用定點數

二、字元型
char、varchar、binary、varbinary、enum、set、text、blob

char:固定長度的字元,寫法為char(M),最大長度不能超過M,其中M可以省略,預設為1
varchar:可變長度的字元,寫法為varchar(M),最大長度不能超過M,其中M不可以省略

較短的文字:char、varchar
較長的文字:text、blob(較長的二進位制資料)

三、日期型
year年
date日期
time時間
datetime 日期+時間 8
timestamp 日期+時間 4 比較容易受時區、語法模式、版本的影響,更能反映當前時區的真實時間

常見約束

一、常見的約束
NOT NULL:非空,該欄位的值必填
UNIQUE:唯一,該欄位的值不可重複
DEFAULT:預設,該欄位的值不用手動插入有預設值
CHECK:檢查,mysql不支援
PRIMARY KEY:主鍵,該欄位的值不可重複並且非空 unique+not null
FOREIGN KEY:外來鍵,該欄位的值引用了另外的表的欄位

主鍵和唯一
1、區別:
①、一個表至多有一個主鍵,但可以有多個唯一
②、主鍵不允許為空,唯一可以為空
2、相同點
都具有唯一性
都支援組合鍵,但不推薦
外來鍵:
1、用於限制兩個表的關係,從表的欄位值引用了主表的某欄位值
2、外來鍵列和主表的被引用列要求型別一致,意義一樣,名稱無要求
3、主表的被引用列要求是一個key(一般就是主鍵)
4、插入資料,先插入主表
刪除資料,先刪除從表
可以通過以下兩種方式來刪除主表的記錄
#方式一:級聯刪除
ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE CASCADE;

#方式二:級聯置空
ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE SET NULL;

二、建立表時新增約束
create table 表名(
欄位名 欄位型別 not null,#非空
欄位名 欄位型別 primary key,#主鍵
欄位名 欄位型別 unique,#唯一
欄位名 欄位型別 default 值,#預設
constraint 約束名 foreign key(欄位名) references 主表(被引用列)

)
注意:
支援型別 可以起約束名
列級約束 除了外來鍵 不可以
表級約束 除了非空和預設 可以,但對主鍵無效

列級約束可以在一個欄位上追加多個,中間用空格隔開,沒有順序要求

三、修改表時新增或刪除約束
1、非空
新增非空
alter table 表名 modify column 欄位名 欄位型別 not null;
刪除非空
alter table 表名 modify column 欄位名 欄位型別 ;

2、預設
新增預設
alter table 表名 modify column 欄位名 欄位型別 default 值;
刪除預設
alter table 表名 modify column 欄位名 欄位型別 ;
3、主鍵
新增主鍵
alter table 表名 add【 constraint 約束名】 primary key(欄位名);
刪除主鍵
alter table 表名 drop primary key;

4、唯一
新增唯一
alter table 表名 add【 constraint 約束名】 unique(欄位名);
刪除唯一
alter table 表名 drop index 索引名;
5、外來鍵
新增外來鍵
alter table 表名 add【 constraint 約束名】 foreign key(欄位名) references 主表(被引用列);
刪除外來鍵
alter table 表名 drop foreign key 約束名;

四、自增長列
特點:
1、不用手動插入值,可以自動提供序列值,預設從1開始,步長為1
auto_increment_increment
如果要更改起始值:手動插入值
如果要更改步長:更改系統變數
set auto_increment_increment=值;
2、一個表至多有一個自增長列
3、自增長列只能支援數值型
4、自增長列必須為一個key

一、建立表時設定自增長列
create table 表(
欄位名 欄位型別 約束 auto_increment
)
二、修改表時設定自增長列
alter table 表 modify column 欄位名 欄位型別 約束 auto_increment
三、刪除自增長列
alter table 表 modify column 欄位名 欄位型別 約束