mysql能不能为已建好的表加外键??若该表有数据呢??其他数据库可以吗??
答案:2 悬赏:0 手机版
解决时间 2021-02-26 21:32
- 提问者网友:两耳就是菩提
- 2021-02-26 02:40
mysql能不能为已建好的表加外键??若该表有数据呢??其他数据库可以吗??
最佳答案
- 五星知识达人网友:荒野風
- 2021-02-26 03:14
用mysqldump和source
可以使用这种方式导出数据:
mysqldump -urott -P5678 --default-character-set=gb2312 -p -h127.0.0.1 Test test1 test1.sql
也可以这样:
mysql -uroot -P5678 --default-character-set=gb2312 -p -h127.0.0.1 -e "select * from Test.test1" test1.sql (不过这样要手动建表,当然可以 show create test1得到建表语句)
导入:
可以这样(在mysql命令行下)
mysqluse Test;
mysqlsource test1.sql;
如果用select的方式得到的文件,应该这样导入:
mysqlload data infile "test.sql" into table Test.test1;
导入时可以"show processlist\G"查看导入状态。
有时候会发生错误:ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`Test/test1`, CONSTRAINT `xxx` FOREIGN KEY (`AA`) REFERENCES `BB` (`AA`))
这时需要对外键约束进行删除,比如:
alter table cwealinfo drop foreign key `xxx`;
也可以:set foreign_key_checks = 0;
导出和导入时需要注意数据库的版本,比如从4导到5,最好用4的mysqldump,否则可能会失败。另外还需要注意字符集问题,如果两个库的字符集不同,可能会导致问题,因此导入前最好用“show variables like '%char%'”查看下是否需要调整字符集设置
可以使用这种方式导出数据:
mysqldump -urott -P5678 --default-character-set=gb2312 -p -h127.0.0.1 Test test1 test1.sql
也可以这样:
mysql -uroot -P5678 --default-character-set=gb2312 -p -h127.0.0.1 -e "select * from Test.test1" test1.sql (不过这样要手动建表,当然可以 show create test1得到建表语句)
导入:
可以这样(在mysql命令行下)
mysqluse Test;
mysqlsource test1.sql;
如果用select的方式得到的文件,应该这样导入:
mysqlload data infile "test.sql" into table Test.test1;
导入时可以"show processlist\G"查看导入状态。
有时候会发生错误:ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`Test/test1`, CONSTRAINT `xxx` FOREIGN KEY (`AA`) REFERENCES `BB` (`AA`))
这时需要对外键约束进行删除,比如:
alter table cwealinfo drop foreign key `xxx`;
也可以:set foreign_key_checks = 0;
导出和导入时需要注意数据库的版本,比如从4导到5,最好用4的mysqldump,否则可能会失败。另外还需要注意字符集问题,如果两个库的字符集不同,可能会导致问题,因此导入前最好用“show variables like '%char%'”查看下是否需要调整字符集设置
全部回答
- 1楼网友:轻雾山林
- 2021-02-26 03:53
一般情况下,mysql是不赞成用外键的,因为这个完全可以用php等服务器脚本语言组织一些功能达到目的...如果 你一定要用,,,,
例子,简单演示一下使用,做dage和xiaodi两个表,大哥表是主键,小弟表是外键:
建表
1create table `dage` (
2 `id` int(11) not null auto_increment,
3 `name` varchar(32) default '',
4 primary key (`id`)
5) engine=innodb default charset=latin1;
6
7create table `xiaodi` (
8 `id` int(11) not null auto_increment,
9 `dage_id` int(11) default null,
10 `name` varchar(32) default '',
11 primary key (`id`),
12 key `dage_id` (`dage_id`),
13 constraint `xiaodi_ibfk_1` foreign key (`dage_id`) references `dage` (`id`)
14) engine=innodb default charset=latin1
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