首页 > 解决方案 > 键“P​​RIMARY”的重复条目“1”如何解决?

问题描述

我用 knex 做,前端用 vue js 做。一切正常,但帖子没有,当我在表单中输入一些内容时,密钥“PRIMARY”的重复条目“1”我该如何解决?

我用 knex 做,前端用 vue js 做。一切正常,但帖子没有,当我在表单中输入一些内容时,密钥“PRIMARY”的重复条目“1”我该如何解决?


exports.up = function(knex) {
  return knex.schema.createTable('series', function(table) {
    table.increments('id').unsigned().primary()
    table.string('text').notNullable()
    table.enum('rating', ['good', 'not bad', 'bad']).defaultTo('not bad')
    table.string('comment').notNullable()
  })
};

exports.down = function(knex) {
  return knex.schema.dropTableIfExists('series')
};

前端

template>
  <div class="Series">
    <h2>Table</h2> 
        <table id="tabelle" border="1">
            <!-- Header -->
            <tr>
                <th>text</th>
                <th>rating</th>
                <th>comment</th>
                <th>action</th>
            </tr>
            <!-- series List -->
            <tr v-for="series in series" :key="series.id">
                <td> {{series.text}}</td>
                <td>{{series.rating}}</td>
                <td>{{series.comment}}</td>
                <td><button @click="removeData(series.id)">Löschen</button></td>
            </tr>
        </table>

        <input type="text" name="text" v-model="series.text"> <br>
          <select name="rating" v-model="series.rating">
                <option>good</option>
                <option>not bad</option>
                <option>bad</option>
          </select><br>
          <input type="text" name="comment" v-model="series.comment"> <br>
          <button @click="postData" >Post</button>

  </div>
</template>

<script>
import axios from 'axios';

export default {
  name: 'Series',
  data() {
    return {
      series: {},
    }
  },
  methods: {
    getData(){
      axios.get('/api/series').then((response) =>{
        console.log(response.data);
        this.series = response.data;
       })
      .catch((error) => {
      console.log(error);
       });
    },
    postData(){
      axios.post('/api/serie/create', this.series)
      .then((result) => {
          console.warn(result)
      }).catch((error) => {
        console.log(error);
      });
    },
    removeData(id){
      axios.delete('/api/serie/delete/'+id).then(()=>{
        this.getData();
      })
    }
  },
  mounted() {
      this.getData()
  },

  
}
</script>

端点

app.post('/api/serie/create', (req,res)=> {
  console.log("create");
  console.log(req.body);
  let serie = req.body
  knex('series').insert(serie)
    .then(results => res.json(results))
    .catch(err => {
      console.error(err.sqlMessage)
      res.status(500)
      res.json(err.sqlMessage)
    }) 
})

在此处输入图像描述

标签: mysqlvue.jspostknex.js

解决方案


此错误告诉您每次想要在数据库中保存的内容时,主键都会重复,因为您的“主键列”不会增加。检查您的“主键列”是否自动递增。如果没有,或者修改为自动递增或手动递增。


推荐阅读