sql server与mysql 中创建唯一索引

/*筛选索引 SQL SERVER 2008 测试*/
/*
应用:用户表,通过ID可以登录,
如果有电话号码也可以登录,但此时必须保证电话号码唯一。
*/
--1,创建测试表
CREATE TABLE T
(
ID VARCHAR(20) NOT NULL PRIMARY KEY,
MOBILE VARCHAR(20)NULL
)

--2,创建索引 唯一,非聚集索引(并添加筛选条件)
CREATE UNIQUE NONCLUSTERED INDEX [IDX_MOBILE] ON [dbo].[T]
(
[MOBILE] ASC
)
WHERE ([MOBILE] IS NOT NULL)

DROP INDEX [IDX_MOBILE] on t

INSERT INTO T SELECT ‘A‘,NULL
INSERT INTO T SELECT ‘B‘,NULL
INSERT INTO T SELECT ‘C‘,‘A‘
INSERT INTO T SELECT ‘D‘,‘D‘
INSERT INTO T SELECT ‘E‘,‘B‘
INSERT INTO T SELECT ‘F‘,‘C‘
INSERT INTO T SELECT ‘G‘,NULL
INSERT INTO T SELECT ‘H‘,NULL

SELECT * FROM T

/*mysql创建唯一索引,null值直接被忽略*/

create table t
(
id varchar(20) not null PRIMARY key,
mobile varchar(20) null
)

select * from t

INSERT INTO t (id,mobile) VALUES( ‘A‘,NULL);
INSERT INTO t (id,mobile) VALUES(‘B‘,NULL);
INSERT INTO t (id,mobile) VALUES( ‘C‘,‘A‘);
INSERT INTO t (id,mobile) VALUES( ‘D‘,‘D‘);
INSERT INTO t (id,mobile) VALUES( ‘E‘,‘B‘);
INSERT INTO t (id,mobile) VALUES( ‘F‘,‘C‘);
INSERT INTO t (id,mobile) VALUES( ‘G‘,‘‘);
INSERT INTO t (id,mobile) VALUES( ‘H‘,‘‘);

truncate table t

--2,创建索引 唯一
CREATE UNIQUE INDEX IDX_MOBILE ON t
(
mobile ASC
)

时间: 2024-08-09 22:22:14

sql server与mysql 中创建唯一索引的相关文章

SQL Server 与MySQL中排序规则与字符集相关知识的一点总结

原文:SQL Server 与MySQL中排序规则与字符集相关知识的一点总结 字符集&&排序规则 字符集是针对不同语言的字符编码的集合,比如UTF-8字符集,GBK字符集,GB2312字符集等等,不同的字符集使用不同的规则给字符进行编码排序规则则是在特定字符集的基础上特定的字符排序方式,排序规则是基于字符集的,是对字符集在排序方式维度上的一个划分.排序规则是依赖于字符集的,一种字符集可以有多种排序规则,但是一种排序规则只能基于某一种字符集的比如中文字符集,也即汉字,可以按照“拼音排序”.“

sql server和mysql中分别实现分页功能

MySQL 在MySQL中,可以用 Limit 来查询第 m 列到第 n 列的记录, 例如: select * from tablename limit m, n sql="select * from users order by userId limit "+(pageNow-1)*pageSize+","+pageSize ; 获取分页后每页的数据: //分页显示用户的 信息 public ArrayList getUsersByFenye(int pageSi

浅谈SQL Server、MySQL中char,varchar,nchar,nvarchar区别

最近一次的面试中,被面试官问到varchar和nvarchar的区别,脑海里记得是定长和可变长度的区别,但却没能说出来.后来,在网上找了下网友总结的区别.在这里做个备忘录: 一,SQL Server中char,varchar,nchar,nvarchar的区别(援引:https://www.cnblogs.com/limeiky/p/5313312.html) 1,定义: char:    固定长度,存储ANSI字符,不足的补英文半角空格. nchar:   固定长度,存储Unicode字符,不

sql server 实现mysql中group_concat,列转行,列用分隔符拼接字符串

----基础 一个用户对应多个角色.role_id 为int类型使用 convert(VARCHAR,role_id)转义 ----sql: select b.user_id , roles = stuff((select ',' + convert(VARCHAR, t.ROLE_ID) from base_user_role t where b.USER_ID = t.user_id for xml path('')) , 1 , 1 , '') from base_user_role b

mysql 允许在唯一索引的字段中出现多个null值

线上问题:org.springframework.dao.DuplicateKeyException: PreparedStatementCallback; SQL [update fl_table set id = ?, password = ?, email = ? where id = '3583954800']; Duplicate entry ' ' for key 'email'; nested exception is com.mysql.jdbc.exceptions.jdbc4

SQL Server R2 2008中的SQL Server Management Studio 阻止保存要求重新创建表的更改问题的设置方法

在2008中会加入阻止保存要求重新创建表的更改这个选项.症状表现为修改表结构的时候会"阻止"你. SQL Server 2008“阻止保存要求重新创建表的更改”的错误的解决方案是本文我们主要要介绍的内容,情况是这样的:我们在用SQL Server 2008 建完表后,插入或修改任意列时,提示:当用户在在SQL Server 2008企业管理器中更改表结构时,必须要先删除原来的表,然后重新创建新表,才能完成表的更改. 如果强行更改会出现以下提示:不允许保存更改.您所做的更改要求删除并重新

MS SQL Server Management Studio中提示不允许保长度出现不允许保存更改。您所做的更改要求删除并重新创建以下表

在SQL Server Management Studio中直接修改正在连接的表结构会出现改不了的情况,如下图 解决方法:工具-选项-设计器--阻止保存要求重新创建表的更改,去掉对勾--确定即可

MySQL 创建唯一索引忽略对已经重复数据的检查

MySQL 创建唯一索引忽略对已经重复数据的检查 在创建唯一索引的基础上加上关键字"IGNORE "即可. # 重复数据 mysql> select aid,count(aid) as total ,email,tel_no,account_type,exten,passwd from fudao_admin group by user_name having total> 1; +-------+-------+--------------------------+---

MySQL忽略已重复数据强制创建唯一索引

常规方法: CREATE UNIQUE INDEX `idx_m2b_product_photo_pid_sort` ON `m2b`.`m2b_product_photo` (pid, sort) COMMENT '' ALGORITHM DEFAULT LOCK DEFAULT; 忽略已重复数据强制创建唯一索引的方法: ALTER IGNORE TABLE `m2b_product_photo` ADD UNIQUE `idx_m2b_product_photo_pid_sort` (`pi