SQL SERVER数据库(二):数据库连接、建库、建表、数据类型

作者:陆金龙    发表时间:2017-03-18 15:04   


1、数据库的连接

1.1 Windows身份验证模式连接实例

服务器名(连接计算机名或IP可以,本机用“.”代替)

(A)两种连接默认实例方法,服务器名:计算机名或IP

 如:. 或者192.168.0.11

(B)两种连接其他实例方法,服务器名:计算机名或IP “\” 实例名

 如:192.168.0.11\SQLEXPRESS

注:需要先将要连接的实例的服务项启动。运行Services.msc,找到相应的实例启动。

1.2 SQL身份验证模式连接实例

服务器名同Windows身份验证模式。

(A)混合模式设置

模式设置:数据库实例设置验证模式为Windows身份验证模式或混合模式 (SQL和Windows身份验证身份验证模式)

修改方法:先用windows身份验证登录,数据库实例属性中设置验证模式

(B)数据库管理系统的用户和密码(如sa)

        安全性的登录名中创建和修改用户的属性,设置密码。

检查用户的属性的“状态”,登录是否被禁用,登录选项要设为启用

        

        

在“用户映射”中,为该用户选择相关的数据库,并为角色db_owner打勾赋予权限。

(C注意事项:

主机TCP/IP须作如下设置,才能用IP地址( 实例名)来连接

SQLEXPRESS实例是安装Visual Studio时自动安装的,不支持远程连接。

2、数据库及创建

2.1 数据库实例与数据库

数据库实例:指的是在安装数据库时,创建的数据库实例。在一台计算机上可以安装多个数据库实例,不同的数据库实例之间没有任何关系。在数据库的连接选项中,服务器名代表的就是某一个具体的实例。

数据库:可以理解为按照数据结构来组织、存储和管理某一方面业务的数据的仓库。一个数据库实例中通常包含多个数据库。在一个创建好的实例中,已经包含了系统数据库,用户可以根据业务需要创建一个或多个数据库。

只有连接上了数据库实例,才能对实例中的数据库进行管理和操作。

2.2 系统数据库

2.2-1 系统数据库及作用

系统数据库,MSSQLServer实例中默认包含master 、model 、msdb 、tempdb等几个数据库,主要用来记录数据库实例的相关信息,为用户自定义数据库提供基础模版,以及相关的辅助功能(如创建任务计划,调度执行任务等),保存临时表信息等。

由于系统数据库的特殊性和重要性,一般不允许用户轻易进行修改操作。

2.2-2系统表的查询应用

通过系统数据表,可以查到一些关于用户自定义的数据库的结构方面的信息。

如一下语句可查询包含ProductId字段的表的表名:

select name from sysobjects

where id in (select id from syscolumns where name='ProductId')  

或者

SELECT b.name as TableName,a.name as columnname

From syscolumns a 

INNER JOIN sysobjects b ON a.id=b.id

where a.name='ProductId'

2.3 自定义数据库

2.3-1 手动建库

在Microsoft SQL Server Management Studio中,连接到数据库实例后,点击“数据库”,在右键菜单中,新建数据库,进入创建数据的向导操作,为数据库文件及日志文件设置存储路径、文件大小、文件最大值、文件增长值等相关参数即可。

2.3-2 脚本建库

如通过执行一下sql语句,创建一个名为IProgramCMS的数据库,数据库及日志文件存放到D盘中名为“Data”的文件下。

--建库:create database数据库名

create database IProgramCMS

on primary

(

name='IProgramCMS',

filename='d:\Data\IProgramCMS.mdf',

size=3mb,

maxsize=5gb,

filegrowth=10%

)

log on

(

name='IProgramCMS_log',

filename='d:\Data\IProgramCMS_log.ldf',

size=5mb,

maxsize=10gb,

filegrowth=1mb

)

maxsize文件可以增长到的最大大小。可以使用千字节 (KB)、兆字节 (MB)、千兆字节 (GB) 或兆兆字节 (TB) 后缀。默认值为 MB。指定一个整数,不要包含小数位。如果没有指定 max_size,那么文件将增长到磁盘变满为止

filegrowth每次需要新的空间时为文件添加的空间大小。指定一个整数,不要包含小数位。

3、数据表及创建

3.1 数据表

用对象关系映射(ORM)理解数据表

1)表的定义对应一个类,表中每一列表示一个属性(或者字段),就是所谓的特征。一张完整的表结构上就是由字段(属性、列)构成的。

2)一行数据对应一个对象,一张表中的数据对应一个集合。

3)表中每一行表示一个完整的数据,描述它就好像是在描述一个对象的特征,即对象的属性(字段)。往表中存一行数据,就是为每个字段添加数据,完成对这一行数据的描述。

3.2 创建表

3.2-1手动建表

(1)建字段定类型输表名建约束。

数据库里字符串用nvarchar()来表示,字符用nchar()类型

表:Catalog/table

行:记录元组

字段:属性建字段命名与系统冲突可以使用[ ]括起来(MSSQL还可以用双引号)

