操作语句(Operation Statement)

操作数据库

创建数据库

关键字:create database

用于创建各种数据库对象(数据库、表、触发器、存储过程等) 格式如:
create <对象类型> <对象名称>

create database 数据库名称
on primary
(
name='主文件名' ,
size=初始化大小 按kb、mb、gb、tb设置 ,
maxsize=最大容量 unlimited(无限)/ 按kb、mb、gb、tb设置 ,
filegrowth=文件增长率 按%设置 ,
filename='主文件存放路径' 如'd:\base\base.mdf' ) ,
(
name='辅助文件名',
size=初始化大小 按kb、mb、gb、tb设置 ,
maxsize=最大容量 unlimited(无限)/ 按kb、mb、gb、tb设置 ,
filegrowth=文件增长率 按%设置 ,
filename='辅助文件存放路径' 如'd:\base\base.ndf' )
log on
(
name='主日志文件',
size=初始化大小 按kb、mb、gb、tb设置 ,
maxsize=最大容量 unlimited(无限)/ 按kb、mb、gb、tb设置 ,
filegrowth=文件增长率,
filename='主日志文件存放路径' 如'd:\base\base.ldf'
) * 其中辅助文件和主日志文件为可选项,只创建数据库主文件就可以了
如果没有创建主日志文件,系统将自动创建一个。如果手动创建主日志文件,最好将其存放在与主数据库文件不同的磁盘上 这样,当数据库主文件虽在的磁盘故障时,日志文件可以恢复数据库
create database mydb1
on primary ( name='mydb1', filename='c:\mydb1.mdf', size=10,maxsize=50,filegrowth=5 )
log on ( name='mydb1Log',filename='c:\mydb1Log.ldf',size=5,maxsize=25,filegrowth=5 )

修改数据库

关键字:alter

增加辅助文件

alter database 数据库名称
add file(name='',size=,maxsize=,filewgrowth=,filename=) , (n……)
多个辅助文件之间用括号括起来并使用逗号分开即可

增加日志文件

alter database 数据库名称
add log file(name='',size=,maxsize=,filewgrowth=,filename=) , (n……)
多个日志文件之间用括号括起来并使用逗号分开即可

增加文件组

alter database 数据库名称
add filegroup 组名

删除数据库

可以在其他任意一个数据库中使用它,但不能在要删除的数据库中使用这个命令

drop database 数据库名称

删除文件

alter database 数据库名称
remove file 文件逻辑名

删除组

alter database 数据库名称
remove filegroup 组名

修改文件

alter database 数据库名称
modify file(name=,size=,maxsize=,filwgrowth=,filenamme=)
* 修改时 修改的size只能改大,不能改小。

修改数据库名称

alter database 数据库名称
modify name=重命名

修改文件组名称

alter database 数据库名称
modify filegroup 存在的组名
name=新的组名

切换数据库

use 数据库名称

操作表

创建表

关键字:create table

craete table [ 数据库名称 [ .数据库所有者 ] ] 表名称
(
列名称 数据类型 [ null [ not null ] ] [ identity(种子,增量) ] [primarykeyName primary key]
[ rowGuidcol ] [ collate 顺序名 ] [ 列约束 ]
[列名称 as 计算表达式]
[ 表约束 ]
) [ on [ 文件组 ] [ default ] ] [ textImage_on [ 文件组 ] [ default ] ]
create table 产品
(
编号 int not null ,
产品名称 nvarchar(2) ,
数量 int,
单价 int,
总价 as 数量*单价
) create table 新闻
{
编号 int identity(1,1) not null,
标题 varchar not null,
内容 text not null,
时间 datatime
}

给表定义列时,约束、数据类型、标识、主键无顺序限制,可随意写,比如:

create table Teacher(
教师编号 int identity primary key not null
)
--也可以写成
create table Teacher(
教师编号 not null int primary key identity
)

identity

