多表设计外键约束
定义外键约束
foreign key
foreign key(ordersid) references orders(id)
多表设计——任何一个软件系统都是又多个数据表组成。
外键通常引用另一个表的主键。
为employee表添加一个外键约束
alter table employee add foreign key(dept_id) references dept(id);
添加一个外键约束,就不能随便取值了,取值是引用表存在主键值,不能随便删除数据了
sql的回顾
创建数据库:create database 数据库名称 ;
如果加字符集的话那就是 create database 数据库名称 character set 字符集;
如果没有指定字符集的话,就默认使用服务器的默认字符集。
服务器的默认字符集 mysql安装目录/my.ini
修改数据库(修改数据库的字符集) 数据库的字符集是存放在mysql安装目录/data/数据库文件夹/db.opt
alter database 数据库名字 character set 字符集;
collate 校对方式—–用于数据库的排序,每一个字符集都存在一种默认的校对方式。可以不用修改
删除数据库 drop database 数据库名称;
切换数据库
设置当前使用的数据库
use 数据库名称;
select database();查看当前使用数据库
数据表操作的相关操作—table 表结构
创建数据表 create table 表名(列名 类型(长度) 约束 …);—创建表之前必须先指定数据库。
查看当前有哪些数据表 show tables;
查看数据表结构 desc table;
修改表结构
修改一个列的类型和长度
alter table 表名 modify 列名 类型(长度) 约束;
添加一个新的列:alter table 表名 add;
修改列的名称:alter table 表名 change 旧列名 新列名 类型(长度) 约束;
删除列:alter table 表名 drop 列名;
修改表名: rename table 旧表名 to 新表名;
修改表的字符集
在创建table的时候 character set 指定的字符集,如果没有指定字符集就采用数据库默认中的字符集。
删除表 ;drop table 表名;
数据记录的curd
insert update delete select
数据的插入: insert into 表名(列,…)values(对应列的取值,顺序 ,个数);
在开发中经常省略列名,值按照表结构 设置值。
数据记录的查看
select * from 表名;
数据记录的修改
update 表名 set 列名=值,列=值 where 条件语句;
数据记录的删除 delete from 表名 where 语句
truncate 与delete 区别
truncate删除表,重新创建,delete from 逐行删除
性能是truncat优于delete,delete被事物控制,删除后可以回滚取消删除,trencate是不可恢复的。
select语句
S F W G H O
select from where …. group by…..having…. order by….; 顺序是固定的
1.from 指定查询数据表
2.where 前置过滤条件 —将表数据过滤掉一部分
3.group by 对 where 过滤后的数据进行分组
4.having 对分组后结果添加条件过滤
5.select 指定检索哪些字段
6.order by 对检索结果排序
select * from 表名 where 条件语句 order by 列名 asc| desc….;多列排序
默认是升序
数据库的备份
数据库完整性约束—–保证数据表中记录的完整性
主键约束 primary key:用来指定数据表数据记录的唯一标识
unique 唯一约束,取值唯一
not null。非空
外键约束 多表
foreign key :两个数据表存在关联时,添加外键约束,外键约束引用另一张表主键。
条件约束 check:mysql 不支持 oracle 支持 check age <100 向数据表存入age值,必须小于100
数据库完整性有五类
多表数据
数据表和数据表中的关系三种;实体之间的关系 多对多 ,一对多,一对一
先看多对多的关系
建表原则
多对多的关系,必须引入第三张数据表,同时引入另外两张数据表的主键作为外键
一对多的建表原则
老师与课程的关系
一个老师可以教授多门课程,一门课程只能有一个老师进行教授。
建表原则,在多的一方,添加一方的主键作为外键。
1对1的关系。
班级与班长的关系。
建表原则:一对一的关系,可以在任何一方添加另一方的主键作为外键
程序需求分析
第一步:抽取需求中文词——实体
教师 课程 学生 成绩(学生修课才能产生)
不能独立存在的名词,不能设计为实体。
第二部,根据需求分析抽象概念具有哪些属性
教授 编号 姓名
课程 编号 名称
学生 学好 姓名 年龄 城市
第三部 根据需求设计关系
创建数据表
1.教师表 编号 姓名
2.课程表 编号 名称
3.学生表 学号 姓名 城市 年龄
教师与课程之间存在一对多的关系——在多方添加一方的主键作为外键
课程表 编号 名称 教师编号
学生和课程之间存在多对多的关系——-引入第三张表,引入两个实体表主键作为外键
学生选课表 学生学号 课程编号 成绩
该表 的一条记录 表示选了一门课