JavaWeb 3 约束 非空约束 唯一约束 主键约束 默认约束 外键约束 数据库设计 夺标查询 事务

约束

 

 

 非空约束

 

 

 

 

 

 

 

 

 外键约束

 

 

 

drop table if exists emp;
drop table if exists dept;

-- 部门表
create table dept(
    id int primary key auto_increment,
    dep_name varchar(20),
    addr varchar(20)
);
-- 员工表
create table emp(
    id int primary key auto_increment,
    name varchar(20),
    age int,
    dep_id int,

    -- 添加外键  dep_id, 关联 dept 表的id主键
    constraint fk_emp_dept foreign key(dep_id) references dept(id)
);

-- 添加 2 个部门
insert into dept(dep_name,addr) values
('研发部','广州'),('销售部', '深圳');

-- 添加员工,dep_id 表示员工所在的部门
INSERT INTO emp (NAME, age, dep_id) VALUES 
('张三', 20, 1),
('李四', 20, 1),
('王五', 20, 1),
('赵六', 20, 2),
('孙七', 22, 2),
('周八', 18, 2);



-- 删除外键
alter table emp drop FOREIGN key fk_emp_dept;



-- 建完表后,添加外键

alter table emp add CONSTRAINT fk_emp_dept FOREIGN key(dep_id) REFERENCES dept(id);
View Code

 

 案例

 

--先删除以及有的表
drop table if exists emp;


drop table if exists emp;


create table emp(
    id int primary key auto_increment,-- 员工id,主键且自增长
    ename varchar(50) not null unique,-- 员工姓名,非空并且唯一
    joindate date not null,-- 入职日期 非空
    salary double(7,2) not null,-- 工资,非空
    bonus double(7,2) default 0 -- 奖金,如果没有奖金默认为0
);


-- 添加数据
insert into emp(id,ename,joindate,salary,bonus) values(1,'颤三','1998-09-09',30000,3000);
-- 演示主键约束: 非空并且唯一
insert into emp(id,ename,joindate,salary,bonus) values(null,'颤三','1998-09-09',30000,3000);
insert into emp(id,ename,joindate,salary,bonus) values(1,'颤三','1998-09-09',30000,3000);
insert into emp(id,ename,joindate,salary,bonus) values(2,'颤三','1998-09-09',30000,3000);

-- 非空 
insert into emp(id,ename,joindate,salary,bonus) values(null,'颤三','1998-09-09',30000,3000);

-- 唯一
insert into emp(id,ename,joindate,salary,bonus) values(1,'颤三','1998-09-09',30000,3000);

-- 演示默认约束
insert into emp(id,ename,joindate,salary,bonus) values(4,'颤三999','1998-09-09',30000,null);

INSERT INTO emp(id,ename,joindate,salary,bonus) values(5,'赵六','1999-11-11',8800,2000);

-- 演示自动增长: auto_increment: 当列是数字类型,并且唯一约束
insert into emp(ename,joindate,salary,bonus) values('赵六','1999-11-11',8800,null);
insert into emp(id,ename,joindate,salary,bonus) values(null,'赵六2','1999-11-11',8800,null);
insert into emp(id,ename,joindate,salary,bonus) values(null,'赵六3','1999-11-11',8800,null);
View Code

 数据库设计

 

 

 

表关系

 

 

 

 

 

 多对多

/*
    多对多:
        * 如:订单 和 商品
        * 一个商品对应多个订单,一个订单包含多个商品

    实现方式:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键


    
*/
-- 删除表
DROP TABLE IF EXISTS tb_order_goods;
DROP TABLE IF EXISTS tb_order;
DROP TABLE IF EXISTS tb_goods;


-- 订单表
CREATE TABLE tb_order(
    id int primary key auto_increment,
    payment double(10,2),
    payment_type TINYINT,
    status TINYINT
);

-- 商品表
CREATE TABLE tb_goods(
    id int primary key auto_increment,
    title varchar(100),
    price double(10,2)
);

-- 订单商品中间表
CREATE TABLE tb_order_goods(
    id int primary key auto_increment,
    order_id int,
    goods_id int,
    count int
);

-- 建完表后,添加外键
alter table tb_order_goods add CONSTRAINT fk_order_id FOREIGN key(order_id) REFERENCES tb_order(id);
alter table tb_order_goods add CONSTRAINT fk_goods_id FOREIGN key(goods_id) REFERENCES tb_goods(id);
View Code

 

 

 

posted @ 2022-07-06 21:36  还有什么值得拥有  阅读(24)  评论(0编辑  收藏  举报