create table t1(
idint,
name varchar(16)
);
insert into t1(id) values(1);
insert into t1(name) values('qian');
insert into t1(name,id) values('kevin', 2);
ps:所有字段类型不加约束条件的情况下默认都可以为空
create table t2(
idint,
name varchar(16) not null
);
insert into t2(id) values(1);
insert into t2(name) values('qian');
insert into t2 values(1,'');
insert into t2 values(2,null);
默认值
create table t3(
idint default 666,
name varchar(16) default '匿名'
);
insert into t3(id) values(1);
insert into t3(name) values('qian');
insert into t3 values(2,'kevin');
唯一值
'''单列唯一'''
create table t4(
idint unique,
name varchar(32) unique
);
insert into t4 values(1,'qian'),(2,'qian');
'''联合唯一'''
create table t5(
idint,
ip varchar(32),
port int,
unique(ip,port)
);
insert into t5 values(1,'127.0.0.1',8080),
(2,'127.0.0.1',8081),(3,'127.0.0.2',8080);
insert into t5 values(4,'127.0.0.1',8080);
主键
1.单从约束层面上而言主键相当于not null + unique(非空且唯一)
create table t6(
idint primary key,
name varchar(32)
);
insert into t6(name) values('qian');
insert into t6 values(1,'kevin');
insert into t6 values(1,'jerry');
2.InnoDB存储引擎规定了所有的表都必须有且只有一个主键(主键是组织数据的重要条件并且主键可以加快数据的查询速度)
1.当表中没有主键也没有其他非空且唯一的字段的情况下
InnoDB会采用一个隐藏的字段作为表的主键
隐藏意味着无法使用 基于该表的数据查询只能一行行查找 速度很慢
2.当表中没有主键但是有其他非空且唯一的字段 那么会从上往下将第一个该字段自动升级为主键
create table t7(
idint,
age intnot null unique,
phone bigint not null unique,
birth intnot null unique,
height intnot null unique
);
"""
我们在创建表的时候应该有一个字段用来标识数据的唯一性 并且该字段通常情况下就是'id'(编号)字段
id nid sid pid gid uid
create table userinfo(
uid int primary key,
);
"""
我们需要一张员工表
id name age dep_name dep_desc
1.表语义不明确(到底是员工还是部门) 无所谓
2.存取数据过于冗余(浪费存储空间) 无所谓
3.数据的拓展性极差 不能忽略
将上述表一分为二
id name age
id dep_name dep_desc
上述的三个问题全部解决 但是员工跟部门之间没有了关系
外键字段:用于标识数据与数据之间关系的字段
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性