[Rozw.]Programowanie SQL w skrypcie Bash - problem

Problemy dotyczące programowania.

Moderatorzy: Moderatorzy, Administratorzy

Awatar użytkownika
roverek
Użytkownik
Posty: 605
Rejestracja: 2007-02-22, 18:29
Lokalizacja: Szczecin

[Rozw.]Programowanie SQL w skrypcie Bash - problem

Post autor: roverek »

Hey

Dostałem do zrobienia zadanie którego częścią jest stworzenie bazy danych na podstawie podanego modelu. Niestety nie mogę doprowadzić do porządku MySQL a więc nie wiem czy skrypt w tworzony skrypt Basha, jest poprawny. Mam do was prośbę. Ktoś kto zna się na bazach danych mógłby mi powiedzieć, czy mój skrypt tworzy tabelę zgodne z modelem ?

Oto model:

Kod: Zaznacz cały

Employee {
PK
*Id : GUID
*Name : String
*Surname: String
FK
Department_Id : GUID
}
Role {
PK
*Id : GUID
*Name : String
}
Employee_Role {
PK, FK *Employee_Id : GUID
PK, FK *Role_Id : GUID
}
Department {
PK
*Id : GUID
*Name : String
}
Skrypt natomiast wygląda następująco:

Kod: Zaznacz cały

#!/bin/bash
read -p "Podaj nazwe użytkownika " sqluser
read -p "Podaj hasło do MySQL: " sqlpw
mysqladmin -u $sqluser password $sqlpw
mysql --user=$sqluser --password=$sqlpw -e "CREATE DATABASE baza"
mysql --user=$sqluser --password=$sqlpw -e "USE baza"
mysql --user=$sqluser --password=$sqlpw -e "CREATE USER 'bzium' IDENTIFIED BY bziumpw"
mysql --user=$sqluser --password=$sqlpw -e "grant usage on *.* to bzium@localhost identified by 'bziumpw'"
mysql --user=$sqluser --password=$sqlpw -e "grant all privileges on baza.* to bzium@localhost"
mysql --user=$sqluser --password=$sqlpw -e "CREATE TABLE Department(*Id GUID NOT NULL, *Name VARCHAR(20), PRIMARY KEY(*Id))"
mysql --user=$sqluser --password=$sqlpw -e "CREATE TABLE Role (*Id GUID NOT NULL, *Name VARCHAR(20),PRIMARY KEY(*id)) ENGINE=MyISAM"
mysql --user=$sqluser --password=$sqlpw -e "CREATE TABLE Employee (*Id GUID NOT NULL, *Name VARCHAR(20), *Surname VARCHAR(15), Department_Id GUID, PRIMARY KEY(*id), FOREIGN KEY(Department_Id) REFERENCES Department(*Id)) ENGINE=MyISAM"
mysql --user=$sqluser --password=$sqlpw -e "CREATE TABLE Employee_Role(*Employee_Id GUID NOT NULL, *Role_Id GUID NOT NULL, PRIMARY KEY(*Employee_Id,*Role_Id), FOREIGN KEY(*Employee_Id) REFERENCES Employee(*Id), FOREIGN KEY(*Role_Id) REFERENCES Role(*Id)) ENGINE=MyISAM"
Ostatnio zmieniony 2012-02-02, 01:03 przez roverek, łącznie zmieniany 1 raz.
[img]http://img148.imageshack.us/img148/9879/slackware1userbarzl9.gif[/img]
[img]http://img162.imageshack.us/img162/2268/barritagoogless6.jpg[/img]
[img]http://img.userbars.pl/42/8201.gif[/img]
Awatar użytkownika
freak117
Użytkownik
Posty: 250
Rejestracja: 2006-12-13, 21:26
Lokalizacja: z sieci

Re: Programowanie SQL w skrypcie Bash - problem

Post autor: freak117 »

Problem nie leży po stronie basha a właściwym wywołaniu zapytań mysql.
czy mój skrypt tworzy tabelę zgodne z modelem ?
A to jaki problem to sobie zweryfikować (phpMyAdmin )?
W3 rulez ;D
Awatar użytkownika
roverek
Użytkownik
Posty: 605
Rejestracja: 2007-02-22, 18:29
Lokalizacja: Szczecin

Re: Programowanie SQL w skrypcie Bash - problem

Post autor: roverek »

freak117 pisze:A to jaki problem to sobie zweryfikować (phpMyAdmin )?
Wybacz ale nie mam czasu bawić się w konfigurację Apache'a. Chciałbym żeby ktoś sprawdził czy polecenia SQL które przekazuję do bazy danych przez Bash utworzą mi bazę danych taką jaka jest przedstawiona na podanym przeze mnie modelu.
[img]http://img148.imageshack.us/img148/9879/slackware1userbarzl9.gif[/img]
[img]http://img162.imageshack.us/img162/2268/barritagoogless6.jpg[/img]
[img]http://img.userbars.pl/42/8201.gif[/img]
Pajaczek
Użytkownik
Posty: 1439
Rejestracja: 2006-08-03, 13:16
Lokalizacja: Winny Gród

Re: Programowanie SQL w skrypcie Bash - problem

Post autor: Pajaczek »

A zalogować się do mysql taż nie możesz??
Awatar użytkownika
roverek
Użytkownik
Posty: 605
Rejestracja: 2007-02-22, 18:29
Lokalizacja: Szczecin

Re: Programowanie SQL w skrypcie Bash - problem

Post autor: roverek »

