SQL Server学习日志(3)
哈喽,大家好呀!这里是码农后端。
1、数据定义
1)SQL主要动词:
SQL功能 | 动词 |
---|---|
数据定义 | CREATE(创建),DROP(删除),ALTER(修改) |
数据查询 | SELECT |
数据操纵 | INSERT(插入),UPDATE(更新),DELETE(删除) |
数据控制 | Grant(授权),REVOKE(收回权限),DENY(撤销并拒绝权限) |
2)SQL程序语言有4种类型,如下
DDL(Data Definition Language):数据定义语言
DQL(Data Query Language):数据查询语言
DML(Data Manipulation Language):数据操纵语言
DCL(Data Control Language):数据控制语言
一、DDL(数据定义语言)
1、表的定义与删除
1.1 定义表
新建一个DB数据库,在该数据库下建表。
1)首先创建一个部门表(Department),如下
1 | USE DB; --切换当前数据库为DB |
其中,第2句代码含义是判断数据库中是否已存在名为’Department’的对象,如果存在,则删除,因为sql server数据库中不允许创建重复的表;type=’U’判断对象类型为用户定义表类型
IDENTITY(1,1)代表主键自增,从1开始,步长为1自增长
2)再创建一个职级表([Rank])
由于rank是关键字,为了区别开,将该字段加上中括号[]表示
1 | CREATE TABLE [Rank] --职级表 |
3)最后创建一个员工表
1 | CREATE TABLE Employee --员工表 |
简单分析,上表使用到的约束有:
a、使用CHECK约束,限制员工性别列的取值范围为’男’或’女’;限制员工工资列的取值范围在1000-1000000之间(包含)
b、使用UNIQUE约束,限制员工号码唯一不重复
c、NOT NULL非空约束
d、PRIMARY KEY主键约束
e、使用DEFAULT默认约束,指定添加员工时间的默认值为当前时间
f、外键约束
可以说,基本上的约束都使用到了。
1.2 删除表
使用drop,如下
1 | DROP TABLE IF EXISTS dbo.Course; |
表示如果当前数据库中存在Course表,则将其删除
2、修改表结构
1)添加列:alter table 表名 add 新列名 数据类型
如为员工表增加一个年龄列,可以为空
1 | ALTER TABLE dbo.Employee ADD age INT NULL; |
2)删除列:alter table 表名 drop column 列名
如删除员工表的年龄列
1 | ALTER TABLE dbo.Employee DROP COLUMN age; |
3)修改列:alter table 表名 alter column 列名 数据类型
如修改员工表的员工姓名字段,类型不变,将其长度改为50
1 | ALTER TABLE dbo.Employee ALTER COLUMN employeeName VARCHAR(50); |
4)维护约束(添加/删除约束)
4.1)添加约束:alter table 表名 add constraint 约束名 约束定义
如下列举了一些常见约束(如check、主键等)的添加
1 | --添加约束(check约束) |
4.2)删除约束:alter table 表名 drop constraint 约束名
注:constraint是约束的意思,用其定义约束
二、DML(数据操作语言)
建完数据库和表后,就可以往表中插入数据了。
注:设置了主键自增或默认值的字段可以不用手动插入
1、插入数据
基本语法:insert into 表名(列名表) values(值列表)
以下为往各表中插入一些测试数据。
2.1 部门表插入
由于departmentID设置了主键自增,所以可以不用插入。
1 | INSERT INTO dbo.Department(departmentName,departmentRemark) VALUES('研发部','个个都是技术大佬') |
也可以简写如下(省略了字段名,容易出错,不推荐)
1 | INSERT INTO dbo.Department VALUES('研发部','个个都是技术大佬') |
一次插入多行数据(union:将每行连接起来)
1)方法1:使用union
1 | INSERT INTO dbo.Department(departmentName,departmentRemark) |
2)方法2:values后面批量
1 | INSERT INTO dbo.Department(departmentName,departmentRemark) VALUES('aa','aaa'),('bb','bbb') |
2.2 职级表插入
1 | INSERT INTO dbo.[Rank](rankName,rankRemark) |
2.3 员工表插入
1 | INSERT INTO dbo.Employee |
2、修改数据
基本语法:update 表名 set 字段1 = 值1,字段2 = 值2 where条件
1 | UPDATE dbo.Employee SET employeeSalary = employeeSalary+1000 --工资调整,每个员工加薪1000元 |
3、删除数据
基本语法:delete from 表名 where条件
1)批量删除
1 | DELETE FROM dbo.Department WHERE departmentID IN (2,7,8) |
2)删除销售部(部门编号6)工资大于10000的员工
1 | DELETE FROM dbo.Employee WHERE departmentID = 6 AND employeeSalary >10000 |
3)删除的3种实现(drop,truncate,delete)
重点掌握,如下
1 | drop table dbo.Employee --删除表对象,比较危险,如要删除建议先做好备份;推荐以下两种。 |
truncate和delete区别:
(1)truncate清空所有数据,不能有条件, delete可以删除所有数据也可以带条件,删除符合条件的数据
(2)自动编号:
假设表中自动编号为1, 2, 3, 4, 5
1、使用truncate清空数据之后在添加数据,编号仍然是1, 2, 3, 4, 5
2、使用delete删除数据,删除的自动编号将永远不存在了(即使用delete删除了所有数据之后再添加数据,编号变成了6, 7, 8, 9, 10)