當前位置:首頁 » 編程語言 » SQL如何保證一條數據不變
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

SQL如何保證一條數據不變

發布時間: 2022-07-15 12:02:28

㈠ 當你在更新某條數據時,怎麼用sql語句鎖定而不讓別人同時更新 請知道的說下。 謝謝了

你更新的時候,你更新的數據上本身就加了排他鎖的,在你更新的這段時間其他人無法再修改數據。或者還有別的操作後再釋放這些數據的話可以用事務。

㈡ 如何保證一批SQL語句執行的完整性

為了保證資料庫數據的安全可靠性和正確有效,DBMS必須提供統一的數據保護功能。數據保護也為數據控制,主要包括資料庫的安全性、完整性、並發控制和恢復。

1. 資料庫的存取控制
ORACLE保護信息的方法採用任意存取控制來控制全部用戶對命名對象的存取。用戶對對象的存取受特權控制。一種特權是存取一命名對象的許可,為一種規定格式。
ORACLE使用多種不同的機制管理資料庫安全性,其中有兩種機制:模式和用戶。模式為模式對象的集合,模式對象如表、視圖、過程和包等。第一資料庫有一組模式。
每一ORACLE資料庫有一組合法的用戶,可存取一資料庫,可運行一資料庫應用和使用該用戶各連接到定義該用戶的資料庫。當建立一資料庫用戶時,對該用戶建立一個相應的模式,模式名與用戶名相同。一旦用戶連接一資料庫,該用戶就可存取相應模式中的全部對象,一個用戶僅與同名的模式相聯系,所以用戶和模式是類似的。

用戶的存取權利受用戶安全域的設置所控制,在建立一個資料庫的新用戶或更改一已有用戶時,安全管理員對用戶安全域有下列決策:
l 是由資料庫系統還是由操作系統維護用戶授權信息。
l 設置用戶的預設表空間和臨時表空間。
l 列出用戶可存的表空間和在表空間中可使用空間份額。
l 設置用戶資源限制的環境文件,該限制規定了用戶可用的系統資源的總量。
l 規定用戶具有的特權和角色,可存取相應的對象。

每一個用戶有一個安全域,它是一組特性,可決定下列內容:
l 用戶可用的特權和角色;
l 用戶可用的表空間的份額;
l 用戶的系統資源限制。

1) 用戶鑒別:
為了防止非授權的資料庫用戶的使用,ORACLE提供二種確認方法
操作系統確認和相應的ORACLE資料庫確認。
如果操作系統允許,ORACLE可使用操作系統所維護的信息來鑒定用戶。由操作系統鑒定用戶的優點是:
l 用戶可更方便地連接到ORACLE,不需要指定用戶名和口令。
l 對用戶授權的控制集中在操作系統,ORACLE不需要存儲和管理用戶口令。然而用戶名在資料庫中仍然要維護。
l 在資料庫中的用戶名項和操作系統審計跟蹤相對應。

ORACLE資料庫方式的用戶確認:ORACLE利用存儲在資料庫中的信息可鑒定試圖接到資料庫的一用戶,這種鑒別方法僅當操作系統不能用於資料庫用戶鑒別時才使用。當用戶使用一ORACLE資料庫時執行用戶鑒別。每個用戶在建立時有一個口令,用戶口令在建立對資料庫連接時使用,以防止對資料庫非授權的使用。用戶的口令以密碼的格式存儲在資料庫數據字典中,用戶可隨時修改其口令。

2) 用戶的表空間設置和定額
關於表空間的使用有幾種設置選擇:
l 用戶的預設表空間;
l 用戶的臨時表空間;
l 資料庫表空間的空間使用定額。

