e/r关系模型
e/r的意思:实体关系 entity-realationship
实体和实体集的关系
关系的度,一般是二元关系,也有多元的
关系是(定义)连接两个或多个实体集的
关系集:一个表格,有两边实体集的名字但是没用其他属性
属性里下划线代表主键
映射基数?约束
一对一:两边都有箭头
一对多:和多对一一样
多对一:1.指向一的那边有箭头
多对多:没有箭头
Q:关系上面有个属性代表什么?
A: role,在marg上做了笔记
两个实体集上可以有好几个关系
键挺好懂的
参照完整性例如每个理事长的studio必须在总的studio里,不好理解的话,一个movie的studio肯定是一个,但是多个movie的studio可能是一样的,但是在studio里的studio_name只能是一个。
度的约束:限制实体的个数
弱实体集:不能单独存在的实体集
把er图转换为表格
实体集转化为表格属性是连接的属性
把关系转换为表格属性是连接的实体集
弱实体集是不能直接转化为表格的,因为他不能单独存在
转化关系为表格的时候,实体集的主键应该在表格中,关系的属性也应该在表格中
合并关系的为表格的时候,多对一的关系中,多的那个所有的属性都要当成表格的属性,一的那个只需要把主键弄进去就行了
怎么处理弱实体集呢?指的是把弱实体集转化为表格。弱实体集自己的属性都要有,还要包括他所依赖的强实体集的主键
Q:怎么样才能形成外键呢?
学习约束和触发器的ppt:
约束指的是数据元素之间的一些关系
触发器是当满足某个条件的时候执行一些操作
约束的种类:键,外键,基于值的约束,基于元组的约束,断言
Q: 基于元组的约束?
建立主键的操作,创建表格的操作
在某个属性后面加上primary key,要是有多个属性构成主键呢?
另写一行,用元组的形式把主键包含进去
Q:怎么用CONSTRAINT关键字建立有名称的主键和外键约束。
A:主键:
constraint+主键名+primary key+属性名 这里的属性名外面一定要加括号,不然是会报错的
外键呢?
constraint+外键名+foreign key(属性) references+主表名+(属性)
由此看来constraint就是起到一个命名的作用,[]代表的意思应该是可选的
关于如何建立外键的例子
但是这样只建立了外键,却没有建立主键,所以还需要修改表格以建立主键,但是这里我突然想到一个问题:弱实体集需要建立主键吗?怎么建立主键呢,只用加入到这个表格中的强实体集的主键肯定是不行的,因为弱实体集是多对一的关系,对于这个弱实体集所依赖的强实体集来说的话
ER图转为关系模式(超详细,超简单)_WKP9418的博客-CSDN博客_弱实体集转化为关系模式
这篇文章介绍了如何把er图转换为关系模式,写的还是不错的
对于这次实验来说,title这个弱实体集转换成关系表后的主键应该是所有的属性
所以还要把刚才建好的表格中的所有元素都设为主键
具体的操作应该是这样子的,(话说能不能把插入的图片去掉水印呢。。)
Q:日期这种的数据在创建表格的时候用什么类型?
A:用date数据类型,其储存yyyy-mm-dd格式的日期
删除表格的方法:drop table+表格的名字
创建好的表格在workbench里要重启才能看到,很不方便,所以可以用show tables这个命令来查看当前所有的表格
任务:导入数据到表格中:
删除表
创建表
前面是变量名,后面是变量类型,不要搞混
创建了表以后refresh
不刷新看不见创建的表,以为没创建呢
Refresh MySQL views? - Stack Overflow
里面提问里就写了右键刷新就行
从文件里导入数据 load data infile
thought:(题外话,学习的是方法,以后可能用不到这个知识,但是这种思维习惯已经在脑海里生根发芽了,养成阅读正规文档的习惯)
分成小任务来解决:
Q:怎么打开一个文件?
A:由于文件在本机,所以导入的时候写个绝对路径就行,local参数也要加上
从网上找一些用法搜好多文章都找不到想要的答案,这时候自己尝试就显得十分重要,只看文档我认为是很难理解一个函数是怎么用的,只有在例子中才能快速上手
在导入数据的时候遇到了不能导入的问题,error3948,google以后发现要把local_infile变量的值改为1才行,具体见如下网站mysql - ERROR: Loading local data is disabled - this must be enabled on both the client and server sides - Stack Overflow但是比着教程更改以后又发现了新的问题,error2068
mysql - Error code 2068: file requested rejected due to restrictions on access with root user - Stack Overflow这个网址似乎有点问题,自己再谷歌一下吧
用这条语句可以查阅一个table现在的状况
此处可以发现导入失败了,因为没有弄好分割符的事,所以我要清空表格然后重新导入数据,用这条语句可以清空表格的内容,还有一个delete的方法,插个眼以后可以研究
这样以后虽然能插入数据了,但是只是表的列和文本中的列数目格式等一样的情况下才行,那么不一样的情况怎么办呢?(这里先不研究,以写完作业为目的
插入的时候发现数据截断了,在lastname和firstname列开的字符串太小了,所以又要查查怎么修改已经建好的表
使用alter关键字和change,把last_name从char(15)改为char(30)
这里我要使用truncate table employees想清空表的时候就出错了,因为我这个employees的主键是title的外键,而truncate的原理是把表删了再建一次,上面说了还有一个delete的方法,凭借记忆
这样就全部删除了
突然感觉像再写实验报告,以后要写的精简一点,复习起来也方便
limit关键字,查询前10条语句
根据条件查询条目
查询指定日期之间的
查询具有特定前缀的
关于sql1ppt的笔记
查询最大值
把这一列的名字放入max中,as更改这一列的名字
count查人数
order by调整升序还是降序,默认升序
group by聚合
明天再做吧,回去休息了
一些知识学会的就行,博客只记录点重要的问题或者是大纲,方便以后复习,想完善成好的博客也是以后再说吧。
not exist语句要求子查询的结果为空,怎么找在全部部门工作过的员工?根据员工编号,在dept_emp中查找,
部门和部门员工自然连接,则