Обсуждение: must I create the function check_primary_key ?

Поиск
Список
Период
Сортировка

must I create the function check_primary_key ?

От
"Peter J. Schoenster"
Дата:
Hi,

Thanks to many who clued me on on using "arrow keys" to 
traverse history. I just installed readline and 7.1 .. seems that 
mysql has its own readline.

I want to use this referential integrity etc. that I've never used in 
mysql ... so I tried many things and looked here and there ... My 
example below produces this error:

> CreateTrigger: function check_primary_key() does not exist

Here is what I was trying to create:

DROP TABLE company_profile;

CREATE TABLE company_profile (employer_id int4,    leadership text,company_description  text,key_financial_statictics
varchar(255),company_name varchar (255),url varchar (255),sec_fillings_url varchar (255),mission text,employees
int4,typevarchar (50),growth_rate varchar (50),culture  text,year int4,PRIMARY KEY (employer_id)
 
);

CREATE TRIGGER employer_id_exists
BEFORE INSERT OR UPDATE ON company_profile FOR EACH 
ROW
EXECUTE PROCEDURE check_primary_key('employer_id', 
'employer_profile', 'employer_id');

__end example

I just copied the above TRIGGER  .... but it doesn't work for me.

Thanks,

Peter
All idioms must be learned.
Good idioms only need to be learned once. 
--Alan Cooper


Re: must I create the function check_primary_key ?

От
Stephan Szabo
Дата:
On Wed, 25 Apr 2001, Peter J. Schoenster wrote:

> I want to use this referential integrity etc. that I've never used in 
> mysql ... so I tried many things and looked here and there ... My 
> example below produces this error:
> 
> > CreateTrigger: function check_primary_key() does not exist
> 
> Here is what I was trying to create:
> 
> DROP TABLE company_profile;
> 
> CREATE TABLE company_profile (
>     employer_id int4,    
>     leadership text,
>     company_description  text,
>     key_financial_statictics varchar (255),
>     company_name varchar (255),
>     url varchar (255),
>     sec_fillings_url varchar (255),
>     mission text,
>     employees int4,
>     type varchar (50),
>     growth_rate varchar (50),
>     culture  text,
>     year int4,
>     PRIMARY KEY (employer_id)
> );
> 
> CREATE TRIGGER employer_id_exists
> BEFORE INSERT OR UPDATE ON company_profile FOR EACH 
> ROW
> EXECUTE PROCEDURE check_primary_key('employer_id', 
> 'employer_profile', 'employer_id');

You probably just want to use a REFERENCES constraint
employer_id int4 REFERENCES employer_profile(employer_id)

You'll need to have a primary key or unique constraint
on employer_profile(employer_id).  The references constraint
will also prevent you from deleting a employer_id
row that is being referenced. 




Re: must I create the function check_primary_key ?

От
"Peter J. Schoenster"
Дата:
> On Wed, 25 Apr 2001, Peter J. Schoenster wrote:
> 
> > I want to use this referential integrity etc. that I've never used
..snip..
> > CREATE TRIGGER employer_id_exists
> > BEFORE INSERT OR UPDATE ON company_profile FOR EACH 
> > ROW
> > EXECUTE PROCEDURE check_primary_key('employer_id', 
> > 'employer_profile', 'employer_id');


Stephan Szabo <sszabo@megazone23.bigpanda.com> 
enlightened me as such:

> You probably just want to use a REFERENCES constraint
> employer_id int4 REFERENCES employer_profile(employer_id)
> 
> You'll need to have a primary key or unique constraint
> on employer_profile(employer_id).  The references constraint
> will also prevent you from deleting a employer_id
> row that is being referenced. 

Banging my head on the table ... yes ... I never set the constraint 
on employer_id in employer_profile. I should have been more 
patient in reading the error message returned by psql.  

Thanks for the help. Your suggestion worked as expected.

Peter
All idioms must be learned.
Good idioms only need to be learned once. 
--Alan Cooper