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:
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
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.