02_数据库之DDL语句
什么是数据库?
我们在软件的实现过程中,会产生很多的数据,比如我们在淘宝上下单,那么就会产生一条订单数据,我在银行卡存了1000块钱,那么同样也会产生一条数据,这些数据都会存放在数据库中的。那么我们常用的数据库就有很多,比如MySQL、SQLite、Oracle等等。
其实不管是什么数据库,大部分的操作都是类似的。接下来的数据库我们将会以Oracle11g为例子来进行演示。
客户端的概念
我们在安装了数据库之后,其实,他就是开启了一个数据库服务,因此我们称之为数据库服务/或者数据库服务端。通常在公司里,数据库的服务会24小时提供服务,等待别人对他发送指令。
所以我们需要通过客户端
来连接上我们的数据库服务,从而操作数据库。
客户端工具有很多,比较常用的navicat
、phpmyadmin
、plsql
、sqlyog
等等
通过客户端连接上数据库需要知道如下内容
连接数据库五要素 |
---|
数据库服务器IP地址 |
数据库默认端口 |
数据库用户名 |
数据库密码 |
需要连接的数据库名称 |
表与库的概念
数据库是用来帮助我们管理数据的,那么他是通过什么方式来管理数据呢?最主要的就是通过表,就好像我们常用的excel表,每一列规定填写什么,然后一行一行的添加数据。也就是我们的数据,是存放在表中的,而表又是存放在库中的。
学号 | 姓名 | 年龄 |
---|---|---|
1 | 王五 | 32 |
2 | 张三 | 23 |
3 | 李四 | 22 |
比如一个购物软件,我可以创建一个数据库用来存放整个购物软件的数据,而在这个库中,我又可以创建多个表(比如创建user表,用来存放用户的信息,order表用来存放订单信息等等)
认识SQL
SQL 是用于访问和处理数据库的标准的计算机语言。在SQL语言中,分为DDL
语句和DML
语句
-
DDL语句
对数据库的结构进行操作的语句,不会对具体的数据进行操作。 -
DML语句
用于操作数据库对象中包含的数据。
对于我们而言,DML语句使我们最常用到的语句,几乎占到80%以上。
常见的数据类型
数据类型 | 含义 | 用法 |
---|---|---|
number | 数字类型 | number 数字类型/整数或者小数都行;number(4) -9999~9999;number(4,2) -99.99~99.99 |
date | 日期/时间 | 直接用date表示 |
char(长度) | 定长字符串 | 比如,char(6)就表示6个字节长度的字符串 |
varchar2(长度) | 变长字符串 | 比如,varchar2(6)表示最多6个字节长度字符串,若实际没有6个字节,则回收 |
- 定长,不管你实际使用了多少。变长,根据你具体使用的长度来计算。
- 一个英文字符 占用一个字节,一个中文字符 占用2-4个字节(编码格式)
约束条件
约束条件 | 含义 |
---|---|
unique | 唯一(值不能重复) |
not null | 非空(值不能为空) |
check(条件) | 检查约束(检查该列的值,是否满足括号中的条件) |
default 值 | 默认值约束(如果在新增数据时,没有给这一个列一个值,则读取默认值) |
primary key | 主键约束(包含了非空约束和唯一约束) |
references 表(列) | 外键约束(确保数据的有效性) |
操作符
符号 | 含义 |
---|---|
< | 小于 |
> | 大于 |
>= | 大于等于 |
<= | 小于等于 |
!= | 不等于 |
and | 并且,and左右两边条件需要同时成立 |
or | 或者,or左右两边条件只需要成立一个即可 |
null | 表示空 |
创建表的语法
create table 表名称(
列名1 数据类型 约束条件,
列名2 数据类型 约束条件,
列名3 数据类型 约束条件
);
ps(列与列之间用,分隔开)
- 比如:
创建一个员工表(users)
员工工号(id),员工姓名(name),员工的手机号码(tel),入职时间(hiredate),民族(nation),员工年龄(age)
要求如下:
id主键约束,员工姓名不能为空,手机号码必须唯一,民族默认为汉族,年龄默认为25岁,且年龄必须大于18岁
create table users(
id number primary key,
name varchar2(30) not null,
tel number(11) unique,
hiredate date,
nation varchar2(10) default '汉族',
age number(3) default 25 check(age > 18)
);
修改表的语法
- 增加列
alter table 表名 add(
列名1 数据类型 约束条件,
列名2 数据类型 约束条件,
列名3 数据类型 约束条件
);
- 比如说给
stu
表增加一列班级
alter table stu add(
class varchar2(30)
);
- 修改列
alter table 表名 modify(
列名1 数据类型 约束条件,
列名2 数据类型 约束条件,
列名3 数据类型 约束条件
);
- 将
stu
表的班级这一列数据类型修改为number
alter table stu modify(
class number
);
- 删除一列
alter table 表名 drop column 列名;
- 将
stu
表的class这一列删除
alter table stu drop column class;
练习
第一题
- 创建一张学生表,包含以下信息,学号,姓名,年龄,性别,家庭住址,联系电话,入学日期,科目,分数
- 修改学生表的结构,添加一列信息,学历
- 修改学生表的结构,删除一列信息,家庭住址
- 向学生表添加如下信息:
学号 | 姓名 | 年龄 | 性别 | 联系电话 | 学历 | 入学日期 | 科目 | 分数 |
---|---|---|---|---|---|---|---|---|
1 | A | 22 | 男 | 123456 | 小学 | to_date('20140508','YYYYMMDD') | oracle | 85 |
2 | B | 21 | 男 | 119 | 高中 | 2015-4-7 | linux | |
3 | C | 23 | 男 | 110 | 高中 | 2014-8-18 | oracle | 80 |
4 | D | 18 | 女 | 114 | 大专 | 2013-7-16 | QTP | 76 |
第二题
设有如下四个关系模式:
S(SN,SNAME,CITY)
P(PN,PNAME,COLOR,WEIGHT)
J(JN,JNAME,CITY)
SPJ(SN,PN,JN,QTY)
S表为供应商表:SN为供应商编码,SNAME 为供应商名字,CITY为供应商所在城市;
P表为零件表:PN为零件编码,PNAME为零件名字,COLOR为零件颜色,WEIGHT 为零件重量;
J表为工程表:JN为工程编码,JNAME 为工程名字,CITY 为工程所在城市;
SPJ表为供应关系表:QTY表示提供零件数量。
其中在SPJ表中,SN、 PN、JN为外键;
在表S中SN为主键,在表P中PN为主键,在表J中JN为主键
且SN、PN、JN为整数类型,其他字段全部为字符串类型。
创建S,P,J,SPJ四张表
第三题
创建两张表
宿舍表(宿舍号 char(6) ,宿舍电话)
要求:主键(宿舍号)、宿舍电话:以633开头的7位电话号码
同学表(学号char(6),姓名,性别,年龄,民族,身份证号,宿舍号)
要求:主键(学号)、外键(宿舍号)、民族默认为汉族、
民族,姓名,年龄 均要求非空
身份证号码 唯一
性别 必须是男或者女