103 lines
2.2 KiB
MySQL
103 lines
2.2 KiB
MySQL
|
CREATE LOGIN Chat
|
|||
|
WITH PASSWORD = '123456';
|
|||
|
GO
|
|||
|
|
|||
|
DROP DATABASE Chat;
|
|||
|
GO
|
|||
|
|
|||
|
CREATE DATABASE Chat;
|
|||
|
GO
|
|||
|
|
|||
|
USE Chat;
|
|||
|
GO
|
|||
|
|
|||
|
CREATE USER Chat
|
|||
|
FOR LOGIN Chat;
|
|||
|
GO
|
|||
|
|
|||
|
ALTER ROLE db_owner ADD MEMBER Chat;
|
|||
|
GO
|
|||
|
|
|||
|
CREATE TABLE Account
|
|||
|
(
|
|||
|
Id BIGINT PRIMARY KEY IDENTITY(1000,1),
|
|||
|
Password VARCHAR(50) not null,
|
|||
|
NetName NVARCHAR(50) ,
|
|||
|
State BIT default 0 CHECK(State=1 or State=0),
|
|||
|
UpDataTime datetime default GETDATE()
|
|||
|
)
|
|||
|
GO
|
|||
|
|
|||
|
CREATE TABLE Contacts
|
|||
|
(
|
|||
|
UserId BIGINT REFERENCES Account(Id) not null ,
|
|||
|
ContactsId BIGINT REFERENCES Account(Id) not null,
|
|||
|
State BIT default 0 CHECK(State=1 or State=0),
|
|||
|
Remark NVARCHAR(50),
|
|||
|
UpDataTime datetime default GETDATE()
|
|||
|
)
|
|||
|
GO
|
|||
|
|
|||
|
CREATE TABLE History
|
|||
|
(
|
|||
|
Send BIGINT REFERENCES Account(Id) NOT NULL,
|
|||
|
Receive BIGINT REFERENCES Account(Id) NOT NULL,
|
|||
|
Type NVARCHAR(50) NOT NULL,
|
|||
|
Content NVARCHAR(200) NOT NULL,
|
|||
|
Time DATETIME DEFAULT GETDATE()
|
|||
|
)
|
|||
|
|
|||
|
GO
|
|||
|
|
|||
|
-- Account表的更新触发器
|
|||
|
CREATE TRIGGER trg_UpdateUpDataTimeAccount
|
|||
|
ON Account
|
|||
|
AFTER INSERT, UPDATE, DELETE
|
|||
|
AS
|
|||
|
BEGIN
|
|||
|
SET NOCOUNT ON;
|
|||
|
UPDATE Account
|
|||
|
SET UpDataTime = GETDATE()
|
|||
|
WHERE Id IN (SELECT Id FROM inserted UNION SELECT Id FROM deleted);
|
|||
|
END;
|
|||
|
GO
|
|||
|
|
|||
|
|
|||
|
-- Contacts表的更新触发器
|
|||
|
CREATE TRIGGER trg_UpdateUpDataTimeContacts
|
|||
|
ON Contacts
|
|||
|
AFTER INSERT, UPDATE
|
|||
|
AS
|
|||
|
BEGIN
|
|||
|
SET NOCOUNT ON;
|
|||
|
|
|||
|
-- 更新Account表中的UpDataTime字段,仅在Contacts相关记录发生插入或更新时
|
|||
|
UPDATE Account
|
|||
|
SET UpDataTime = GETDATE()
|
|||
|
WHERE Id IN (SELECT UserId FROM inserted)
|
|||
|
OR Id IN (SELECT ContactsId FROM inserted);
|
|||
|
|
|||
|
-- 更新Contacts表的Remark列为对应ContactsId的NetName
|
|||
|
UPDATE Contacts
|
|||
|
SET Remark = (SELECT NetName FROM Account WHERE Id = ContactsId)
|
|||
|
WHERE ContactsId IN (SELECT ContactsId FROM inserted)
|
|||
|
OR ContactsId IN (SELECT ContactsId FROM deleted);
|
|||
|
END;
|
|||
|
GO
|
|||
|
|
|||
|
-- History表的更新触发器
|
|||
|
CREATE TRIGGER trg_UpdateUpDataTimeHistory
|
|||
|
ON History
|
|||
|
AFTER INSERT, UPDATE
|
|||
|
AS
|
|||
|
BEGIN
|
|||
|
SET NOCOUNT ON;
|
|||
|
|
|||
|
-- 仅更新Account表中发送者和接收者的UpDataTime字段
|
|||
|
UPDATE Account
|
|||
|
SET UpDataTime = GETDATE()
|
|||
|
WHERE Id IN (SELECT Send FROM inserted)
|
|||
|
OR Id IN (SELECT Receive FROM inserted);
|
|||
|
END;
|
|||
|
GO
|