当前位置:首页 » 编程语言 » 在Sql中常遇到的问题
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

在Sql中常遇到的问题

发布时间: 2022-12-09 16:34:33

A. 怎样解决新手在sql2008安装过程中遇到的问题

安装SQL Server 2008 Express请尝试以下2种方法。为避免这样那样的纠结问题,强烈建议新手先删除计算机中所有与SQL Server有关的程序,然后再安装。
方法一、安装SQL Server 2008 R2 Express,曾在Windows Server 2003下完成安装:
第一步,下载安装Microsoft SQL Server 2008 R2 Management Studio Express,文件名为SQLManagementStudio_x86_CHS.exe。
第二步,下载安装SQL Server 2008 Express数据库引擎及服务组件,文件名为SQLEXPR_x86_CHS.exe。若在安装VS时已装数据库引擎了则不用再装,已装指开始菜单有“Microsoft SQL Server 2008” ,但没有SSMS(SQL Server Management Studio)。建议先在“添加\删除程序”中删除所有与SQL Server有关的程序,然后再安装。
方法二、安装SQL Server 2008 R2 Express,曾在win7下完成安装:
直接下载安装SQL Server 2008 Express R2 with tools,文件名为SQLEXPRWT_x86_CHS.exe;若在安装VS时已装数据库引擎则可以先删除SQL Server 2008相关程序然后再装,否则实例名取成别的名字。若SQL Server 2008 Express的安装过程出现“给定关键字不在字典中”的错误信息,则建议在“添加\删除程序”中删除所有与SQL Server有关的程序,然后再安装SQL Server 2008 Express R2 with tools。若是64位机器,点击前面的下载或点此链接,点“继续”,单选“No, I do not want to register. Take me to the download.”,单击“下一步”再下载,文件名SQLEXPRWT_x64_CHS.exe。
详细安装过程请参考以下参考资料进行:
1、MS SQL Server 2008 express 下载地址;
2、SQL Server 2008安装指南;
3、SQL Server 2008 Express 安装手册。

B. 计算机SQL初学者遇到的问题(急呀)

1.创建一个学籍管理信息系统至D盘的根目录下,其中包含一数据文件dat1,和一个事务日志文件logl。其中数据文件初始大小50MB,增长率5MB,增长极限为100MB,事务日志文件初始大小20MB,增长率5MB,增长极限为50MB.(5分)

在sqlserver 企业管理器里 添加新的数据库 指定路径 和文件名就可以

2.在数据库中创建四张表文件:

学生基本信息表(学号、姓名、性别、电话号码、家庭住址、出生年月)
create table student(
sno char(10),
sname char(20),
ssex char(2),
sphone char(15),
saddress char(50),
sbirthday datetime
)
其他表自己建一下

学生成绩表(学号、课程号、成绩)

教师课程安排表(课程号、课程名、教师编号)

教师信息表(教师编号、姓名、院系、教研室)

3.为创建的表文件录入4-5条记录

在企业管理器自己录入

4.查询“学生基本信息表”中性别是“男”的所有学生的信息。

select * from student where ssex='男'

5.统计“学生基本信息表”中男、女生的人数。

select ssex,count(*) from student group by ssex

6.向“学生基本信息表”中插入学号“0401010104”的一条记录.
insert into student values ('0401010104','李强','男','123123','北京','1980-10-1')

7.将插入的“0401010104”这条记录中的姓名为“李强”的更改为“张胜”.

update student set sname='张胜' where sno='0401010104'

8.在“教师课程安排表”中找出与“王强”所教课程相同的所有老师的信息。

……参考学生表 自己写一下

9.在“学生基本信息表”中找出年龄为“17”岁的所有学生的基本信息。
select * from student where datediff( year ,sbirthday,getdate())=17

10.为这四张表建立一个视图(hz_view),视图中包括:学生姓名、课程名、课程成绩、教师姓名。

create view hz_view(sname,课程名、课程成绩、教师姓名) as select ……

C. SQL中的问题