修改表结构注意:去掉“阻止…更改”的选项,修改时避免现有数据的冲突

(2)主键约束:业务主键和逻辑主键

业务主键:该字段本身有含义,是记录中的一部分。业务主键字段的值有可能重复,当重复时就与主键的约束相冲突。

逻辑主键:与记录没有关系,只是为了唯一标识每条记录。一般是int类型字段。

 优先使用逻辑主键。通常逻辑主键使用属性的标志增量,值由系统自动生成。

(3)外键关联

 以相关联字段所在表的特性区分:含有外键的表为外键表,含有主键的表为主键表。

3.2-2 脚本建表

1脚本创建数据表

create table Employee

(

Id int identity (1,1) primary key,

Name nvarchar(5) unique,

Age int check(age>0 and age<150),

Gender char(4) check(gender='男' or gender'女'),

InputTime datetime default (getdate())

)

2)脚本创建表和约束

注意:约束与表的创建是同一级别

drop table Employee

create table Employee

(

Id int identity (1,1),

Name nvarchar(5),

Age int,

Gender char(4),

InputTime datetime default (getdate()),

constraint PK_Employee_id primary key (id),

constraint UQ_Employee_Name unique (Name),

constraint CK_Employee_age check (age>0 and age<150),

constraint CK_Employee_gender check (gender='男'or gender='女')

)

3.3 编辑表

3.3-1修改表结构

(1)添加、修改、删除字段

    Alter table Employee add DepartmentId nvarchar(16) --增加1列

    Alter table Employee alter column DepartmentId varchar(16)--修改数据类型

    Alter table Employee drop column DepartmentId --删除1列

(2)修改主外键约束

Alter table Employee

add constraint FK_Employee_Department_DepartmentId

foreign key(DepartmentId)  references Department(Id)

格式说明:

Alter table 外键表的表名

add constraint FK_外键表名_主键表名_字段名

foreign key(外键表外键)  references 主键表(主键表主键)

    注意:有外键关系时,先添加主键表数据,后添加外键表数据,否则添加外键表数据时出错。先删除外键表相关的记录,再删除主键表记录,否则删除主键表数据可能失败。

3.3-2添加和修改约束

注意:约束与表是同一级别。

(1)添加唯一约束()

(2)添加默认值约束

A、使用GetDate() 函数得到当前事件—这还不是自动添加的

B、设计-字段属性中添加默认约束:可以赋确定的值或调用函数

(3)添加检查约束

4脚本添加约束

--添加空表

select * into newStudent from Student where 1>2;

--添加primary key约束

alter table dbo.newStudent

add constraint PK_newStudent_stuID primary key(stuId);

--添加unique约束

alter table dbo.newStudent

add constraint UQ_newStudent_stuName unique(stuName);

--添加default约束

alter table dbo.newStudent

add constraint DF_newStudent_stuInputtime default (getdate()) for stuInputtime;

--添加check约束

alter table newStudent

add constraint CK_newStudent_stuSex check((stuSex='男' or stuSex='女')or stuSex ='未知')

--修改check约束

alter table newStudent

drop constraint CK_newStudent_stuSex

add constraint CK_newStudent_stuSex check(stuSex='男' or stuSex='女')

--添加多列唯一主键

ALTERTABLE GroupMemberRelation ADD CONSTRAINT[Uq_GroupMemberRelation_GroupId_MemberId]UNIQUEN ON CLUSTERED

(

[GroupId]ASC,

[MemberId]ASC

)WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,SORT_IN_TEMPDB=OFF,IGNORE_DUP_KEY=OFF,ONLINE=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]

GO

4、数据类型

4.1 基本数据类型

数字类型:int、float、money

money 金钱数据类型使用的时候直接当作数字类型即可

字符类型:char(n)、varchar(n)、nchar(n)、nvarchar(n)

(A)非Unicode字符英文环境字符集叫单一的用char[(n)] ,、varchar[(n)]

   char[(n)] (固定长度 n个字节,存储效率相对高,占用空间, n范围1-8000) 手机号

        varchar[(n)] (可变长度最大n个字节,检索相率相对高,存储效率相对低,n范围1-8000,max 2^31-1)

(B) Unicode字符多国语言兼容用nchar和nvarchar,一个字母或数字也占2个字节,n范围1-4000

时间类型:datetime 赋值时使用字符串方式(如2012-12-01)

bool类型:bit 用设计器赋值只能使用true或false,SQL语句中可以使用1,0.

二进制类型:image 存取图像

4.2 SqlServerC#数据类型对照

 数据库 C#程序

Variant        Object

uniqueidentifier    System.Guid

real         System.Single

bit         Boolean

tinyint        System.Byte

varbinary       System.Byte[]

binary       System.Byte[]

image        System.Byte[]

int        int32

smallint       Int16

bigint       int64

float        System.Double

money         System.Decimal

smallmoney      System.Decimal

numeric        System.Decimal

decimal       System.Decimal

datetime      System.DateTime

smalldatetime     System.DateTime

timestamp       System.DateTime

char        String

nchar        String

varchar        String

nvarchar        String

text        String

ntext        String