mysql-06mysql表的完整性約束

約束條件成列:

  1. PRIMARY KEY (PK) 標識該字段爲該表的主鍵,能夠惟一的標識記錄
  2. FOREIGN KEY (FK) 標識該字段爲該表的外鍵
  3. NOT NULL 標識該字段不能爲空
  4. UNIQUE KEY (UK) 標識該字段的值是惟一的
  5. AUTO_INCREMENT 標識該字段的值自動增加(整數類型,並且爲主鍵)
  6. DEFAULT 爲該字段設置默認值
  7. UNSIGNED 無符號
  8. ZEROFILL 使用0填充

not null+default

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,'jason')  # 成功

unique(單列惟一和聯合惟一)

# 單列惟一
create table user1(
    id int unique, 
  name char(16)
);
insert into user1 values(1,'jason'),(1,'egon')  # 報錯
insert into user1 values(1,'jason'),(2,'egon')  # 成功

# 聯合惟一
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

ps:primary key至關於not null uniquecode

# 單從約束角度來講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('jason'),('jason'),('jason');  # id字段自動從1開始遞增
# 注意:auto_increment一般都是加在主鍵上,而且只能給設置爲key的字段加
相關文章
相關標籤/搜索