【MySQL】表的約束以及增刪改操作!!
阿新 • • 發佈:2019-01-09
表的約束
- 空屬性
null
:如果不設定,預設為null
not null
:設定當前欄位不為空,再插入資料的時候當前欄位不可以為空
create table tt1(
id int not null,
name varchar(20)
);
- 預設值(
default
)
create table tt2(
id int not null,
name varchar(20),
sex char(1) default '男'
);
注:
- 如果在插入資料的時候沒有定義設定了預設資料的欄位,那麼自動填充預設的值,但是set
和enum
不能設定預設。
- 通常配合not null
- 列描述
使用comment,沒有實際含義,用來描述欄位
create table tt3(
id int not null comment "使用者id,不能為空",
name varchar(20) comment "使用者姓名,可以為空"
);
如果需要檢視comment描述,可以使用show create table tt3;
zerofill
create table tt3(
id int not null zerofill comment "使用者id,不能為空",
name varchar(20) comment "使用者姓名,可以為空"
);
主鍵
- 使用
primary key
,主鍵用來約束該欄位裡面的資料、不能重複、不能為空、主鍵所在的列型別為整形。 - 一個表裡面最多有一個主鍵
create table tt4(
id int primary key comment "描述學號,次列為主鍵",
name varchar(20) not null
);
注:在建立主鍵的時候可以在建立的時候使用primary key
來建立,也可以在所有欄位之後使用primary key(主鍵段列表)
,當主鍵段只有一個時候為單主鍵,當含有多個的時候為複合主鍵。- 如果在建立表後需要加入主鍵,可以使用:
alter table 表名 add primary key(主鍵列表);
- 刪除主鍵:
alter table 表名 drop primary key;
- 使用
自增長
- 使用
auto_increment
:當對應欄位沒有沒有給值得時候系統自動觸發(預設1開始),通常搭配主鍵使用,作為邏輯主鍵。 - 特點:
- 任何一個欄位想要設定成自增長,該欄位本身必須是索引
- 自增長欄位必須是整數、
- 一張表最多有一個自增長
-
create table tt5(
id int auto_increment primary key,
name varchar(20) comment "描述姓名"
);
- 使用
- 唯一鍵
- 使用
unique
:在需要使資料不能重複的時候使用唯一鍵,可以避免只有一個主鍵的問題。
create table tt6(
id int unique comment "描述學號,不能夠重複",
name varchar(20)
);
注:唯一鍵可以為空,當欄位為空的時候null
不作比較。
- 使用
表的增刪改
- 增加
insert into table_name[(column[,column...])] values (value [,value...]);
- eg:
- `create table tt6(
id int unique comment “描述學號,不能夠重複”,
name varchar(20)
注:
- 當插入的資料和主鍵的資料衝突的時候可以使用duplicate key
來進行修改。
- insert into tt7 values(2,"xiaoming") on duplicate key update id=4;
替換
replace into 表名(包含欄位) values(值列表);
修改
update tbl_name set col_name1=expr1, [, col_name2=expr2 ...] [where conditon]
- eg:
update tt7 set id=5 where id=2;
-
注:如果沒有使用where
來過濾那麼將會將全部的值進行修改。如果需要制定修改的資料個數,可以使用limit num
,num
為需要修改的個數。
刪除
delete from tbl_name [where condition]
- 刪除一個表的時候只刪除表的資料不改變表的結構
- eg:
delete from tt7 where id=2;
注:如果需要刪除整個表,可以使用
truncate
,truncate
是將真個檔案直接截斷為0。
使用效果和delete
,但是刪除的速度要比delete
快。