创建登录名
CREATE LOGIN <登录名> WITH PASSWORD=<'密码'>
USE master
GO
--newUser 密码123456
CREATE LOGIN newUser WITH PASSWORD='123456'
GO
--------------------------
创建数据库用户
CREATE USER 数据库用户 FOR LOGIN 登录名
USE dbTable
GO
CREATE USER newDBTable FOR LOGIN newUser
GO
---------------------------
为数据库用户赋予权限
GRANT 操作权限 ON 表名 TO 用户名
USE dbTable
GO
GRANT SELECT,INSERT,UPDATE ON 表名 TO 用户名
GO
***
--SELECT查询
--INSERT插入
--UPDATE修改
--DELETE删除
GRANT SELECT,INSERT,UPDATE,DELETE ON test TO newUser
GO
***
--回收权限
--REVOKE UPDATE ON 表名 TO 用户
REVOKE UPDATE ON test TO newUser
-----------------------------
创建数据库
USE master --进入master主数据库
GO
CREATE DATABASE mark --创建mark数据库
ON PRIMARY
(
NAME='mark', --创建数据库名称
FILENAME='D:\sql\mark.mdf', --存放数据库路径
SIZE=5MB, --数据库初始化大小
MAXSIZE=100MB, --数据库最大容量
FILEGROWTH = 10% --数据自动增量增量 计算方法5*(1+10%)*(1+10%)*(1+10%)......
)
LOG ON --创建日志文件
(
NAME='mark_log', --日志文件名
FILENAME='D:\sql\mark_log.ldf', --日志文件路径
SIZE=5MB, --日志文件大小
FILEGROWTH = 0 --没有自动增量
)
GO
-------------
添加mdf数据源文件
USE master
GO
--CREATE DATABASE mark2 --创建mark数据库
EXEC sp_attach_db @dbname= 'mark3',
@filename1 = 'd:\sql\mark2.mdf',
@filename2 = 'd:\sql\mark2_log.ldf'
GO
-------------
查询数据库
SELECT * FROM sysdatabases
删除数据库
USE master --进入master主数据库
DROP DATABASE mark --删除mark数据库
GO
--进入主数据库
USE master
GO
--创建voop登录名 密码123456
CREATE LOGIN voop WITH PASSWORD = '123456'
GO
--创建数据表
USE mark --进入数据库mark
GO
CREATE TABLE ta01 --创建ta01数据表
(
AUTOID int identity(0,1) primary key, --自增 主键
name NVARCHAR(255) NOT NULL, --可变长度, 每个字符占用2个字节,长度255
password NVARCHAR(255) NOT NULL,
email NVARCHAR(255) NOT NULL
)
------------------
USE mark
GO
CREATE TABLE test
(
vId int identity(0,1) primary key,
vName NVARCHAR(128) NOT NULL,
vPassword NVARCHAR(128) NOT NULL,
vEmail NVARCHAR(128) NOT NULL
)
-------------------------------------
--向ta01表里插入数据
INSERT INTO ta01(name, password, email) SELECT 'voop', '123456', 'voop@126.com'
--查询数据
SELECT * FROM ta01
--查询数据2
SELECT TOP 500 [AUTOID] --500行
,[name]
,[password]
,[email]
FROM [dbo].[ta01]
ORDER BY [AUTOID] DESC --反向排序
--删除数据
DELETE FROM ta01 Where name='voop'
--删除表
DROP TABLE test
--删除表中所有数据 保留表结构
TRUNCATE TABLE ta01
--UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
--例子1
UPDATE test SET vName='yy' WHERE vId='2'
--例子2
UPDATE test SET vName='yy', vPassword='123', vEmail='kk@ll.com' WHERE vId='3'
------------------------------创建表说明
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
integer(size)
int(size)
smallint(size)
tinyint(size)
仅容纳整数。在括号内规定数字的最大位数。
decimal(size,d)
numeric(size,d)
容纳带有小数的数字。
"size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数。
char(size)
容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。
在括号中规定字符串的长度。
varchar(size)
容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。
在括号中规定字符串的最大长度。
date(yyyymmdd) 容纳日期。
----------------------------
SQL 约束
约束用于限制加入表的数据的类型。
可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)。
我们将主要探讨以下几种约束:
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT
注释:在下面的章节
NOT NULL 约束强制列不接受 NULL 值。
*********
SQL UNIQUE 约束
UNIQUE 约束唯一标识数据库表中的每条记录。
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
CREATE TABLE Persons
(
Id_P int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
撤销 UNIQUE 约束
如需撤销 UNIQUE 约束,请使用下面的 SQL:
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID
**********
SQL PRIMARY KEY 约束
PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。
CREATE TABLE Persons
(
Id_P int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
撤销 PRIMARY KEY 约束
如需撤销 PRIMARY KEY 约束,请使用下面的 SQL:
ALTER TABLE Persons
DROP PRIMARY KEY
*****************
SQL FOREIGN KEY 约束
一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
让我们通过一个例子来解释外键。请看下面两个表:
----------------------------------------------------------+
Persons表 | | | |
----------------------------------------------------------+
Id_P |LastName |FirstName |Address |City |
1 |Adams |John |Oxford Street |London |
2 |Bush |George |Fifth Avenue |New York |
3 |Carter |Thomas |Changan Street |Beijing |
----------------------------------------------------------+
--------------------------+
Orders 表 |
--------------------------+
Id_O |OrderNo |Id_P |
1 |77895 |3 |
2 |44678 |3 |
3 |22456 |1 |
4 |24562 |1 |
--------------------------+
请注意,"Orders" 中的 "Id_P" 列指向 "Persons" 表中的 "Id_P" 列。
"Persons" 表中的 "Id_P" 列是 "Persons" 表中的 PRIMARY KEY。
"Orders" 表中的 "Id_P" 列是 "Orders" 表中的 FOREIGN KEY。
FOREIGN KEY 约束用于预防破坏表之间连接的动作。
FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
CREATE TABLE Orders
(
Id_O int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)
撤销 FOREIGN KEY 约束
如需撤销 FOREIGN KEY 约束,请使用下面的 SQL:
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders
********************
SQL CHECK 约束
CHECK 约束用于限制列中的值的范围。
如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。
SQL CHECK Constraint on CREATE TABLE
下面的 SQL 在 "Persons" 表创建时为 "Id_P" 列创建 CHECK 约束。CHECK 约束规定 "Id_P" 列必须只包含大于 0 的整数。
CREATE TABLE Persons
(
Id_P int NOT NULL CHECK (Id_P>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
撤销 CHECK 约束
如需撤销 CHECK 约束,请使用下面的 SQL:
ALTER TABLE Persons
DROP CONSTRAINT chk_Person
************************
SQL DEFAULT 约束
DEFAULT 约束用于向列中插入默认值。
如果没有规定其他的值,那么会将默认值添加到所有的新记录。
SQL DEFAULT Constraint on CREATE TABLE
下面的 SQL 在 "Persons" 表创建时为 "City" 列创建 DEFAULT 约束:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
*******************
CREATE INDEX 语句用于在表中创建索引。
在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
索引
您可以在表中创建索引,以便更加快速高效地查询数据。
用户无法看到索引,它们只能被用来加速搜索/查询。
注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。
SQL CREATE INDEX 语法
在表上创建一个简单的索引。允许使用重复的值:
CREATE INDEX index_name
ON table_name (column_name)
注释:"column_name" 规定需要索引的列。
SQL CREATE UNIQUE INDEX 语法
在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
CREATE INDEX 实例
本例会创建一个简单的索引,名为 "PersonIndex",在 Person 表的 LastName 列:
CREATE INDEX PersonIndex
ON Person (LastName)
如果您希望以降序索引某个列中的值,您可以在列名称之后添加保留字 DESC:
CREATE INDEX PersonIndex
ON Person (LastName DESC)
假如您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:
CREATE INDEX PersonIndex
ON Person (LastName, FirstName)
CREATE LOGIN <登录名> WITH PASSWORD=<'密码'>
USE master
GO
--newUser 密码123456
CREATE LOGIN newUser WITH PASSWORD='123456'
GO
--------------------------
创建数据库用户
CREATE USER 数据库用户 FOR LOGIN 登录名
USE dbTable
GO
CREATE USER newDBTable FOR LOGIN newUser
GO
---------------------------
为数据库用户赋予权限
GRANT 操作权限 ON 表名 TO 用户名
USE dbTable
GO
GRANT SELECT,INSERT,UPDATE ON 表名 TO 用户名
GO
***
--SELECT查询
--INSERT插入
--UPDATE修改
--DELETE删除
GRANT SELECT,INSERT,UPDATE,DELETE ON test TO newUser
GO
***
--回收权限
--REVOKE UPDATE ON 表名 TO 用户
REVOKE UPDATE ON test TO newUser
-----------------------------
创建数据库
USE master --进入master主数据库
GO
CREATE DATABASE mark --创建mark数据库
ON PRIMARY
(
NAME='mark', --创建数据库名称
FILENAME='D:\sql\mark.mdf', --存放数据库路径
SIZE=5MB, --数据库初始化大小
MAXSIZE=100MB, --数据库最大容量
FILEGROWTH = 10% --数据自动增量增量 计算方法5*(1+10%)*(1+10%)*(1+10%)......
)
LOG ON --创建日志文件
(
NAME='mark_log', --日志文件名
FILENAME='D:\sql\mark_log.ldf', --日志文件路径
SIZE=5MB, --日志文件大小
FILEGROWTH = 0 --没有自动增量
)
GO
-------------
添加mdf数据源文件
USE master
GO
--CREATE DATABASE mark2 --创建mark数据库
EXEC sp_attach_db @dbname= 'mark3',
@filename1 = 'd:\sql\mark2.mdf',
@filename2 = 'd:\sql\mark2_log.ldf'
GO
-------------
查询数据库
SELECT * FROM sysdatabases
删除数据库
USE master --进入master主数据库
DROP DATABASE mark --删除mark数据库
GO
--进入主数据库
USE master
GO
--创建voop登录名 密码123456
CREATE LOGIN voop WITH PASSWORD = '123456'
GO
--创建数据表
USE mark --进入数据库mark
GO
CREATE TABLE ta01 --创建ta01数据表
(
AUTOID int identity(0,1) primary key, --自增 主键
name NVARCHAR(255) NOT NULL, --可变长度, 每个字符占用2个字节,长度255
password NVARCHAR(255) NOT NULL,
email NVARCHAR(255) NOT NULL
)
------------------
USE mark
GO
CREATE TABLE test
(
vId int identity(0,1) primary key,
vName NVARCHAR(128) NOT NULL,
vPassword NVARCHAR(128) NOT NULL,
vEmail NVARCHAR(128) NOT NULL
)
-------------------------------------
--向ta01表里插入数据
INSERT INTO ta01(name, password, email) SELECT 'voop', '123456', 'voop@126.com'
--查询数据
SELECT * FROM ta01
--查询数据2
SELECT TOP 500 [AUTOID] --500行
,[name]
,[password]
,[email]
FROM [dbo].[ta01]
ORDER BY [AUTOID] DESC --反向排序
--删除数据
DELETE FROM ta01 Where name='voop'
--删除表
DROP TABLE test
--删除表中所有数据 保留表结构
TRUNCATE TABLE ta01
--UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
--例子1
UPDATE test SET vName='yy' WHERE vId='2'
--例子2
UPDATE test SET vName='yy', vPassword='123', vEmail='kk@ll.com' WHERE vId='3'
------------------------------创建表说明
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
integer(size)
int(size)
smallint(size)
tinyint(size)
仅容纳整数。在括号内规定数字的最大位数。
decimal(size,d)
numeric(size,d)
容纳带有小数的数字。
"size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数。
char(size)
容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。
在括号中规定字符串的长度。
varchar(size)
容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。
在括号中规定字符串的最大长度。
date(yyyymmdd) 容纳日期。
----------------------------
SQL 约束
约束用于限制加入表的数据的类型。
可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)。
我们将主要探讨以下几种约束:
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT
注释:在下面的章节
NOT NULL 约束强制列不接受 NULL 值。
*********
SQL UNIQUE 约束
UNIQUE 约束唯一标识数据库表中的每条记录。
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
CREATE TABLE Persons
(
Id_P int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
撤销 UNIQUE 约束
如需撤销 UNIQUE 约束,请使用下面的 SQL:
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID
**********
SQL PRIMARY KEY 约束
PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。
CREATE TABLE Persons
(
Id_P int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
撤销 PRIMARY KEY 约束
如需撤销 PRIMARY KEY 约束,请使用下面的 SQL:
ALTER TABLE Persons
DROP PRIMARY KEY
*****************
SQL FOREIGN KEY 约束
一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
让我们通过一个例子来解释外键。请看下面两个表:
----------------------------------------------------------+
Persons表 | | | |
----------------------------------------------------------+
Id_P |LastName |FirstName |Address |City |
1 |Adams |John |Oxford Street |London |
2 |Bush |George |Fifth Avenue |New York |
3 |Carter |Thomas |Changan Street |Beijing |
----------------------------------------------------------+
--------------------------+
Orders 表 |
--------------------------+
Id_O |OrderNo |Id_P |
1 |77895 |3 |
2 |44678 |3 |
3 |22456 |1 |
4 |24562 |1 |
--------------------------+
请注意,"Orders" 中的 "Id_P" 列指向 "Persons" 表中的 "Id_P" 列。
"Persons" 表中的 "Id_P" 列是 "Persons" 表中的 PRIMARY KEY。
"Orders" 表中的 "Id_P" 列是 "Orders" 表中的 FOREIGN KEY。
FOREIGN KEY 约束用于预防破坏表之间连接的动作。
FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
CREATE TABLE Orders
(
Id_O int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)
撤销 FOREIGN KEY 约束
如需撤销 FOREIGN KEY 约束,请使用下面的 SQL:
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders
********************
SQL CHECK 约束
CHECK 约束用于限制列中的值的范围。
如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。
SQL CHECK Constraint on CREATE TABLE
下面的 SQL 在 "Persons" 表创建时为 "Id_P" 列创建 CHECK 约束。CHECK 约束规定 "Id_P" 列必须只包含大于 0 的整数。
CREATE TABLE Persons
(
Id_P int NOT NULL CHECK (Id_P>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
撤销 CHECK 约束
如需撤销 CHECK 约束,请使用下面的 SQL:
ALTER TABLE Persons
DROP CONSTRAINT chk_Person
************************
SQL DEFAULT 约束
DEFAULT 约束用于向列中插入默认值。
如果没有规定其他的值,那么会将默认值添加到所有的新记录。
SQL DEFAULT Constraint on CREATE TABLE
下面的 SQL 在 "Persons" 表创建时为 "City" 列创建 DEFAULT 约束:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
*******************
CREATE INDEX 语句用于在表中创建索引。
在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
索引
您可以在表中创建索引,以便更加快速高效地查询数据。
用户无法看到索引,它们只能被用来加速搜索/查询。
注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。
SQL CREATE INDEX 语法
在表上创建一个简单的索引。允许使用重复的值:
CREATE INDEX index_name
ON table_name (column_name)
注释:"column_name" 规定需要索引的列。
SQL CREATE UNIQUE INDEX 语法
在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
CREATE INDEX 实例
本例会创建一个简单的索引,名为 "PersonIndex",在 Person 表的 LastName 列:
CREATE INDEX PersonIndex
ON Person (LastName)
如果您希望以降序索引某个列中的值,您可以在列名称之后添加保留字 DESC:
CREATE INDEX PersonIndex
ON Person (LastName DESC)
假如您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:
CREATE INDEX PersonIndex
ON Person (LastName, FirstName)