SQL server数据类型
- 整数型:
- BIGINT
- INT
- SMALLINT
- 小数型:
- FLOAT
- DOUBLE
- 文本型:
- CHAR
- VARCHAR
- NCHAR
- NVARCHAR
- TEXT
- 日期和时间类型
- DATE
- TIME
- DATETIME
- 布尔型:
- BIT
数据类型 |
含义 |
INT |
长整数(也可以写作INTEGER) |
SMALLINT |
短整数 |
CHAR(n) |
长度为n的定长字符串, 不足n个字符的空白部分用空格补齐 |
VARCHAR(n) |
最大长度为n的变长字符串,如果输入字符串长度不足n ,不足的部分不会使用空格补齐 |
TEXT |
文本输入 |
FLOAT(n) |
浮点数, 精度至少为小数点后n位数字 |
DOUBLE(n) |
|
DATE |
日期类型,包含年月日,格式为: YYYY-MM-DD |
TIME |
时间类型,包含一日的时分秒,格式为: HH:MM:SS |
DATETIME |
日期时间类型, 是日期类型和时间类型的结合 格式为: YYYY-MM-DD HH:MM:SS 日期数据和时间数据中间用空格隔开 |
BIT |
使用1/0 来表示 ture / false |
如何正确选择数据类型
一个属性该如何来选取对应的数据类型呢?
一般来说, 像年龄这种会经常改变的属性, 同时它还包含这运算, 排序的需求,就比如书按年龄排序, 求一个表的记录的平均年龄等, 这种情况一般采用整数类型.
对于char这种定长字符串, 一般用于学号, 性别等固定不变的数据,如果信息的某一个记录集合所记录的数据长度在某个范围变化,字符长度不统一, 不确定的时候, 就可使用VARCHAR来设置最大字符串长度来限定. 他能最大程度的节省空间是一个很高效的数据类型.. char和varchar都是存储ANSI格式的字符串, 而NCHAR和NAVRCHAR是使用unicode格式来存储的字符串.
其中text也是可变长度的字符串, 但是text不需要指定字符串长度, text将根据实际录入长度来决定占用空间大小
而date,time和datetime是用才表示日期时间的.按需求选取即可.
SQL server Management studio管理工具的使用
使用前提
- 启动SQL server服务:
在搜索框中搜索服务并打开, 显示如下:
打开对应的数据库服务即可
- 连接数据库
对象资源管理器
下载安装好之后, 打开Management studio管理工具, 可以看到其左侧边栏(对象资源管理器)显示如下:
对象资源管理器
就像MySQL一样, SQLserver管理工具也有一个命令窗口
新建数据库
分如下几步:
- 选中数据库, 然后右键呼出目录, 点击新建数据库
- 输入数据库名称
- 点击确认
新建查询
点击新建查询
就可以看到有如下的界面 :
可以在里面输入对应的SQL语句.
一个简单的使用案例
新建一个名为test的数据库:
创建数据库中
test数据库在对象资源管理器中的展现
选中test数据库:
使用use语句选中test数据库, 或者是左边下拉栏, 选中test, 就ok了
创建一个学生表数据库:
学生表包含基本信息, 包括但不限于: 姓名, 年龄, 性别, 学号, 身份证等等.
写好SQL语句之后,点击执行
执行完之后, 如果成功则会显示, 命令已成功完成
在test的资源管理器视图当中就可以看到student的表的数据*(这里的dbo为前缀, 这里不做过多讲解)
约束条件
常用的约束条件的表示和作用
名称 |
语法表示 |
约束作用 |
主键约束 |
primary key |
输入值非空不重复 |
非空约束 |
not null |
输入值非空 |
重复约束 |
unique |
输入值是唯一的 |
默认值约束 |
default |
没有输入值的时候,设置为默认值 |
检查约束 |
check |
检查输入值是否满足设置的条件 |
单/多字段主键
- 单字段主键:
create table emp ( depid char(3) primary key, depname varchar(20) )
- 多字段主键
create table emp ( depid char(3) primary key, depname varchar(20), primary key(depid, depname) )
创建表的时候增加约束
create table emp ( id char(10) primary key, /*primary key == unique && not null*/ depName varchar(20) not null, address varchar(20) not null default 'xxxx', sex char(3) check (sex = '男' or sex = '女'), age int check (age in between 20 and 60) )
其中id为主键约束, not null为非空约束等等.
创建表后增加约束字段
使用alter关键字, 使用语法:
alter table 表名 alter column 字段 数据类型 约束条件
创建表格:
create table emp ( id char(10) primary key, /*primary key == unique && not null*/ depName varchar(20) not null, address varchar(20) not null default 'xxxx', sex char(3) check (sex = '男' or sex = '女'), age int check (age in between 20 and 60) )
设置非空
语法为:
alter table emp alter column age int not null
我们查看对象资源管理器可以看到: age属性的 允许Null值 没有被勾选上了, 也就是不允许为null值
为不同字段增加不同条件的约束
语法:
alter table emp constraint PK_depname primary key(depname), constraint CK_address check(address like '%省%'), constraint DF_address default('xx省xx市') for address
基本表的定义删除与修改
创建表
使用语法:
create table 表名 ( 属性_1 数据类型 约束条件_1 属性_2 数据类型 约束条件_2 属性_3 数据类型 约束条件_3 属性_4 数据类型 约束条件_4 /* ......*/ )
对应的表的图形化表示可以参考Excel表格中的图形界面.例如:
例如, 建立一个属性包含学生学号(Sno), 姓名(Sname), 性别(Ssex), 年龄(Sage), 和所在系(Sdept)的学生表(Student):
create table Student ( Sno char(9) primary key, /*primary key 为一种约束条件*/ Ssex char(3) check (Ssex ='女' or Ssex ='男'), Sname varchar(20), Sage smallint, Sdept char(20) );
修改表
有时候我们已经创建好表格了, 但是随着应用和需求不断的变化, 这个时候就需要对已经建立好的基本表进行修改, SQL 用alter table来修改基本表, 一般格式为:
alter table 表名 add 新属性名 数据类型 完整性约束 drop 完整新约束名 alter column 属性名 数据类型
这个表名就是要修改的基本表, add用来增加新的属性, 也就是新的列, drop用来删除指定的完整性约束条件, alter column用于修改原有属性的定义(包括修改属性名和数据类型)
我们就以上面那张表为例子:
1.向Student表中增加"入学时间"属性, 数据类型为日期类型:
alter table Sutdent
add Sentrance date;
其中Sentrance为"入学时间"的列名, date为时间类型, 无论基本表中是否已经有数据, 新增加的属性一律为空值.
2.将Student表中年龄的数值类型改为字符型
alter table Student
alter column Sage varchar(10);
3. 为Student表中名字增加唯一性约束
alter table Student
add unique(Sname)
删除表
使用drop table来删除基本表;
drop table 表名 [restrict | cascade]
后面的restrict和cascade是选择删除模式, 如要选择restrict的话, 则该表的删除是有限制条件的, 想要删除这样的表, 就不能被其他表的约束所引用, 例如check和foreign key等, 不能有视图, 不能有触发器, 不能有存储过程和函数等, 如果存在依赖这个表的对象, 则删除会失败
若是选择cascade, 则该表的删除没有限制条件, 再删除表的同时, 相关的依赖对象(例如视图, 索引, 触发器等等)都会被一起删除.