|
|
|
| Привет всем! Помогите пожайлуста вот с такой проблемкой:
Создаю в MySQL базу из 2-х табличек следующем образом
CREATE TABLE Users(
pk_user int NOT NULL auto_increment,
Surname char(15) NOT NULL,
Firstname char(15) NOT NULL,
Patronymic char(15) NOT NULL,
Phone char(11) NOT NULL,
Login char(20) NOT NULL,
Password char(20) NOT NULL,
Primary key (pk_user)
)TYPE=MyISAM;
CREATE TABLE Options(
pk_options int NOT NULL auto_increment,
Answerback text NULL,
Label int NULL,
pk_user int NULL,
PRIMARY KEY (pk_options)
)TYPE=MyISAM;
Потом связываю их связью один-ко-много (табличка Users - главная).
ALTER TABLE Options
add foreign key (pk_user)
references Users (pk_user)
on delete cascade
on update cascade;
И теперь, насколько я понимаю, при удалении записи из таблички
users каскадно должна удалиться запись из таблички options, естесно
при совпадении внешнего и первичного ключей. Но у меня почему то запись
из Options автоматически не удаляется. В чем дело? Помогите разобраться.
Заранее благодарю. ChpocksML. | |
|
|
|
|
|
|
|
для: ChpocksML
(01.08.2006 в 10:52)
| | Нет, таблица MyISAM не поддерживает ссылочную целостность, только таблицы InnoDB. | |
|
|
|
|
|
|
|
для: cheops
(01.08.2006 в 12:20)
| | Если я правильно понял мануал, то каскадное удаление не работает и в InnoDB тоже... Что-то там контролируется, но нормальной функциональности вроде как нет. | |
|
|
|
|
|
|
|
для: Loki
(01.08.2006 в 13:01)
| | Нет от чего же, всё работает, я пробовал - только для этого явно нужно указывать внешний ключ. | |
|
|
|
|
|
|
|
для: cheops
(01.08.2006 в 16:26)
| | Спасибо за совет. То есть, как я понял, нужно создать таблицы типа InnoDB,
и все будет прекрасно работать!? Если я ошибаюсь, то можно поподробнее объяснить
как мне правильно сделать - я новичек в этой области...
У меня в связи с этим есть еще 2 небольших вопроса: во первых можно ли каким
либо образом исправить тип таблицы с MyISAM на InnoDB, не пересоздавая их?
Второй вопрос немножко не по теме, но я думаю он слишком маленький, чтобы
создавать для него новую тему... А вопрос в следующем: у меня в текстовом файле
написан SQL код, который создает мою базу данных. Могу ли я какой-нибудь командой
загрузить этот код в mySQL? Заранее благодарен всем откликнувшимся... ;) | |
|
|
|
|
|
|
|
для: ChpocksML
(01.08.2006 в 20:20)
| | >То есть, как я понял, нужно создать таблицы типа InnoDB,
>и все будет прекрасно работать!?
Да, но потребуется создать внешний ключ
FOREIGN KEY (pk_user) REFERENCES Users(pk_user)
ON DELETE CASCADE
ON UPDATE CASCADE
| >каким либо образом исправить тип таблицы с MyISAM на InnoDB, не пересоздавая их?
Это можно сделать при помощи запроса
ALTER TABLE pk_user TYPE = InnoDB;
|
>Могу ли я какой-нибудь командой загрузить этот код в mySQL?
Если речь идёт о консольной утилите mysql, то можно поступить следующим образом
| |
|
|
|
|
|
|
|
для: cheops
(01.08.2006 в 22:16)
| | Спасибо Cheops, ты мне очень помог. Удачи. | |
|
|
|
|
|
|
|
для: ChpocksML
(02.08.2006 в 07:30)
| | Да, рановато я обрадовался... У меня почему то ни тип таблички не меняется, ни ключ внешний не создается.
В общем пишу я ему следующее:
Show table status; - и вижу, что табличка Users типа MyISAM.
Затем набираю
ALTER TABLE Users TYPE = InnoDB;
и опять Show table status; - но изменений никаких. табличка Users как была типа MyISAM так и осталась.
тоже самое и с внешним ключем: пишу я следующее:
alter table Options
add foreign key (pk_user)
references Users(pk_user)
on delete cascade
on update cascade;
|
(В табличке Options имеется поле pk_user, но оно не является внешним ключем)
У меня MySQL v 3.23.53 | |
|
|
|
|
|
|
|
для: ChpocksML
(02.08.2006 в 07:58)
| | Хм... какая у вас версия старая, ALTER TABLE в ней точно не позволяет устанавливать внешний ключ, тип таблицы меняться должен, но не факт, что InnoDB поддерживается по умолчанию. Она тогда находилась в стадии бета-тестирования, если мне память не изменяет. Нет возможности использовать более новую версию? | |
|
|
|
|
|
|
|
для: cheops
(02.08.2006 в 10:15)
| | я попробую установить более новую версию, просто я устанавливал все нужное по по хэлпу, там ссылка была на этот mysql. Возможно правда на более новой версии все будет нормально работать. Спасибо за совет. | |
|
|
|
|
|
|
|
для: ChpocksML
(02.08.2006 в 11:23)
| | Спасибо большое, Cheops. Установил я MySQL 5.0 и все заработало. И тип таблиц изменил
и с целостностью разобрался. Только почему-то, при работе с этим MySQL, не могу подключиться
к серверу (скрипт пишу на php). Может быть еще и здесь кто-нибудь подкинет идею? При
установки MySQL у меня спросили только пароль админимтратора. А код для подключения следующий использую:
<?
$dblocation = "localhost";
$dbname = "DB";
$dbuser = "root";
$dbpasswd = "password";
$dbcnx = @mysql_connect($dblocation, $dbuser, $dbpasswd);
if (!$dbcnx){
[b][i] exit("<P>В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.</P>");[/b][/i]
}
if(!@mysql_select_db($dbname, $dbcnx)){
exit( "<P>В настоящий момент база данных не доступна, поэтому корректное отображение страницы невозможно.</P>");
}
$query = "SELECT VERSION()";
$ver = mysql_query($query);
if(!$ver)
exit("Ошибка при определении версии MySQL-сервера");
$version = mysql_result($ver, 0);
list($major, $minor) = explode(".", $version);
$ver = $major.".".$minor;
if((float)$ver >= 4.1){
mysql_query("SET NAMES 'cp1251'");
}
?>
|
Хотя на версии MySQL 3.23.53 все работало нормально- соединение с базой и сервером устанавливалось. А сейчас, каждый раз при запуске выдает выделенное в коде сообщение. Может тут что-нибудь добавить или убрать надо? Кстати, в этой версии у меня в трее светофорчика нет... Подскажите пожалуйста, в чем проблема... | |
|
|
|
|
|
|
|
для: ChpocksML
(02.08.2006 в 17:37)
| | А у вас в системе библиотек от MySQL 3.23.53 не осталось? | |
|
|
|
|
|
|
|
для: cheops
(02.08.2006 в 17:55)
| | В установках и удалении программ сначала грохнул MySQL3.23.53, а потом вручную удалил все что осталось в установочной директории. Так что не должно было ничего остаться. | |
|
|
|
|
|
|
|
для: ChpocksML
(02.08.2006 в 19:58)
| | А в директории C:/Windows/system32 не оставлось библиотеки libmysql.dll? | |
|
|
|
|
|
|
|
для: cheops
(02.08.2006 в 23:46)
| | Искал эту дллку и нашел только одну в папке с установленным MySQL5.0, а в system32 - нету, да и вообще в папке windows нет. | |
|
|
|
|
|
|
|
для: ChpocksML
(03.08.2006 в 00:04)
| | А в корневой директории PHP её разве нет? | |
|
|
|
|
|
|
|
для: cheops
(03.08.2006 в 00:13)
| | Нет, нету. У меня может и php старый - версия 4.2.3?
Кстати, может что-то не работает из-за настроек MySQL?!
Я при настройке конфигурации устанавливаю тип
сервера - Server Machine, базу данных выбираю
Multifunctional DataBase,
что касается пользователей, ставлю Decision Support/OLAP,
Номер порта: 3306, Имя сервера: MySQL5, ну и пароль администратора.
Может быть в этих настройках что-то не так? | |
|
|
|
|
|
|
|
для: ChpocksML
(03.08.2006 в 08:20)
| | Хм... очень странно, должна бы быть, вы загружали zip-архив дистрибутива PHP или инсталлятор? | |
|
|
|
|
|
|
|
для: cheops
(03.08.2006 в 12:15)
| | ZIP-архив. У меня есть еще один php версии 5... там эта дллка есть, но че то я не могу пока настроить апачу, а точнее файл httpd.conf. Как мне кажется, там не должно быть различий в настройке для php4 и php5, верно? | |
|
|
|