1. 如何在MS sql标设计中使多个属性值互斥
你的数据库这样设计不好,当某种产品只需要一种配料的时候,就浪费了存储空间。而当以后有新的产品需要多余三种配料的时候,那时候增加字段,会导致程序大的改动,难道我们的程序就不做需要3种以上配料的产品了吗?
数据库结构修改为:(产品,配料),增加唯一索引(产品,配料)
这样数据库中的例子为:
产品 配料
饼干 面粉
饼干 白糖
饼干 食盐
牛奶花生 花生
牛奶花生 牛奶
你可能觉得这样修改以后,程序稍微要麻烦一点点,但是这样的程序能对付任意多个配料的产品,把系统的功能提示了,寿命延长了,而且通过联合唯一索引达到了你要求的约束。
2. sql位运算符
按位运算符
位运算符在两个表达式之间执行位操作,这两个表达式可以为整型数据类型分类中的任何数据类型。
运算符含义
&(按位 AND) 按位 AND(两个操作数)。
|(按位 OR) 按位 OR(两个操作数)。
^(按位互斥 OR) 按位互斥 OR(两个操作数)。
位运算符的操作数可以是整型或二进制字符串数据类型分类中的任何数据类型(但 image 数据类型除外),此外,两个操作数不能同时是二进制字符串数据类型分类中的某种数据类型。下表显示所支持的操作数数据类型。
左边操作数 右边操作数
binary int、smallint 或 tinyint
bit int、smallint、tinyint 或 bit
int int、smallint、tinyint、binary 或 varbinary
smallint int、smallint、tinyint、binary 或 varbinary
tinyint int、smallint、tinyint、binary 或 varbinary
varbinary int、smallint 或 tinyint
SELECT 3 & 9
结果为1
3的二进制:00000011
9的二进制:00001001
按位进行AND操作时,只有第1位上两者都是1,其它位都有一个为0,所以结果为二进制的0001
SELECT 3 | 9
结果为11
按位进行OR操作时,可以认为就是加法运算
SELECT 3 ^ 9
结果为10
3的二进制:00000011
9的二进制:00001001
按位进行异或操作时,只有位上两者不相同(1与0)结果才会是1,如果相同(1与1或0与0)则为0,在这里第一位上都是1,结果为0;第三位上都是0,结果为1;其它为1;所以结果为二进制的1010,也就是十进制的10
3. 如何来解决数据库管理互斥问题
1. 首先,需要建立一个全局静态的互斥量;例如:
using System.Threading;
private static Mutex m;
2. 修改原先操作数据库的部分,注意的是(数据库查询是不需要的):
if(m==null)
m=new Mutex();
//Enter into mutex area
m.WaitOne();
//Execute sql command here
//Depart from mutex area
m.ReleaseMutex();
4. SQL中的符号^,!,$,#,&,各表示什么意思
^(位异或)
对两个整数值执行“位异或”运算。它会将第一个操作数的每一位与第二个操作数中对应的每一位进行比较。如果一位是 0,另一对应位是 1,则相应结果位设置为
1。如果两位都是 0 或两位都是 1,则相应结果位设置为 0。
两个条件必须都为有符号的整数数据类型,或都为无符号的整数数据类型。
!(逻辑非)! 运算符不能与其他运算符一起使用。例如,不能将 ! 和 > 运算符组合为 !>. 运算符。
&(位与)
对两个整数值执行“位与”运算。它会将第一个操作数的每一位与第二个操作数中对应的每一位进行比较。如果两位都是 1,则相应的结果位设置为
1。否则,相应的结果位设置为 0。
两个条件都必须是有符号整数类型,或者都必须是无符号整数类型。
$,# 这两个没有实际含义
5. 请问怎么用sql筛选互斥事务
select * from sheet4 AS A
where not exists (select * from sheet4 where 对应的事务代码<A.对应的事务代码 and 对应的事务代码=A.互斥的事务代码 and 互斥的事务代码=A.对应的事务代码)
6. 求sql,取2表中互斥数据
select * from a where c not in (select c from b )