1. 检查约束
检查约束是最常见的约束类型。它允许你声明在某个字段里的数值必须使一个布尔表达式为真。比如,要强制一个正数的产品价格,你可以用:
CREATE TABLE procts ( proct_no integer, name text, price numeric CHECK (price > 0) );
如你所见,约束定义在数据类型之后,就好像缺省值定义一样。缺省值和约束可以按任意顺序排列。一个检查约束由一个关键字 CHECK 后面跟一个放在圆括号里的表达式组成。检查约束表达式应该包含受约束的字段,否则这个约束就没什么意义了。
你还可以给这个约束取一个独立的名字。这样就可以令错误信息更清晰,并且在你需要修改它的时候引用这个名字。语法是:
CREATE TABLE procts ( proct_no integer, name text, price numeric CONSTRAINT positive_price CHECK (price > 0) );
因此,要声明一个命名约束,使用关键字 CONSTRAINT 后面跟一个标识符(作为名字),然后再跟约束定义。如果你不用这个方法声明约束,那么系统会自动为你选择一个名字。
一个检查约束也可以引用多个字段。假设你存储一个正常价格和一个折扣价,并且你想保证折扣价比正常价低。
CREATE TABLE procts ( proct_no integer, name text, price numeric CHECK (price > 0), discounted_price numeric CHECK (discounted_price > 0), CHECK (price > discounted_price) );
头两个约束看上去很面熟。第三个使用了一个新的语法。它没有附着在某个字段上,而是在逗号分隔的字段列表中以一个独立行的形式出现。字段定义和约束定义可以按照任意顺序列出。
我们称头两个约束是"字段约束",而第三个约束是"表约束"(和字段定义分开写)。字段约束也可以写成表约束,而反过来很可能不行,因为系统假设字段约束只引用它所从属的字段。PostgreSQL 并不强制这条规则,但是如果你希望自己的表定义可以和其它数据库系统兼容,那么你最好还是遵循这条规则。上面的例子也可以这么写:
CREATE TABLE procts ( proct_no integer, name text, price numeric, CHECK (price > 0), discounted_price numeric, CHECK (discounted_price > 0), CHECK (price > discounted_price) ); 或者是
CREATE TABLE procts ( proct_no integer, name text, price numeric CHECK (price > 0), discounted_price numeric, CHECK (discounted_price > 0 AND price > discounted_price) );
这只是风格的不同。
和字段约束一样,我们也可以给表约束赋予名称,方法也相同:
CREATE TABLE procts ( proct_no integer, name text, price numeric, CHECK (price > 0), discounted_price numeric, CHECK (discounted_price > 0), CONSTRAINT valid_discount CHECK (price > discounted_price) );
我们还要注意的是,当约束表达式计算结果为 NULL 的时候,检查约束会被认为是满足条件的。因为大多数表达式在含有 NULL 操作数的时候结果都是 NULL ,所以这些约束不能阻止字段值为 NULL 。要确保一个字段值不为 NULL ,可以使用下一节介绍的非空约束。

2. 非空约束
非空约束只是简单地声明一个字段必须不能是 NULL 。下面是一个例子:
CREATE TABLE procts ( proct_no integer NOT NULL, name text NOT NULL, price numeric );
一个非空约束总是写成一个字段约束。非空约束在功能上等效于创建一个检查约束 CHECK (column_name IS NOT NULL) ,但在 PostgreSQL 里,创建一个明确的非空约束效率更高。缺点是你不能给它一个明确的名字。
当然,一个字段可以有多个约束。只要一个接着一个写就可以了:
CREATE TABLE procts ( proct_no integer NOT NULL, name text NOT NULL, price numeric NOT NULL CHECK (price > 0) );
它们的顺序无所谓。顺序并不影响约束检查的顺序。
NOT NULL 约束有个相反的约束:NULL 约束。它并不意味着该字段必须是空,因为这样的字段也没用。它只是定义了该字段可以为空的这个缺省行为。在 SQL 标准里没有定义 NULL 约束,因此不应该在可移植的应用中使用它。在 PostgreSQL 里面增加这个约束只是为了和其它数据库系统兼容。不过,有些用户喜欢它,因为这个约束可以让他们很容易在脚本文件里切换约束。比如,你可以从下面这样开始
CREATE TABLE procts ( proct_no integer NULL, name text NULL, price numeric NULL );
然后在需要的时候插入 NOT 关键字。

【提示】在大多数数据库设计里,主要的字段都应该标记为非空。

3. 唯一约束
唯一约束保证在一个字段或者一组字段里的数据与表中其它行的数据相比是唯一的。它的语法是:
CREATE TABLE procts ( proct_no integer UNIQUE, name text, price numeric );
上面是写成字段约束,下面这个则写成表约束:
CREATE TABLE procts ( proct_no integer, name text, price numeric, UNIQUE (proct_no) );
如果一个唯一约束引用一组字段,那么这些字段用逗号分隔列出:
CREATE TABLE example ( a integer, b integer, c integer, UNIQUE (a, c) );
这样就声明了特定字段值的组合在整个表范围内是唯一的。但是这些字段中的某个单独值可以不必是(并且通常也确实不是)唯一的。
你也可以给唯一约束赋予一个自己定义的名字,方法与前面相同:
CREATE TABLE procts ( proct_no integer CONSTRAINT must_be_different UNIQUE, name text, price numeric );
通常,如果包含在唯一约束中的那几个字段在表中有多个相同的行,就违反了唯一约束。但是在这种比较中,NULL 被认为是不相等的。这就意味着,在多字段唯一约束的情况下,如果在至少一个字段上出现 NULL ,那么我们还是可以存储同样的这种数据行。这种行为遵循 SQL 标准,但是我们听说其它 SQL 数据库可能不遵循这个标准。因此如果你要开发可移植的程序,那么最好仔细些。

