数据库开发(一)数据库简介,创建表和插入数据

关系型数据库:

  • 表:存储数据(表格)
  • 一个数据库可以有多张表
  • 表:
    • 列:列名代表这一列的单元格存储的内容的含义
    • 行:一条记录
    • eg
      姓名年龄电话
      aa1814357345553
      bb1913309121212

      表与表之间存在关系

  • SQL语句:进行数据库操作

 

Oracle数据库:

重量型,不是开源免费的,功能强大,适合比较大的项目使用

可以使用免费的XE版

其它关系型数据库:

eg:MySQL:轻量级,开源免费的,使用在中小型项目

 

客户端服务器端程序

  • 我们直接使用的是客户端      客户端<->服务器端(管理软件)
  • 客户端:
    • SQLPLUS:命令行式的,自带的,前期练习基础使用
    • Oracle提供的一个图形化客户端:SQLdeveloper

安装oracle XE版

注:

  • 安装路径不能带中文,不能带空格
  • 把杀毒软件先退出(推荐)
  • 指定管理员口令:sys和system(基本使用推荐设置一个简单的口令就行)

基本使用

  • SQLPlus基本使用
    1. 运行SQL命令行(Run SQL Command Line):客户端与服务器建立连接,要提供用户名和密码(口令)
    2. oracle是多用户的,自带两个管理员,SYS和SYSTEM(可大小写)
    3. 密码在安装时指定:
      1. system连接(命令可写一起,也可拆开):
        1. conn   用户名/口令
        2. conn   用户名             口令
        3. conn               用户名               口令
      2. sys连接:如果安装软件所在的电脑用户是当前用户,可以直接连接,不输入密码

 

安装oracle后,会有两个服务自动开启:

  • OracleService XE:监听客户端连接,一定要启动,默认自动启动,若开机启动失败,可自行启动
  • OracleXETNSListenter:jdbc连接需要,一定要启动,默认自动启动,若启动失败,可自行启动

 