3) 用戶資源限制和環境文件
用戶可用的各種系統資源總量的限制是用戶安全域的部分。利用顯式地設置資源限制;安全管理員可防止用戶無控制地消耗寶貴的系統資源。資源限制是由環境文件管理。一個環境文件是命名的一組賦給用戶的資源限制。另外ORACLE為安全管理員在資料庫級提供使能或使不能實施環境文件資源限制的選擇。
ORACLE可限制幾種類型的系統資源的使用,每種資源可在會話級、調用級或兩者上控制。在會話級:每一次用戶連接到一資料庫,建立一會話。每一個會話在執行SQL語句的計算機上耗費CPU時間和內存量進行限制。對ORACLE的幾種資源限制可在會話級上設置。如果會話級資源限制被超過,當前語句被中止(回滾),並返回指明會話限制已達到的信息。此時,當前事務中所有之前執行的語句不受影響,此時僅可作COMMIT、ROLLBACK或刪除對資料庫的連接等操作,進行其它操作都將出錯。
在調用級:在SQL語句執行時,處理該語句有好幾步,為了防止過多地調用系統,ORACLE在調用級可設置幾種資源限制。如果調用級的資源限制被超過,語句處理被停止,該語句被回滾,並返回一錯誤。然而當前事務的已執行所用語句不受影響,用戶會話繼續連接。

二、 數據完整性

它是指數據的正確性和相容性。數據的完整性是為了防止資料庫存在不符合主義的數據,防止錯誤信息輸入和輸出,即數據要遵守由DBA或應用開發者所決定的一組預定義的規則。ORACLE應用於關系資料庫的表的數據完整性有下列類型:
l 在插入或修改表的行時允許不允許包含有空值的列,稱為空與非空規則。
l 唯一列值規則,允許插入或修改的錶行在該列上的值唯一。
l 引用完整性規則,同關系模型定義
l 用戶對定義的規則,為復雜性完整性檢查。
ORACLE允許定義和實施上述每一種類型的數據完整性規則,這些規則可用完整性約束和資料庫觸發器定義。
完整性約束,是對表的列定義一規則的說明性方法。
資料庫觸發器,是使用非說明方法實施完整性規則,利用資料庫觸發器(存儲的資料庫過程)可定義和實施任何類型的完整性規則。

1. 完整性約束
ORACLE利用完整性約束機制防止無效的數據進入資料庫的基表,如果任何DML執行結果破壞完整性約束,該語句被回滾並返回一上個錯誤。ORACLE實現的完整性約束完全遵守ANSI
X3。135-1989和ISO9075-1989標准。
利用完整性約束實施數據完整性規則有下列優點:
l 定義或更改表時,不需要程序設計,便很容易地編寫程序並可消除程序性錯誤,其功能是由ORACLE控制。所以說明性完整性約束優於應用代碼和資料庫觸發器。
l 對表所定義的完整性約束是存儲在數據字典中,所以由任何應用進入的數據都必須遵守與表相關聯的完整性約束。
l 具有最大的開發能力。當由完整性約束所實施的事務規則改變時,管理員只需改變完整性約束的定義,所有應用自動地遵守所修改的約束。
l 由於完整性約束存儲在數據字典中,資料庫應用可利用這些信息,在SQL語句執行之前或由ORACLE檢查之前,就可立即反饋信息。
l 由於完整性約束說明的語義是清楚地定義,對於每一指定說明規則可實現性能優化。
l
由於完整性約束可臨時地使不能,以致在裝入大量數據時可避免約束檢索的開銷。當資料庫裝入完成時,完整性約束可容易地使其能,任何破壞完整性約束的任何新行在例外表中列出。
ORACLE的DBA和應用開始者對列的值輸入可使用的完整性約束有下列類型:
l NOT NULL約束:如果在表的一列的值不允許為空,則需在該列指定NOT NULL約束。
l
UNIQUE碼約束:在表指定的列或組列上不允許兩行是具有重復值時,則需要該列或組列上指定UNIQUE碼完整性約束。在UNIQUE碼約束定義中的列或組列稱為唯一碼。所有唯一完整性約束是用索引方法實施。
l PRIMARY KEY約束:在資料庫中每一個表可有一個PRIMARY KEY約束。包含在PRIMARY
KEY完整性約束的列或組列稱為主碼,每個表可有一個主碼。ORACLE使用索引實施PRIMARY KEY約束。
l FOREIGN
KEY約束(可稱引用約束):在關系資料庫中表可通過公共列相關聯,該規則控制必須維護的列之間的關系。包含在引用完整性約束定義的列或組列稱為外來碼。由外來碼所引用的表中的唯一碼或方碼,稱為引用碼。包含有外來碼的表稱為子表或從屬表。由子表的外來碼所引用的表稱為雙親表或引用表。如果對表的每一行,其外來碼的值必須與主碼中一值相匹配,則需指定引用完整性約束。
l
CHECK約束:表的每行對一指定的條件必須是TRUE或未知,則需在一列或列組上指定CHECK完整性約束。如果在發出一個DML語句時,CHECK約束的條件計算得FALSE時,該語句被回滾。

