一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

數(shù)據(jù)庫事件觸發(fā)的設(shè)置和應(yīng)用

安費(fèi)諾傳感器學(xué)堂 ? 來源:安費(fèi)諾傳感器學(xué)堂 ? 2024-12-13 15:14 ? 次閱讀

數(shù)據(jù)庫無論對于生產(chǎn)管理還是很多的實(shí)際應(yīng)用都非常重要。小編這次聊一下數(shù)據(jù)庫事件觸發(fā)的應(yīng)用。示例使用了postgresql和Python。在本文中,事件觸發(fā)和處理大概地分為兩類:

數(shù)據(jù)庫的事件觸發(fā)和服務(wù)器內(nèi)部處理(1~4)

數(shù)據(jù)庫事件觸發(fā)后,客戶端的程序檢測到該事件的觸發(fā)對應(yīng)的處理(5~6)

在數(shù)據(jù)庫系統(tǒng)中,事件觸發(fā)(通常指數(shù)據(jù)庫觸發(fā)器)以及讀取事件觸發(fā)的信息用于多種場景和需求。請看兩組示例(1~4)和(5~6)。

1. 數(shù)據(jù)一致性和完整性維護(hù)

當(dāng)對數(shù)據(jù)庫表中的數(shù)據(jù)進(jìn)行插入、更新或刪除操作時(shí),需要自動(dòng)驗(yàn)證或調(diào)整相關(guān)數(shù)據(jù),以確保它們符合業(yè)務(wù)規(guī)則或約束。例如,在一個(gè)訂單管理系統(tǒng)中,如果庫存數(shù)量減少到一定閾值以下,可以觸發(fā)一個(gè)警告或補(bǔ)貨請求。

Step 1-1: 創(chuàng)建數(shù)據(jù)庫表

假設(shè)我們有一個(gè)inventory表,它保存產(chǎn)品庫存的信息:

CREATE TABLE inventory (
    product_id SERIAL PRIMARY KEY,
    product_name TEXT NOT NULL,
    quantity INT NOT NULL
);

Step 1-2: 創(chuàng)建觸發(fā)函數(shù)

創(chuàng)建一個(gè) PL/pgSQL 函數(shù),用于檢查庫存數(shù)量并記錄警告信息:

CREATE OR REPLACE FUNCTION check_inventory_threshold()
RETURNS TRIGGER AS $$
BEGIN
    IF NEW.quantity < 10 THEN  -- 假設(shè) 10 是閾值
        -- 在此處記錄警告或使用某種方式發(fā)送通知
        RAISE WARNING 'Product % is below threshold with quantity %', NEW.product_name, NEW.quantity;
        -- 可在此插入補(bǔ)貨請求或通知操作
    END IF;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

Step 1-3: 創(chuàng)建觸發(fā)器

設(shè)置一個(gè)觸發(fā)器,更新inventory表時(shí)調(diào)用觸發(fā)函數(shù):

CREATE TRIGGER inventory_check_trigger
AFTER INSERT OR UPDATE ON inventory
FOREACHROWEXECUTEPROCEDUREcheck_inventory_threshold();
Step 1-4: 使用 Python 進(jìn)行外部操作

一個(gè)Python腳本可以用于監(jiān)控警告并執(zhí)行更復(fù)雜的操作,比如發(fā)送電子郵件或自動(dòng)創(chuàng)建補(bǔ)貨單。以下是一個(gè)簡單的Python示例,假設(shè)你將警告日志記錄到一個(gè)專門的日志表中:

import psycopg2
from smtplib import SMTP


