携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天,点击查看活动详情
安装
第一章:数据库设计
一、数据库结构设计三范式
**第一范式:**是对属性的原子性,要求属性具有原子性,不可再分解。
**第二范式:**是对记录的惟一性,要求记录有惟一标识,即实体的惟一性,即不存在部分依赖;
**第三范式:**要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖 ;
二、表关系
一对一联系(1:1)
一对多联系(1:N)
多对多联系(N:N)
第二章:建库建表
一、检查数据库名是否存在
如果需要创建数据库,可能会出现数据库名字重名的现象,我们可以使用如下代码查询数据库名是否存在,存在则删除此数据库。
--删除数据库(DBTEST就数据库名)
if exists(select * from sys.databases where name = 'DBTEST')
drop database DBTEST
此代码检查数据库中是否存在"DBTEST"数据库,如果存在则删除此数据库,此处理方式最好只在学习阶段使用,在正式生产环境中慎用,操作不当可能会删除重要数据。
二、创建数据库
--创建数据库(DBTEST就数据库名)
create database DBTEST
on --数据文件
(
name = 'DBTEST', --逻辑名称
filename = 'D:\Data\DBTEST.mdf', --物理路径及名称
size = 5MB, --数据文件初始大小
filegrowth = 2MB --数据文件增长速度,也可以使用百分比来设置
)
log on --日志文件
(
name = 'DBTEST_log', --逻辑名称
filename = 'D:\Data\DBTEST_log.ldf', --物理路径及名称
size = 5MB, --日志文件初始大小
filegrowth = 2MB --日志文件增长速度,也可以使用百分比来设置
)
以上代码创建"DBTEST"数据库,并且分别使用on和log on规定了数据文件和日志文件的信息。
创建数据库也可以按照如下简单语法来创建:
create database DBTEST
如果按照上述方式创建数据库,数据库的数据文件和日志文件的相关信息,全部采取默认值。
三、建表
使用数据库和删除数据表:
use DBTEST --切换当前数据库为DBTEST
--删除表(先判断表在当前数据库是否存在,存在则删除,其中type='U'判断对象类型为用户定义表类型)
if exists(select * from sys.objects where name = 'Department' and type = 'U')
drop table Department
创建数据表语法:
create table 表名
(
字段名1 数据类型(长度),
字段名2 数据类型(长度)
)
字符串类型比较:
char:定长,例如 char(10),不论你存储的数据是否达到了10个字节,都要占去10个字节的空间 。
varchar:变长,例如varchar(10),并不代表一定占用10个字节,而代表最多占用10个字节。最大长度8000,也可以使用varchar(max)表示2G以内的数据,但存储机制会和text一样,效率会降低。
text:长文本, 最大长度为2^31-1(2,147,483,647)个字符 。
nchar,nvarchar,ntext:名字前面多了一个n, 它表示存储的是Unicode数据类型的字符,区别varchar(100)可以存储100个英文字母或者50个汉字,而nvarchar(100)可以存储100个英文字母,也可以存储100个汉字。
四、修改表结构
(1)如需在表中添加列,请使用下面的语法:
alter table table_name
ADD column_name datatype
例如该员工表添加一列员工邮箱:
alter table People
add PeopleMail nvarchar(100)
(2)如需在表中删除列,请使用下面的语法:
ALTER TABLE table_name
DROP COLUMN column_name
例如删除员工表中的邮箱这一列
alter table People
drop column PeopleMail
(3)如需改变表中列的数据类型,请使用下列语法:
ALTER TABLE table_name
ALTER COLUMN column_name datatype
例如需要改变邮箱列的数据类型为varchar(100)
alter table People
alter column PeopleMail varchar(100)
五、删除添加约束
删除约束语法:
if exists(select * from sysobjects where name=约束名)
alter table 表名 drop constraint 约束名;
go
添加约束语法:
--添加主键约束
alter table 表名 add constraint 约束名称 primary key(列名)
--添加check约束
alter table 表名 add constraint 约束名称 check(条件表达式)
--添加unique约束
alter table 表名 add constraint 约束名称 unique(列名)
--添加default约束
alter table 表名 add constraint 约束名称 default 默认值 for 列名
--添加外键约束
alter table 表名 add constraint 约束名称 foreign key (列名) references 关联表名(关联表列名)
第三章:增删改查
一、向部门表插入数据
标准语法:
insert into Department(DepartmentName,DepartmentRemark)
values('软件部','......')
insert into Department(DepartmentName,DepartmentRemark)
values('硬件部','......')
insert into Department(DepartmentName,DepartmentRemark)
values('市场部','......')
简写语法:(省略字段名称)
insert into Department values('行政部','公司主管行政工作的部门')
此写法在给字段赋值的时候,必须保证顺序和数据表结构中字段顺序完全一致,不推荐使用此种写法,因为数据表结构变化的时候,数据会出错或产生错误数据。
一次插入多行数据:
insert into Department
values
('行政部','公司主管行政工作的部门')
('市场部','......')
('硬件部','......')
二、查询数据是否插入成功
select * from Department
select * from [Rank]
select * from People
三、修改数据示例
工资普调,为每个员工+500 元工资(批量修改)
update People set PeopleSalary = PeopleSalary + 500
将员工编号为8的工资+1000 元(根据条件修改)
update People set PeopleSalary = PeopleSalary + 1000 WHERE PeopleId = 8
将软件部(部门编号已知=1)所有员工工资低于1万的全部调整成1 万(根据多条件修改)
update People set PEOPLESALARY = 10000 WHERE DepartmentId=1 and PEOPLESALARY < 10000
修改刘备工资为以前的2 倍,并且修改其地址为北京(同时修改多个字段)
UPDATE People SET PEOPLESALARY = PEOPLESALARY*2,PEOPLEADDRESS='北京' WHERE PEOPLENAME = '刘备'
四、删除数据示例
删除员工表中所有数据
delete from People
删除市场部(已知部门编号=3)中工资大于15000 的所有员工
delete from People where DepartmentId = 3 and PEOPLESALARY > 15000
五、drop、truncate、delete区别
drop table:删除表对象,表数据、表结构、表对象都进行了删除。
delete和truncate table:删除表数据,表对象及表结构依然存在。
delete与truncate table的区别如下:
delete:
-
可以删除表所有数据,也可以根据条件删除数据。
-
如果有自动编号,删除后继续编号,例如delete删除表所有数据后,之前数据的自动编号是1,2,3,那么之后新增数据的编号从4开始。
truncate table:
-
只能清空整个表数据,不能根据条件删除数据。
-
如果有自动编号,清空表数据后重新编号,例如truncate table清空表所有数据后,之前数据的自动编号是1,2,3,那么之后新增数据的编号仍然从1开始。
基本查询
查询所有行所有列
select * from Department
select * from People
select * from Department
查询指定列
(姓名,性别,生日,月薪,电话)
select PeopleName,PeopleSex,PeopleBirth,PeopleSalary,PeoplePhone from People
查询指定列
(姓名,性别,生日,月薪,电话)(显示中文列名)
select PeopleName 姓名,PeopleSex 性别,PeopleBirth 生日,PeopleSalary 月薪,PeoplePhone 电话 from People
去重查询:distinct
查询员工所在的城市
(不需要重复数据显示)
select distinct PeopleAddress from People
重字段查询
假设准备加工资(上调20%),查询出加工资后的工资后的员工数据
select PeopleName,PeopleSex,PeopleSalary 原本工资,PeopleSalary*1.2 加薪后的工资 from People
条件查询
SQL中的运算符
| 符号 | 描述 |
|---|---|
| = | 等于 |
| != | 不等于 |
| 大于 | |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
| is null | 为空 |
| is not null | 不为空 |
| in | 是否在其中 |
| like | 模糊查询 |
| between...and.. | 是否在两者之间 |
| and | 逻辑与 |
| or | 逻辑或 |
| not | 逻辑非 |