在另一个表中使用自动递增的唯一ID主键作为外键

时间:2016-01-05 14:43:21

标签: mysql database

我有一张表primary_details,其中包含以下字段

uid --->主键和自动递增&独特的 name
age

我有另一张表cust_info,其中包含以下字段

uid ---> primary_details表格中的主键外键&不是唯一的 score
comments

现在的问题是,当我在primary_details表中插入一行时,它会自动在uid列中插入值,并在所有后续新行上自动递增,这是完美的。但是现在我希望uid表中的cust_info具有与uid表中相同的primary_details值,当我在primary_details中写一行时表

例如:

如果我插入以下行,则在primary_details表中

uid    name   age   
1      Mark   25

现在如果我在上面的一个表中插入一个记录,它也应该得到uid 1

我正在使用Java来编写表格。在java中我可以轻松生成uid并将其插入表中但我想在MySQL中使用唯一ID和自动增量功能

1 个答案:

答案 0 :(得分:2)

  1. 在父表cust_info中插入行。

  2. 然后,使用您想要的方法检索生成的uid:How to get the insert ID in JDBC?

  3. 使用以前生成的uid在子表import org.codehaus.groovy.grails.commons.DefaultGrailsDomainClass import org.codehaus.groovy.grails.commons.DomainClassArtefactHandler import org.codehaus.groovy.grails.orm.hibernate.persister.entity.GroovyAwareSingleTableEntityPersister as GASTEP import org.hibernate.SessionFactory //Include script dependencies required for task dependencies includeTargets << grailsScript("Bootstrap") target(grailsDomianMappings: "List down field details for all grails domain classes") { //Task dependencies required for initialization of app. eg: initialization of sessionFactory bean depends(compile, bootstrap) System.out.println("Running script...") //Fetch session factory from application context SessionFactory sessionFactory = appCtx.getBean("sessionFactory") //Fetch all domain classes def domains = grailsApp.getArtefacts(DomainClassArtefactHandler.TYPE) GASTEP persister List<String> propertyMappings = [] Map<String, List<String>> mappings = [:] //Iterate over domain classes for (DefaultGrailsDomainClass domainClass in domains) { //Get class meta data persister = sessionFactory.getClassMetadata(domainClass.clazz) as GASTEP propertyMappings = [] //fetch table name mapping String mappedTable = persister.tableName //fetch all properties for domain String[] propertyNames = persister.propertyNames propertyNames += persister.identifierPropertyName //fetch column name mappings for properties propertyNames.each { propertyMappings += persister.getPropertyColumnNames(it).first() } mappings.put(mappedTable, propertyMappings) } //Print data mappings.each { String table, List<String> properties -> properties.each { String property -> System.out.println("${table}.${property}") } System.out.println("++++++++++++++++++++++++++++++++++++++++++++++") } } setDefaultTarget(grailsDomianMappings) 中插入。

  4. 在旁注中,您的子表应该有自己的uid和外键的不同字段。

    示例:

    <强>客户
    uid ---&gt;主键自动递增
    命名
    年龄

    <强>为CustomerDetails
    uid ---&gt;主键自动递增
    CUSTOMER_ID ---&GT;客户表上的外键
    得分
    评论