本文目錄一覽:
- 1、在mysql 中為表的字段添加唯一性約束的語句怎麼寫
- 2、在MYSQL中怎樣把某字段(已存在)唯一化
- 3、如何在MySQL的SQL語句中避免數據唯一性衝突?
- 4、mysql為字段添加和刪除唯一性索引(unique) 的方法
- 5、MySQL中有唯一性約束的列能否為空
- 6、在Mysql中,如何將某一列字段(已經存在)設為唯一、不為空
在mysql 中為表的字段添加唯一性約束的語句怎麼寫
建表時加上唯一性約束:
CREATE TABLE `t_user` (
`Id` int(11) NOT NULL AUTO_INCREMENT, — 自增
`username` varchar(18) NOT NULL unique, — 唯一性約束
`password` varchar(18) NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=1018 DEFAULT CHARSET=gbk;
MySQL是一個關係型數據庫管理系統,關係數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度並提高了靈活性。
MySQL所使用的 SQL 語言是用於訪問數據庫的最常用標準化語言。MySQL 軟件採用了雙授權政策,分為社區版和商業版,由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作為網站數據庫。
擴展資料:
MySQL 作為數據庫,系統特性:
1、使用 C和 C++編寫,並使用了多種編譯器進行測試,保證了源代碼的可移植性。
2、支持 AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多種操作系統。
3、為多種編程語言提供了 API。這些編程語言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby,.NET和 Tcl 等。
4、優化的 SQL查詢算法,有效地提高查詢速度。
5、提供多語言支持,常見的編碼如中文的 GB 2312、BIG5,日文的 Shift_JIS等都可以用作數據表名和數據列名。提供 TCP/IP、ODBC 和 JDBC等多種數據庫連接途徑。
6、支持大型的數據庫。可以處理擁有上千萬條記錄的大型數據庫。支持多種存儲引擎。
參考資料:百度百科-mySQL
在MYSQL中怎樣把某字段(已存在)唯一化
你用那個圖形界面的軟件,來加就可以了,應該在索引那一欄裡面,自己寫語句修改表,弄不好會出錯的,還麻煩。
1.建表時加上唯一性約束
CREATE TABLE `t_user` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(18) NOT NULL unique,
`password` varchar(18) NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=1018 DEFAULT CHARSET=gbk;
2.給已經建好的表加上唯一性約束
ALTER TABLE `t_user` ADD unique(`username`);
我機器上沒有數據庫,沒驗證這2個sql,不曉得行不行,大概是這樣的吧。
有些人用程序來給數據做約束的,比如約束用戶名,
DataSet ds = dao.queryForDataSet(connName,”select * from t_user where username=? and password=?”,new Object[]{username,password},0,0,false);
if(ds.size()==1){
//登陸成功
}else if(ds.size()1){
//凍結此賬戶,記錄錯誤日誌
}else{
//告知用戶賬號不存在或者密碼錯誤
}
插入用戶之前事先查詢一下這個用戶是否存在,可以用ajax做驗證賬號是否重複的效果,很多網站都是這麼乾的
如何在MySQL的SQL語句中避免數據唯一性衝突?
本文章來給大家提供三種在mysql中避免重複插入記錄方法,主要是講到了ignore,Replace,ON DUPLICATE KEY UPDATE三種方法,有需要的朋友可以參考一下
方案一:使用ignore關鍵字
如果是用主鍵primary或者唯一索引unique區分了記錄的唯一性,避免重複插入記錄可以使用:
代碼如下:
INSERT IGNORE INTO `table_name` (`email`, `phone`, `user_id`) VALUES (‘test9@163.com’, ‘99999’, ‘9999’);
這樣當有重複記錄就會忽略,執行後返回數字0
還有個應用就是複製表,避免重複記錄:
代碼如下:
INSERT IGNORE INTO `table_1` (`name`) SELECT `name` FROM `table_2`;
方案二:使用Replace
語法格式:
代碼如下:
REPLACE INTO `table_name`(`col_name`, …) VALUES (…);
REPLACE INTO `table_name` (`col_name`, …) SELECT …;
REPLACE INTO `table_name` SET `col_name`=’value’,
…算法說明:
REPLACE的運行與INSERT很相像,但是如果舊記錄與新記錄有相同的值,則在新記錄被插入之前,舊記錄被刪除,即:
嘗試把新行插入到表中
當因為對於主鍵或唯一關鍵字出現重複關鍵字錯誤而造成插入失敗時:
從表中刪除含有重複關鍵字值的衝突行
再次嘗試把新行插入到表中
舊記錄與新記錄有相同的值的判斷標準就是:
表有一個PRIMARY KEY或UNIQUE索引,否則,使用一個REPLACE語句沒有意義。該語句會與INSERT相同,因為沒有索引被用於確定是否新行複製了其它的行。
返回值:
REPLACE語句會返回一個數,來指示受影響的行的數目。該數是被刪除和被插入的行數的和
受影響的行數可以容易地確定是否REPLACE只添加了一行,或者是否REPLACE也替換了其它行:檢查該數是否為1(添加)或更大(替換)。
示例:
# eg:(phone字段為唯一索引)
代碼如下:
REPLACE INTO `table_name` (`email`, `phone`, `user_id`) VALUES (‘test569’, ‘99999’, ‘123’);
另外,在 SQL Server 中可以這樣處理:
代碼如下:
if not exists (select phone from t where phone= ‘1’) insert into t(phone, update_time) values(‘1’, getdate()) else update t set update_time = getdate() where phone= ‘1’
方案三:ON DUPLICATE KEY UPDATE
如上所寫,你也可以在INSERT INTO…..後面加上 ON DUPLICATE KEY UPDATE方法來實現。如果您指定了ON DUPLICATE KEY UPDATE,並且插入行後會導致在一個UNIQUE索引或PRIMARY KEY中出現重複值,則執行舊行UPDATE。
例如,如果列a被定義為UNIQUE,並且包含值1,則以下兩個語句具有相同的效果:
代碼如下:
INSERT INTO `table` (`a`, `b`, `c`) VALUES (1, 2, 3) ON DUPLICATE KEY UPDATE `c`=`c`+1;
UPDATE `table` SET `c`=`c`+1 WHERE `a`=1;
如果行作為新記錄被插入,則受影響行的值為1;如果原有的記錄被更新,則受影響行的值為2。
注釋:如果列b也是唯一列,則INSERT與此UPDATE語句相當:
代碼如下:
UPDATE `table` SET `c`=`c`+1 WHERE `a`=1 OR `b`=2 LIMIT 1;
如果a=1 OR b=2與多個行向匹配,則只有一個行被更新。通常,您應該盡量避免對帶有多個唯一關鍵字的表使用ON DUPLICATE KEY子句。
您可以在UPDATE子句中使用VALUES(col_name)函數從INSERT…UPDATE語句的INSERT部分引用列值。換句話說,如果沒有發生重複關鍵字衝突,則UPDATE子句中的VALUES(col_name)可以引用被插入的col_name的值。本函數特別適用於多行插入。VALUES()函數只在INSERT…UPDATE語句中有意義,其它時候會返回NULL。
代碼如下:
INSERT INTO `table` (`a`, `b`, `c`) VALUES (1, 2, 3), (4, 5, 6) ON DUPLICATE KEY UPDATE `c`=VALUES(`a`)+VALUES(`b`);
本語句與以下兩個語句作用相同:
代碼如下:
INSERT INTO `table` (`a`, `b`, `c`) VALUES (1, 2, 3) ON DUPLICATE KEY UPDATE `c`=3;
INSERT INTO `table` (`a`, `b`, `c`) VALUES (4, 5, 6) ON DUPLICATE KEY UPDATE c=9;
注釋:當您使用ON DUPLICATE KEY UPDATE時,DELAYED選項被忽略。
示例:
這個例子是我在實際項目中用到的:是將一個表的數據導入到另外一個表中,數據的重複性就得考慮(如下),唯一索引為:email:
代碼如下:
INSERT INTO `table_name1` (`title`, `first_name`, `last_name`, `email`, `phone`, `user_id`, `role_id`, `status`, `campaign_id`)
SELECT ”, ”, ”, `table_name2`.`email`, `table_name2`.`phone`, NULL, NULL, ‘pending’, 29 FROM `table_name2`
WHERE `table_name2`.`status` = 1
ON DUPLICATE KEY UPDATE `table_name1`.`status`=’pending’
再貼一個例子:
代碼如下:
INSERT INTO `class` SELECT * FROM `class1` ON DUPLICATE KEY UPDATE `class`.`course`=`class1`.`course`
其它關鍵:DELAYED 做為快速插入,並不是很關心失效性,提高插入性能。
IGNORE 只關注主鍵對應記錄是不存在,無則添加,有則忽略。
特別說明:在MYSQL中UNIQUE索引將會對null字段失效,也就是說(a字段上建立唯一索引):
代碼如下:
INSERT INTO `test` (`a`) VALUES (NULL);
是可以重複插入的(聯合唯一索引也一樣)。
mysql為字段添加和刪除唯一性索引(unique) 的方法
1、添加PRIMARY
KEY(主鍵索引)
mysqlALTER
TABLE
`table_name`
ADD
PRIMARY
KEY
(
`column`
)
2、添加UNIQUE(唯一索引)
mysqlALTER
TABLE
`table_name`
ADD
UNIQUE
(
`column`
)
3、添加INDEX(普通索引)
mysqlALTER
TABLE
`table_name`
ADD
INDEX
index_name
(
`column`
)
4、添加FULLTEXT(全文索引)
mysqlALTER
TABLE
`table_name`
ADD
FULLTEXT
(
`column`)
5、添加多列索引
mysqlALTER
TABLE
`table_name`
ADD
INDEX
index_name
(
`column1`,
`column2`,
`column3`
)
以上這篇mysql為字段添加和刪除唯一性索引(unique)
的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
MySQL中有唯一性約束的列能否為空
MySQL中有唯一性約束的列能為空。
唯一約束保證在一個字段或者一組字段里的數據與表中其它行的數據相比是唯一的,允許為空,但只能出現一個空值。對字段使用了Unique約束,可以當主鍵在數據庫中使用。約束名的命名規則推薦採用“約束類型_約束字段”這樣的形式。
擴展資料:
當唯一約束和主鍵都強制唯一性時,如果滿足下列條件,則應將唯一約束而不是主鍵約束附加到表上:
1、希望在列或列的組合中強制唯一性。可將多個唯一約束附加到表,但是只能將一個主鍵約束附加到表。
2、希望在允許空值的列中強制唯一性。可將唯一約束附加到允許空值的列,但是只能將主鍵約束附加到不允許空值的列。當將唯一約束附加到允許空值的列時,請確保在約束的列中最多有 一行包含空值。
在Mysql中,如何將某一列字段(已經存在)設為唯一、不為空
Mysql設置某字段唯一
1.建表時加上唯一性約束
CREATE TABLE `t_user` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(18) NOT NULL unique,
`password` varchar(18) NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=1018 DEFAULT CHARSET=gbk;
2.給已經建好的表加上唯一性約束
ALTER TABLE `t_user` ADD unique(`username`);
mysql主鍵索引和唯一索引
1.主鍵一定是唯一性索引,唯一性索引並不一定就是主鍵;
2.一個表中可以有多個唯一性索引,但只能有一個主鍵;
3.主鍵列不允許空值,而唯一性索引列允許空值。
採納噢
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/308715.html