数据库

用来永久存储数据的一种c/s(client/server)软件系统

常用的关系型数据库

  • mysql
  • oracle
  • 数据库量大-千万级
  • db2
  • 数据库量大-千万级
  • Microsoft sql server
  • sysbase
  • 数据库量大-千万级

关系数据库是由表和一些其他对象组成的

数据库表:数据库表类似于java中的类

对于软件开发人员来说,数据库是每天都要接触的系统,我们主要用数据库来做以下事情

  1. 增删改表结构
  2. 增删改查数据
  3. 优化数据库
  4. 管理数据库

oracle中常用的数据类型

  1. 数字类型 number
  • number(5) 表示不超过5位整数
  • number(5,2) 小数后2位,整数部分最多3位,总长度不超过5位
  1. 字符串类型
  2. 可变长度的字符串类型
    • varchar2 例如:varchar2(10) 10代表的是字节总数,英文字符占1个字节,中文占2个字节
    • nvarchar2 例如:nvarchar2(10) 10代表的是字符最大个数,每个字符占两个字节
  3. 固定长度的字符串类型
    • char 例如:char(10) 10代表的是字节总数,英文字符占1个字节,中文占2个字节,不管实际的字符数量,多出的空间以空格填充
  4. 日期类型
  5. date
  6. timestamp时间戳类型:用1970-1-1日 开始计算的毫秒数
  7. 大数据类型
  8. blob 存放任意格式文件的数据类型,一般用来存储图片
  9. clob 存储大量的字符数据类型
  10. nclob 存储大量的字符数据类型

oracle命令

oracle用户相关命令

  1. 创建用户的命令
  • create user 用户名 identified by 密码;
  1. 删除用户名及该用户名下的所有关联
  • drop user 用户名 cascade;
  1. 给用户赋予角色
  2. grant resource,connect to 用户名; 把resource 和 connect 角色赋予用户
  3. resource 和 connect 是oracle中的两个角色名,这两个角色分别具有一定的权限 举例:在数据库中有以下操作
    • 创建表
    • 创建视图
    • 连接登录数据库
    • 创建存储过程
  4. 解锁账户(系统中默认 用户scott/tiger 默认是锁定的所以要解锁)
  • alter user scott account unlock;
  1. 重设密码
  • alter user 用户名 identified by 1234

oracle 表相关命令

  1. 创建表
create table t_user
(
id number(5) not null constraint pk_user_id primary key,
name nvarchar2(5),
money number(5,2),
gold number(18),
birthday date default sysdate,
sex char(2) default '男'
)
  1. 删除表
drop table t_user;
  1. 修改表 添加主键的命令
alter table t_user
      add constraint pk_user_id primary key (id)
  1. 添加外键的命令
  2. 可以先添加一个用户登录记录表 -- 创建一个用户登录记录表 -- 用户id,登录时间,登录ip create table t_login_history ( id number(5) not null, login_dt date default sysdate, login_ip varchar2(20) ) 添加外键 alter table t_login_history add constraint fk_login_id foreign key (id) references t_user (id)
  3. 添加表的同时赋予外键 create table t_login_history ( id number(5) not null, login_dt date default sysdate, login_ip varchar2(20), constraint fk_login_id foreign key(id) references t_user (id) )
  4. 增加字段的命令 alter table 表名 add 字段名 列的属性;
   alter table t_login_history add c1 number(5);
  1. 修改字段的命令 alter table 表名 modify 字段名 列的属性;
   alter table t_login_history modify c2 nvarchar2(10);
  1. 删除字段的命令 alter table 表名 drop column 字段名;
   alter table t_login_history drop column c1;
  1. 清空表的数据
  2. truncate table 表名;
  3. delete table 表名;只清除表中的数据

数据完整性

为了实现数据完整性有以下手段:

  1. 主键:能唯一标识某条记录的列,不能为null
  2. 外键:引用自别的表的主键,外键可以为null
  3. not null
  4. default
  5. 唯一约束 unique
   alter table T_USER
     add constraint uk_user_name unique (NAME);
  1. 检测约束 字段>值 and 字段<值 (and是并且,or是或者)

