當前位置:首頁 » 編程語言 » 在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過程不充分引入的。