约束是作用于表中字段上的规则,用于限制存储在表中的数据。保证数据库中数据的正确、有效性和完整性。
分类:

现在我们有一个建表需求,里面包含一些约束。

- create table user(
- id int primary key auto_increment comment '主键',
- name varchar(10) not null unique comment '姓名',
- age int check ( age >0 && age <= 110 ) comment '年龄',
- status char(1) default '1' comment '状态',
- gender char(1) comment '性别'
- ) comment '用户表';
注意,check语句只有MySQL18以上的版本才有。新的数据表建立完成,我们现在该输入数据了。这里要说的是我们之后还是使用命令语句操作数据库而不是借用像Navicat等工具操作数据库。因为我们之后要学习Java web的开发,里面的JDBC需要用java语言操作数据库,这时你就要输入sql命令了。
- --还记得怎么插入数据吗
- insert into user(name,age,status,gender) values ('Tom1',19,'1','男'),('Tom2',25,'0','男');
这时查看我的表,数据已经导入了,这时我们看id的变化,我们并没有输入id相关数据,但是它自动给我们按照输入顺序排好序了,而且从1开始,这就是我们设置的约束语句语句起作用了。
这里我们口头测试一下其他的约束语句:
1,如果输入相同的数据,会报错。
2,输入不符合规定年龄的数据会报错。
3,虽然数据没有成功写入,但当你写进去下一个合规数据时,id会变成4,这是因为输入失败但系统依然申请了一个id值。
外键让两个表的数据建立联系,从而保证数据的一致性和完整性。
假如员工表的其中一列数据是部门id,可知一列数据只存储的id;另一张部门表有两列数据是id,和部门名称,那么我们逻辑上把部门id和id联系起来,并把部门的表称为父表,而员工表为子表。
建立上述两个表并插入数据:
- create table dept(
- id int auto_increment comment 'ID ' primary key,
- name varchar(50) not null comment '部门名称'
- )comment '部门表';
-
- INSERT IMTO dept (id,name) VALOES (1,'研发部'),(2,'市场部'),(3,'财务部'),(4,'销售部'),(5,'总经办');
- create table emp (
- id int auto_increment comment 'ID' primary key,
- name varchar(50) not null comment '姓名',
- age int comment '年龄',
- job varchar(20) comment '职位',
- salary int comment '薪资',
- entrydate date comment '入职时间',
- managerid int comment '直属领导ID',
- dept_id int comment '部门ID'
- )comment '员工表';
-
- INSERT INTO emp (id,name,age,job,salary,entrydate,managerid,dept_id) VALUES
- (1,'金庸',66,'总裁',20000,'2000-01-01',null,5),(2,'张无忌',20,'项目经理',12500,
- '2005-12-05',1,1);
-
废了老大劲还是建完表了。现在我们设置外键,将这两个表建立数据连接。
- --语法:
- ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名);
-
我们怎么确定两个表的数据已经相连了?我们试试删除附表里第一行数据,结果报错了:

这就表面连接成功了。