例1:添加sex 检查约束

   alter table T_USER
     add constraint check_user_sex
     check (sex='男' or sex='女');

例2:添加姓名长度的检查约束

   alter table T_USER
     add constraint CHECK_USER_NAME_LENGTH
     check (length(name) >=6 and length(name) <=10);

sql结构化查询语言

  1. 新增数据的sql语法
  2. insert into 表名 values(值1,值2,...) --表中所有列都要对应赋值
  3. insert into 表名(列名a,列名b) values(值1,值2); --可以选择要增加的列 分别 赋值
  4. 修改数据的sql语法 update 表名 set name='张三',ename='zhangsan';
  5. update t_test set name='张三',ename='zhangsan'; --表示 name和ename列 所有行的数据都修改
  6. update t_test set name='鳄鱼' where id = 1; --表示 将id=1的 数据的name改为 鳄鱼
  7. 删除数据的sql语法
   delete from 表名 where 条件
   -- 如果没有条件 则全部清空
  1. 查询数据的sql语法
  2. select 字段列表 from 表名 [条件] select sno,sname from t_student; select * from t_student; -- *号表示所有字段
  3. select 字段1 别名,字段2 别名 from 表名 别名 [条件] 给每个字段取了一个别名 select sno 学号,sname 姓名 from t_student 学生表;
  4. 创建一个表并且复制查询到的数据 create table 表名 as select * from 表名;

一些例子

学生表:

   create table t_student
   (
   sno varchar2(20) not null, --学号
   sname varchar2(20) not null,--学生姓名
   ssex varchar2(10) not null, --性别
   sbirthday date,     --生日
   class varchar2(20)  --所在班级编号
   );

老师表:

   create table t_teacher 
   (
   tno varchar2(10) not null,  --老师编号
   tname varchar2(20) not null,  --老师姓名
   tsex varchar2(20) not null,   --老师性别
   tbirthday date not null,  --生日
   prof varchar2(20),    --职称
   depart varchar2(20) not null  --部门
   );

查询案例:

   -- 查询所有学生信息
   select * from t_student;

   -- 查询所有学生的学号,姓名
   select sno,sname from t_student;

   -- 查询所有的女老师
   select * from t_teacher where tsex = '女';

   -- 查询所有职称等于助教的老师
   select * from t_teacher where prof='助教';

   -- 查询所有男助教
   select * from t_teacher where prof='助教' and tsex = '男';

   -- 查询所有男老师或职称等于讲师的老师信息,或者职称等于助教的老师
   select * from t_teacher where 
   (tsex = '男' and prof = '讲师') or prof = '助教';

   -- 查询男或女教师
   select * from t_teacher where tsex='男' or tsex='女';
   select * from t_teacher where tsex in ('男','女');

   -- 查询emp表中 job=CLERK或SALESMAN的员工信息
   select * from emp where job='CLERK' or job='SALESMAN';
   select * from emp where job in('CLERK','SALESMAN');

   -- 查询年龄等于10或者20或者30所有学生信息
   select * from t_student where 
   trunc((sysdate-sbirthday)/365) in (10,20,30);

   -- 查询年龄在20到45岁之间的所有学生信息
   select * from t_student where
   trunc((sysdate-sbirthday)/365) between 20 and 45;
   -- trunc()是把一个小数取整的函数
  1. 模糊查询
  2. like查询 通配符:%表示任意字符,_表示一个字符 select* from 表名 where 字段 like '' 例子 --查询姓李的所有老师信息 select * from t_teacher where tname like '李%'; --查询姓名中包含 诚 字的所有老师信息 select * from t_teacher where tname like '%诚%'; --查询工作非SALESMAN,CLERK的员工信息 select * from emp where job<>'SALESMAN'and job<>'CLERK'; select * from emp where job not in('SALESMAN','CLERK');

遥望漉雪千山都过尽,隔海隔山你的背影。