SQL 练习 8 - Verifique / CONSTRAINT / TRIGGER / PROCEDIMENTO / FUNÇÃO

1, a entidade definição integridade
integridade entidade do modelo relacional é definido com o CREATE TABLE PRIMARY KEY. Existem dois métodos descritos atributos de configuração para um único código, um é definido como uma restrição no nível de coluna, o outro é definido como um nível de tabela restrições. Uma pluralidade de atributos de configuração para o código é apenas um método descrito, ou seja, definido como restrições ao nível da mesa.
[Exemplo 5.1] A definição de atributo Student Sno uma tabela de cdigos.

CREATE TABLE Student
	(Sno CHAR(9) PRIMARY KEY,
	 Sname CHAR(20) NOT NULL,
	 Ssex CHAR(2),
	 Sage SMALLINT,
	 Sdept CHAR(20)
	 );

ou

CREATE TABLE Student
	(Sno CHAR(9),
	 Sname CHAR(20) NOT NULL,
	 Ssex CHAR(2),
	 Sage SMALLINT,
	 Sdept CHAR(20),
	 PRIMARY KEY(Sno)
	 );

[Exemplo 5.2] na tabela SC Sno, grupo atributo Cno define um código.

CREATE TABLE SC
	(Sno CHAR(9) NOT NULL,
	 Cno CHAR(4) NOT NULL,
	 Grade SMALLINT,
	 PRIMARY KEY(Sno,Cno)
	 );

Entidade verificação de integridade e processamento padrão
(1) para verificar se os valores de chave primária única, se não forem introduzidos ou modificados rejeitar.
(2) Verificar os vários atributos da chave primária está vazia, enquanto há um vazio rejeição inserido ou modificado.

Definir a integridade referencial
modelo relacional que referencial integridade é definida como o código exterior com o CRIAR frase tabela externa CHAVE, indicar o código principal, que o código exterior da frase faz referência à tabela de referência.
[5.3] Exemplo integridade referencial definido em SC

CREATE TABLE SC
(Sno CHAR(9) NOT NULL, 
 Cno CHAR(4) NOT NULL,  
 Grade SMALLINT,
 PRIMARY KEY(Sno,Cno),   
 FOREIGN KEY(Sno) REFERENCES Student(Sno),  
 FOREIGN KEY(Cno) REFERENCES Course(Cno)
);

[Exemplo 5.4] processamento padrão explícito descrito com referência a integridade exemplar

CREATE TABLE SC
(Sno CHAR(9) NOT NULL,
 Cno CHAR(4) NOT NULL,
 Grade SMALLINT,
 PRIMARY KEY(Sno,Cno)FOREIGN KEY(Sno) REFERENCES Student(Sno) 
 ON DELETE CASCADE
 ON UPDATE CASCADE, 
 FOREIGN KEY (Cno) REFERENCES Course(Cno)	                    
 ON DELETE NO ACTION 	
 ON UPDATE CASCADE   
);

integridade definida pelo usuário

Constrangimentos nas propriedades
, enquanto CREATE TABLE atributos definidos de acordo com os constrangimentos requisitos da aplicação atributos definidos, isto é, os limites de valores de atributo, que compreende: um
valor da coluna é não-vazia (não nulo).
O único valor de coluna (único).
Verifique as satisfaz valor de coluna uma expressão condicional (verifique frase).
[Exemplo 5.5] na tabela de definição SC descrito Sno, Cno, propriedades Grau não deve ser nula.

CREATE TABLE SC
	(Sno CHAR(9) NOT NULL,
	 Cno CHAR(4) NOT NULL,
	 Grade SMALLINT NOT NULL,
	 PRIMARY KEY(Sno,Cno), 
	 ……
	 );

[Exemplo 5.6] para estabelecer a tabela DEPT departamento, requer o nome de departamento valor coluna dname, no número do departamento código baseado em coluna única deptno

CREATE TABLE DEPT
	(Deptno NUMERIC(2),
	 Dname CHAR(9)UNIQUE NOT NULL,
	 Location CHAR(10),
	 PRIMARY KEY(Deptno)
	 );

