我有两个已经存在的表,看起来(部分)大致是这样的:
CREATE TABLE parent (
old_pk CHAR(8) NOT NULL PRIMARY KEY
) ENGINE=InnoDB;
CREATE TABLE child (
parent_key CHAR(8),
FOREIGN KEY (parent_key) REFERENCES parent(old_pk)
ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)
我想添加一个新的自动递增整数id列,parent并将其用作主键,同时仍保留old_pk为唯一键,并允许其他表喜欢child在外键约束中引用它.不幸的是,简单说ALTER TABLE parent DROP PRIMARY KEY不起作用:
错误代码:1025
将'./data/#sql-4013_70f5e'重命名为'./data/parent'时出错(错误号:150)
一些谷歌搜索表明这是由于现有的外键引用child.从本质上讲,我需要一种方法告诉MySQL"使用其他列作为主键,但不要忘记原始列的唯一键 - ".有没有办法实现这一点,除了从中删除关键约束child并在之后恢复它们?
假设我必须在适当的位置更改表,而不是使用相同的数据创建副本并在以后交换它们.我SET FOREIGN_KEY_CHECKS = 0在改变表之前尝试过使用,但它似乎没有帮助.
我有个十六进制字符一些256个字符的字符串代表位标志的序列,我试图将其转换回为一个比特,所以我可以操纵它们&,|,vec等.十六进制字符串是用整数范围的大端组写的,这样一组8个字节就像"76543210"应转换为"\x10\x32\x54\x76"位串,即最低的8位00001000.
问题是pack'" h"格式一次只能输入一个字节,而不是8,因此直接使用它的结果将不是正确的顺序.目前我正在这样做:
my $bits = pack("h*", join("", map { scalar reverse $_ } unpack("(A8)*", $hex)));
Run Code Online (Sandbox Code Playgroud)
哪个有效,但感觉很乱.似乎应该有一个更清洁的方式,但我的pack-fu不是很强大.有没有更好的方法来进行这种翻译?
bitstring ×1
constraints ×1
endianness ×1
foreign-keys ×1
mysql ×1
pack ×1
perl ×1
primary-key ×1