資料庫之約束條件

2022-04-08 08:05:39 字數 2686 閱讀 5506

約束條件

```python

"""primary key (pk) 標識該字段為該錶的主鍵,可以唯一的標識記錄

foreign key (fk) 標識該字段為該錶的外來鍵

not null 標識該欄位不能為空

unique key (uk) 標識該字段的值是唯一的

auto_increment 標識該字段的值自動增長(整數型別,而且為主鍵)

default 為該字段設定預設值

unsigned 無符號

zerofill 使用0填充

"""```

#### not null+default

```mysql

create table user(

id int,

name char(16)

);insert into user values(1,null) # 可以修改

alter table user modify name char(16) not null;

insert into user(name,id) values(null,2); # 報錯 插入資料可以在表名後面指定插入資料對應的字段

create table student(

id int,

name char(16) not null,

gender enum('male','female','others') default 'male'

)insert into student(id,name) values(1,'wang') # 成功

```#### unique

```mysql

# 單列唯一

create table user1(

id int unique,

name char(16)

);insert into user1 values(1,'wang'),(1,'zhang') # 報錯

insert into user1 values(1,'wang'),(2,'zhang') # 成功

# 聯合唯一

create table server(

id int,

ip char(16),

port int,

unique(ip,port)

)insert into server values(1,'127.0.0.1',8080);

insert into server values(2,'127.0.0.1',8080); # 報錯

insert into server values(1,'127.0.0.1',8081);

```#### primary key+auto_increment

```mysql

# 單從約束角度來說primary key就等價於not null unique

create table t11(id int primary key);

desc t11;

insert into t11 values(1),(1); # 報錯

insert into t11 values(1),(2);

# 除了約束之外,它還是innodb引擎組織資料的依據,提公升查詢效率

"""強調:

1.一張表中必須有且只有乙個主鍵,如果你沒有設定主鍵,那麼會從上到下搜尋直到遇到乙個非空且唯一的字段自動將其設定為主鍵

"""create table t12(

id int,

name char(16),

age int not null unique,

addr char(16) not null unique

)engine=innodb;

desc t12;

"""2.如果表裡面沒有指定任何的可以設定為主鍵的字段,那麼innodb會採用自己預設的乙個隱藏字段作為主鍵,隱藏意味著你在查詢的時候無法根據這個主鍵字段加速查詢了

索引:類似於書的目錄,沒有主鍵就相當於一頁一頁翻著查

3.一張表中通常都應該有乙個id欄位,並且通常將改id欄位作成主鍵

"""# 聯合主鍵:多個字段聯合起來作為表的乙個主鍵,本質還是乙個主鍵

create table t18(

ip char(16),

port int,

primary key(ip,port)

);desc t18;

# 主鍵id作為資料的編號,每次最好能自動遞增

create table t13(

id int primary key auto_increment,

name char(16)

);insert into t13('wang'),('wang'),('wang'); # id欄位自動從1開始遞增

# 注意:auto_increment通常都是加在主鍵上,並且只能給設定為key的字段加

```#### 補充:

```mysql

delete from tb1;

強調:上面的這條命令確實可以將表裡的所有記錄都刪掉,但不會將id重置為0,

所以收該條命令根本不是用來清空表的,delete是用來刪除表中某一些符合條件的記錄

delete from tb1 where id > 10;

如果要清空表,使用truncate tb1;

作用:將整張表重置,id重新從0開始記錄

mySQL之約束條件

primary key pk 標識該字段為該錶的主鍵,可以唯一的標識記錄 foreign key fk 標識該字段為該錶的外來鍵 not null 標識該欄位不能為空 unique key uk 標識該字段的值是唯一的 auto increment 標識該字段的值自動增長 整數型別,而且為主鍵 de...

01 2資料庫約束條件

約束的分類 1 主鍵 pk primary key 2 唯一約束 uk unique key 3 外來鍵約束 fk foreign key 4 非空約束 nn not null 5 檢查約束 ck check 6 預設值約束 default ps 1 pk uk nn 唯一且非空 2 實現方法 co...

MySQL學習筆記之約束條件

約束條件 primary key 主鍵 not null 非空 auto increment 自增長 unique 值唯一 foreing key 外來鍵 default 預設值 1 主鍵 乙個表中主鍵只能有乙個 但是可以組合使用,primary可以省略 create table thinkgame...