casos Ssex [5,7] mesa Estudante só é permitido tomar "masculino" ou "feminino"

CREATE TABLE Student
	(Sno CHAR(9) PRIMARY KEY,
	Sname CHAR(8)NOT NULL,
	Ssex CHAR(2)CHECK(Ssex IN('男','女')),
	Sage SMALLINT,
	Sdept CHAR(20)
	 );

'S examinar:
Aqui Insert Picture Descrição
o valor de SC Grau 5,8 Tabela Exemplo [0] deve situar-se entre 100 e

CREATE TABLE SC
	(Sno CHAR(9),
	Cno CHAR(4),
	Grade SMALLINT CHECK(Grade>=0 AND Grade<=100),
	PRIMARY KEY(Sno,Cno),
	FOREIGN KEY(Sno) REFERENCES Student(Sno),
	FOREIGN KEY(Cno) REFERENCES Course(Cno)
	 );

As restrições de verificação nas propriedades e manipulação de padrão
ao inserir tuplas de valor ou para modificar as propriedades das tabelas, as restrições sobre as verificações do sistema de gerenciamento de banco de dados relacional se a propriedade está satisfeito, a operação é rejeitada se não for realizada.
[5,9] casos em que os alunos são do sexo masculino, o seu nome não pode começar com a Sra ..

CREATE TABLE Student
	(Sno CHAR(9),
	Sname CHAR(8) NOT NULL,
	Ssex CHAR(2),
	Sage SMALLINT,
	Sdept CHAR(20),
	PRIMARY KEY(Sno),
	CHECK(Ssex='女' OR Sname NOT LIKE 'Ms.%')
	 );

Verifique restrições sobre as tuplas padrão e processamento de
valores de tempo em uma tupla ou modificar atributos, restrições sobre as verificações do sistema de gerenciamento de banco de dados relacionais se uma tupla é satisfeita, a operação é rejeitada se não for realizada.

Restrição de integridade chamada cláusula

CONSTRAINT<完整性约束条件名><完整性约束条件>

<Integridade restrição> incluem NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CONFIRA frases como.
[5.10] casos estabelecer formulário de inscrição do estudante Student, requer número de estudantes entre 90000-99999, o nome não pode ser o valor nulo, menos de 30 anos, apenas sexo é "masculino" ou "feminino".

CREATE TABLE Student
	(Sno NUMERIC(6)
		CONSTRAINT C1 CHECK(Sno BETWEEN 90000 AND 99999),
	Sname CHAR(20)
		CONSTRAINT C2 NOT NULL,
	Sage NUMERIC(3)
		CONSTRAINT C3 CHECK(Sage<30),
	Ssex CHAR(2)
		CONSTRAINT C4 CHECK(Ssex IN('男','女')),
		CONSTRAINT StudentKey PRIMARY KEY(Sno)
	 );

Exemplo [Tabela 5.11] estabelecer professor Professor, é necessário que cada salários de professores deve ser inferior a 3.000 dólares. Os salários devem ser listados Sal e deduções Deduzir a soma

CREATE TABLE TEACHER
	(Eno NUMERIC(4) PRIMARY KEY,
	Ename CHAR(10),
	Job CHAR(8),
	Sal NUMERIC(7,2),
	Deduct NUMERIC(7,2),
	Deptno NUMERIC(2),
	CONSTRAINT TEACHERKey FOREIGN KEY(Deptno)
	REFERENCES DEPT(Deptno),
	CONSTRAINT C1 CHECK(Sal+Deduct>=3000)
	 );

restrições de integridade tabela modificada
pode ser usada para modificar as ALTER TABLE restrições de integridade declaração da mesa
[5,12] Exemplo formas de realização limitações género 5.10Student Tabela removidos

ALTER TABLE Student DROP CONSTRAINT C4;

[5,13] Exemplo Student modificado tabela condição de restrição é necessária entre o número estudante 900000-999999, com menos do que 30 a menos do que 40.

ALTER TABLE Student
	DROP CONSTRAINT C1;