系统为该列自动生成的唯一性的标识数据,种子一般从1开始,增量默认为1,可以更改种子和增量。标识列不允许用户insert数据,除非使用set identity_insert=on来开启自定义插入标识,插入标识操作只支持insert不支持update。获取最近一次系统生成的identity值:select @@identity as 列别名。

not for replication

复制

rowGUIDcol

GUI全局唯一标识符,此关键字用于这样额情况,比如当要把当前数据库的某张表的数据复制到另一个数据库的表时,因为两张表都有identity自动标识列,此时如果当前表有唯一标识100,另一张表也有这个标识,那么就会出现错误,此时可以使用rowGUIDcol来解决这样的问题。

collate

数据排序、区分大小写、区分重音。

列名 as 计算表达式

这个设定可以让表自动生成一个列,此列的数据是基于你的计算表达式来生成的。

列约束和表约束

列约束即把设置的约束放在列名-数据类型之后,表约束放在创建表的语句括号内的最后位置。

on [ 文件组 ] [ default ]

如果不设置on,或值为default,默认将把表关联到主文件组里,否则按自定义的设置将表关联到其他文件组。

textImage_on [ 文件组 ] [ default ]

与on类似,不过只有当表中定义了text、image数据类型的列时,这个子句才是可用的,它会把BLOB数据移动到不同的文件组中,通过把数据库分成多个文件并将这些文件存储在不同的物理磁盘上可以重大提升性能I/O。

重命名表

exec sp_rename '原表名','新表名'

删除表

一次可删多个表 使用逗号隔开

drop table 表名,表名2,……

修改表 - 为表增加列

alter table 表名称
add 列名称 数据类型 null [约束][,n……]
* 追加的列必须允许空值存在,否则需要给出默认值 。增加多列使用逗号隔开。 alter table Article
add body varchar()

修改表 - 为表删除列

alter table 表名称
drop column
列名称[,n……]
*有约束的列需要先删除约束才能删除列,删除多列使用逗号隔开

修改表 - 为表修改列

alter table 表名
alter column
列名 修改操作…… alter table student
alter column
学号 varchar(20)
* 修改列只能修改其数据类型,不能修改约束,被约束的列不能修改,除非先删除约束。

约束

约束指通过限制字段中的数据来保证数据的完整性,即为列字段指定一个约束规则,使其只能录入指定规则的数据。

主键约束:primary key

主键约束在一个表中可以定义一个/或多个列(但使用视图模式定义时只能定义一个主键约束列,最好只定义一个)。被定义了主键约束的列不允许有空值,所以必须指定值为not null。被定为主键约束的列具有唯一可以代表它所在行的一组数据的能力。

create table 表名
(
列名 数据类型 是否可空 identity(种子,增量) 自定义的主键名 primary key,
……
) create table 成绩
(
ID int not null identity(1,1) constraint pk_ID primary key,
英语 int not null,
数学 int not null,
总分 as 英语+数学
)

外键约束 Foreign key

使用外键约束可使多个表之间建立起联系,多个表之间其中必有一个列的数据是相同的。比如学员等级表和学员成绩表,它们都以学员ID作为联系。被foreign key约束的表称为主

表的外键表,references指向的表称为主表。

规则

1.主键表不能删除,因为有外键表需要引用它,除非先删除外键表的外键约束,或者使用级联删除。

2.insert数据到外键表里,必须保证外键表中的外键列的数据是主键表对应的列里已经有的数据,如果外键表的外键列的数据在主键表中不存在则会提示错误。

表自引用

一张表可以引用它自身,可如下定义:

create table 员工
(
员工ID int identity not null ,
名称 varchar(20) not null,
经理ID int null foreign key references 员工 ( 员工ID )/*外键列允许null*/
)

级联操作

delete或update主表某行数据,是否同时delete或update外键表相关联的数据。必须在创建表、定义外键约束时设置是否可级联操作,如果定义为on delete(update)cascade,表示允许

级联操作自动删除或更新相关联的表的数据。如果定义为on delete(update)action,表示不允许删除或更新主表的数据。