def send_notification(product_name, quantity):
    # 發(fā)送郵件通知邏輯(確保你已設(shè)置SMTP服務(wù)器配置)
    with SMTP('smtp.example.com') as smtp:
        smtp.sendmail('from@example.com', 'to@example.com',
                      f'Subject: Inventory Alert

Product {product_name} is below threshold with quantity {quantity}.') def check_and_notify(): try: # Connect to PostgreSQL database connection = psycopg2.connect( host="localhost", database="your_database", user="your_user", password="your_password" ) cursor = connection.cursor() # Query to check logs for low inventory query = """ SELECT product_name, quantity FROM inventory WHERE quantity < 10; """ cursor.execute(query) low_stock_items = cursor.fetchall() for product_name, quantity in low_stock_items: send_notification(product_name, quantity) except (Exception, psycopg2.DatabaseError) as error: print(f"Error: {error}") finally: if connection: cursor.close() connection.close() # Run the check and notify function check_and_notify()

2.自動(dòng)化任務(wù)

自動(dòng)執(zhí)行某些日常任務(wù),如記錄變化、生成日志或進(jìn)行審計(jì)。當(dāng)某個(gè)表中的數(shù)據(jù)被修改時(shí),觸發(fā)器可以自動(dòng)記錄修改前后的數(shù)據(jù)以供審計(jì),當(dāng)對特定表進(jìn)行插入、更新或刪除操作時(shí),觸發(fā)器能夠捕捉這些事件,并執(zhí)行相關(guān)的處理邏輯。 下面是一個(gè)如何使用 PostgreSQL 觸發(fā)器來記錄數(shù)據(jù)變化的示例。假設(shè)我們有一個(gè)名為employee_data的表,我們希望記錄每次數(shù)據(jù)更新時(shí)的操作者信息。

2-1. 創(chuàng)建一個(gè)用于日志記錄的表

首先,需要新建一個(gè)用于存儲(chǔ)變更日志的表。假設(shè)我們有一個(gè)名為employee_data的表,我們希望記錄每次數(shù)據(jù)更新時(shí)的操作者信息。

CREATE TABLE change_log (
    id SERIAL PRIMARY KEY,
    table_name TEXT,
    operation VARCHAR(10),
    changed_by TEXT,
    change_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    old_data JSONB,
    new_data JSONB
);

2-2. 創(chuàng)建一個(gè)觸發(fā)函數(shù)

接下來,創(chuàng)建一個(gè)觸發(fā)函數(shù)。當(dāng)employee_data表發(fā)生變化時(shí),調(diào)用該函數(shù)來記錄變更,檢測并獲取old_data和new_data,然后通過row_to_json函數(shù)將其轉(zhuǎn)換為 JSONB 格式存入日志表中。處理中請留意不同的操作對應(yīng)的日志記錄內(nèi)容的差異。

CREATE OR REPLACE FUNCTION log_employee_data_changes()
RETURNS TRIGGER AS $$
BEGIN
    IF TG_OP = 'DELETE' THEN
        INSERT INTO change_log (table_name, operation, changed_by, old_data)
        VALUES (
            TG_TABLE_NAME,
            TG_OP,
            SESSION_USER,
            row_to_json(OLD)
        );
    ELSE
        INSERT INTO change_log (table_name, operation, changed_by, old_data, new_data)
        VALUES (
            TG_TABLE_NAME,
            TG_OP,
            SESSION_USER,
            row_to_json(OLD),
            row_to_json(NEW)
        );
    END IF;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

TG_OP是 PostgreSQL 觸發(fā)器函數(shù)中的一個(gè)特殊變量。在觸發(fā)器函數(shù)中,TG_OP用于表示觸發(fā)事件的操作類型。它會(huì)被設(shè)置為以下字符串值之一,以標(biāo)識(shí)觸發(fā)器是由哪種數(shù)據(jù)庫操作激活的:

'INSERT': 觸發(fā)器是由插入操作激活的。

'UPDATE': 觸發(fā)器是由更新操作激活的。

'DELETE': 觸發(fā)器是由刪除操作激活的.

'TRUNCATE': 觸發(fā)器是由截?cái)嗖僮骷せ畹摹?/p>

在觸發(fā)器函數(shù)中使用TG_OP,可以根據(jù)不同的操作類型執(zhí)行不同的邏輯。 2-3. 創(chuàng)建觸發(fā)器

