3月31号总结
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,'张三','1999-11-11',8800,5000); -- 演示主键约束:非空且唯一 INSERT INTO emp(id,ename,joindate,salary,bonus) values(null,'张三','1999-11-11',8800,5000); INSERT INTO emp(id,ename,joindate,salary,bonus) values(1,'张三','1999-11-11',8800,5000); INSERT INTO emp(id,ename,joindate,salary,bonus) values(2,'李四','1999-11-11',8800,5000); -- 演示非空约束 INSERT INTO emp(id,ename,joindate,salary,bonus) values(3,null,'1999-11-11',8800,5000); -- 演示唯一约束 INSERT INTO emp(id,ename,joindate,salary,bonus) values(3,'李四','1999-11-11',8800,5000); -- 演示默认约束 INSERT INTO emp(id,ename,joindate,salary) values(3,'王五','1999-11-11',8800); INSERT INTO emp(id,ename,joindate,salary,bonus) values(4,'赵六','1999-11-11',8800,null); -- 演示自动增长: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); SELECT * from emp;
/* 外键约束: * 外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性 -- 创建表时添加外键约束 CREATE TABLE 表名( 列名 数据类型, … [CONSTRAINT] [外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名) ); -- 建完表后添加外键约束 ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称); -- 删除约束 ALTER TABLE 表名 DROP FOREIGN KEY 外键名称; */ -- 删除表 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); -- ------------------ select * from emp; -- 删除外键 alter table emp drop FOREIGN key fk_emp_dept; -- 建完表后,添加外键 alter table emp add CONSTRAINT fk_emp_dept FOREIGN key(dep_id) REFERENCES dept(id);
/* 多对多: * 如:订单 和 商品 * 一个商品对应多个订单,一个订单包含多个商品 实现方式:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键 */ -- 删除表 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);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人