假如我建立了表 A 和 表 B 如下:     CREATE TABLE A (
         id Long NOT NULL;
         ...
     );
 
     CREATE TABLE B (
         ……
         CONSTRAINT B_A foreign key(id) references A(id)
     );     也就是说, 表 B 引用了 表A 的主键 id。 这里没有添加级联删除关系。     我想请问, 如何修改表 B,  使之与表 A 建立级联删除的关系 ? 
 
     即, 应有: CONSTRAINT B_A foreign key(id) references A(id) on delete casade 的效果? 
     请教各位大虾……在线等……

解决方案 »

  1.   

    CONSTRAINT B_A foreign key(id) references A(id) on delete casade 的效果?你自己已经写出来的啊。 MYSQL支持 on delete casade 
      

  2.   

    MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
      

  3.   


    问题是, 我最开始因为某种原因没有写 on delete casade (好像就是默认的 restrict)  现在想添上这几个单词, 试了一下方法都报错。  mysql> alter table messages drop foreign key user_id;
    ERROR 1025 (HY000): Error on rename of '.\messagepanel\messages' to '.\messagepa
    nel\#sql2-134-12e' (errno: 152)  mysql> alter table messages drop constraint message_user foreign key(user_id)
        -> references users(user_id);
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
    corresponds to your MySQL server version for the right syntax to use near 'const
    raint message_user foreign key(user_id)
    references users(user_id)' at line 1
    这里 messages 即对应上面的表B
      
      

  4.   

    原表如下:CREATE TABLE users (
      user_id int(11) NOT NULL auto_increment,
      user_name varchar(20) default NULL,
      password varchar(20) default NULL,
      PRIMARY KEY  (user_id)
    );
    CREATE TABLE messages (
      message_id int(11) NOT NULL auto_increment,
      title varchar(30) default NULL,
      content varchar(100) default NULL,
      date varchar(30) default NULL,
      user_id int(11) NOT NULL,
      PRIMARY KEY  (message_id),
      KEY user_id (user_id),
      CONSTRAINT message_user FOREIGN KEY (user_id) REFERENCES users(user_id));
      

  5.   

    mysql> show create table messages;
    +----------+--------------------------------------------------------------------
    | Table    | Create Table
    +----------+--------------------------------------------------------------------
    | messages | CREATE TABLE `messages` (
      `message_id` int(11) NOT NULL AUTO_INCREMENT,
      `title` varchar(30) DEFAULT NULL,
      `content` varchar(100) DEFAULT NULL,
      `date` varchar(30) DEFAULT NULL,
      `user_id` int(11) NOT NULL,
      PRIMARY KEY (`message_id`),
      KEY `user_id` (`user_id`),
      CONSTRAINT `message_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id
    `)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
    +----------+--------------------------------------------------------------------
    1 row in set (0.00 sec)mysql> alter TABLE `messages` DROP FOREIGN KEY  message_user;
    Query OK, 0 rows affected (0.06 sec)
    Records: 0  Duplicates: 0  Warnings: 0mysql> show create table messages;
    +----------+--------------------------------------------------------------------
    | Table    | Create Table
    +----------+--------------------------------------------------------------------
    | messages | CREATE TABLE `messages` (
      `message_id` int(11) NOT NULL AUTO_INCREMENT,
      `title` varchar(30) DEFAULT NULL,
      `content` varchar(100) DEFAULT NULL,
      `date` varchar(30) DEFAULT NULL,
      `user_id` int(11) NOT NULL,
      PRIMARY KEY (`message_id`),
      KEY `user_id` (`user_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
    +----------+--------------------------------------------------------------------
    1 row in set (0.00 sec)mysql>
      

  6.   

    7楼 说的正解。 不过下面的又怎么做呢? 我执行了这步操作,然后, 又删除了 user_id 列, 突然发现, 表中的数据已经没有意义了, 只能重建表了。
      

  7.   

    找到解决方法了:alter table messages drop foreign key message_user;alter table messages add foreign key(user_id) references users(user_id) 
    on delete cascade;你说哪里有问题? cascade 写错了! 写成了 casade ! 这几天 , 已经有三次因为 少写了一个字母而忙活老半天!不知道该怎么说好! 另外两次是 JS 里面犯的错误。