38 lines
1.1 KiB
MySQL
38 lines
1.1 KiB
MySQL
|
CREATE TABLE IF NOT EXISTS users (
|
||
|
id BIGSERIAL PRIMARY KEY,
|
||
|
username TEXT NOT NULL UNIQUE,
|
||
|
password TEXT NOT NULL,
|
||
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||
|
);
|
||
|
|
||
|
-- Create a function to set created_at and updated_at on INSERT
|
||
|
CREATE OR REPLACE FUNCTION set_timestamps_on_insert() RETURNS TRIGGER AS $$
|
||
|
BEGIN
|
||
|
NEW.created_at = NOW();
|
||
|
NEW.updated_at = NOW();
|
||
|
RETURN NEW;
|
||
|
END;
|
||
|
$$ LANGUAGE plpgsql;
|
||
|
|
||
|
-- Create a trigger to call the function after INSERT
|
||
|
CREATE TRIGGER set_timestamps_on_insert
|
||
|
BEFORE INSERT ON users
|
||
|
FOR EACH ROW
|
||
|
EXECUTE FUNCTION set_timestamps_on_insert();
|
||
|
|
||
|
-- Create a function to set updated_at on UPDATE
|
||
|
CREATE OR REPLACE FUNCTION set_updated_at() RETURNS TRIGGER AS $$
|
||
|
BEGIN
|
||
|
NEW.updated_at = NOW();
|
||
|
RETURN NEW;
|
||
|
END;
|
||
|
$$ LANGUAGE plpgsql;
|
||
|
|
||
|
-- Create a trigger to call the function after UPDATE
|
||
|
CREATE TRIGGER set_updated_at
|
||
|
BEFORE UPDATE ON users
|
||
|
FOR EACH ROW
|
||
|
EXECUTE FUNCTION set_updated_at();
|
||
|
|
||
|
CREATE INDEX users_username_index ON users (username);
|