我在我的數據庫中有用戶表。條件MYSQL的唯一約束條件
用戶具有字段name,company_id和status:布爾值,1-實時,0-刪除。
當用戶被刪除,他的狀態設置爲0。
實時用戶名在公司的組合應該是唯一的。刪除用戶後,我不介意爲用戶創建同名的公司。
我的問題是我怎麼定義uniuqe限制爲字段名稱,COMPANY_ID和狀態= 1(這不是一個uniuqe限制在這三個領域監守我不介意的組合名稱company_id- 0會在表格中出現幾次)。
感謝,
德沃拉
我在我的數據庫中有用戶表。條件MYSQL的唯一約束條件
用戶具有字段name,company_id和status:布爾值,1-實時,0-刪除。
當用戶被刪除,他的狀態設置爲0。
實時用戶名在公司的組合應該是唯一的。刪除用戶後,我不介意爲用戶創建同名的公司。
我的問題是我怎麼定義uniuqe限制爲字段名稱,COMPANY_ID和狀態= 1(這不是一個uniuqe限制在這三個領域監守我不介意的組合名稱company_id- 0會在表格中出現幾次)。
感謝,
德沃拉
刪除用戶的使用NULL值。
唯一鍵允許無限數量的NULL值。
更新:不要觸摸用戶名,NULL在狀態字段就足夠了。
您正在使用哪種編程語言?
你的邏輯shoule如下
select * from Table_name where name='' AND company_id = '' AND status = 1
if this return any rows give uniqueness error to the user else create it.
我會創造另一個列來存儲已刪除用戶的以前的名字,當他們刪除設置自己的真實姓名爲NULL(以及設置狀態到0)。
然後對名稱和公司有一個唯一的限制。 NULL不會影響唯一性(因爲NULL != NULL
),如果需要,您仍然可以恢復用戶的原始名稱。
所以刪除操作是一樣的東西:
update users
set prev_name = name,
name = null,
status = 0
where name = 'paxdiablo' and company = 'SmallGreen';
謝謝大家! – Dvora 2010-07-26 05:46:11
它會更容易,如果你拆「活」和「刪除」,讓他們有自己的TINYINT /布爾列?
我會用deleted_at(datetime)替換狀態字段。當用戶處於活動狀態時,其值將爲NULL,但在刪除時將設置爲當前日期時間。
接下來,我將在用戶名& deleted_at字段上添加唯一索引,這將允許我使用相同的用戶名(至少1秒間隔)刪除多個用戶。
面對NULL意圖的蒼蠅排列(未知或不適用),但它是實用的(我是所有的實用主義)。 – paxdiablo 2010-07-26 06:10:02