Pajaczek pisze:A zalogować się do mysql taż nie możesz??
Niestety mam błędy, gdy próbuję uruchomić i zalogować się. Nie wiem z czego mogą one wynikać i nie chcę już kombinować. Pozostaję mi tylko spróbować pobawić się tym na którymś zewnętrznym serwerze który ma sprawną bazę SQL. W związku z tym prosiłbym o sprawdzenie tych komend SQL, czy tworzą bazę danych zgodną z modelem.
[img]http://img148.imageshack.us/img148/9879/slackware1userbarzl9.gif[/img]
[img]http://img162.imageshack.us/img162/2268/barritagoogless6.jpg[/img]
[img]http://img.userbars.pl/42/8201.gif[/img]
Pajaczek
Użytkownik
Posty: 1439
Rejestracja: 2006-08-03, 13:16
Lokalizacja: Winny Gród

Re: Programowanie SQL w skrypcie Bash - problem

Post autor: Pajaczek »

A instalowałeś poprawnie? Utworzyłeś w ogóle bazę danych?
Awatar użytkownika
ydoom
Użytkownik
Posty: 261
Rejestracja: 2009-08-27, 14:24

Re: Programowanie SQL w skrypcie Bash - problem

Post autor: ydoom »

sh test
Podaj nazwe użytkownika root
Podaj hasło do MySQL: ***
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
ERROR 1064 (42000) at line 1: 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 'bziumpw' at line 1
ERROR 1046 (3D000) at line 1: No database selected
ERROR 1046 (3D000) at line 1: No database selected
ERROR 1046 (3D000) at line 1: No database selected
ERROR 1046 (3D000) at line 1: No database selected
IMHO ustawianie hasła (linijka "mysqladmin...") jest niepotrzebne.
Dalej jest "No database selected" bo jak chcesz tak po jednym zapytaniu wywoływać to musisz dać --database=baza ("USE baza" nic tu nie daje bo trwa tylko do końca polecenia).

A jak to usunąć to są błędy SQL ;)

Tu masz klucze zewnętrzne więc trzeba użyć InnoDB, powinno to wyglądać jakoś tak:

Kod: Zaznacz cały

-- phpMyAdmin SQL Dump
-- version 3.4.3.2
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Czas wygenerowania: 16 Sty 2012, 13:04
-- Wersja serwera: 5.1.56
-- Wersja PHP: 5.3.8

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

--
-- Baza danych: `baza`
--

-- --------------------------------------------------------

--
-- Struktura tabeli dla  `Department`
--

CREATE TABLE IF NOT EXISTS `Department` (
  `Id` int(11) NOT NULL,
  `Name` text NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin2;

-- --------------------------------------------------------

--
-- Struktura tabeli dla  `Employee`
--

CREATE TABLE IF NOT EXISTS `Employee` (
  `Id` int(11) NOT NULL,
  `Name` text NOT NULL,
  `Surname` text NOT NULL,
  `Department_Id` int(11) NOT NULL,
  PRIMARY KEY (`Id`),
  KEY `Department_Id` (`Department_Id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin2;

-- --------------------------------------------------------

--
-- Struktura tabeli dla  `Employee_Role`
--

CREATE TABLE IF NOT EXISTS `Employee_Role` (
  `Employee_Id` int(11) NOT NULL,
  `Role_Id` int(11) NOT NULL,
  PRIMARY KEY (`Employee_Id`,`Role_Id`),
  KEY `Role_Id` (`Role_Id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin2;

-- --------------------------------------------------------

--
-- Struktura tabeli dla  `Role`
--

CREATE TABLE IF NOT EXISTS `Role` (
  `Id` int(11) NOT NULL,
  `Name` text NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin2;

--
-- Ograniczenia dla zrzutów tabel
--

--
-- Ograniczenia dla tabeli `Employee`
--
ALTER TABLE `Employee`
  ADD CONSTRAINT `Employee_ibfk_1` FOREIGN KEY (`Department_Id`) REFERENCES `Department` (`Id`);

--
-- Ograniczenia dla tabeli `Employee_Role`
--
ALTER TABLE `Employee_Role`
  ADD CONSTRAINT `Employee_Role_ibfk_2` FOREIGN KEY (`Role_Id`) REFERENCES `Role` (`Id`),
  ADD CONSTRAINT `Employee_Role_ibfk_1` FOREIGN KEY (`Employee_Id`) REFERENCES `Employee` (`Id`);
Awatar użytkownika
bojleros
Użytkownik
Posty: 785
Rejestracja: 2005-08-29, 11:12
Lokalizacja: z widokem na familoki :)

Re: Programowanie SQL w skrypcie Bash - problem

Post autor: bojleros »

Nie jestem specjalistą od baz danych ale czy za każdym wywołanie polecenia mysql nie tworzy nowej sesji ? Może lepiej pisać do mysql przez rurkę ?
Awatar użytkownika
roverek
Użytkownik
Posty: 605
Rejestracja: 2007-02-22, 18:29
Lokalizacja: Szczecin

Re: Programowanie SQL w skrypcie Bash - problem

Post autor: roverek »

bojleros pisze:Nie jestem specjalistą od baz danych ale czy za każdym wywołanie polecenia mysql nie tworzy nowej sesji ? Może lepiej pisać do mysql przez rurkę ?
Hey ;).

Problem udało mi się rozwiązać, poprzez ustawienie konta i bazy na serwerze kolegi. Co prawda, pracy w firmie w której otrzymałem do zadanie do wykonania, roboty nie dostałem, udało mi się załapać za to do Wawy do Samsunga. Z tego co widzę to rozwiązanie zaproponowane przez ydoom się sprawdza a więc problem uznaję za rozwiązany.

Pozdrawiam

Roverek
[img]http://img148.imageshack.us/img148/9879/slackware1userbarzl9.gif[/img]
[img]http://img162.imageshack.us/img162/2268/barritagoogless6.jpg[/img]
[img]http://img.userbars.pl/42/8201.gif[/img]
ODPOWIEDZ