create table 供应商
(
ID int not null identity primary key,
供应商编号int not null unique,
名字varchar(50) not null
) create table 食品
(
ID int not null identity primary key,
名称varchar(50) not null,
供应商ID int foreign key references 供应商(供应商编号)
on delete cascade
) /*以上创建了外键表食品和主表供应商,在食品表的外键约束中,定义了on delete cascade 子句,规定了主表相关数据被删除时自动执行级联删除*/

检查约束:Check

Check约束可以在指定的列上检查该列的值是否满足Check的条件。

create table 成绩
(
ID int not null identity primary key,
sex varchar(2) not null check(sex ='男' or sex='女'),
english int not null check(english>60),
)

唯一约束:Unique

nique可以出现在多个列上,它要求被约束的列的数据具有唯一性,不能重复,如果该列允许null值 同时又使用了Unique约束,那么null值可出现最多一次。

create table 成绩
(
ID int not null identity primary key,
name varchar(10) not null unique
)

nique也可以同时约束多个列,如果为多个列指定了同一个名称的nique约束,那么新插入的数据的三个具备同一个约束的字段就不能与已经存在的记录的对应的列值相同。以下代码中cell_1、cell_3、cell_3三个列具有同一个约束,假设有一条存在的记录对应了这三个列的值分别是香蕉、菠萝、荔枝,那么新插入的数据就不能是香蕉、菠萝、荔枝,因为他们被约束为不能同时相等。

alter table Tab add constraint uq_fruit unique(cell_1,cell_2,cell_3)

默认约束:Default

如果不插入数据到被dedault约束的列,你可以给定一个默认值。

create table 成绩
(
ID int not null identity primary key,
name varchar(10) not null unique ,
english int not null check(english>60),
midifyTime smalldatetime default getdate()
) insert into 成绩(name,english)values('lily',100)
insert into 成绩(name,english,midifyTime )values('leo',100,'2012-12-12')

增加约束:Add

表已经建好,之后想要修改表为表增加约束,可alter表并add约束。

增加主键约束

alter table 表名称
add constraint 自定约束标识名称
primary key(列名称)

增加外键约束

alter table 表名称
add constraint 自定约束标识名称
foreign key (列名称) references 被引用的表名称(列名称)

增加检查约束

alter table 表名称
add constraint 自定约束标识名称
check (列名称+条件)

增加唯一约束

alter table 表名称
add constraint 自定约束标识名称
unique (列名称)

增加默认约束

alter table 表名称
add constraint 自定约束标识名称
default 默认值 for 列名称

旧数据忽略新约束:with nocheck

在为某个列创建约束时,该列可能之前没有约束并且已经有了数据,此时你想约束这个列。比如联系表的电话一列,以前填写的是'0871-00-78-90',现在你想要约束为这种格

式:'9028392'。但因为以前的旧数据不满足现在的约束条件,所以约束将无法创建,此时可以使用约束忽略语句来忽略旧数据,只约束新录入的数据。

alter table 联系
with nocheck/*不检查表里以前的所有数据*/
add constraint cn_phone/*添加约束*/
check( (len(phone) =7) and (phone between 111111 and 9999999) )

新数据禁用旧约束

如果插入的新数据不满足之前已经存在的约束,可临时禁用约束,直到数据插入完成后再启用。

临时禁用约束
关键字:nocheck
alter table 表名称
nocheck
constraint 约束标识名称 重新启用约束
关键字:check
alter table 表名称
check
constraint 约束标识名称

Microsoft SQL - SQL SERVER学习总目录

