Sql语句在SqlServer中创建数据库、表格并添加约束
通过Sql语句来创建数据库与架构
创建数据库
数据库的创建首先是要引用主数据库的,需要在master数据库的环境下进行创建。大致的语法如下:
-- 使用master数据库
use master
-- 创建数据库
create datebase [架构名.]数据库名
on [primary]--主文件数据描述
(
name = '数据库逻辑名', --一般是数据库的名称
filename = '数据文件的名字',--全路径
size = 12mb, --数据文件初始大小
maxsize = 1gb, -- 文件最大值
filegrowth =1mb --文件增长率
),(....ndf)
log on -- 日志文件
(
name = '日志逻辑文件名',
filename = '日志文件的名字',
size = 12mb, -- 日志文件初始大小
maxsize=1gb, --日志文件最大值
filegrowth=1mb --增长率
); -- 不能够少了这个分号
go --代表上面一条语句结束,在SqlCmd中用go来执行一条Sql语句
创建数据库大致语法
按照上面语法,创建一个数据库对象
use master
create database TwoDataBase --创建的数据库名称
on primary --主文件组, primary 可以省略
(
name = N'TwoDataBase', --数据库文件的逻辑名
filename=N'f:\TwoDataBase.mdf', --全路径加上后缀
size=10mb,
maxsize=100mb,
filegrowth=1mb
),
(
name=N'TwoDataBase2', --次要文件名,不能够和主文件同名
filename=N'f:\TwoDataBase.ndf',
size=10mb,
maxsize=100mb,
filegrowth=10%
)
log on --逻辑文件
(
name=N'TwoDataBase_log', --逻辑文件名,不能和前面的文件同名,一般都是下划线后加一个 log
filename=N'f:\TwoDataBase.ldf',
size=100mb,
maxsize=1gb,
filegrowth=10mb
);
go
27 use TwoDataBase; --将数据库上下文切换到我们当前创建的数据库上面来
上面代码中 在文件名前添加一个大写的字符 N 代表的是什么符合国际写法什么的。在数据文件中,如果只有一个主文件就不需要写后面的次要文件,如果有次要文件,那么两个括号之间的逗号不能够少。
文件的初始大小不能够小于3M,因为主文件必须至少是 3 MB 才能容纳 model 数据库的副本。如果没有指定文件的大小以及增长方式,默认的大小和model数据库是一样的。增长方式可以写增长的单位也可以写上百分数
创建架构
架构是属于数据库的,而表是属于架构的。表是放在架构下面的。它就是表的命名空间,主要的目的还是为了安全。用户的权限是由架构和角色来指定的,角色是用来限制用户具有什么样的权限,比如一般的账户和sa账户登录数据库得到的权限是不一样的。架构就指定了你能够访问什么样的东西,有时可以通过写全名来访问非当前数据库中的表格。
语法
create schema 架构名 authorization 用户名;
创建架构语法
创建一个架构
create schema MyDbo authorization dbo;
很多时候是不需要创建架构的,使用默认的dbo就行。
删除数据库与架构
通过drop关键字来删除表格、架构、数据库以及约束等
删除数据库和架构语句如下
drop database TwoDataBase; ---删除数据库
drop schema MyDbo; --删除架构
创建简单表格
表示存储数据的,数据时由一定的意义的,那么这个表就要反应这个意义,创建表就是在设计表的列数据类型与约束类型。简单语法如下
use 数据库; --表示这张表格存储在哪一个数据库下面
create table 架构名.表名 --架构名可以省略
(
字段名 类型名 null | not null, --当前的列能不能够为空
字段名 类型名 null | not null,
字段名 类型名 null | not null,
字段名 类型名 null | not null
)
创建简单表格语法
利用上面的语法,创建一个简单的表格
use TwoDataBase; --如果当前环境是在这个数据库下,也可以省略这句
create table TwoTable --省略了架构名
(
id int not null,
name nvarchar(10), --
age int ,
gender varchar(1),
phone char(11),
fid int not null
)
上面的代码中创建了一个具有六个字段的简单表格,如果数据允许为空可以不写null,默认的就是null。
添加与删除约束
约束说直白了就是限定一个表格能够取什么样的值。它是保证数据的完整性的一种机制。主要约束分为下面几种
- 主键约束(primary key):默认创建聚集索引【比如拼音检索】。一张表只能够有一个主键
- 唯一约束(unique):默认创建非聚集索引 【比如部首检索,可以通过→右键→索引/键→添加→设置右面框框里面的东西】
- 非空约束:设计表的时候,字段后面写的null与not null
- 检测约束(check):限定某个字段的表达式 age > 0 and age <100
- 默认约束(default):如果不给取值就使用默认值否则使用提供的值
- 外键约束(foreign key):限定表格中某一列的取值必须是另外一种表中某一不重复列的数据,一般是另一张表的主键
添加约束
给一个表格添加约束的语法
alter table TableName
add
constraint 约束名 约束类型与条件,
constraint 约束名 约束类型与条件
。。。
添加约束语法
一般在添加约束的时候,约束名的取法是:约束简称_表格名_字段名。通过这种方式能够轻松的知道当前的约束是添加给谁的。约束简称大概为一下[本人常用的]:PK、UQ、CK、DF、FK。给上面的表格添加一些约束。比如主键、性别只是能够取m/f,年龄范围以及外键等。
alter table TwoTable --修改某一张表
add
constraint PK_TwoTable_id primary key(id) ,
constraint UQ_TwoTable_name unique(name),
constraint CK_TwoTable_age check(age>=0 and age<=150),
constraint CK_TwoTable_gender check(gender='m' or gender='f'),
constraint DF_TwoTable_gender default('m') for gender,
constraint FK_TwoTable_OneTable_fid foreign key(fid) references [dbo].[OneTable](id);
外键约束中,要写上表名然后用括号将关联的列括起来,这个例子中用到了 [架构名].[表名](列名) 的格式,当然可以不用架构名,直接使用 表名(列名) 的形式,表名可以加中括号。这里设置的外键是另外一张表的id列
constraint 关键字,表示当前操作的是约束。
删除约束
语法: alter table drop constraint 约束名;
比如删除上面的外键约束
alter table TwoTable
drop constraint FK_TwoTable_OneTable_fid;
约束的删除可以一次删除多个,相互之间用逗号隔开
alter table TwoTable
drop
constraint FK_TwoTable_OneTable_fid,
constraint CF_TwoTable_gender;
修改表格结构
增加一列
语法:
alter table 表名 add 列名 类型 [约束条件]
alter table TableName add 列名 类型
--增加多列的时候,用逗号隔开,不要要多余的add
alter table TwoTable
add stuOne int not null default()
,stuTwo int
, stuThree int;
删除列
语法:alter table TableName drop column 列名
--删除多列数据的时候,列之间用逗号隔开
alter table TwoTable
drop column stuOne
,column strTwo
,column stuThree
在删除列的时候,如果此列上建有约束,需要先删除此约束,然后才能够删除此列数据,因为约束是依赖于数据列的
修改列
alter table TableName
alter column 列名 类型
--例子
alter table TwoTable
alter columnstuTwo nvarchar(10) not null
在修改列信息的时候,一次只是能够修改一列数据,不能够修改多列
创建表格时添加约束
有时可以再创建表格时就给列添加一个约束条件,这样就能够省去后面添加约束的麻烦,但是这种方式也有一个弊端。例子如下
use TwoDataBase; --如果当前环境是在这个数据库下,也可以省略这句
create table TwoTable
(
id int not null primary key identity(1,1) --设置为主键,并且是自动增长
, name nvarchar(10) not null unique --
, age int not null check(age >= 0 and age <= 150)
, gender char(1) not null default 'm' check(gender = 'm' or gender = 'f')
, phone char(11) null
, fid int not null foreign key references OneTable(id)
)
这种方式创建的时候,系统会给我们的约束自动添加一个名字,以约束类型简写形式开始下划线加上表名,但是后面不是添加的列名,而是一串十六进制表示的数字。如下面形式:PK_TwoTable_85FE435A39 如果是这样在删除约束的时候就只是能够通过管理工具来实现了。下面这种方式就不会有这个问题
create table T_Emp
(
id int constraint pk_emp_rd primary key identity(1,1)
, name nvarchar(10) not null , sex char(1)not null constraint CK_emp_sex(sex='m' or sex='f')
, dept_id int constraint fk_dept_heihei foreign key references dept(dept_id)
)
这种方式创建表格的时候,同时添加了约束名,相比上一中方式在以后的管理上就更加的方便了
Sql语句在SqlServer中创建数据库、表格并添加约束的更多相关文章
- 必须会的SQL语句(一) 创建数据库与删除数据库
1.创建数据库 Create database 名称 on primary { name ='名称', filename ='c:\xx\名称.mdf', size = 10mb ...
- SQL语句(二)创建带主键和约束的数据表
内容摘要 创建带主键和约束的表 创建带组合主键和外键的表 1. 创建带主键和约束的表 Student (学生表) CREATE TABLE Student ( sclass ) NOT NULL, - ...
- SQL点滴18—SqlServer中的merge操作,相当地风骚
原文:SQL点滴18-SqlServer中的merge操作,相当地风骚 今天在一个存储过程中看见了merge这个关键字,第一个想法是,这个是配置管理中的概念吗,把相邻两次的更改合并到一起.后来在tec ...
- 使用sql语句比较excel中数据的不同
使用sql语句比较excel中数据的不同 我所在的项目组是一套物流系统,负责与公司的电商系统进行对接.但是公司的电商系统的省市区的配置和物流系统的省市区的配置有差异,所以需要找到这些差异. 首先找到我 ...
- ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段
ASP.NET实现二维码 using System;using System.Collections.Generic;using System.Drawing;using System.Linq;us ...
- SqlServer中创建Oracle连接服务器
转自太祖元年的:http://www.cnblogs.com/jirglt/archive/2012/06/10/2544025.html参考:http://down.51cto.com/data/9 ...
- SqlServer中创建Oracle链接服务器
SqlServer中创建Oracle链接服务器 第一种:界面操作 (1)展开服务器对象-->链接服务器-->右击“新建链接服务器” (2)输入链接服务器的IP (3)链接成功后 第二种:语 ...
- MySQL-第三篇SQL语句基础(2)数据库约束
1.数据库约束. 约束是在表上强制执行的数据校验规则,约束主要用于保证数据库里数据的完整性. MySQL使用information_schema数据库里的TABLE_CONSTRAINTS表来保存该数 ...
- Mysql常用sql语句(一)- 操作数据库
21篇测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html ...
随机推荐
- Frog and Portal(思维好题)
Frog and Portal https://hihocoder.com/problemset/problem/1873 时间限制:1000ms 单点时限:1000ms 内存限制:512MB 描述 ...
- SpringMVC入门(基于注解方式实现)
---------------------siwuxie095 SpringMVC 入门(基于注解方式实现) SpringMVC ...
- day9:vcp考试
Q161. An administrator wants to select a Host Power Management Policy for an ESXi 6.x host that will ...
- OJ_单词倒排
题目描述:对字符串中的所有单词进行倒排. 说明: 1.每个单词是以26个大写或小写英文字母构成,可以用一个“-”中连接线连接单词两部分表示一个单词,但是仅限一个“-”,出现两个“--”则为非构成单词的 ...
- Tomcat端口被占用解决方法
端口被绑定,在命令提示符运行wmic process where "Caption='javaw.exe' and CommandLine like '%%bootstrap.jar%%'& ...
- Package gtk+-3.0 was not found in the pkg-config search path
问题描述: 在fedora21系统上通过rpmbuild构建fcitx的二进制包时出现以上错误,经老程序员指点:“是相应的开发包没有安装” 解决办法: yum installl gtk3-devel ...
- 【Sikuli】Sikuli 文档
http://sikulix-2014.readthedocs.io/en/latest/index.html
- Devexpress VCL Build v2013 vol 13.2.5 发布
支持xe6 了,但是承诺的功能在哪里? What's New in 13.2.5 (VCL Product Line) New Major Features in 13.2 What's New ...
- 2018.10.23 NOIP模拟 行星通道计划(bit)
传送门 卡常题. 成功卡掉了作死写树套树的zxy. 然而对我的二维bit无能为力. 直接维护两棵bit. bit1[i][j]bit1[i][j]bit1[i][j]表示左端点小于等于iii,右端点小 ...
- SQL查询优化的一些建议
使用批量查询,而不是N次循环查询! 重复的数据,不要重复获取: 根据需要,按需要获取表字段,而不是SELECT *: 针对频繁的搜索字段,建立必要的索引,以加快查询速度: 使用关联查询,而不是粗暴地类 ...