SYS和SYSTEM:管理员,做一些管理(DBA

  • SYS权限大于SYSTEM
  • 基本的管理:一般使用SYSTEM
  • SYS:权限最大

通常表的增删改查应该使用普通用户,可利用管理员创建

创建用户:

  • create user 用户名 identified by 口令;
  • 语句以分号结束
  • 命令可以不加分号

Oracle是一个多用户的数据库,先要以某用户进行连接

每个用户可以通过管理员进行权限分配,刚创建的用户没有任何权限

连接数据库,创建一次回话,create session

授权(管理员操作):grant connect, resource to 用户名;

  • connect和resource是两种角色,多个权限的集合,普通用户授予这两个权限
  • Oracle中关键字不区分大小写,建议写大写
    • 服务器要先把所有的小写关键字转换成大写,编译,执行,直接写大写,服务器变省去了小写转大写这一步
    • 通常我们自己起的名字,如用户名等,一般习惯小写

 

SQL分类:

  1. DDL:数据定义语句
    1. CREATE:对象(表,序列,视图等)的创建
    2. ALTER:对象的修改
    3. CROP:对象的删除
  2. DML:数据操作语句
    1. 增:INSERT,删:DELETE,改:UPDATE
    2. 对表中数据的增删改
  3. 查询语句
    1. 查:SELECT
  4. DCL:权限控制语句
    1. GRANT:授权
    2. REVOKE:回收权限

表的创建

基本语法:

CREATE TABLE 表名(
    列名   类型   默认值   约束,
    ....
    列名   类型   默认值   约束  --最后一行结束不用逗号

);

相关知识:

  • 命名规则
    • 以字母开头
    • 组成:字母,数字,下划线(_),$,#
    • 长度:不能超过30个字符
    • 不能使用数据库的关键字
    • 同一个用户下不能出现同名的对象(表)
  • 数据类型
    • 文本型
      • VARCHAR2:变长的文本型
        • username  VARCHAR2(100):最多可以存储100个字符,具体开辟的长度由实际内容决定
        • 通常一个字母一个字节,汉字可能占多个(跟编码有关)
      • CHAR:定长的文本型
        • username  CHAR(100):无论如何都会开辟100个字节空间,没占满的位置用空格填充
    • 数值型
      • NUMBER:整型,浮点型都可以表示
        • age  NUMBER(3):表示最多可以存储3位的整数
        • weight  NUMBER(4, 2):表示有2位小数,有效位为4位
    • 日期型
      • DATA
    • 存储大数据量的类型
      • BLOB:存储大量的进制数据,可以高达2GB,存储图片
      • GLOB:存储大量的字符,可以高达2GB,存储小说等
      • 注:完全可以选择把图图片存储在硬盘,把对应的路径存储到数据库
  • 约束:CONSTRAINT(constraint)
    • NOT NULL:非空约束
      • 值不能没有,不能为空
    • CHECK:检查约束
      • 设定值只能取一个范围
    • UNIQUE:唯一约束
      • 列的值不能重复,可以有多个空             空,NULL:没有值
    • PRIMARY  KEY:主键约束
      • 约束力:相当于非空+唯一,可以起到唯一标识记录
      • 多个行之间因为有了主键,不会出现完全一样值得行
      • 一个表最多只有一个主键
      • 通常会给每个表加一个id之类的主键列,没有任何业务意义,只是为了保证能够区分每一行,又不会修改这个列,类似于流水号一样
    • FOREIGN KEY:外键约束
      • 作用:表之间的关联作用
      • 某个表的某个列引用了另一个表的某个列
      • 值只能取已存在表中的值或是是空
      • 如果B表引用A表,要删除A表,必须先删除B表
      • 被引用的列只能是主键列或唯一约束列

 

创建表

需求,在刚创建的用户小创建一个表,用来存储学生的基本信息。例:id,name,sex,age,sno

Version1:

CREATE TABLE STUDENT(
    id NUMBER(9) PRIMARY KEY,
    name VARCHAR2(100) NOT NULL,
    sex NUMBER(1) DEFAULT 0 CHECK(sex=0 OR sex=1),
    age NUMBER(3),
    sno NUMBER(9) UNIQUE NOT NULL
);

默认值:是指如果添加一行数据值对应的列不给值就取默认值 (default值)

Version2:

约束建议起合适的名字,而不要使用默认名字,这样出现问题容易发现:

CREATE TABLE STUDENT(
    id NUMBER(9) CONSTRAINT student_id_pk PRIMARY KEY,
    name VARCHAR2(100) CONSTRAINT student_name_nn NOT NULL,
    sex NUMBER(1) DEFAULT 0 CONSTRAINT student_sex_ck CHECK(sex=0 OR sex=1),
    age NUMBER(3),
    sno NUMBER(9) CONSTRAINT student_sno_uk UNIQUE CONSTRAINT student_sno_nn NOT NULL
);

命名建议:表名_列名_约束简写

主键:pk

外键:fk

非空:nn或nk

唯一:uk

检查:ck

 

删除表命令:DROP  TABLE 表名;

约束的分类

  • 列级别约束
    • 约束直接跟在列后面,一个约束只能修饰一个列
  • 表级别约束
    • 约束单独写一行
    • 注:
      • 除了非空的所有约束都可以作为表级别约束,又可以作为列级别约束
      • 非空约束只能作为列级别约束

Version3:

把可以调整为表级别的约束进行调整

CREATE TABLE STUDENT(
    id NUMBER(9),
    name VARCHAR2(100) CONSTRAINT student_name_nn NOT NULL,
    sex NUMBER(1) DEFAULT 0,
    age NUMBER(3),
    sno NUMBER(9) CONSTRAINT student_sno_nn NOT NULL,
    CONSTRAINT student_id_pk PRIMARY KEY(id),
    CONSTRAINT student_sex_ck CHECK(sex=0 OR sex=1),
    CONSTRAINT student_sno_uk UNIQUE(sno)
);

/*行级别约束与列定义之间不能空行
行级别约束可以指定多个:
CONSTRAINT student_sno_uk UNIQUE(age, sno)
*/

查看当前用户下的所有表的名字:SELECT  table_name FROM  user_tables;

查看某个表结构:desc 表名;

优质数据库:要重复度(冗余)最小就可以存储完整信息

 

外键约束示例:

科目表创建

CREATE TABLE SUBJECT(
    id NUMBER(7),
    name VARCHAR2(100),
    CONSTRAINT subject_id_pk PRIMARY KEY(id)
);

成绩表创建(引用成绩表和科目表)

CREATE TABLE grade(
    id NUMBER(11),
    stu_id NUMBER(9) CONSTRAINT grade_stu_id_fk REFERENCES student(id),
    sub_id NUMBER(7),
    score NUMBER(3),
    CONSTRAINT grade_id_pk PRIMARY KEY(id),
    CONSTRAINT grade_sub_id_fk FOREIGN KEY(sub_id) REFERENCES subject(id)
);
--行级别才写FOREIGN KEY,需要先有成绩表和学生表才能创建

 

表的数据添加:DML---INSERT

  • 数据是一行一行添加的
  • 一行代表一个记录
  • 语法:
    • INSERT INTO 表名 (列名1,......,列名n) VALUES(值1,值2.......,值n);
      • eg:添加一个学生到学生表(id: 1, name: tom, age: 19, sex: 0, sno: 100)
        INSERT INTO student(id, name, age, sex, sno)
        VALUES(1, 'tom', 19, 0, 100);
        
        COMMIT;
        
    • 如果所有的列都有给值,可以省略列名:INSERT INTO 表名 VALUES(值1,值2.......,值n);
      • 每个值和表定义时的列顺序一一对应,每个值必须给出
      • eg:(id:2, name: Lily, age: 18, sno: 10, sex=1)
        INSERT INTO student
        VALUES(2, 'Lily', 1, 18, 101);
        
        COMMIT;
        --顺序需与表定义时的列顺序相同
        
    • 注:
      • 数值型常量,直接写
      • 字符串常量(文本常量),用一对单引号括起来
      • 对于DML操作后,需要确认提交——  COMMIT(提交后才真正添加进入表中)
      • 第一种更好,可读性高,更灵活
      • 插入完成需COMMIT
      • 关键字,各种起的名字,不区分大小写
      • 值是区分大小写的
    • 查询一个表的全部数据:SELECT *FROM 表名;

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值