SQLSERVER数据库表的创建及SQL语句命令.docx
《SQLSERVER数据库表的创建及SQL语句命令.docx》由会员分享,可在线阅读,更多相关《SQLSERVER数据库表的创建及SQL语句命令.docx(32页珍藏版)》请在冰豆网上搜索。
SQLSERVER数据库表的创建及SQL语句命令
SQLSERVER数据库、表的创建及SQL语句命令
SQLSERVER数据库,安装、备份、还原等问题:
一、存在已安装了sqlserver2000,或2005等数据库,再次安装2008,会出现的问题
1、卸载原来的sqlserver2000、2005,然后再安装sqlserver2008,否则经常sqlserver服务启动不了
2、sqlserver服务启动失败,解决方法:
进入sqlserverconfiguremanager,点开Sqlserver网络配置(非sqlnativeclient配置),点sqlzhh(我sqlserver的名字)协议,将VIA协议禁用。
再启动SqlServer服务,成功
如图:
二、在第一次安装SQLSERVER2008结束后,查看安装过程明细,描述中有较多项插件或程度,显示安装失败。
解决方法:
1、重新启动安装程度setup.exe,选择进行修复安装,至完成即可。
三、先创建数据库XXX,再进行还原数据库时,选择好备份文件XXX.bak,确定后进行还原,会报如下图的错误。
解决方法:
选择好备份数据库文件后,再进入“选项”中,勾选“覆盖现在数据库”即可。
四、查看数据库版本的命令:
select@@version
在数据库中,点击“新建查询”,然后输入命令,执行结果如下
五、数据库定义及操作命令:
按照数据结构来组织、存储和管理数据的仓库。
由表、关系以及操作对象组成,把数据存放在数据表中。
1、修改数据库密码的命令:
EXECsp_passwordNULL,'你的新密码','sa'
sp_passwordNull,'sa','sa'
2、操作SQL2008数据库的命令
备份SQL数据库:
backupdatabase[3D-DATA]/*原数据库*/todisk='D:
\ProgramFiles\MicrosoftSQL Server\MSSQL10.MSSQLSERVER\MSSQL\backup\3D-DATA_backup_20131017.bak/*数据库备份文件*/'
withname='3D-DATA_backup_20131017'/*数据库备份文件*/
查看备份数据库的逻辑文件:
restorefilelistonly
fromdisk=
'd:
\ProgramFiles\MicrosoftSQLServer\
MSSQL10.MSSQLSERVER\MSSQL\backup\3D-DATA_backup_20131017.bak'
强制还原SQL数据库:
[其中,Test-3d是已存在的数据库,3D-FEP_data和3D-FEP_log为备份数据库的两个逻辑文件,]
restoredatabase[Test-3d]
fromdisk='d:
\ProgramFiles\MicrosoftSQLServer\MSSQL10.MSSQLSERVER\MSSQL\Backup\3D-DATA_backup_20131017.bak'
with
move'3D-FEP_data'to'D:
\ProgramFiles\MicrosoftSQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Test-3d.mdf',
move'3D-FEP_log'to'D:
\ProgramFiles\MicrosoftSQLServer\MSSQL10.MSSQLSERVER\MSSQL\DATA\Test-3d_log.ldf',
stats=10/* 表示每完成10%显示一条记录*/,replace/*表示强制,放置在with后,加英文逗号也可*/
以下为另一种方式:
-备份数据DB到.bak文件。
然后利用此bak文件恢复一个新的数据库DBTest。
USEmaster;
backupdatabaseDB
todisk='g:
\DBBack0930.bak' ;
restorefilelistonly
formdisk='g:
\DBBack0930.bak' ;
restoredatabaseDBTest(此数据库,已创建)
FROMDISK='g:
\DBBack0930.bak'
WITHMOVE'DBTest'TO'E:
\ProgramFiles\MicrosoftSQLServer2005\Data\DBTest.mdf',
MOVE'DBTest_log'TO'E:
\ProgramFiles\MicrosoftSQLServer2005\Data\DBTest_log.ldf'
GO
六、
SQLServer数据库文件恢复技术yzhshi(yzhshi@)SQLServer数据库备份有两种方式:
1、使用命令:
BACKUP DATABASE,将数据库文件备份出去;
2、直接拷贝数据库文件mdf和日志文件ldf的方式。
下面将主要讨论一下后者的备份与恢复。
本文假定您能熟练使用SQLServerEnterpriseManager(SQLServer企业管理器)和SQLServerQuweyAnalyser(SQLServer查询分析器)
正常的备份、恢复方式正常方式下,我们要备份一个数据库,首先要先将该数据库从运行的数据服务器中断开,或者停掉整个数据库服务器,然后复制文件。
卸下数据库的命令:
Sp_detach_db
数据库名连接数据库的命令:
Sp_attach_db或者sp_attach_single_file_dbs_attach_db[@dbname=]′dbname′,[@filename1=]′filename_n′[,...16]sp_attach_single_file_db[@dbname=]′dbname′,[@physname=]′physical_name′使用此方法可以正确恢复SQLSever7.0和SQLServer2000的数据库文件,要点是备份的时候一定要将mdf和ldf两个文件都备份下来,mdf文件是数据库数据文件,ldf是数据库日志文件。
七、SQL命令创建数据库及数据表
usemaster
ifdb_id('Test-a01')isnotnull--判断数据库,是否已存在
dropdatabase[Test-a01]--删除数据库
go
createdatabase[Test-a01]onprimary
(
name='Test-a01_data',--数据文件的逻辑名称
filename='D:
\ProgramFiles\MicrosoftSQLServer\MSSQL10.MSSQLSERVER\MSSQL\DATA\Test-a01_data.ndf',--数据文件的路径和文件名
size=3mb,--数据文件的初始容量
maxsize=10mB --数据文件的最大容量
)
logon
(
name='Test-a01_log',--事务日志文件的逻辑名称
filename='D:
\ProgramFiles\MicrosoftSQLServer\MSSQL10.MSSQLSERVER\MSSQL\DATA\Test-a01_log.ndf',--事务日志文件的路径和文件名
size=3mb,--事务日志文件的初始容量
maxsize=10mB --事务日志文件的最大容量
)
Go
use[xxxxx] /*指定创建表的数据库*/
go
createtablestudent
(
stuIDchar(5)primarykey,--主键
stunamechar(20)notnull,
stusexchar
(2)check(stusexin('男','女'))default('女'),--设定范围及默认值
stuagechar(6),
stubirthdatecheck(stubirthbetween'1985-01-01'and'1995-12-31'),--设置日期范围
stuaddressvarchar(100),
stunumchar(12),
stuemailchar(40)check(stuemaillike'%@%')
)
go
use[xxxxx]
go
createtableteacher
(
TeacherIDchar(5),
Teanamechar(20)notnull,
Teasexchar
(2)check(Teasexin('男','女'))default('女'),
Teaagechar(6),
Entrydatedatecheck(Entrydatebetween'1950-01-01'and'2099-12-31'),
Teaphonevarchar(100),
Teanumchar(12),
Teaaddresschar(40)
)
---------
1、删除新表:
droptabletable_name;
2、创建视图:
createviewviewnameasselectstatement;
例1:
createviewview_name01(stuid,stuname,stusex,stuage)
as
selectstuid,stuname,stusex,stuagefromstudentwherestuage>=25;
其中,红色部分的字段列,必须相同。
如下例2,则不用考虑(比较常用).
createviewview_name02
as
selectstuid,stuname,stusex,stuagefromstudentwherestuage>=25;
查看视图:
select*fromview_name;
3、删除视图:
dropviewviewname;
4、创建索引:
create[unique]indexidx_nameontable_name(字段1…);
createindexidx_nameontable_name(COLUMN_NAME);
5、删除索引:
dropindexidxname;
八、常见创建数据表的限制,有以下几种:
NOTNULL
UNIQUE
CHECK
主键(PrimaryKey)
外来键(ForeignKey)
1、NOTNULL
表示某字段的值,不允许出现空值。
例如:
CREATETABLECustomer
(
SIDintNOTNULL,
Last_Namevarchar(30)NOTNULL,
First_Namevarchar(30)
);
2、unique
表示某字段的值,不允许重复
例如:
CREATETABLECustomer
(
SIDintUnique,
Last_Namevarchar(30)NOTNULL,
First_Namevarchar(30)
);
3、check
检查某字段的值,必须符合某些条件
CREATETABLECustomer
(
SIDintcheck(sid>0),
Last_Namevarchar(30)NOTNULL,
First_Namevarchar(30)
);
4、主键
主键(PrimaryKey)中的每一笔资料都是表格中的唯一值。
添加主键SQL命令(注意:
选择作主键的列,必须有数值):
Altertableteacheraddprimarykey(TeacherID);
Altertableteacheraddprimarykey(TeacherID);
创建数据表时,加主键的不同方式:
MySQL:
CREATETABLECustomer
(SIDinteger,
Last_Namevarchar(30),
First_Namevarchar(30),
PRIMARYKEY(SID));
Oracle:
CREATETABLECustomer
(SIDintegerPRIMARYKEY,
Last_Namevarchar(30),
First_Namevarchar(30));
SQLServer:
CREATETABLECustomer
(SIDintegerPRIMARYKEY,
Last_Namevarchar(30),
First_Namevarchar(30));
删除主键的SQL语句:
语法:
altertable表名dropconstraint主键约束名(非字段名称)
如:
altertableStu_PkFk_SdropconstraintPK_S;
5、外键
外来键是一个(或数个)指向另外一个数据表主键的字段。
外键作用是:
确定资料限制输入的参考完整性(referentialintegrity)。
换言之,只有被准许的字段值才会被存入数据库内。
Store_Information表格
StoreID(主键)
store_name
Sales
Date
Reg_ID(外键)
1001
LosAngeles
$1500
Jan-05-1999
9003
1002
SanDiego
$250
Jan-07-1999
9004
1003
LosAngeles
$300
Jan-08-1999
9003
1004
Boston
$700
Jan-08-1999
9001
Geography表格
RegionID(主键)
region_name
store_name
9001
East
Boston
9002
East
NewYork
9003
West
LosAngeles
9004
West
SanDiego
创建外键的命令操作:
如下,
altertable[Store_Information]
addforeignkey(Reg_ID)references[Geography](regionID);
altertable需要建立外键的表addconstraint外键名字foreignkeyreferences外键表(外键字段);
以下列出几个在建置ORDERS表格时指定外键的方式:
外键Reg_ID,指向主键regionID。
MySQL:
CREATETABLEORDERS
(Order_IDinteger,
Order_Datedate,
Customer_SIDinteger,
Amountdouble,
PrimaryKey(Order_ID),
ForeignKey(Customer_SID)referencesCUSTOMER(SID));
Oracle:
CREATETABLEORDERS
(Order_IDintegerprimarykey,
Order_Datedate,
Customer_SIDintegerreferencesCUSTOMER(SID),
Amountdouble);
SQLServer:
CREATETABLEORDERS
(Order_IDintegerprimarykey,
Order_Datedatetime,
Customer_SIDintegerreferencesCUSTOMER(SID),
Amountdouble);
以下的例子则是改变表格架构来指定外键。
这里假设ORDERS表格已经被建立,而外键尚未被指定:
MySQL:
ALTERTABLEORDERS
ADDFOREIGNKEY(customer_sid)REFERENCESCUSTOMER(sid);
Oracle:
ALTERTABLEORDERS
ADD(CONSTRAINTfk_orders1)FOREIGNKEY(customer_sid)REFERENCESCUSTOMER(sid);
SQLServer:
ALTERTABLEORDERS
ADDFOREIGNKEY(customer_sid)REFERENCESCUSTOMER(sid);
删除外键的SQL命令:
altertable表名dropconstraint外键约束名(非字段名);
如:
altertableStu_PkFk_ScdropconstraintFK_s;
6、AlterTable
改变表结构的方式:
1、加一个字段
Altertabletable_nameadd字段1int,字段2char(10),…;加多个字段
Altertabletable_nameadd字段1int、或字段2char(10)、…;加一个字段
2、删去一个字段
Altertabletable_namedropcolumn字段1;--(SQLserver数据库,字段前要加“column”)
3、改变字段名称(此命令SQLserver数据库,不可用)
ALTERtabletable_namechange字段1新字段1char(50);
4、改变字段的类型(此命令SQLserver数据库,不可用)
ALTERtabletable_namemodify字段1char(20);
SQLSERVER2008不能修改表的解决方法(增加字段、修改字段名)
新装的SQLSERVER2008,打开原来SQLSERVER2008中建立的表,现在想增加一些字段,在保存时提示错误,无法保存。
原以为是SQLSERVER2008与2005的不兼容,后来发现在SQLSERVER2008中新建的表也存在无法修改表结构,也就是无法修改字段名和增加字段名。
提示是:
不允许保存更改。
您所做的更改要求删除并重新创建以下表。
您对无法重新创建的标进行了更改或者启用了“阻止保存要求重新创建表的更改”选项。
截图如下:
解决办法:
启动MSSQLSERVER2008,选择菜单工具-〉选项-〉左侧有个设计器-〉表设计器和数据库设计器。
然后去掉“阻止保存要求重新创建表的更改”前面的勾。
重新启动MSSQLSERVER2008即可。
如下图所示:
九、SQL数据库字段类型详解
数据类型
类型
描 述
bit
整型
bit数据类型是整型,其值只能是0、1或空值。
这种数据类型用于存储只有两种可能值的数据,如Yes或No、True或False、On或Off
int
整型
int数据类型可以存储从-231(-2147483648)到231(2147483647)之间的整数。
存储到数据库的几乎所有数值型的数据都可以用这种数据类型。
这种数据类型在数据库里占用4个字节
smallint
整型
smallint数据类型可以存储从-215(-32768)到215(32767)之间的整数。
这种数据类型对存储一些常限定在特定范围内的数值型数据非常有用。
这种数据类型在数据库里占用2字节空间
tinyint
整型
tinyint数据类型能存储从0到255之间的整数。
它在你只打算存储有限数目的数值时很有用。
这种数据类型在数据库中占用1个字节
numeric
精确数值型
numeric数据类型与decimal型相同
decimal
精确数值型
decimal数据类型能用来存储从-1038-1到1038-1的固定精度和范围的数值型数据。
使用这种数据类型时,必须指定范围和精度。
范围是小数点左右所能存储的数字的总位数。
精度是小数点右边存储的数字的位数
money
货币型
money数据类型用来表示钱和货币值。
这种数据类型能存储从-9220亿到9220亿之间的数据,精确到货币单位的万分之一
smallmoney
货币型
smallmoney数据类型用来表示钱和货币值。
这种数据类型能存储从-214748.3648到214748.3647之间的数据,精确到货币单位的万分之一
float
近似数值型
float数据类型是一种近似数值类型,供浮点数使用。
说浮点数是近似的,是因为在其范围内不是所有的数都能精确表示。
浮点数可以是从-1.79E+308到1.79E+308之间的任意数
real
近似数值型
real数据类型像浮点数一样,是近似数值类型。
它可以表示数值在-3.40E+38到3.40E+38之间的浮点数
datetime
日期时间型
datetime数据类型用来表示日期和时间。
这种数据类型存储从1753年1月1日到9999年12月31日间所有的日期和时间数据,精确到三百分之一秒或3.33毫秒
Smalldatetime
日期时间型
smalldatetime数据类型用来表示从1900年1月1日到2079年6月6日间的日期和时间,精确到一分钟
cursor
特殊数据型
cursor数据类型是一种特殊的数据类型,它包含一个对游标的引用。
这种数据类型用在存储过程中,而且创建表时不能用
timestamp
特殊数据型
timestamp数据类型是一种特殊的数据类型,用来创建一个数据库范围内的唯一数码。
一个表中只能有一个timestamp列。
每次插入或修改一行时,timestamp列的值都会改变。
尽管它的名字中有“time”,但timestamp列不是人们可识别的日期。
在一个数据库里,timestamp值是唯一的
Uniqueidentifier
特殊数据型
Uniqueidentifier数据类型用来存储一个全局唯一标识符,即GUID。
GUID确实是全局唯一的。
这个数几乎没有机会在另一个系统中被重建。
可以使用NEWID函数或转换一个字符串为唯一标识符来初始化具有唯一标识符的列
char
字符型
char数据类型用来存储指定长度的定长非统一编码型的数据。
当定义一列为此类型时,你必须指定列长。
当你总能知道要存储的数据的长度时,此数据类型很有用。
例如,当你按邮政编码加