最后,為employee_data表創(chuàng)建一個(gè)觸發(fā)器,當(dāng)發(fā)生INSERT、UPDATE或DELETE操作時(shí)調(diào)用觸發(fā)函數(shù):

CREATE TRIGGER employee_data_changes
AFTER INSERT OR UPDATE OR DELETE ON employee_data
FOR EACH ROW EXECUTE PROCEDURE log_employee_data_changes();

2-4.如果沒有對應(yīng)的表employee_data,就建一個(gè)來測試

CREATE TABLE employee_data (
    employee_id SERIAL PRIMARY KEY,      -- 員工唯一標(biāo)識(shí)
    first_name VARCHAR(50) NOT NULL,     -- 員工的名字
    last_name VARCHAR(50) NOT NULL,      -- 員工的姓氏
    email VARCHAR(100) UNIQUE NOT NULL,  -- 員工的電子郵件地址
    phone_number VARCHAR(15),            -- 員工的聯(lián)系電話
    hire_date DATE NOT NULL,             -- 入職日期
    job_title VARCHAR(50),               -- 職位名稱
    department VARCHAR(50),              -- 所屬部門
    salary NUMERIC(10, 2),               -- 薪水
    manager_id INT,                      -- 上級(jí)主管ID,指向另一個(gè)員工
    CONSTRAINT fk_manager
        FOREIGN KEY(manager_id) 
        REFERENCES employee_data(employee_id) 
        ON DELETE SET NULL
);

2-5. 如果表中沒有數(shù)據(jù)就添加一條來測試

INSERT INTO employee_data (
    first_name,
    last_name,
    email,
    phone_number,
    hire_date,
    job_title,
    department,
    salary,
    manager_id
) VALUES (
    'ZZZ',                   -- First name
    'AAA',                    -- Last name
    'ZZZ.AAA@example.com',   -- Email address
    '123-456-7890',           -- Phone number
    '2023-11-01',             -- Hire date
    'Engineer',               -- Job title
    'Engineering',            -- Department
    75000,                    -- Salary
    NULL                      -- Manager ID (assuming no manager or manager not yet assigned)
);

3. 跨表更新或同步:

當(dāng)一個(gè)表發(fā)生變化時(shí)時(shí),觸發(fā)器可以用于自動(dòng)更新或同步其他表的數(shù)據(jù)。例如,在一個(gè)多表關(guān)聯(lián)的系統(tǒng)中,有一個(gè)訂單表order和一個(gè)庫存表inventory,如果訂單表中數(shù)據(jù)有變化,就觸發(fā)更新庫存表中的對應(yīng)產(chǎn)品的數(shù)據(jù)。 3.1建表示例

CREATE TABLE inventory (
    product_id SERIAL PRIMARY KEY,
    product_name VARCHAR(100),
    stock_quantity INT NOT NULL
);


CREATE TABLE orders (
    order_id SERIAL PRIMARY KEY,
    product_id INT REFERENCES inventory(product_id),
    quantity INT NOT NULL
);

3.2 創(chuàng)建觸發(fā)事件

當(dāng)order表中已經(jīng)發(fā)生insert,updat或者delete事件時(shí),就觸發(fā)下面的函數(shù)運(yùn)行。實(shí)際數(shù)據(jù)的加減操作,請根據(jù)實(shí)際關(guān)系進(jìn)行調(diào)整。這里的簡單邏輯是:

有新訂單添加時(shí),就在庫存表中減少產(chǎn)品庫存數(shù)

訂單數(shù)據(jù)有更新時(shí),就把庫存表中減去更新后訂單表中對應(yīng)產(chǎn)品的訂單數(shù)據(jù),然后加上更新前訂單表中對應(yīng)產(chǎn)品的數(shù)據(jù)

當(dāng)訂單取消(刪除)時(shí),就會(huì)在庫存數(shù)據(jù)上增加之訂單表中刪除的舊數(shù)據(jù)