Microsoft SQL - 操作语句的更多相关文章

  1. mongodb 操作语句与sql操作语句对比

    上行:SQL 操作语句 下行:Mongo 操作语句 CREATE TABLE USERS (a Number, b Number) db.createCollection("mycoll&q ...

  2. mysql简单的sql操作语句

    一,常用.简单的SQL操作语句 1.数据库操作: 1)创建数据库: create database database_name: 创建并设置字符编码 create database database_ ...

  3. SQL操作语句

    SQL语句与Mysql的语句大体上比较相似.以下是sql server的一套练习题,是很好的数据库操作语句学习资料,学校的学习资料,在此整理了以下. 数据库exam:这是一个模拟电子商务,网上直销的数 ...

  4. SQL 操作语句

    SQL Server T-SQL高级查询 高级查询在数据库中用得是最频繁的,也是应用最广泛的. Ø 基本常用查询 --select select * from student; --all 查询所有 ...

  5. SQL操作语句之查询及删除重复记录的方法

    delete from 表 where id not in(select min(id) from 表 group by name ) //删除重复名字的记录 删除之前请用语句 select * fr ...

  6. SQL操作语句中的注意点

    一 查询语句 1 distinctkeyword消除反复行 当查询的结果数据中出现反复数据时.在查询条件中加上distinctkeyword消除反复行: 如:select distinct Sno f ...

  7. mysql 常用sql操作语句

    获取数据库里所有表 SELECT TABLE_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='数据库名' 获取表里 ...

  8. [Sqlite] 移动嵌入式数据库Sqlite日报SQL操作语句汇总

    ,EXPLAIN分析 没有建立索引之前.分析都是表扫描: sqlite> EXPLAIN SELECT *  FROM COMPANY  WHERE Salary < 20000; add ...

  9. Microsoft SQL - 学习总目录

    Microsoft SQL - 数据库管理系统 Microsoft SQL - 数据类型 Microsoft SQL - 查询与更新 Microsoft SQL - 操作语句 Microsoft SQ ...

随机推荐

  1. spring mvc后端校验validator

    springmvc中我们使用hibernate的校验框架validation: pom: <validator.version>5.2.4.Final</validator.vers ...

  2. idea 设置console 无1024限制,复制到Excel分隔符\t

    在安装目录/bin中找到idea.properties文件, 更改idea.cycle.buffer.size项值为disabled,保存,重启idea Excel分隔符\t; 数字自动加逗号的情况, ...

  3. 关于shared_ptr与weak_ptr的使用(good)

    shared_ptr是带引用计数的智能指针,可以说大部分的情形选择用shared_ptr不会出问题.那么weak_ptr是什么,应该怎么用呢? weak_ptr也是智能指针,但是比较弱,感觉没什么用. ...

  4. 9.Django Admin编写

    ##Admin功能添加 ##效果图 ##添加时间日期 添加新的字段后需要重新数据移值操作 修改models.py auto_now是自定设置日期为当前日期 修改日期:null=True

  5. [报错]Could not get a resource from the pool

    redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool解决:开启 ...

  6. 运维监控-使用Zabbix Server 创建触发器Triggers

    运维监控-使用Zabbix Server 创建触发器Triggers  作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1>.点击相应主机的触发器 2>.点击创建触发器 ...

  7. Centos 6\7下yum安装R

    在linux下安装软件不如windows方便,在windows下我们一般针对可安装的文件(如R.exe)直接双击运行就可以了.而在linux下我们首先要学会使用安装软件的专门工具如centos下的rp ...

  8. Spring JPA学习笔记

    目录 什么是JPA? 引入配置 新建一个Entity Bean类 JPA的增删改查 新建操作接口 新建测试类 总结 什么是JPA? 什么是JDBC知道吧?数据库有Mysql,SQL Server,Or ...

  9. JMX监控Hadoop的部分常用参数位置

    近期版本get无法使用,可能使用了其他参数代替,但源码中已经去掉JMX部分,也没有给出替代接口,应该是不再额外实现了. NameNode DataNode HDFS Yarn HBase MapRed ...

  10. Linux下常用配置文件

    /etc/sysconfig/network 包括主机基本网络信息,用于系统启动 /etc/sysconfig/network-script/ 此目录下是系统启动最初始化网络的信息 /etc/sysc ...