约束-外键约束
外键约束:foreign key 让表于表产生关系 从而保证数据的正确性
数据表的创建和数据添加 sql语句
-- 创建emp表
CREATE TABLE emp(
        id int PRIMARY KEY auto_increment,
        name VARCHAR(30),
        age int,
     -- 部门名称
        dep_name VARCHAR(30),
     -- 部门名称     
        dep_location VARCHAR(30)
);
INSERT INTO emp VALUES(null,"张三",20,"研发部","广州"),(null,"李四",20,"研发部","广州"),(null,"王五",20,"研发部","广州");
INSERT INTO emp VALUES(null,"老王",20,"销售部","深圳"),(null,"大王",22,"销售部","深圳"),(null,"小王",18,"销售部","深圳");
数据表

数据有冗余 可以对表进行拆分
SQL语句
-- 解决方案:分为2张表
-- 创建部门表(id,dep_name,dep_location)
-- 主表
CREATE TABLE department(
        id int PRIMARY KEY auto_increment,
        dep_name VARCHAR(20),
        dep_locationion VARCHAR(20)
);
-- 创建员工表(id,name,age,dep_id,)
CREATE TABLE employe(
        id int PRIMARY KEY auto_increment,
        name VARCHAR(20),
    age int(5),
        dep_id int(2)
);
-- 添加2个部门
INSERT INTO department VALUES(null,"研发部","广州"),(null,"销售部","深圳");
-- 添加员工 dep_id表示员工所在的部门
INSERT INTO employe VALUES(null,"张三",20,1),(null,"李四",20,1),(null,"王五",20,1);
INSERT INTO employe VALUES(null,"老王",20,2),(null,"大王",22,2),(null,"小王",18,2);
数据表


创建表时 声明外键
SQL语法
CREATE TABLE 表名(
    ....
        外键列 外键列类型
        CONSTRAINT 外键名称 FOREIGN KEY 外键列名称 REFERENCES 主表名称(主表列名称)
);
运行结果

测试

一旦我们删除这个数据 就会出现错误


错误:不能删除或更新父行:外键约束失败(' videoppractice ')。' employee ', CONSTRAINT 'depid_fk' FOREIGN KEY ('dep_id') REFERENCES, 'department' ('id'))
删除外键
SQL语句
ALTER TABLE 主键键表 DROP FOREIGN KEY 外键名;
运行结果

测试

 
成功删除
添加外键
SQL语句
ALTER TABLE 主键表名 ADD CONSTRAINT 外键名称 FOREIGN KEY 外键列名称 REFERENCES 主表名称(主表列名称)
运行结果

测试

错误:不能删除或更新父行:外键约束失败(videopractice”。' employee ', CONSTRAINT 'depid_fk' FOREIGN KEY ('dep_id') REFERENCES ' department (id'))
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号