CREATE OR REPLACE FUNCTION update_inventory()
RETURNS TRIGGER AS $$
BEGIN
    IF TG_OP = 'INSERT' THEN
        UPDATE inventory
        SET stock_quantity = stock_quantity - NEW.quantity
        WHERE product_id = NEW.product_id;
    ELSIF TG_OP = 'UPDATE' THEN
        UPDATE inventory
        SET stock_quantity = stock_quantity - NEW.quantity + OLD.quantity
        WHERE product_id = NEW.product_id;
    ELSIF TG_OP = 'DELETE' THEN
        UPDATE inventory
        SET stock_quantity = stock_quantity + OLD.quantity
        WHERE product_id = OLD.product_id;
    END IF;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

3.3 創(chuàng)建事件觸發(fā)器

CREATE TRIGGER trigger_orders_update
AFTER INSERT OR UPDATE OR DELETE ON orders
FOR EACH ROW EXECUTE PROCEDURE update_inventory();

(防止出現(xiàn)視覺疲勞)

4. 安全性檢查和防護(hù)

執(zhí)行安全性檢查,如防止未授權(quán)的數(shù)據(jù)更改或異常數(shù)據(jù)輸入。如果有可疑活動(dòng)或不當(dāng)數(shù)據(jù)修改,觸發(fā)器可以自動(dòng)拒絕操作或生成警告。假設(shè)你有一個(gè)敏感數(shù)據(jù)的表,如sensitive_data,需要確保只有授權(quán)用戶才能更新數(shù)據(jù)。 4.1建表sensitive_data示例

CREATE TABLE sensitive_data (
    id SERIAL PRIMARY KEY,
    data TEXT NOT NULL,
    last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

4.2 創(chuàng)建觸發(fā)函數(shù)進(jìn)行安全檢查

創(chuàng)建一個(gè)觸發(fā)函數(shù)來檢查是否是授權(quán)用戶在做修改。

CREATE OR REPLACE FUNCTION check_user_authorization()
RETURNS TRIGGER AS $$
BEGIN
    -- 簡單檢查:用戶是否在允許的列表中(實(shí)際應(yīng)該更加復(fù)雜)
    IF SESSION_USER <> 'authorized_user' THEN
        RAISE EXCEPTION 'Unauthorized user. Access denied.';
    END IF;
    -- 更新 last_modified 時(shí)間戳
    NEW.last_modified := CURRENT_TIMESTAMP;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

4.3為表創(chuàng)建觸發(fā)器

CREATE TRIGGER secure_update_trigger
BEFORE UPDATE ON sensitive_data
FOR EACH ROW EXECUTE PROCEDURE check_user_authorization();

該事件觸發(fā)器的功能說明

功能:這個(gè)示例功能是,當(dāng)有人試圖更新sensitive_data表中的數(shù)據(jù)時(shí),觸發(fā)器函數(shù)check_user_authorization()會(huì)自動(dòng)檢查發(fā)起更新的數(shù)據(jù)庫用戶是否有權(quán)限。如果沒有權(quán)限,拋出異常并阻止操作。

擴(kuò)展:在實(shí)際的生產(chǎn)環(huán)境中,這種安全性檢查會(huì)更復(fù)雜,可能包括日志記錄、詳細(xì)的用戶權(quán)限檢查、使用角色來管理權(quán)限等。

安全性:使用觸發(fā)器確保只有合適和經(jīng)過驗(yàn)證的用戶可以進(jìn)行關(guān)鍵數(shù)據(jù)修改,這是保護(hù)數(shù)據(jù)完整性的一部分。

審計(jì):這種自動(dòng)檢查可集成到更大的審計(jì)框架中,以全面監(jiān)控和存儲(chǔ)所有數(shù)據(jù)修改嘗試記錄。

5.事件通知(客戶端程序配合事件觸發(fā)的同步處理方式)

使用事件觸發(fā)器和事件通知來實(shí)現(xiàn)對特定數(shù)據(jù)庫事件的響應(yīng)和處理。使用LISTEN和NOTIFY機(jī)制,數(shù)據(jù)庫客戶端可以監(jiān)聽特定的通道,并在觸發(fā)器函數(shù)中發(fā)送通知。這在需要實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)庫事件時(shí)非常有用。下面是一個(gè)使用 PostgreSQL 實(shí)現(xiàn)事件通知的示例。

