Golang中国
type User struct {
    Id       int        `orm:"pk;auto"`
    Name     string     `orm:"null"`
    Profiles []*Profile `orm:"reverse(many)"`
}

type Profile struct {
    Id    int     `orm:"pk;auto"`
    Name  string  ``
    Users []*User `orm:"rel(m2m)"`
}

使用orm设置表关联,自动生成的表没有生成外键
运行结果如下:
create table user

-- --------------------------------------------------
--  Table Structure for `DBDemo/model.User`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `user` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `name` varchar(255)
) ENGINE=InnoDB;

create table profile

-- --------------------------------------------------
--  Table Structure for `DBDemo/model.Profile`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `profile` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `name` varchar(255) NOT NULL DEFAULT '' 
) ENGINE=InnoDB;

create table profile_users

-- --------------------------------------------------
--  Table Structure for `DBDemo/model.ProfileUsers`
-- --------------------------------------------------
CREATE TABLE IF NOT EXISTS `profile_users` (
    `id` bigint AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `profile_id` integer NOT NULL,
    `user_id` integer NOT NULL
) ENGINE=InnoDB;

对于多对多关系,生成了中间表,但生成的三张表没有任何关联。另外,在设置表关系为一对多时,也是同样的情况,生成了相应的字段,但没有添加外键,生成的两张表也是没有任何关联。
刚接触golang,对数据库的理解也不是很深入,请多多指教
(数据库用的mysql 5.7.11)

1 回复
zspu
#1 zspu • 2017-06-08 14:58

你估计使用了myisam引擎,不支持外键约束

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。