ALTER TABLE Student
	ADD CONSTRAINT C1 CHECK(Sno BETWEEN 900000 AND 999999);
ALTER TABLE Student
	DROP CONSTRAINT C3;
ALTER TABLE Student
	ADD CONSTRAINT C3 CHECK(Sage<40);

Gatilho
usuários para definir um tipo especial de procedimento sobre a mesa pelo evento-driven.
Também conhecido como o evento de disparo - condição - regras de ação. Quando os eventos de sistema específicos (como uma tabela para adicionar, excluir operação de mudança, o fim das coisas, etc.) ocorrem sob a condição de uma regra para verificar se as condições forem verdadeira ação é executada regra, ou não realizar esta ação. corpo da ação na regra pode ser muito complexo e pode envolver outras tabelas e outros objetos de banco de dados, geralmente um período de procedimentos armazenados SQL.
gatilhos SQL usando o comando CREATE TRIGGER para estabelecer o formato:

CREATE TRIGGER<触发器名> /*每当触发事件发生的时候,该触发器被激活*/
{BEFORE|AFTER}<触发事件>ON<表名> /*指明触发器激活的时间是执行触发事件前或后*/
REFERENCING NEW|OLD ROW AS<变量> /*REFERENCING指出引用的变量*/
FOR EACH{ROW|STATEMENT} /*定义触发器的类型,指明动作体执行的频率*/
[WHEN<触发条件>]<触发动作体> /*仅当触发条件为真时才执行触发动作体*/

5,21 [Exemplo] Quando Grau SC modificar tabela de atributos, se a contagem aumentada em 10%, então o registo da operação de uma outra tabela SC_U (Sno, Cno, Oldgrade, Newgrade) em que é modificado antes Oldgrade pontuações, fracção Newgrade é modificado.

Criando SC_U:

CREATE TABLE SC_U
	(Sno CHAR(9) PRIMARY KEY, 
	 Cno CHAR(9),
	 OldGrade SMALLINT,
	 NewGrade SMALLINT
	 );  

Criando gatilhos:

CREATE TRIGGER SC_T
AFTER UPDATE OF Grade ON SC
REFERENCING
	OLDROW AS OldTuple,
	NEWROW AS NewTuple
FOR EACH ROW
WHEN(NewTuple.Grade>=1.1*OldTuple.Grade)
	INSERT INTO SC_U(Sno,Cno,OldGrade,NewGrade)
	VALUES(OldTuple.Sno,OldTuple.Cno,OldTuple.Grade,NewTuple.Grade)

Note-se que desencadeia a criação e utilização do texto T-SQL SQLsever são bastante diferentes:

CREATE TRIGGER SC_T
ON SC
FOR UPDATE
AS
	declare @OLD SMALLINT
	declare @NEW SMALLINT
	declare @SNO CHAR(9)
	declare @CNO CHAR(4)
IF(UPDATE(Grade))
	BEGIN
	select @OLD =Grade FROM DELETED
	select @NEW =Grade FROM INSERTED
	select @SNO =Sno FROM SC
	select @CNO =Cno FROM SC
	IF(@NEW>=1.1*@OLD)
	INSERT INTO SC_U(Sno,Cno,Oldgrade,Newgrade)
	VALUES (@SNO,@CNO,@OLD,@NEW)
END

Aqui Insert Picture Descrição
5,22 [Exemplo] O número de alunos por tabela Student aumentado a operação de inserção na tabela registado na StudentInsertLog.

CREATE TRIGGER Student_Count
AFTER INSERT ON Student  	         
REFERENCING
 	NEW TABLE AS DELTA
FOR EACH STATEMENT  
    INSERT INTO StudentInsertLog (Numbers)
	SELECT COUNT(*) FROM DELTA

Da mesma forma, T-SQL não pode ser usado.

CREATE TRIGGER Student_Time
ON Student
AFTER
AS
INSERT 
INTO Student
	INSERT INTO StudentInsertLog(Numbers)
	SELECT COUNT(*) FROM Student;