假設(shè)我們希望在orders表中插入新訂單時(shí)發(fā)送通知,以便外部系統(tǒng)或服務(wù)進(jìn)行相應(yīng)處理。

5.1建一個(gè)orders表方便示例

CREATE TABLE orders (
    order_id SERIAL PRIMARY KEY,
    product_id INT NOT NULL,
    quantity INT NOT NULL,
    order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
觸發(fā)器可以用于事件通知,例如在數(shù)據(jù)變化時(shí)發(fā)送電子郵件通知相關(guān)人員。這在實(shí)時(shí)監(jiān)控和響應(yīng)系統(tǒng)中非常有用。
5.2 建立觸發(fā)函數(shù)
CREATE OR REPLACE FUNCTION notify_new_order()
RETURNS TRIGGER AS $$
BEGIN
    -- 使用 NOTIFY 發(fā)送通知,通道名為 'new_order'
    PERFORM pg_notify('new_order', 'New order placed: ' || NEW.order_id);
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

5.3創(chuàng)建觸發(fā)器 為orders表創(chuàng)建觸發(fā)器,以在插入新記錄時(shí)調(diào)用觸發(fā)函數(shù)。
CREATE TRIGGER notify_order_insert
AFTER INSERT ON orders
FOR EACH ROW EXECUTE PROCEDURE notify_new_order();

5.4使用 Python 監(jiān)聽通知 我們可以使用 Python 腳本來監(jiān)聽并處理通知。以下是一個(gè)簡單的示例,使用psycopg2庫監(jiān)聽new_order通道。
import psycopg2
import select


def listen_for_new_orders():
    try:
        # Connect to your PostgreSQL database
        connection = psycopg2.connect(
            dbname="your_db",
            user="your_user",
            password="your_password",
            host="localhost"
        )
        connection.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
        cursor = connection.cursor()


        # Listen for notifications on the 'new_order' channel
        cursor.execute("LISTEN new_order;")
        print("Waiting for notifications on channel 'new_order'...")


        while True:
            # Use select() to wait for notification
            if select.select([connection], [], [], 5) == ([], [], []):
                print("No new notifications.")
            else:
                connection.poll()
                while connection.notifies:
                    notify = connection.notifies.pop(0)
                    print(f"Got NOTIFY: {notify.channel} - {notify.payload}")


    except (Exception, psycopg2.DatabaseError) as error:
        print(f"Error: {error}")
    finally:
        if connection:
            cursor.close()
            connection.close()


# Call the function to start listening for notifications
if__name__=='__main__':
    listen_for_new_orders()

6. 事件通知(客戶端程序異步多線程的方式進(jìn)行檢測和操作)

示例的數(shù)據(jù)庫表和事件觸發(fā)的設(shè)置或創(chuàng)建,和示例5中相同,不過這里我們要增加一些復(fù)雜度,畢竟,程序處理要盡可能避免堵塞的方式進(jìn)行等待讀取。這里設(shè)想另外一種使用場景:

一方面客戶端要檢測數(shù)據(jù)庫的orders表中的數(shù)據(jù)變化;另一方面,客戶端還在繼續(xù)讀取(或者其他操作)這個(gè)數(shù)據(jù)庫中的數(shù)據(jù)。

import threading
import psycopg2
import select
import time


# Global flag to indicate whether the threads should continue running
running = True


def listen_for_new_orders():
    try:
        # Connect to your PostgreSQL database
        connection = psycopg2.connect(
            dbname="your_db",
            user="your_user",
            password="your_password",
            host="localhost"
        )
        connection.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
        cursor = connection.cursor()


        # Listen for notifications on the 'new_order' channel
        cursor.execute("LISTEN new_order;")
        print("Waiting for notifications on channel 'new_order'...")


        while running:
            # Use select() to wait for notification
            if select.select([connection], [], [], 5) == ([], [], []):
                continue
            else:
                connection.poll()
                while connection.notifies:
                    notify = connection.notifies.pop(0)
                    print(f"Got NOTIFY: {notify.channel} - {notify.payload}")


    except (Exception, psycopg2.DatabaseError) as error:
        print(f"Error: {error}")
    finally:
        if connection:
            cursor.close()
            connection.close()


def read_database_records():
    while running:
        try:
            # Example of reading from PostgreSQL
            connection = psycopg2.connect(
                dbname="your_db",
                user="your_user",
                password="your_password",
                host="localhost"
            )
            cursor = connection.cursor()


            # Example query to periodically read data (replace with actual query)
            cursor.execute("SELECT * FROM orders;")
            records = cursor.fetchall()
            for record in records:
                print(f"Order Record: {record}")


            time.sleep(10)  # Wait before reading again to simulate periodic check


        except (Exception, psycopg2.DatabaseError) as error:
            print(f"Error: {error}")
        finally:
            if connection:
                cursor.close()
                connection.close()


def main():
    try:
        # Create threads for listening and reading
        listener_thread = threading.Thread(target=listen_for_new_orders)
        reader_thread = threading.Thread(target=read_database_records)


        # Start the threads
        listener_thread.start()
        reader_thread.start()


        # Wait for both threads to complete (or terminate on Ctrl+C)
        listener_thread.join()
        reader_thread.join()


    except KeyboardInterrupt:
        # Set the running flag to False to stop the threads
        global running
        running = False
        print("Exiting...")


if __name__ == "__main__":
    main()

請留意上面的示例python代碼中,數(shù)據(jù)庫的連接使用了ISOLATION_LEVEL_AUTOCOMMIT,這就意味著每次涉及到數(shù)據(jù)更改或者增加的操作,數(shù)據(jù)庫將自動(dòng)提交了。如果要手動(dòng)方式提交,那就需要配置一個(gè)ISOLATION_LEVEL_READ_COMMITTED。 另外需要留意,前面的事件觸發(fā)示例中,用了:
...
FOR EACH ROW EXECUTE PROCEDURE your_trigger_func();
...
這個(gè)代碼的執(zhí)行是針對每條記錄的發(fā)生來觸發(fā)了。請根據(jù)實(shí)際應(yīng)用的操作需要進(jìn)行調(diào)整。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3884

    瀏覽量

    65584
  • 觸發(fā)器
    +關(guān)注

    關(guān)注

    14

    文章

    2029

    瀏覽量

    61764
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4365

    瀏覽量

    63872
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4822

    瀏覽量

    85875

原文標(biāo)題:數(shù)據(jù)庫事件觸發(fā)的設(shè)置和應(yīng)用,及客戶端程序?qū)κ录耐?、異步讀取操作