㈢ 在 SQL Server 中,如何在並發環境下保證客戶端查詢的數據不重復

與伺服器配置相關,sql可以自行設置並發數與最大可用內存,是否並發也還得看程序,不然sql並發再多,程序也得排隊交sql

㈣ SQL2008 做個觸發器為了確保數據第一條記錄不被刪除! 執行資料庫表刪除數據時從該表中的第二條記錄開始刪

需要一個排序欄位或者主鍵,來判斷哪條為第一條記錄。
create trigger tri_delete
on table1 instead of delete
as
begin
declare @id int
select top 1 @id=id from table1 order by id ------取table1的第一條記錄的id
delete from table1 where exists(select * from deleted where id=table1.id and id<>@id)-------刪除table1中id不等於第一條記錄id的記錄。
end;

㈤ 怎樣從sql資料庫中一次隨機讀取一條數據,而且以後隨機讀取出的數據不能和以前每次隨機讀取出的數據重復

一個簡單的辦法是你另外建一個歷史記錄表,每次問題抽出來後把那問題插到歷史表中,當你抽下一提時只抽取歷史表中不存在的題目就可以了.

㈥ 如何在sql資料庫中的一張表裡每增加一條記錄就將該記錄的其中一個值修改其他值不變重新再該表中插入

這個用觸發器處理比較好
你可以創建一個插入觸發器,當插入數據時將id 自動更新為要修改的值
類別如下其中inserted為觸發器中的臨時表,其結構與原表一樣,保存新插入或修改後的數據。
create trigger insert_a_tri on A after insert as
update A set A.id = 'A' + A.id from inserted b where A.id = b.id and a.datetime = b.datetime and a.testno = b.testno

㈦ 在sql資料庫里,如何操作才能清空數據,而保持結構不變

有兩種方法
第一種最快,清空資料庫,指把表留下來 把表中的數據都刪掉??
方法就是把資料庫生成SQL腳本.只生成表結構.數據不生成.
刪出資料庫 然後執行SQL腳本 不就可以了。..
第二種就是一個表一個表地清空數據了。
用TRUNCATE TABLE 表名

㈧ SQL語句一列數據相同只顯示一條,其他數據不變

JavaScript Document
function show(str)
{
var str1="td"+str;
var str="show"+str;
for (var i=1; i<18; i++)
{
var obj = document.getElementById('show' + i.toString());
if (obj) obj.style.display = 'none';
}
document.getElementById(str).style.display="block";
}

㈨ 如何復制 ms sql 表結構,目標表數據不變

導入是不能實現這種功能的。最好將本地的改變生成SQL語句,然後在遠程伺服器上執行。執行前記得備份,畢竟安全第一啊
數據會被清空?誰說的呀,又不是讓你執行創建語句,使用
alter table .....這樣的語句不會么?

㈩ SQL中如何保證某個特定的數據不能被刪掉

insert into album values(1,'xxx','zzz','ccc')

create trigger tbl_delete
on album
for delete
as
if ((select count(*) from deleted where album_name='xxx')>0)
begin
rollback transaction
print '不能刪除'
end
go

delete album where album_name='xxx'

select * from album

結果顯示:不能刪除

大概的意思就是這樣,希望對你思路有幫助