Ⅰ 資料庫在軟體項目中到底是一個什麼樣的角色
在access中如何創建資料庫。你認為資料庫在網站開發中所扮演的角色是什麼。使用資料庫和使用文件,兩者的優缺點各是什麼。
首先在access裡面填寫所用的信息,將資料庫創建,在導入程序設計里進行完成代碼。
首先打開我們的access程序,打開方法是單擊開始——所有程序。
所有程序中找到microsoft office文件夾,打開它
找到access ,點擊打開。
在access界面中,點擊文件——新建。
擇在界面的右邊出現了新建對話框,選擇空資料庫。
選擇一個存放該文件的位置,然後選該資料庫,點擊創建。
資料庫開發人員設計及實作關系資料庫模型 (邏輯及實體) 及資料庫儲存對象。他們也使用用戶定義的函式、觸發程序、儲存的程序、Transact-sql 或 CLR 為伺服器進行程序設計。他們使用 SQL 查詢擷取或修改數據,或是調校及優化查詢。要是初學的話首先就要精通SQL語言,這是基礎,其他就是多聽多看多學了
優點:(1)存儲方式單一(2)面向對象(3)界面友好、易操作(4)集成環境、處理多種數據信息(5)Access支持ODBC(開發資料庫互連,Open Data Base Connectivity),利用Access強大的DDE(動態數據交換)和OLE(對象的聯接和嵌入)特性,可以在一個數據表中嵌入點陣圖、聲音、Excel表格、Word文檔,還可以建立動態的資料庫報表和窗體等。Access還可以將程序應用於網路,並與網路上的動態數據相聯接
缺點:1.資料庫過大,一般ACCESS資料庫達到50M左右的時候性能會急劇下降!
2.網站訪問頻繁,經常達到100人左右的在線。
3.記錄數過多,一般記錄數達到10萬條左右的時候性能就會急劇下降!
Ⅱ Oracle資料庫中的索引詳解
一 ROWID的概念
存儲了row在數據文件中的具 *** 置 位編碼的數據 A Z a z + 和 /
row在數據塊中的存儲方式
SELECT ROWID last_name FROM hr employees WHERE department_id = ;
比如 OOOOOOFFFBBBBBBRRR
OOOOOO data object number 對應dba_objects data_object_id
FFF file# 對應v$datafile file#
BBBBBB block#
RRR row#
Dbms_rowid包
SELECT dbms_rowid rowid_block_number( AAAGFqAABAAAIWEAAA ) from al;
具體到特定的物理文件
二 索引的概念
類似書的目錄結構
Oracle 的 索引 對象 與表關聯的可選對象 提高SQL查詢語句的速度
索引直接脊滑指向包含所查詢值的行的位置 減少磁碟I/O
與所索引的表是相互獨立的物理結構
Oracle 自動使用並維護索引 插入 刪除 更新表後 自動更新索引
語法 CREATE INDEX index ON table (column[ column] );
B tree結構(非bitmap)
[一]了解索引的工櫻拿臘作原理
表 emp
目標 查詢Frank的工資salary
建立索引 create index emp_name_idx on emp(name);
[試驗]測試索引的作用
運行/rdbms/admin/utlxplan 腳本
建立測試表
create table t as select * from dba_objects;
insert into t select * from t;
create table indextable
as select rownum id owner object_name subobject_name
object_id data_object_id object_type created
from t;
set autotrace trace explain
set timing on
分析表 可以得到cost
查詢 object_name= DBA_INDEXES
在object_name列上建立索引
再查詢
[思考]索引的代價
插入 更新
三 唯一索引
何時創建 當某列任意兩行的值都不相同
當建立Primary Key(主鍵)或者Unique constraint(唯一約束)時 唯一索引將被自動建立
語法 CREATE UNIQUE INDEX index ON table (column);
演示
四 組合索引
何時創建 當兩個或多個列經常一起出現在where條件中時 則在這些列上同時創建組合索引
組合索引中列的順序是任意的 也無需相鄰 但是建議將最頻繁訪問的列放在列表的最前面
演示(組合列 單獨列)
五 點陣圖索引
何時創建
列中有非常多的重復的值時候 例如某列保存了 性別 信息
Where 條件中包含了很多OR操作符
較少的update操作 因敏稿為要相應的跟新所有的bitmap
結構 點陣圖索引使用點陣圖作為鍵值 對於表中的每一數據行點陣圖包含了TRUE( ) FALSE( ) 或NULL值
優點 點陣圖以一種壓縮格式存放 因此佔用的磁碟空間比標准索引要小得多
語法 CREATE BITMAP INDEX index ON table (column[ column] );
掩飾
create table bitmaptable as select * from indextable where owner in( SYS PUBLIC );
分析 查找 建立索引 查找
六 基於函數的索引
何時創建 在WHERE條件語句中包含函數或者表達式時
函數包括 算數表達式 PL/SQL函數 程序包函數 SQL函數 用戶自定義函數
語法 CREATE INDEX index ON table (FUNCTION(column));
演示
必須要分析表 並且query_rewrite_enabled=TRUE
或者使用提示/*+ INDEX(ic_index)*/
七 反向鍵索引
目的 比如索引值是一個自動增長的列
多個用戶對集中在少數塊上的索引行進行修改 容易引起資源的爭用 比如對數據塊的等待 此時建立反向索引
性能問題
語法
重建為標准索引 反之不行
八 鍵壓縮索引
比如表landscp的數據如下
site feature job
Britten Park Rose Bed Prune
Britten Park Rose Bed Mulch
Britten Park Rose Bed Spray
Britten Park Shrub Bed Mulch
Britten Park Shrub Bed Weed
Britten Park Shrub Bed Hoe
……
查詢時 以上 列均在where條件中同時出現 所以建立基於以上 列的組合索引 但是發現重復值很多 所以考慮壓縮特性
Create index zip_idx
on landscp(site feature job)
press ;
將索引項分成前綴(prefix)和後綴(postfix)兩部分 前兩項被放置到前綴部分
Prefix : Britten Park Rose Bed
Prefix : Britten Park Shrub Bed
實際所以的結構為
Prune
Mulch
Spray
Mulch
Weed
Hoe
特點 組合索引的前綴部分具有非選擇性時 考慮使用壓縮 減少I/O 增加性能
九 索引組織表(IOT)
將表中的數據按照索引的結構存儲在索引中 提高查詢速度
犧牲插入更新的性能 換取查詢性能 通常用於數據倉庫 提供大量的查詢 極少的插入修改工作
必須指定主鍵 插入數據時 會根據主鍵列進行B樹索引排序 寫入磁碟
十 分區索引
簇:
A cluster is a group of tables that share the same data blocks because they share mon columns and are often used together
lishixin/Article/program/Oracle/201311/17769
Ⅲ 在oracle資料庫的建表中,Sequences值的目的是什麼
Sequences目的,就是得到一個自動遞減或遞增的值。
Sequences就是一個計數器,類似於Sql Server資料庫中自動增加的數字。
因為Oracle資料庫中伏升鉛,建表的時候,沒有自動增量的這樣一個數字類型欄位,
所以有時候需要用到這笑好類欄位缺好的時候,就要調用Sequences來取得值。
Sequences可以設置為,當使用到設定的最大值時,是否重新開始循環使用。
調用時,直接寫在Sql里即可,比如:
select sequence.NEXTVAL from al;
Ⅳ oracle資料庫,觸發器有什麼用途,請用實例說明一下。
功能:
1、 允許/限制對表的修改
2、 自動生成派生列,比如自增欄位
3、 強制數據一致性
4、 提供審計和日誌記錄
5、 防止無效的事務處理
6、 啟用復雜的盯此業務邏輯
開始
create trigger biufer_employees_department_id
before insert or update
of department_id
on employees
referencing old as old_value
new as new_value
for each row
when (new_value.department_id<>80 )
begin
:new_value.commission_pct :=0;
end;
/
觸發器的組成部分:
1、 觸發器名稱
2、 觸發語句
3、 觸發器限制
4、 觸發操作
1、 觸發器名稱
create trigger biufer_employees_department_id
命名習慣:
biufer(before insert update for each row)
employees 表名
department_id 列名
2、 觸發語句
比如:
表或神喊視圖上的DML語句
DDL語句
資料庫關閉或啟動,startup shutdown 等等
before insert or update
of department_id
on employees
referencing old as old_value
new as new_value
for each row
說明:
1、 無論是否規定了department_id ,對employees表進行insert的時候
2、 對employees表的department_id列進行update的時候
3、 觸發器限制
when (new_value.department_id<>80 )
限制不是必須的。此例表示如果列department_id不等於80的時候,觸發器就會執行。
其中的new_value是代表跟新之後的值。
4、 觸發操作
是觸發器的主體
begin
:new_value.commission_pct :=0;
end;
主體很簡單,就是將更新後的commission_pct列置為0
觸發:
insert into employees(employee_id,
last_name,first_name,hire_date,job_id,email,department_id,salary,commission_pct )
values( 12345,'Chen','Donny', sysdate, 12, 『[email protected]',60,10000,.25);
select commission_pct from employees where employee_id=12345;
觸發器不會通知用戶,便改變了用戶的輸入值。
觸發器類型:
1、 語句觸發器
2、 行觸發器
3、 INSTEAD OF 觸發器
4、 系統條件觸發器
5、 用戶事件觸發器
1、 語句觸發器
是在表上或者某些情況下的視圖上執行的特定語句或者語句組上的觸發器。能夠與INSERT、UPDATE、
DELETE或者組合上進行關聯。但是無論使用什麼樣的組合,各個語句觸發器都只會針對指定語句激活一次
。比如,無論update多少行,也只會調用一次update語句觸發器。
例子:
需要對在表上進行DML操作的用戶進行安全檢查,看是否具有合適的特權。
Create table foo(a number);
Create trigger biud_foo
Before insert or update or delete
On foo
Begin
If user not in (『DONNY') then
Raise_application_error(-20001, 『You don't have access to modify this table.');
End if;
End;
/
即使SYS,SYSTEM用戶也不能修改foo表
[試驗]
對凱瞎迅修改表的時間、人物進行日誌記錄。
1、 建立試驗表
create table employees_ as select *from hr.employees
2、 建立日誌表
create table employees_log(
who varchar2(30),
when date);
3、 在employees_表上建立語句觸發器,在觸發器中填充employees_log 表。
Create or replace trigger biud_employee_
Before insert or update or delete
On employees_
Begin
Insert into employees_log(
Who,when)
Values( user, sysdate);
End;
/
4、 測試
update employees_ set salary= salary*1.1;
select *from employess_log;
5、 確定是哪個語句起作用?
即是INSERT/UPDATE/DELETE中的哪一個觸發了觸發器?
可以在觸發器中使用INSERTING / UPDATING / DELETING 條件謂詞,作判斷:
begin
if inserting then
-----
elsif updating then
-----
elsif deleting then
------
end if;
end;
if updating(『COL1') or updating(『COL2') then
------
end if;
[試驗]
1、 修改日誌表
alter table employees_log
add (action varchar2(20));
2、 修改觸發器,以便記錄語句類型。
Create or replace trigger biud_employee_
Before insert or update or delete
On employees_
Declare
L_action employees_log.action%type;
Begin
if inserting then
l_action:='Insert';
elsif updating then
l_action:='Update';
elsif deleting then
l_action:='Delete';
else
raise_application_error(-20001,'You should never ever get this error.');
Insert into employees_log(
Who,action,when)
Values( user, l_action,sysdate);
End;
/
3、 測試
insert into employees_( employee_id, last_name, email, hire_date, job_id)
values(12345,'Chen','Donny@hotmail',sysdate,12);
select *from employees_log
update employees_ set salary=50000 where employee_id = 12345;
2、 行觸發器
是指為受到影響的各個行激活的觸發器,定義與語句觸發器類似,有以下兩個例外:
1、 定義語句中包含FOR EACH ROW子句
2、 在BEFORE……FOR EACH ROW觸發器中,用戶可以引用受到影響的行值。
比如:
定義:
create trigger biufer_employees_department_id
before insert or update
of department_id
on employees_
referencing old as old_value
new as new_value
for each row
when (new_value.department_id<>80 )
begin
:new_value.commission_pct :=0;
end;
/
Referencing 子句:
執行DML語句之前的值的默認名稱是 :old ,之後的值是 :new
insert 操作只有:new
delete 操作只有 :old
update 操作兩者都有
referencing子句只是將new 和old重命名為new_value和old_value,目的是避免混淆。比如操作一個名為
new的表時。
作用不很大。
[試驗]:為主健生成自增序列號
drop table foo;
create table foo(id number, data varchar2(20));
create sequence foo_seq;
create or replace trigger bifer_foo_id_pk
before insert on foo
for each row
begin
select foo_seq.nextval into :new.id from al;
end;
/
insert into foo(data) values(『donny');
insert into foo values(5,'Chen');
select * from foo;
3、 INSTEAD OF 觸發器更新視圖
Create or replace view company_phone_book as
Select first_name||', '||last_name name, email, phone_number,
employee_id emp_id
From hr.employees;
嘗試更新email和name
update hr.company_phone_book
set name='Chen1, Donny1'
where emp_id=100
create or replace trigger update_name_company_phone_book
INSTEAD OF
Update on hr.company_phone_book
Begin
Update hr.employees
Set employee_id=:new.emp_id,
First_name=substr(:new.name, instr(:new.name,',')+2),
last_name= substr(:new.name,1,instr(:new.name,',')-1),
phone_number=:new.phone_number,
email=:new.email
where employee_id=:old.emp_id;
end;
4、 系統事件觸發器
系統事件:資料庫啟動、關閉,伺服器錯誤
create trigger ad_startup
after startup
on database
begin
-- do some stuff
end;
/
5、 用戶事件觸發器
用戶事件:用戶登陸、注銷,CREATE / ALTER / DROP / ANALYZE / AUDIT / GRANT / REVOKE /
RENAME / TRUNCATE / LOGOFF
例子:記錄刪除對象
1. 日誌表
create table droped_objects(
object_name varchar2(30),
object_type varchar2(30),
dropped_on date);
2.觸發器
create or replace trigger log_drop_trigger
before drop on donny.schema
begin
insert into droped_objects values(
ora_dict_obj_name, -- 與觸發器相關的函數
ora_dict_obj_type,
sysdate);
end;
/
3. 測試
create table drop_me(a number);
create view drop_me_view as select *from drop_me;
drop view drop_me_view;
drop table drop_me;
select *from droped_objects
禁用和啟用觸發器
alter trigger <trigger_name> disable;
alter trigger <trigger_name> enable;
事務處理:
在觸發器中,不能使用commit / rollback
因為ddl語句具有隱式的commit,所以也不允許使用
視圖:
dba_triggers
Ⅳ mysql資料庫主鍵作用
主要的作用主要確定該數據的唯一性。比如說ID=1,NAME=張三。我們要在資料庫中,找到這條數據可以使用select * from 表 where id=1 這樣就可以把張三查找出來了。而這個張三,也可以出現同名,所有用ID來做主鍵。
insert into 是插入操作。當ID設置為了主鍵,再插入一個相同的主鍵值,就為報錯誤,並不會更新,你想要個更新就必須執行UPDATE。
Ⅵ SQL AUTO INCREMENT 欄位介紹
我們通常希望在每次插入新記錄時,自動地創建主鍵欄位的值。
我們可以在表中創建一個 auto-increment 欄位。
用於 MySQL 的語法
下列 SQL 語句把 Persons 表中的 P_Id 列定義為 auto-increment 主鍵:
CREATE TABLE Persons
(P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id))
MySQL 使用 AUTO_INCREMENT 關鍵字來執行 auto-increment 任務。
默認地,AUTO_INCREMENT 的開始值是 1,每條新記錄遞增 1。
要讓 AUTO_INCREMENT 序列以其他的值起始,請使用下列 SQL 語法:
ALTER TABLE Persons AUTO_INCREMENT=100
要在 Persons 表衡正中插入新記錄,我們不必為 P_Id 列規定值(會自動添加一個唯一的值):
INSERT INTO Persons (FirstName,LastName)
VALUES (Bill,Gates)
上面的 SQL 語句會在 Persons 表中插入一條新記錄。P_Id 會被賦予一個唯一的值。FirstName 會被設置為 Bill,LastName 列會被設置為 Gates。
用於 SQL Server 的語法
下列 SQL 語句把 Persons 表中的 P_Id 列定義為 auto-increment 主鍵:
CREATE TABLE Persons
(P_Id int PRIMARY KEY IDENTITY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255))
MS SQL 使用 IDENTITY 關鍵字來執行 auto-increment 任務。
默認地,IDENTITY 的開始值是 1,每條新記錄遞增 1。
要規定 P_Id 列以 20 起始且遞增 10,請把 identity 改為 IDENTITY(20,10)
要在 Persons 表中插入新記錄,我們不必為 P_Id 列規瞎攜定值(會自動添加一個唯一的值):
INSERT INTO Persons (FirstName,LastName)
VALUES (Bill,Gates)
上面的 SQL 語句會在 Persons 表中插入一條新記錄。P_Id 會被賦予一個唯一的值。FirstName 會被設置為 Bill,LastName 列會被設置為 Gates。
用於 Access 的語法
下列 SQL 語句把 Persons 表中的 P_Id 列定義為 auto-increment 主鍵:
CREATE TABLE Persons
(P_Id int PRIMARY KEY AUTOINCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255))
MS Access 使用 AUTOINCREMENT 關鍵字來執行 auto-increment 任務。
默認地,AUTOINCREMENT 的開始值是 1,每條新記錄遞增 1。
要規定 P_Id 列以 20 起始且遞增 10,請把 autoincrement 改為 AUTOINCREMENT(20,10)
要在 Persons 表中插入新記錄,我們不必為 P_Id 列規定值(會自動添加一個唯一的值):
INSERT INTO Persons (FirstName,LastName)
VALUES (Bill,Gates)
上面的 SQL 語句會在 Persons 表中插入一條新記錄。P_Id 會被賦予一個唯一的值。FirstName 會被設置為 Bill,LastName 列會被設置為 Gates。
用於 Oracle 的語法
在 Oracle 中,代碼稍微復雜一點。咐神悔
您必須通過 sequence 對創建 auto-increment 欄位(該對象生成數字序列)。
請使用下面的 CREATE SEQUENCE 語法:
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10
上面的代碼創建名為 seq_person 的序列對象,它以 1 起始且以 1 遞增。該對象緩存 10 個值以提高性能。CACHE 選項規定了為了提高訪問速度要存儲多少個序列值。
要在 Persons 表中插入新記錄,我們必須使用 nextval 函數(該函數從 seq_person 序列中取回下一個值):
INSERT INTO Persons (P_Id,FirstName,LastName)
VALUES (seq_person.nextval,Lars,Monsen)
上面的 SQL 語句會在 Persons 表中插入一條新記錄。P_Id 的賦值是來自 seq_person 序列的下一個數字。FirstName 會被設置為 Bill,LastName 列會被設置為 Gates。
Ⅶ 過程角色在系統中如何實現的,在資料庫中怎麼對接
過程角色是業務流程中的一種參與者,通常是指在業務流程中扮演特定角色的人員、職位或組織。在系統中實現過程角色需要考慮以下幾個方面:
1. 定義過程舉段角色:需要根據業務流程的需求,明確各個過程角色的名稱、職責、許可權等信息。
2. 系統界面:需要在系統界面中提供過程角色所需要的操作和信息輸入界面。
3. 系統邏輯:需要在系統中實現過程角色的操作邏輯,包括對數據的讀寫、流轉、校驗、審核等操作。
4. 許可權控制:需要根據過程角色的許可權設置,對系統中的各個功能和數據進行許可權控制,確保只有符合條件的角色才能進行相應的操作。
在資料庫中對接過程角色通常包括以下幾個方面:
1. 資料庫設計:需要根據業務流程的需求設計資料庫銷賀表結構,明確各個表之間的關系,以及與過程角色相關的數據欄位。
2. 數據存儲:需要將系統中產生的數據進行存儲,包括與過程角色相關的數據,例如過程角色的名稱、職責、許可權等信息。
3. 數據訪問:需要在系統中實現對資料庫的訪問邏輯,包括數據的讀取、寫入、更新、刪除等操作,以便過程角色能夠對數據進行操作。
4. 數據許可權控制:需要根虧答派據過程角色的許可權設置,對資料庫中的數據進行許可權控制,確保只有符合條件的角色才能進行相應的操作。
總之,實現過程角色需要考慮業務流程的需求,設計合理的資料庫表結構,實現相應的系統邏輯和界面,並對許可權進行細致的控制,以保證過程角色在系統中的有效參與和管理。
Ⅷ 資料庫的作用是什麼
資料庫的作用:
資料庫是為了實現一定目的按某種規則和方法組織起來的「數據」的「集合」。
資料庫可以直觀的理解為存放數據的倉庫,只不過這個倉庫是在計算機的大容量存儲器上,而且數據必須按照一定的格式存放,因為它不僅需要存放,而且要便於查找。
資料庫可以做到:
⑴ 實現數據共享
數據共享包含所有用戶可同時存取資料庫中的數據,也包括用戶可以用各種方式通過介面使用資料庫,並提供數據共享。
⑵ 減少數據的冗餘度
同文件系統相比,由於資料庫實現了數據共享,從而避免了用戶各自建立應用文件。減少了大量重復數據,減少了數據冗餘,維護了數據的一致性。
⑶ 數據的獨立性
數據的獨立性包括邏輯獨立性(資料庫中資料庫的邏輯結構和應用程序相互獨立)和物理獨立性(數據物理結構的變化不影響數據的邏輯結構)。
⑷ 數據實現集中控制
文件管理方式中,數據處於一種分散的狀態,不同的用戶或同一用戶在不同處理中其文件之間毫無關系。利用資料庫可對數據進行集中控制和管理,並通過數據模型表示各種數據的組織以及數據間的聯系。
⑸ 數據一致性和可維護性,以確保數據的安全性和可靠性
主要包括:安全性控制、完整性控制、並發控制,使在同一時間周期內,允許對數據實現多路存取,又能防止用戶之間的不正常交互作用。
⑹ 故障恢復
由資料庫管理系統提供一套方法,可及時發現故障和修復故障,從而防止數據被破壞。資料庫系統能盡快恢復資料庫系統運行時出現的故障,可能是物理上或是邏輯上的錯誤。比如對系統的誤操作造成的數據錯誤等。
(8)autoseq在資料庫中作用擴展閱讀:
資料庫管理系統:
資料庫管理系統是為管理資料庫而設計的電腦軟體系統,一般具有存儲、截取、安全保障、備份等基礎功能。
資料庫管理系統可以依據它所支持的資料庫模型來作分類,例如關系式、XML;或依據所支持的計算機類型來作分類,例如伺服器群集、行動電話;
或依據所用查詢語言來作分類,例如SQL、XQuery;或依據性能沖量重點來作分類,例如最大規模、最高運行速度;亦或其他的分類方式。
不論使用哪種分類方式,一些DBMS能夠跨類別,例如,同時支持多種查詢語言。
Ⅸ mysql 中 AUTO_INCREMENT 是什麼意思為什麼必須和主鍵搭配
AUTO_INCREMENT的是隨著你資料庫裡面數據項的增加而自動增加值的一個屬性,一般在像MYSQL這種資料庫里,主鍵一般都是用ID號,比如學生的學號,公民的身份輪磨猜證號等,這種ID號是唯一的,是可以唯一標識資料庫裡面的一項數據的,而這種ID號並不需要自己動手去一個個輸入,直接通過設置AUTO_INCREMENT就可以從游冊小到大自動生成了。
(9)autoseq在資料庫中作用擴展閱讀:
如果希望在每次插入新記錄時,自動地創建主鍵欄位的值。可以在表中創建一個 auto-increment 欄位。MySQL 使用 AUTO_INCREMENT 關鍵字來執行 auto-increment 任務。默認地AUTO_INCREMENT 的開始值是 1,每條新記錄遞增 1。
主鍵又稱主關鍵字,主關鍵字(primary key)是表中的一個或多個欄位,它的值用於唯一地標識表中的某一條記錄。在兩個表的關系中,主關鍵字用來在一個表中引臘型用來自於另一個表中的特定記錄。主關鍵字是一種唯一關鍵字,表定義的一部分。一個表的主鍵可以由多個關鍵字共同組成,並且主關鍵字的列不能包含空值。主關鍵字是可選的,並且可在 CREATE TABLE 或 ALTER TABLE 語句中定義。