4. 主键
从技术上讲,主键约束只是唯一约束和非空约束的组合。所以,下面两个表定义是等价的:
CREATE TABLE procts ( proct_no integer UNIQUE NOT NULL, name text, price numeric ); CREATE TABLE procts ( proct_no integer PRIMARY KEY, name text, price numeric );
主键也可以约束多于一个字段;其语法类似于唯一约束:
CREATE TABLE example ( a integer, b integer, c integer, PRIMARY KEY (a, c) );
主键表示一个或多个字段的组合可以用于唯一标识表中的数据行。这是定义一个主键的直接结果。请注意:一个唯一约束实际上并不能提供一个唯一标识,因为它不排除 NULL 。这个功能对文档目的和客户应用都很有用。比如,一个可以修改行数值的 GUI 应用可能需要知道一个表的主键才能唯一地标识每一行。
一个表最多可以有一个主键(但是它可以有多个唯一和非空约束)。关系型数据库理论告诉我们,每个表都必须有一个主键。PostgreSQL 并不强制这个规则,但我们最好还是遵循它。

5. 外键
外键约束声明一个字段(或者一组字段)的数值必须匹配另外一个表中出现的数值。我们把这个行为称为两个相关表之间的参照完整性。
假设你有个产品表,我们可能使用了好几次:
CREATE TABLE procts ( proct_no integer PRIMARY KEY, name text, price numeric );
假设你有一个存储这些产品的订单的表。我们想保证订单表只包含实际存在的产品。因此我们在订单表中定义一个外键约束引用产品表:
CREATE TABLE orders ( order_id integer PRIMARY KEY, proct_no integer REFERENCES procts (proct_no), quantity integer );
现在,我们不能创建任何其 proct_no 没有在产品表中出现的订单。
在这种情况下我们把订单表叫做引用表,而产品表叫做被引用表。同样,也有引用字段和被引用字段。
你也可以把上面的命令简写成
CREATE TABLE orders ( order_id integer PRIMARY KEY, proct_no integer REFERENCES procts, quantity integer );
因为如果缺少字段列表的话,就会引用被引用表的主键。
一个外键也可以约束和引用一组字段。同样,也需要写成表约束的形式。下面是一个捏造出来的语法例子:
CREATE TABLE t1 ( a integer PRIMARY KEY, b integer, c integer, FOREIGN KEY (b, c) REFERENCES other_table (c1, c2) );
当然,被约束的字段数目和类型需要和被引用字段数目和类型一致。
和平常一样,你也可以给外键约束赋予自定义的名字。
一个表可以包含多于一个外键约束。这个特性用于实现表之间的多对多关系。比如你有关于产品和订单的表,但现在你想允许一个订单可以包含多种产品(上面那个结构是不允许这么做的),你可以使用这样的结构:
CREATE TABLE procts ( proct_no integer PRIMARY KEY, name text, price numeric ); CREATE TABLE orders ( order_id integer PRIMARY KEY, shipping_address text, ... ); CREATE TABLE order_items ( proct_no integer REFERENCES procts, order_id integer REFERENCES orders, quantity integer, PRIMARY KEY (proct_no, order_id) );
注意最后的表的主键和外键是重叠的。
我们知道外键不允许创建和任何产品都无关的订单。但是如果一个订单创建之后其引用的产品被删除了怎么办?SQL 也允许你处理这个问题。简单说,我们有几种选择:

不允许删除一个被引用的产品
同时也删除订单
其它的?
为了说明这个问题,我们对上面的多对多关系制定下面的策略:如果有人想删除一种仍然被某个订单引用的产品(通过 order_items),那么就不允许这么做。如果有人删除了一个订单,那么订单项也被删除。
CREATE TABLE procts ( proct_no integer PRIMARY KEY, name text, price numeric ); CREATE TABLE orders ( order_id integer PRIMARY KEY, shipping_address text, ... ); CREATE TABLE order_items ( proct_no integer REFERENCES procts ON DELETE RESTRICT, order_id integer REFERENCES orders ON DELETE CASCADE, quantity integer, PRIMARY KEY (proct_no, order_id) );
限制和级联删除是两种最常见的选项。RESTRICT 禁止删除被引用的行。NO ACTION 的意思是如果在检查约束的时候还存在任何引用行,则抛出错误;如果你不声明任何东西,那么它就是缺省的行为。这两个选择的实际区别是:NO ACTION 允许约束检查推迟到事务的晚些时候,而 RESTRICT 不行。CASCADE 声明在删除一个被引用的行的时候,所有引用它的行也会被自动删除掉。在外键字段上的动作还有两个选项:SET NULL 和 SET DEFAULT ,它们导致在被引用行删除的时候,将引用它们的字段分别设置为 NULL 和缺省值。请注意这些选项并不能让你逃脱被观察和约束的境地。比如,如果一个动作声明 SET DEFAULT ,但是缺省值并不能满足外键,那么该动作就会失败。
与 ON DELETE 类似的还有 ON UPDATE 选项,它是在被引用字段修改(更新)的时候调用的,可用的动作是一样的。
有关更新和删除数据的更多信息可以在章6里找到。
最后,我们应该说明的是,一个外键必须要么引用一个主键,要么引用一个唯一约束。如果外键引用了一个唯一约束,那么在如何匹配 NULL 这个问题上还有一些其它的可能性。这些东西都在 CREATE TABLE 中解释。

D. 我在SQL中遇到的问题

有这两个文件吗?

E. 数据库sql中遇到的问题

先赞一个,写语句很规范,起行、断句等,很符合我的习惯和脾气。而且,这个是我今天回答的问题中最有水平的一个。

呵呵,2和3都把数据给放大了吧?

先搞清楚
select
from Employees,Orders,Procts
这个语句会发生什么效果。你自己少写几条数据试试。
发现没有,这个其实是一个cross join的关系。什么概念,就是数据量成了Employees数据量*Orders数据量*Procts数据量的关系。

然后你再看2、3的连个条件,没有一个去约束这些数据不被放大。

2、3修改方法:

在第一个where后面加上Orders.ProctID=Procts.ProctID
and Orders.EmployeeID=Employees.EmployeeID and
数据就对了。

个人建议,以后写这种sql的时候不要直接from Employees,Orders,Procts。使用inner join XX on XXXX这样的结构比较好。

F. SQL数据库实训中遇到的问题

表是建立关系数据库的基本结构,用来存储数据具有已定义的属性,在表的操作过程中,有查看表信息、查看表属性、修改表中的数据、删除表中的数据及修改表和删除表的操作。从实训中让我更明白一些知识,表是数据最重要的一个数据对象,表的创建好坏直接关系到数数据库的成败,表的内容是越具体越好,但是也不能太繁琐,以后在实际应用中多使用表,对表的规划和理解就会越深刻。我们实训的另一个内容是数据库的约束、视图、查询。从中我们了解到查询语句的基本结构,和简单SELECT语句的使用,多表连接查询。而在视图的操作中,也了解到了视图是常见的数据库对象,是提供查看和存取数据的另一种途径,对查询执行的大部分操作,使用视图一样可以完成。使用视图不仅可以简化数据操作,还可以提高数据库的安全性,不仅可以检索数据,也可以通过视图向基表中添加、修改和删除数据。存储过程、触发器也是我们实训的内容之一, 在操作中有建立存储过程,执行存储过程,及查看和修改存储过程,这些都是非常基础的东西,但对用户却是非常重要的呢,只有熟悉了T_SQL语言,才能更好的掌握更多的东西。我们还学习了,SQL管理、数据的导入、导出、备份和还原。有SQL Server 安全访问控制;登录账户的管理;数据库角色的管理;用户权限管理。维护数据库的安全是确保数据库正常运行的重要工作。数据的备份是对SQL Server数据事务日志进行拷贝,数据库备份记录了在进行备份操作的数据库中所有数据的状态。而数据的备份还分为数据库完整备份、差异备份、事务日志备份、文件及文件组备份。做数据备份就是为了以后的数据库恢复用。

G. SQL Server中常见的问题与解决方法

关于事务日志

在使用sql server时,经常会出现系统提示事务日志
已满的错误信息(错误1105),以使的应用系统的数据库
无法打开,影响到系统的正常运行。通常有三种方法可以
解决这一问题:

●扩展数据库空间

可以通过扩展数据库大小来增大事务日志的空间。先
利用alter database增大数据库空间,再通过sp—logdev
ice系统存储过程把事务日志转移到事务日志数据库设备
上去,具体语法如下:

语法:

·alter database database—name on database—d
evice’增大数据库空间

·sp—logdevice dbname,database_device’转移
事务日志

例:alterdatabasemydbonmydb—log—dev=8

sp—logdevicemydbmydb—log—dev

如果数据库对数据库设备变得过大(通常在决定数据
库大小时,先指定一个保守的值,如果以后需要增大空间
,用alter database增加其大小),需先扩展数据库设备
,再增大事务日志的空间,具体语法如下:

语法:

·disk resize name=logical—device_name,size=
final—size’扩展数据库设备

·alter database database—name on database—d
evice’增大数据库空间

·sp_logdevicedbname,database_device’转移事
务日志

例:disk resize name=mydb on mydb—log—dev=8

alter database mydb on mydb—log—dev=8

sp—logdevice mydb mydb—log—dev

(以上工作也可以通过对microsoft sql enterprise
manger提供的gui界面直接操作来完成。)

●定期执行mp database语句来完成截短
事务日志。其语法为:

语法:

·mp database dbname to mp_device

例:mp databas emydb to mymp—dev(通过将
数据库mydb备份到备份设备mymp—dev上完成截短事务日
志。)

●trunc.logonchkpt.选项来完成截短事
务日志

缺省时,在新建的数据库上,trunc.logonchkpt.
选项设置成off(缺省值),事务日志永远不作备份,事务
日志不停地增长,可能会耗尽数据库的存储空间,将trun
c.logonchkpt.选项设置成on,每次checkpoint进程发
生时(通常每分钟一次)都截短事务日志(删除已提交的
事务),使得事务日志不会不停地增长以耗尽数据库的存
储空间。

配置选项和值

在使用sql server时,同样会经常出现系统提示user
connections(用户连接)已达到配置数,系统无法正常
运行的问题。sql server用户连接最大值是32767,而缺
省时的一般配置数为15个。如果使用中的用户连接已达到
配置数,而又来了一个用户连接请求,sqlserver将回送一
个错误消息。这时可以通过修改sql server的配置选项中
的user connections项的最大值来解决这一问题。配置选
项的显示和管理可通过sp—configure系统过程来完成,
但不能使用sp—configure来设定一个比当前配置选项最大
值还大的配置选项。

语法:sp—configure〔‘config—name’〔,confi
g—value〕〕

其中config—name为配置选项的项名,config—valu
e为设置值。

例:sp—configure‘user_connections’,30

同时用户可以使用sp—configure来显示配置选项,
通过重新设置一些配置选项,调节性能和优化存储分配。
(注:修改sql server的配置选项,必须以系统管理员身
份登录。)?

H. 怎样解决新手在SQL2008安装过程中遇到的问题

SQL Server2008安装中遇到诸多问题该如何解决?如何安装SQL Server2008。 列举一下经常遇到的问题: 1.在安装刚开始时,就出现1605或1608的错误。 2.安装过程中要求查找.msi格式包。 3.安装完成了,但失败。尤其是数据库引擎添加不上。 事实上,如果这些问题是你重新安装才遇到的,我推荐大家先进行一个完全彻底的卸载,再来安装。 接下来展开论述: 工具/原料 SQL Server2008 方法/步骤 1.安装SQL Server2008时出现错误1605或1608时,网上经常会看到一种方法,让你寻找注册表目录下的倒排的GUID,然后删除。要我说,麻烦又不一定能找到,直接删除注册表内UpgradeCodes项的全部内容即可。具体操作过程:开始>运行>regedit>HKEY_Classes_Root\installer\UpgradeCodes 或者,先去进行一遍完全彻底的卸载,再来安装,因为出现1605和1608的错误本来就是因为卸载不干净。 2.安装过程中要求查找安装包。这个我建议还是不要找了,因为一般安装完毕后基本不会成功。会出现如图所示结果。去完全卸载在重装吧! 3.安装完成了,但失败。尤其是数据库引擎添加不上。同上,完全卸载在重装。 最后附上安装步骤,没有特殊说明的直接点击下一步:

I. sql 数据挖掘中遇到对的问题

当有在CUBE建完后,对事实表或维度表的字段长度做改变时会出现。这时一般伴随着后面的错误信息会指示哪个字段出现了问题。这时,只要在数据源视图中刷新同步一下被更改的表的表信息或通过手工直接改一下源视图的代码就可以
这个错误的另一种表现并不提示字段有问题而是提示“度量值组”有问题。这种情况下需要仔细检查事实表内对应维度表的字段填充的值是否与维度表一致,是否实际数据超出了维度数据。这个问题是由ETL过程不充分引入的。