可以没有。
但是不推荐,因为那样会使查询效率低下
如果数据量不大的话可以不加
B. sql 我select一个表,没有主键,id有重复的(多个不同id都有重复),我想取出同id但是date列值最大的数据
问得不太清楚,你看看
列出不同ID的最大date列值的数据:select [id],max(date) from table_temp group by [id]
取最大date值那条:select * from table_temp where [id]=(select top 1[id] from table_temp order by date desc)
C. 在sql查询分析器建表不用设主键
char(10)表示会占10个字符,如果输入的字符不到十个,它也还是会占用10个字符,只要不超过指定长度就可以了。楼主出现的问题不可能是因为这个。不建立主键创建的表插入数据是不存在什么问题的。但是如果插入了重复的数据,在修改的时候系统就会因为无法识别修改的是哪条记录而报错了。
D. MSSQL查询所有没有主键的表
说一下大概语句,具体你自己该,假设10个数据库的名称是db1,db2,...,db10,这里可以根据你数据库名称改,下面的语句也要改。
创建一个表存放数据库名,表名
create table tb1
(
id [int] IDENTITY (1, 1),
dbname varchar(100),
tbname varchar(100)
)
--- 把数据库db1的所有表名插入tb1表
insert tb1 (dbname,tbname)
select 'db1',name from db1.dbo,sysobjects where xtype='u'
insert tb1 (dbname,tbname)
select 'db2',name from db2.dbo,sysobjects where xtype='u'
insert tb1 (dbname,tbname)
select 'db3',name from db3.dbo,sysobjects where xtype='u'
insert tb1 (dbname,tbname)
select 'db4',name from db4.dbo,sysobjects where xtype='u'
insert tb1 (dbname,tbname)
select 'db5',name from db5.dbo,sysobjects where xtype='u'
insert tb1 (dbname,tbname)
select 'db6',name from db6.dbo,sysobjects where xtype='u'
insert tb1 (dbname,tbname)
select 'db7',name from db7.dbo,sysobjects where xtype='u'
insert tb1 (dbname,tbname)
select 'db8',name from db8.dbo,sysobjects where xtype='u'
insert tb1 (dbname,tbname)
select 'db9',name from db9.dbo,sysobjects where xtype='u'
insert tb1 (dbname,tbname)
select 'db10',name from db10.dbo,sysobjects where xtype='u'
这样tb1表里面就有数据库名,列名。创建一个存储过程,循环搜索:
create PROCEDURE TESTPERCUDURE
as
declare @col integer
declare @colmax integer
declare @tablename varchar(100)
declare @sql as VARCHAR(200)
BEGIN
set @col=1
set @colmax = (select max(id) from tb1)
set @tablename= ''
while @col<=@colmax
begin
set @tablename= (select dbname+'.dbo.'+tbname from tb1 where id = @col)
set @sql='select * FROM '+@tablename+' where xname = 'aaa' --通过循环获取你的表名和数据库名,之后组装成sql语句,然后执行.
EXECUTE sp_executesql @sql
SET @col=@col+1
end
end
E. sql数据库的表不设主键会怎么样
主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。主键除了上述作用外,常常与外键构成参照完整性约束,防止出现数据不一致。
查询的时候 肯定要建立一个聚集索引 数据库如果有字段保证不一样 就可以不用主键做聚集索引, 但如果字段不能保证每行的唯一性, 那么就无法建立聚集索引, 搜索数据库是件痛苦的事情...
建立主键和索引 是设计数据表的 一个规范
F. SQL多表查询 无外键、主键
这个要看具体的查询条件而定。去冗余有很多种方法,视具体情况而定,你可以把你的查询条件描述清晰点
G. SQL查询语句:数据库中两个表,没有主键,要用 where 表1.班别=表2.班别 and 表1.姓名=表2.姓名 来查询
select * from 表1
union
select * from 表2
如果两个表中名字一样的同学成绩一样的话,就只会出一条;如果成绩不一样,就会出两条。你可以试试,应该是没问题
H. 数据库的表如果没有主键查询速度会慢吗
我们搭建一个 MySQL 5.7 的环境,此处省略搭建步骤。
写个简单的脚本,制造一批带主键和不带主键的表:
可以看到执行时间变成了 0.67s。
整理
我们诊断的关键点如下:
1. 对于 information_schema 中的元数据表,执行计划不能提供有效信息。
2. 通过查看 MySQL 改写后的 SQL,我们猜测了优化器发生了误判。
3. 我们增加了 hint,指导 MySQL 正确进行优化判断。
但目前我们的实验仅限于猜测,猜中了万事大吉,猜不中就无法做出好的诊断。
I. sql中查询两个字段,但两个字段分别来源不同表中的数据和,且两个表没有主键关联。
日期不相等的话,就找第3张表,或者做一张整合表来关联类似编码,ID之类的