文章出處:【微信號(hào):安費(fèi)諾傳感器學(xué)堂,微信公眾號(hào):安費(fèi)諾傳感器學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Labview如何設(shè)置數(shù)據(jù)庫訪問權(quán)限?

    現(xiàn)在想通過設(shè)置Labview來更改數(shù)據(jù)庫的權(quán)限,數(shù)據(jù)庫是簡單的ACESS,
    發(fā)表于 09-27 14:33

    數(shù)據(jù)庫觸發(fā)器機(jī)制的設(shè)計(jì)與實(shí)現(xiàn)

    數(shù)據(jù)庫管理系統(tǒng)作為信息系統(tǒng)的核心部件! 在信息化時(shí)代所充當(dāng)?shù)慕巧瞧渌魏诬浖荒芴娲? 當(dāng)前數(shù)據(jù)庫應(yīng)用的一個(gè)普遍要求是數(shù)據(jù)庫管理系統(tǒng)能夠在一些數(shù)據(jù)庫相關(guān)事件
    發(fā)表于 07-02 15:14 ?24次下載

    什么是支持數(shù)據(jù)庫,什么是中宏數(shù)據(jù)庫

    什么是支持數(shù)據(jù)庫 軟硬件系統(tǒng)是否需要數(shù)據(jù)庫支持,及所能支持的數(shù)據(jù)庫類型,如SQL,Oracle,exchange。 什
    發(fā)表于 06-17 08:09 ?1031次閱讀

    數(shù)據(jù)庫索引技術(shù)應(yīng)用

    在對數(shù)據(jù)庫的索引技術(shù)進(jìn)行討論和研究,論述如何準(zhǔn)確有效的設(shè)置數(shù)據(jù)庫索引,并結(jié)合具體的實(shí)例對數(shù)據(jù)庫索引技術(shù)的應(yīng)用進(jìn)行了論述,以期給數(shù)據(jù)庫設(shè)計(jì)者提
    發(fā)表于 11-04 11:28 ?26次下載

    Delphi教程之動(dòng)態(tài)設(shè)置遠(yuǎn)程數(shù)據(jù)庫的查詢參數(shù)

    Delphi教程之動(dòng)態(tài)設(shè)置遠(yuǎn)程數(shù)據(jù)庫的查詢參數(shù),很好的Delphi資料,快來下載學(xué)習(xí)吧。
    發(fā)表于 04-11 15:59 ?3次下載

    SQL Server數(shù)據(jù)庫學(xué)習(xí)總結(jié)

    經(jīng)過一段時(shí)間的學(xué)習(xí),也對數(shù)據(jù)庫有了一些認(rèn)識(shí)。數(shù)據(jù)庫基本是由表,關(guān)系,操作組成;對于初學(xué)者首先要學(xué)的:1.數(shù)據(jù)庫是如何存儲(chǔ)數(shù)據(jù)的.表,約束,觸發(fā)
    發(fā)表于 11-28 17:36 ?4740次閱讀
    SQL Server<b class='flag-5'>數(shù)據(jù)庫</b>學(xué)習(xí)總結(jié)

    數(shù)據(jù)庫教程之如何進(jìn)行數(shù)據(jù)庫設(shè)計(jì)

    本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)據(jù)庫教程之如何進(jìn)行數(shù)據(jù)庫設(shè)計(jì)內(nèi)容包括了:1 數(shù)據(jù)庫設(shè)計(jì)概述 ,2 數(shù)據(jù)庫需求分析 ,3 數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì) ,4
    發(fā)表于 10-19 10:41 ?21次下載
    <b class='flag-5'>數(shù)據(jù)庫</b>教程之如何進(jìn)行<b class='flag-5'>數(shù)據(jù)庫</b>設(shè)計(jì)

    數(shù)據(jù)庫學(xué)習(xí)教程之數(shù)據(jù)庫的發(fā)展?fàn)顩r如何數(shù)據(jù)庫有什么新發(fā)展

    本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)據(jù)庫學(xué)習(xí)教程之數(shù)據(jù)庫的發(fā)展?fàn)顩r如何數(shù)據(jù)庫有什么新發(fā)展主要內(nèi)容包括了:1 數(shù)據(jù)庫技術(shù)發(fā)展概述2 數(shù)據(jù)庫發(fā)展的3個(gè)
    發(fā)表于 10-25 16:29 ?5次下載
    <b class='flag-5'>數(shù)據(jù)庫</b>學(xué)習(xí)教程之<b class='flag-5'>數(shù)據(jù)庫</b>的發(fā)展?fàn)顩r如何<b class='flag-5'>數(shù)據(jù)庫</b>有什么新發(fā)展

    數(shù)據(jù)庫教程之PHP訪問MySQL數(shù)據(jù)庫的理論知識(shí)詳細(xì)說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)據(jù)庫教程之PHP訪問MySQL數(shù)據(jù)庫的理論知識(shí)詳細(xì)說明包括了:1.phpMyAdmin的安裝和使用,2.PHP操作數(shù)據(jù)庫,3.MySQL的存儲(chǔ)過程、觸發(fā)
    發(fā)表于 06-17 17:06 ?15次下載

    數(shù)據(jù)庫和自建數(shù)據(jù)庫的區(qū)別及應(yīng)用

    數(shù)據(jù)庫是指優(yōu)化和部署在云端的數(shù)據(jù)庫,阿里云和騰訊云都提供云數(shù)據(jù)庫,云數(shù)據(jù)庫和自己搭建的數(shù)據(jù)庫有什么區(qū)別?有必要使用云
    的頭像 發(fā)表于 11-20 16:26 ?4812次閱讀
    云<b class='flag-5'>數(shù)據(jù)庫</b>和自建<b class='flag-5'>數(shù)據(jù)庫</b>的區(qū)別及應(yīng)用

    ACS數(shù)據(jù)庫與RSC數(shù)據(jù)庫比較研究

    ACS數(shù)據(jù)庫與RSC數(shù)據(jù)庫比較研究(開關(guān)電源技術(shù)與設(shè)計(jì)pdf百度云)-ACS數(shù)據(jù)庫與RSC數(shù)據(jù)庫比較研究? ? ? ? ? ? ? ? ?
    發(fā)表于 09-15 11:35 ?5次下載
    ACS<b class='flag-5'>數(shù)據(jù)庫</b>與RSC<b class='flag-5'>數(shù)據(jù)庫</b>比較研究

    數(shù)據(jù)庫建立|數(shù)據(jù)庫創(chuàng)建的方法?

    數(shù)據(jù)庫是一個(gè)存儲(chǔ)關(guān)鍵數(shù)據(jù)的文件系統(tǒng)。利用數(shù)據(jù)庫管理系統(tǒng)建立每個(gè)人的數(shù)據(jù)庫可以更好地提供安全。 數(shù)據(jù)庫建立|
    的頭像 發(fā)表于 07-14 11:15 ?1468次閱讀

    python讀取數(shù)據(jù)庫數(shù)據(jù) python查詢數(shù)據(jù)庫 python數(shù)據(jù)庫連接

    python讀取數(shù)據(jù)庫數(shù)據(jù) python查詢數(shù)據(jù)庫 python數(shù)據(jù)庫連接 Python是一門高級(jí)編程語言,廣泛應(yīng)用于各種領(lǐng)域。其中,Python在
    的頭像 發(fā)表于 08-28 17:09 ?2071次閱讀

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—通過拼接數(shù)據(jù)庫碎片恢復(fù)SQLserver數(shù)據(jù)庫

    一個(gè)運(yùn)行在存儲(chǔ)上的SQLServer數(shù)據(jù)庫,有1000多個(gè)文件,大小幾十TB。數(shù)據(jù)庫每10天生成一個(gè)NDF文件,每個(gè)NDF幾百GB大小。數(shù)據(jù)庫包含兩個(gè)LDF文件。 存儲(chǔ)損壞,數(shù)據(jù)庫
    的頭像 發(fā)表于 10-31 13:21 ?542次閱讀
    <b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—通過拼接<b class='flag-5'>數(shù)據(jù)庫</b>碎片恢復(fù)SQLserver<b class='flag-5'>數(shù)據(jù)庫</b>

    數(shù)據(jù)庫是哪種數(shù)據(jù)庫類型?

    數(shù)據(jù)庫是一種部署在虛擬計(jì)算環(huán)境中的數(shù)據(jù)庫,它融合了云計(jì)算的彈性和可擴(kuò)展性,為用戶提供高效、靈活的數(shù)據(jù)庫服務(wù)。云數(shù)據(jù)庫主要分為兩大類:關(guān)系型數(shù)據(jù)庫
    的頭像 發(fā)表于 01-07 10:22 ?340次閱讀