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的字段加
相关文章
相关标签/搜索