Microsoft SQL - 操作语句
操作语句(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 - 操作语句的更多相关文章
- mongodb 操作语句与sql操作语句对比
上行:SQL 操作语句 下行:Mongo 操作语句 CREATE TABLE USERS (a Number, b Number) db.createCollection("mycoll&q ...
- mysql简单的sql操作语句
一,常用.简单的SQL操作语句 1.数据库操作: 1)创建数据库: create database database_name: 创建并设置字符编码 create database database_ ...
- SQL操作语句
SQL语句与Mysql的语句大体上比较相似.以下是sql server的一套练习题,是很好的数据库操作语句学习资料,学校的学习资料,在此整理了以下. 数据库exam:这是一个模拟电子商务,网上直销的数 ...
- SQL 操作语句
SQL Server T-SQL高级查询 高级查询在数据库中用得是最频繁的,也是应用最广泛的. Ø 基本常用查询 --select select * from student; --all 查询所有 ...
- SQL操作语句之查询及删除重复记录的方法
delete from 表 where id not in(select min(id) from 表 group by name ) //删除重复名字的记录 删除之前请用语句 select * fr ...
- SQL操作语句中的注意点
一 查询语句 1 distinctkeyword消除反复行 当查询的结果数据中出现反复数据时.在查询条件中加上distinctkeyword消除反复行: 如:select distinct Sno f ...
- mysql 常用sql操作语句
获取数据库里所有表 SELECT TABLE_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='数据库名' 获取表里 ...
- [Sqlite] 移动嵌入式数据库Sqlite日报SQL操作语句汇总
,EXPLAIN分析 没有建立索引之前.分析都是表扫描: sqlite> EXPLAIN SELECT * FROM COMPANY WHERE Salary < 20000; add ...
- Microsoft SQL - 学习总目录
Microsoft SQL - 数据库管理系统 Microsoft SQL - 数据类型 Microsoft SQL - 查询与更新 Microsoft SQL - 操作语句 Microsoft SQ ...
随机推荐
- poj 2955"Brackets"(区间DP)
传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 题意: 给你一个只由 '(' , ')' , '[' , ']' 组成的字符串s[ ], ...
- JS事件(一)事件流&事件处理程序
1.事件流描述的是从页面接收事件的顺序 IE和Netscape提出了几乎完全相反的事件流概念 IE:事件冒泡(由内而外) Netscape:事件捕获(由外向内) DOM2级事件规定事件流包括三个阶段: ...
- HTML学习笔记Day12
一.CSS3基础 (一)css3概念及优势 概念:CSS3是css技术的升级版本,CSS3语言开发是朝着模块化发展的.以前的规范作为一个模块实在是太庞大而且比较复杂,所以,把它分解为一些小的模块,更多 ...
- springcloud使用zookeeper作为config的配置中心
https://blog.csdn.net/CSDN_Stephen/article/details/78856323 仓库更新了,本地如何更新: 使用configserver作为配置中心: http ...
- css 中 position属性
position属性详解 文档流 1.html中的布局方式分为三种: 标准流(顺序布局):因为html中的元素大体可以分为两大类(a:块级元素:div .H1-H6. table表格 有序级无序列表 ...
- 关键字(6):trigger触发器
trigger是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(insert,delete,update)时就会激活它执行.触发器经常用于加强数据的 ...
- puppeteer,新款headless chrome
puppeteer puppeteer是一种谷歌开发的Headless Chrome,因为puppeteer的出现,业内许多自动化测试库停止维护,比如PhantomJS,Selenium IDE fo ...
- TCP详解——连接建立与断开
一.报文结构介绍 在开始讲TCP连接过程时,还是先看看TCP报文的格式如图1所示.IP数据报此时由IP头部+TCP头部+TCP数据组成.不带选项的TCP头部是20字节长,而带选项的,TCP头部最长可达 ...
- Idea中的一些快捷键
最常用快捷键 sout 输出语句 psvm 输出main方法 fori 输出for语句 iter 输出foreach语句 Ctrl+Shift+U 大小写转换 Ctrl+Shift+Enter 补全一 ...
- MyBatis-parameterType 取出入参值
SQL 映射文件的几种入参情况 一.单个基本类型参数 public MyUser selectMyUser(Integer id); <!-- #{参数名或任意名}:取出参数值 --> & ...