今天是刘小爱自学Java的第63天。
感谢你的观看,谢谢你。
其中对于drop+database+数据库名这个命令记忆尤深,也听教程里的老师再三嘱咐用这个命令要切记谨慎处理,否则是要负刑事责任的。
毕竟互联网公司,最重要的也就是数据了。
今年年初的时候微盟就发生过程序员删库跑路事件,所以也一直铭记在心。
结果今天告诉我数据库是可以备份和恢复的?
也就是说删除了还是可以恢复的呀,既然如此那还怕什么删库跑路……
①数据库备份
将数据库student备份到test文件夹下student.sql文件里面。
其中注意:test文件夹要存在,不然会报错。
语法:mysqldump -u 用户名 -p 数据库名 > 磁盘SQL文件路径
dump,转出、转储的意思,mysqldump也就可以理解成数据库备份。
由于mysqldump命令不是sql命令,需要在DOS窗口下使用。
我晕,昨天才刚说用了可视化工具Navicat,再也不用在DOS窗口下输入命令行了,结果又啪啪打自己的脸。
②数据库恢复方案一
这个很简单,就是将备份中的>改成<就好了,只是箭头的方向不同,也好理解。
语法:mysqldump -u 用户名 -p 数据库名 < 磁盘SQL文件路径
将备份的文件导入到我自己的数据库里面,同样的道理,该命令也是需要在DOS窗口下使用。
③数据库恢复方案二
该方案是SQL语句,是在数据库中操作,命令如下:
source+磁盘SQL文件路径
source,根源的意思。
表与表之间一共有三种关系,如下图:
①1对多
一个部门有多个成员,一个成员只属于一个部门,所以是1对多。
②多对多
一个程序员会开发多个项目,一个项目会被多个程序员开发,所以是多对多。
这种情况据说在外包公司中很常见。
③1对1
一个丈夫只能有一个妻子,一个妻子只能有一个丈夫,所以是1对1。
其中又以一对多和多对多最常见。
①部门表
一共有三个部门,每个部门有自己对应的id。
那如何将这两张表联系起来?
如果是在部门表加入成员表的id,那一行需要添加多个数据,显然不行。
②成员表
一共有七个成员。
那如何将这两张表联系起来?
每个成员后面添加一个属性,也就是自己对应的部门id,这样就一目了然。
那么现在问题来了:
这只是在成员表中做了一个声明,实际上这两张表并没有关联起来。
具体什么意思呢?
简单地理解就是:假如将部门表中的某个部门是删除的,但是成员表中的数据还有这个部门。
想要解决这个问题,就要引用外键约束这个概念,将这两张表真真正正地关联起来。
如何添加外键约束?
①建表后添加外键约束
foreign key即为外键的意思。
references,参考的意思,这里可以理解成关联。
也就是说把成员表中的dept_id作为外键,同时与部门表中的id相关联。
这样的话,你想删除部门表中的某个部门,得保证成员表中没有该部门的成员。
②建表时添加外键约束
一般来说,会在建表的时候就添加外键,格式是一样的。
其中:
也就是说想要删除主表中的数据,必须保证从表中和其相关的数据不存在。
其中一对一表设计和一对多是很相似的,就是任意一张表将另外一张表的id作为外键就可以了。
操作起来很简单,并且一般应用以一对多和多对多为主,在此就不再赘述了。
程序员表和项目表便是多对多的关系。
写sql语句创建表和添加数据,也算是对昨天学的知识点做一个复习。
①创建程序员表
对表本身的操作,所以有table这个单词。
create table coder(表字段说明)。
其中里面表字段之间使用逗号隔开的,最后一个字段又没有逗号。
我用的分号然后一直报错,弄了半天才发现这个问题,感觉要被自己蠢疯了。
②创建项目表
格式同上。
③给程序员表添加数据
insert into+表名+values+(每列对应的值)。
这是将列名省略了的写法,列名省略了之后在赋值时,每列都得赋值。
④给项目表添加数据
格式同上。
那么在多对多的表中是怎么将两张表关联起来的?
创建一个中间表,将这两个表关联起来。
这样的话,这两张表也就被关联起来了。
谢谢你的观看。
如果可以的话,麻烦帮忙点个赞,谢谢你。