问题解决 | 连接数据库成功后,数据无法写入

2 篇文章 0 订阅


前言

今年研一,参加了学校挑战杯,项目中需要完成一个登陆及注册页的制作,登陆和注册页代码参考了网络资源,遇到数据库连接完成,却不能把数据写入数据库的问题,研究了一下午最后终于解决。


一、项目配置

登陆注册页面在Adobe Dreamweaver上用html+css+js完成,数据库等环境用wampserver集成环境。

二、出现问题

网页同数据库连接成功,但用户注册、登录页面的数据不能正常写入数据库中。

三、问题解决

一开始以为是代码出现了问题,查了一下午的相关代码,发现符合。查阅其他资料时,发现有很多人提到关于数据库中关于主键设置自增的问题,查阅了如何设置主键自增后,设置自增,问题解决,自己真是一个大冤种。

四、相关概念

在问题解决之前,先了解一些相关的基本概念。

主键、外键

关系型数据库中的一条记录中有若干个属性,若其中某一个属性组能唯一标识一条记录,该属性组就可以成为一个主键。
例:
学生表(学号,姓名,性别,班级)
其中每一名学生的学号是唯一的,学号是一个主键。
课程表(课程编号,课程名,学分)
其中课程编号是唯一的,课程编号就是一个主键。
成绩表(学号,课程号,成绩)
成绩表中单一一个属性无法唯一识别一条记录,学号和课程号的组合才能唯一标识一条记录,所以学号和课程号的属性组是一个主键。
成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键。
定义主键和外键主要是为了维护关系数据库的完整性,总结一下:
1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份证号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都有可能重复,所以身份证号是主键。
2.外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那它就可以是A表的外键。

主键自增

InnoDB引擎的自增值,其实是保存在内存里,并且到了MySQL8.0版本之后,才有了自增值持久化的能力。也就是实现了如果发生重启后,表的自增值可以恢复为MySQL重启前的值。

在MySQL5.7及之前的版本,自增值保存在内存里,并没有持久化。每次重启后,第一次打开表的时候,都会去找自增值的最大值max(id),然后将max(id)+1作为这个表当前的自增值。

在MySQL8.0版本,将自增值的变更记录在redo log日志中,重启的时候依靠redo log日志恢复重启之前的值。

自增值修改机制

1.如果插入数据时id字段指定为0、null、或未指定值,那么就把这个表当前的AUTO_INCREMENT值填到自增字段;

2.如果插入数据时id字段制定了具体的值,就直接使用语句里指定的值

自增值新增机制

1.如果准备插入的值>=当前自增值,新的自增值就是准备插入的值+1;

2.否则,自增值不变。

为什么自增主键不连续

  • 在MySQL 5.7及之前的版本,自增值保存在内存里,并没有持久化

  • 事务回滚(自增值不能回滚,因为并发插入数据时,回滚自增ID可能会造成主键冲突)

  • 唯一键冲突(由于表的自增值已变,但是因为主键发生冲突没插进去,下一次插入主键值=现在变化了的自增值+1,所以不连续)

五、方法介绍

数据库截图
在添加字段的时候,设置id为主键,并且在上图方框示意处打勾,即主键自增。选择后,网页数据可正常写入数据库。


总结

以上就是今天要讲的内容,本文简单介绍了主键的相关知识,并且讲述了如何设置主键自增。

参考文献

1.数据库主键的含义
https://www.cnblogs.com/rainbow-1/p/13907272.html
2.主键自增理解
hhttps://blog.csdn.net/ag1412/article/details/122746348

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值