[5,23] EXEMPLO definir antes de um trigger de nível de linha, definir regras de integridade professores Professor de mesa, professores, salário não é inferior a 4.000 yuan, se menos de 4.000 yuan, alterado automaticamente de 4000 yuan

CREATE TRIGGER Insert_Or_Update_Sal 
BEFORE INSERT OR UPDATE ON Teacher  
FOR EACH ROW        
BEGIN                             
IF(new.Job='教授') AND (new.Sal<4000) 
THEN  new.Sal :=4000;                
END IF;
END;    

Para T-SQL:

CREATE TRIGGER Insert_Or_Update_Sal
ON Teacher
FOR UPDATE,INSERT
AS
	IF UPDATE(Sal)
	BEGIN
	declare @TNO CHAR(9)
	declare @TNAME CHAR(9)
	declare @JOB CHAR(9)
	declare @SAL SMALLINT

	select @SAL = Sal FROM INSERTED
	select @TNO =Tno FROM Teacher
	select @TNAME =Tname FROM Teacher
	select @JOB =Job FROM Teacher
	
	IF(@SAL<4000 AND @JOB='教授')
	UPDATE Teacher
	SET SAL=4000
	WHERE Sal<4000 AND Job='教授'
END

sintaxe SQL disparador de exclusão

DROP TRIGGER <触发器名> ON <表名>;

[Exemplo 8.8], utilizando procedimentos armazenados para implementar as seguintes aplicações: transferência de dinheiro a partir de uma conta de um nero designado de 2 a conta.

CREATE OR REPLACE PROCEDURE TRANSFER(inAccount INT,outAccount  INT,amount FLOAT) 
	AS DECLARE		
	    totalDepositOut Float;
        totalDepositIn Float;
		inAccountnum INT;
BEGIN   
	       SELECT Total INTO totalDepositOut FROM Accout
	            WHERE accountnum=outAccount;
	       IF totalDepositOut IS NULL THEN
	                ROLLBACK; 
	                RETURN
	       END IF;
      IF totalDepositOut< amount THEN   
	       ROLLBACK; 
	       RETURN
      END IF 
  SELECT Accountnum INTO inAccountnum FROM Account
      WHERE accountnum=inAccount;
  IF inAccount IS NULL THEN                       
	ROLLBACK; 
	RETURN;
  END IF;
  UPDATE Account SET total=total-amount WHERE accountnum=outAccount; 
  UPDATE Account SET total=total + amount 
  WHERE accountnum=inAccount; 
  COMMIT; 
END;

Executar procedimentos armazenados

CALL/PERFORM  PROCEDURE 过程名([参数1,参数2,...])

Chamada de procedimento ou executar Utilize outras maneiras de ativar a execução do procedimento armazenado, o processo de SQL, servidores de banco de dados suportam armazenado chama outro corpo do procedimento.
[8,9] Exemplo transferidos de conta 01003815868 01003813828 10000 yuan em conta.

CALL PROCEDURE TRANSFER(01003813828,01003815868,10000`);

T-SQL:

INSERT INTO Account VALUES(01003815868,20000)
INSERT INTO Account VALUES(01003813828,10000)
EXEC	Proc_TRANSFER
		@inAccount = 01003813828,
		@outAccount = 01003815868,
		@amount = 10000	

Gatilhos concluído um programa similar no banco de dados para a expansão da função de banco de dados.
Quanto ao futuro após a conexão de banco de dados com o programa, a parte principal do programa em um programa externo ou banco de dados, para aguardar o futuro para saber o teste real.
Do meu ponto de vista pessoal está mais interessado no programa externo, porque é mais em linha com a idéia de orientada a objeto (ou seja, modularidade funcional, dados e programas são muitas vezes misturado com a reutilização não é alta). A desvantagem pode estar executando mais lento do que o built-in rápido, afinal de contas, programas de gastos de tempo maiores que interagem com bancos de dados.

Publicado 14 artigos originais · ganhou elogios 10 · vista 3831

Acho que você gosta

Origin blog.csdn.net/jiesfriend/article/details/105317207
Recomendado
Clasificación