Как я могу создать уникальный ключ значения для сопряжения с моим именем поля _rec_key_
? Я создаю файл данных. Я искал использование значения MD5 в качестве ключа или любых других предложений, которые вы должны убедиться, что это уникально. Я не знаю, как извлечь это значение.
Формат файла должен выглядеть примерно так:
__rec_key__^amd5val^ex_id^a1^einum^a2609^euser^aJoe^e^d
__rec_key__^amd5val^ex_id^a2^einum^a2609^euser^aBob^e^d
В основном, вставляя значение с ^a
и ^e
и заканчивая rec с помощью ^d
Таблица наших данных:
+------+------+------+
| x_id | inum | user |
+------+------+------+
| 1 | 2608 | Joe |
| 2 | 2609 | Bob |
+------+------+------+
Мой код до сих пор - это... который только что выводит мой вывод без уникального значения md5.
Мне нужно, чтобы значение было сопряжено с _rec_key_
my $data = '';
my $dbh = DBI->connect("DBI:mysql:test:localhost:3306");
my $sth = $dbh->prepare("select x_id, inum, user from mytest");
$sth->execute();
while (my($x_id, $inum, $user) = $sth->fetchrow_array() ) {
$data = $data. "__record_key__^a$x_id^e^a$inum^e^a$user^e^d";
}
$sth->finish;
$dbh->disconnect;
print $data;
Трудно понять, что вы пытаетесь сделать, поэтому я не могу сказать, подходит ли использование md5 здесь, но вы можете создать их с помощью Digest:: MD5 от CPAN:
use Digest::MD5 qw(md5_hex);
my $data = 'some arbitrary data';
my $digest = md5_hex($data);
print $digest, "\n";
печатает:
a9959dc27c0bac23be48686ceaa1683c
Почему бы не UUID() в MySQL? Также безопасна репликация.
Я согласен с эфиром. Вы также можете использовать функцию MD5()
в базе данных. Однако, если ваш x_id
не является уникальным, вы должны использовать другое значение, чтобы сделать MD5. MD5 должен начинаться с уникальных данных.
И если ваш x_id
уникален, то зачем вам нужен MD5?
Посмотрите на модуль данных Data:: UUID perl?
Если вы хотите придерживаться своей схемы, ваш цикл while
неверен:
while (my($x_id, $inum, $user) = $sth->fetchrow_array() ) {
$data = $data. "__record_key__^a$x_id^e^a$inum^e^a$user^e^d";
}
Это создаст очень длинную строку. Вам действительно нужна одна строка для каждого пользователя:
while (my($x_id, $inum, $user) = $sth->fetchrow_array() ) {
my $data = "__record_key__^a${x_id}^e^a${inum}^e^a${user}^e^d";
...
}
Я также поместил скобки вокруг ваших имен переменных для ясности (т.е. ${user}^e^d
вместо $user^e^d
).
Что это за номер записи? Почему он должен быть уникальным? Является ли x_id
уникальным? Есть ли какой-либо формат, диапазон или другие требования к значению номера записи? Значит ли значение что-либо или это просто уникальное значение?
В подобных случаях мне нравится избавляться от особых случаев. Если мне нужна уникальная строка, связанная с каждой записью, я даю базе данных дать каждой записи уникальную строку. В базе данных каждая запись должна иметь основной или уникальный ключ:
CREATE TABLE (
pk INT AUTO_INCREMENT PRIMARY KEY,
...
);
Когда вы вставляете данные в эту таблицу, MySQL может выбрать для вас значение pk
.
Как только необходимое вам значение будет сохранено с другими значениями, мясо вашей программы будет следующим:
my $sth = $dbh->prepare("select pk, x_id, inum, user from mytest");
$sth->execute();
while (my($pk, $x_id, $inum, $user) = $sth->fetchrow_array() ) {
$data = $data. "$pk^a$x_id^e^a$inum^e^a$user^e^d";
}
Вы не много говорили о проблемах вашей проблемы.