記事のディレクトリ
1つのデータ定義言語
定義1.1データベース
データベース全体としての物理的なファイルに外部メモリに保存されています。2つの物理ファイルがあります。
- まず、データファイル(データファイル)、データベースに格納されたオブジェクトデータ。
- 第二に、ログファイル(ログファイル)、データベースを復元するための冗長データを格納します。
データベースは、複数の物理ファイルを持つことができ、論理デバイスなどの1つまたは複数の物理ファイルを提供することができる、データベースは、データベースの定義で定義されている必要があり、複数の論理デバイスを有することができます。連絡先への論理デバイスと物理ファイルで、独立モードとストレージモード論理データベースを達成するために、唯一のロジックデバイス以上の物理データベースオブジェクトの定義の詳細については心配せずにいる、に格納されたオブジェクトを指定する必要があります。
USE master;
GO
--在创建 ScoreDB 数据库之前删除名为 ScoreDB 的数据库(如果它存在)。
IF DB_ID (N'ScoreDB') IS NOT NULL
DROP DATABASE ScoreDB;
GO
--以下示例会创建数据库 ScoreDB。 由于未使用关键字 PRIMARY,因此第一个文件 (ScoreDB_data) 将成为主文件。
--因为在 ScoreDB_data 文件的 SIZE 参数中没有指定 MB 或 KB,将使用 MB 并按 MB 分配。
--ScoreDB_log 文件以 MB 为单位进行分配,因为 SIZE 参数中显式声明了 MB 后缀。
CREATE DATABASE ScoreDB
ON --定义数据文件
( NAME=ScoreDB_data, --逻辑文件名
--物理文件名
FILENAME='G:\ProgramFiles\MSSQL14.SQLEXPRESS01\MSSQL\DATA\ScoreDB_data.mdf' ,
SIZE=10, --文件初始大小为5MB
MAXSIZE=200, --文件最大为200MB
FILEGROWTH=5 --增量为5MB
)
LOG ON --定义日志文件
( NAME=ScoreDB_log, --逻辑文件名
FILENAME='G:\ProgramFiles\MSSQL14.SQLEXPRESS01\MSSQL\DATA\ScoreDB_log.ldf' ,
--物理文件名
SIZE=10MB, --文件初始大小为5MB
MAXSIZE=200MB, --文件最大为200MB
FILEGROWTH=5MB --增量为5MB
)
GO
ベーステーブルの1.2定義
データベースを作成した後、あなたは、データベース内の基本的なテーブルを作成することができます。論理デバイスに関連付けられているベーステーブルでは、その基本的な表は、データファイルの上に置くことができることを、あなたは複数のデータファイル上に配置することができます。
基本的なSQLのデータ型は、次のとおりです。
- 整数:INT(4B)、SMALLINT(2B)、TINYINT(1B)。
- 实型:フロート、実際の(4B)、小数(P、N)、数値(P、N)。
- 文字:文字(N)、VARCHAR(n)は、テキスト、
- バイナリ型:バイナリ(N)、VARBINARY(n)は、画像、
- 論理:ビットは、0と1は、NOT NULLを取ることができます
- 通貨:お金(8B、小数点以下4桁)、小さなお金(4B、小数点以下2桁)。
- 時間タイプ:日時(4B、1753年1月1日から始まる)、SMALLDATETIME(4B、スタート1900-01-01から)。
前記画像データは、画像の種類、テキストストア大きなテキストデータ。
1.2.1基本的な表の作成
あなたは、基本的なテーブルを作成する場合、基本テーブルに関連付けられた情報は、データベースのシステムテーブルに格納されますについて説明します。基本的なテーブル操作の構文を作成することです:
CREATE TABIE <tableName>
(
<columnNamel> <dataType> [DEFAULT <defaultvalue>][NULL | NOT NULL] [,
<columnName2> <dataType> [DEFAULT <defaultvalue>][NULL | NOT NULL]…]
[, CONSTRAINT <constraintName1>]
{UNIQUE | PRIMARY KEY} (<columName1> [, <columName2>…])[,…n]
]
[, CONSTRAINT <constraintName2>]
FOREIGN KEY (< columName1> [, < columiName2>…])
REFERENCE [<dbName>.owner.]<refTable> (<refColumn1> [, <refColum2>…])[,…n]
]
)[ON <filegroupName>]
どこで:
- <テーブル名>:ベーステーブルの名前は、128文字まで含むことができ
- <ColumnNameに>:ベーステーブルのカラム名、テーブル内で一意。
- <データ型>:指定した列のデータ型。
- DEFAULT:列の設定省値は、オプションになります。
- NULL | NOT NULL:、ヌル値に列を許可するかどうかを設定し、オプションになります。
- <ConstraintName>:、制約の名前を定義し、オプションになります。
- UNIQUE:ユニークなインデックスを作成します。
- PRIMARY KEY:マスターキーを確立します。
- FOREIGN KEY:外符号の確立。
- ON <filegroupName>:指定された論理デバイス(単数または複数)上のデータベース・オブジェクト、論理デバイス(S)データベースロジックデバイスに追加されたデータベースまたは修飾されたコマンドを使用して、データベースの作成中に定義されなければならない(グループ)、オブジェクトは自動的にデフォルトでは、プライマリの論理デバイス上で確立されます。
推奨:最良メインロジックデバイスのストレージシステムの管理情報データベースので、メインロジックデバイスに基づいて(例えば、等の基本的なテーブル、インデックス、など)ユーザ・データベース・オブジェクトを入れません。
DROP TABLE IF EXISTS [dbo].[Student]
GO
CREATE TABLE Student
(
studentNo char(7) NOT NULL --学号
CHECK (studentNo LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),
studentName varchar(20) NOT NULL, --姓名
sex char(2) NULL, --性别
birthday datetime NULL, --出生日期
native varchar(20) NULL, --籍贯
nation varchar(30) DEFAULT '汉族' NULL, --民族
classNo char(6) NULL, --所属班级
CONSTRAINT StudentPK PRIMARY KEY (studentNo),
CONSTRAINT StudentFK FOREIGN KEY (classNo) REFERENCES Class(classNo)
);
GO
1.2.2基本的なテーブルを変更します
基本的なテーブル構造は、拡張コラムなど、ALTER TABLEコマンドで変更することができます。
基本的な手術台の構文を変更すると、次のとおりです。
- 追加列(新規のヌル値)
ALTER TABLE <tableName>
ADD <columnName> <dataType>
- 制約を追加します。
ALTER TABLE <tableName>
ADD CONSTRAINT <constraintName>
- 削除制約。
ALTER TABLE <tableName>
DROP <constraintName>
- 列のデータ型を変更します
ALTER TABLE <tableName>
ALTER COLUMN <columnName> <newDataType>
ここで、<tableNameの>は、実質的に修正するテーブルの名前です。
削除1.2.3基本的なテーブル
DROP TABLE <tableName> [RESTRICT | CASCADE]
- 選択した場合RESTRICTビューを持つことができない基本的なテーブルで、すなわち、限界条件が存在するベース・テーブルを削除し、トリガーや他のベーステーブルは、デフォルト値(例えば、チェック制約、外符号制約FOREIGN KEYをチェックするように)参照され
- あなたが選択した場合はCASCADE、削除、基本的なテーブル制限はありませんが、ベーステーブルを削除するだけでなく、基本的なテーブル、整合性ルール、トリガ、ビューの確立にすべてのインデックスを削除し、あなたがベーステーブルを削除するときに、システムは、意志データベース・システムから削除は、テーブルのベース・テーブルと共に記載されています
注:SQL Serverがサポートされていない[RESTRICT | CASCADE]オプション
2 SQL言語の更新
2.1データの挿入
- タプルを挿入します
INSERT INTO <tableName> [(<columnName1> [, <columnName2>…])]
VALUES(<value1> [, <value2>…])
- 複数のタプルを挿入
INSERT INTO <tableName> [(<columnName1> [, <columnName2>…])]
<subquery>
例えば:
CREATE TABLE StudentNation (
studentNo char(7) NOT NULL, --学号
courseNo char(3) NOT NULL, --课程号
termNo char(3) NOT NULL, --学期号
score numeric(5,1) DEFAULT 0 NOT NULL --成绩
CHECK (score BETWEEN O.O AND 100.0),
CONSTRAINT studentNationPK PRIMARY KEY (studentNo, courseNo, termNo)
)
--执行如下插入语句:
INSERT INTO StudentNation
SELECT *
FROM Score
WHERE studentNo IN(SELECT studentNo FROM Student WHERE nation<>'汉族')
INSERT INTO StudentNation (studentNo, courseNo, termNo)
SELECT studentNo, courseNo, termNo
FROM Score
WHERE studentNo IN (SELECT studentNo EROM Student WHERE nation='汉族')
削除データへ2.2
DELETE FROM <tableName> [WHERE <predicate>]
例えば:
DELETE FROM SCORE
WHERE studentNo='1600001'
修正データ2.3
UPDATE <tableName>
SET <columnName1>=<expr1> [, <columnName2>=<expr2>…]
[FROM {<tableName1> | <queryName1> | <viewname1>} [[AS] <aliasName1>]
[,{<tableName2> | <queryName2> | <viewname2>} [[AS] <aliasName2>] … ]
]
[WHERE <predicate>]
どこで:
- <テーブル名>:基本データテーブルを変更するには、
- SET <columnName1> = <expr1の> [<columnName2> = <expr2の> ...]:
一つは複数列の属性値を変更することができ、エッジ型カラム値テーブルによって指定された属性値を置き換える、ポイント間のコンマ。 - [<述語> WHERE]:条件は省略した場合、省略することができるタプルを満たすように改変されていることを示し、修飾されたベーステーブルを示すすべてのタプルは、WHERE句のサブクエリに含まれていてもよいです
例えば:
UPDATE Class SET classNum=sCount
FROM Class a, ( SELECT classNo, count(*) sCount
FROM Student
GROUP BY calssNo) b
WHERE a.classNo=b.classNo
3つのビュー
ビューはテーブル内の1つまたはいくつかのベーステーブル(またはビュー)から誘導される、仮想テーブルであるにビューの定義のテーブルのみを格納するデータベース・システム、ビューは、対応するデータが格納されていません。ときにデータベーステーブルの変更、ビュー・データからのクエリも変更されます。
ビューは三つのモードは、ベースの作用図には、パターンのデータベース管理システムを可能にします。クエリは、削除、限ら更新およびビューに基づいて新しいビューを定義し、ビューには、その主な役割です。
- ユーザの操作を簡素化します。
- ユーザーが同じデータベース・スキーマに様々な角度で見てすることができます。
- データベーススキーマを再構築するには、ロジックの独立の程度を提供します。
- データベース内の機密データを保護するためのセキュリティの度合いを提供します。
- より明確にクエリにビューの適切な使用を表現することができます。
3.1定義ビュー
ビューを使用する前にビューを定義する必要があります。
CREATE VIEW <viewName> [(<columnName1> [, <columnName2>…])]
AS <subquery>
[WITH CHECK OPTION]
- <ビュー名>:新しいビューの名前、名前はデータベース内で一意である必要があります。
- <columnName1> [、<columnName2> ...]: ビュー定義の列名。列名が省略されている場合
、ビューの書き込みではないカラム名を自動的に列名をチェックアウトする<サブクエリ>ステートメントを取ります。以下の3例1の場合は、ビューの列名を記述する必要があります。
- <サブクエリ>特定のカラムでは、ポリマークエリ機能または発現されています。
- <サブクエリ>クエリがマルチテーブルに表示される列名と同じ名前に参加します。
- 新しい名前は、より多くのビューの列のための適切な取る必要があります。
- AS <サブクエリ>:サブクエリ、および句DISTINCT句、ORDER BYを含めることはできません。
- [CHECK OPTIONを]:このオプションが使用されている場合、ビューはに更新された(挿入、削除、変更)の妥当性チェック操作が実行されなければならない場合にのみ、ビューの定義を満たすの更新操作述語条件(<サブクエリ>プロモーター条件式)クエリ、更新操作が許可されています
例えば:
CREATE VIEW StudentView1999
AS
SELECT *
FROM Student
WHERE year(birthday)=1999
CREATE VIEW ScoreView (courseNo, courseName, courseCount, courseAvg)
AS
SELECT a.courseNo, courseName, count(*), avg (score)
FROM Course a, Score b
WHERE a.courseNo=b.courseNo
GROUP BY a.courseNo, courseName
--或
CREATE VIEW ScoreView1
AS
SELECT a.courseNo, courseName, count(*) courseCount, avg (Score) courseAvg
FROM Course a, Score b
WHERE a.courseNo=b.courseNo
GROUP BY a.courseNo, courseName
3.2クエリビュー
クエリは、ビュー上で行う最も重要な操作です。ユーザの視点からは、クエリ、クエリビューモードテーブルは、システムの観点から、まさに実質的に同じである、クエリビューのプロセスは以下のとおりです。
- 基本的な表やビューがあるかどうか、クエリに関連する妥当性チェックをチェックします
- システムのデータベーステーブルから見た図の定義、およびユーザーのビューから定義されたクエリ結合サブクエリ
- クエリー・リライトを実行した後。
SELECT *
FROM StudentView1999
WHERE classNo='CS1601'
--该视图转化为如下查询:
SELECT *
FROM Student
WHERE year(birthday)=1999 AND classNo='CS1601'
3.3ビューの更新
ビューの更新指示による閲覧、削除、挿入し、データベーステーブルを変更します。ビューは、仮想テーブル、実データが格納されていないなので、ビューの更新は、したがって、ビュー定義が重複する値または計算排除発現、または集計操作を含む場合、ベーステーブルへの最終的な更新に変換されますあなたは、更新操作を表示することはできません。
、より限定された条件で更新操作を、表示する代わりに、データベース内のデータを更新するためにビューを使用するビューの役割を確立することが、ユーザーのクエリを簡素化し、セキュリティ保護の一定のレベルを達成するために、その更新操作を表示しないようにしよう。
3.4削除見ます
DROP VIEW <viewName> [CASCADE]