数据库基础

SQL语言 数据化查询语言 绝大部分数据库系统支持

关于sql语句的使用

  1. sqol语句不区分大小写
  2. 命令 使用大写比较标准

表名 库名 小写

每条命里 建议分号结尾

命令如果写的比较长 建议分成多行 关键字单独写一行

  1. 注释方式

单行注释 #开头 注释内容 – 注释

多行注释 /* 注释内容 */

关于数据库的存放单元

数据库名

表名

字段名

关于数据库的服务的启动和关闭

使用数据库之前 记得开启服务

  1. 手动找到服务 开启

  2. 打开命令提示符管理员权限

    打开服务 net start 服务名

    关闭服务 net stop 服务名

关于mysql的登录和退出

  1. 通过mysql自带的客户端 输入密码就可以启动

    使用exit 或者ctrl+c退出

  2. 使用控制台登录

    mysql -h localhost -P 3306 -u -root -p

    如果是本机可以省略 -h localhost -P 3306 -u -root -p

关于一些常见的mysql语句

  1. show database;显示数据库当中的内容

  2. use 库名;

  3. select database;显示当前库有哪些表格

  4. show tables;显示当前库中有哪些表格

    show tables from 库名; 显示其他库有哪些表格

  5. 当前库中添加表格

    create table 表名(

    字段名 类型,

    字段名 类型

    );

  6. desc 表名;显示表的结构

  7. select version();显示当前mysql的客户端版本

设计步骤

重点

  1. 了解设计的步骤
  2. 了解E-R图和范式

1. 需求分析

​ 从上往下 思考

​ 存放哪些重要数据 主体 学生 课程 教师

​ 学生(学号 姓名 性别 出生日期 年龄 家庭住址 …)

​ 课程()

​ 教师()

​ 成绩()

小型的例子(大脑构思) 大型 根据分析的内容 进行画图

2. 概念结构设计

需求中 找到实体,确定数学,画E-R图

学生 ——-(选课)———> 课程

教师 ——-(上课)———-> 课程

一对一 1:1 一个老师只带一门课 这门课只有这个老师上

一对多 1:n 一个老师可以上多门课 这些课 只交给这个老师

多对多 m:n 一个学生可以选择多门课,一门课可以有多个学生

矩形 表示实体

椭圆 表示属性

实线 连接

菱形 联系

3. 逻辑结构设计

将E-R图 转变成逻辑结构 树 图 ….

mysql 二维表 形式不一

第一范式 1NF

​ 原子性 每条属性 不可继续分解

​ 成绩(总分 — 单科成绩)

​ 工资(基础工资 补贴 加班费 绩效…)

第二范式 2NF

​ 1NF 每条非主属性 完全依赖于主属性

​ 主属性 用于区分其他记录的 必须唯一

​ 其他的 非主属性(E-R图中 主属性会在下面加一条下划线)

第三范式 3NF

​ 在第二范式的基础上 其他非主属性 不能存在依赖

BCNF 在第三范式基础上 非主属性不能对非主属性子集依赖

第四范式 4NF

​ 表中不能包含一个实体多个独立的多值因子

​ 一个人 多个电话

第五范式 5NF(完美范式)

​ 第四范式必须分解更小的子表

需要查询一条记录 需要查询多个表格 才能做操作

物理结构设计

将逻辑结构设计的内容实施到具体环境中,依赖于DBMS系统和硬件

DBMS 数据库管理系统 mysql

关系型数据库 支持sql语言 二维表存放

NoSQL 有自己不同的存放方式 非关系型数据库

数据库实施

数据库的运行和维护

DDL和DML

DDL

DDL Data Definition Language 数据定义语言

用来定义和管理数据对象(数据库中的数据对象包括 数据库,函数,索引等等)

库的操作

创建库

create database 库名;

删除数据库

drop database 库名;

打开数据库

use 库名;

显示所有的数据库

show DATABASES;

mysql的数据类型

  1. 数值类型

    > int 整型 4个字节
       >
       > tinyint 1个字节 -128~127
       >
       > smallint  2个字节
       >
       > mediumint  3个字节
       >
       > bigint  8个字节
       >
       > float 4个字节浮点型
       >
       > double 8个字节 双精度浮点型
       >
       > decimal 顶点型 根据位数确定
    
  2. 字符串类型

    char(n) 定长字符串(0-255) char st[128]

    ​ char(50) ‘张三’ ‘hello world’

    varchar(n) 变长字符串(0-255)

    blob 存放二进制字符串(存放图片…二进制)

    文本文件——> 字符编码 家庭住址 电话号码……可读的

    关于字符串 MySQL里面没有字符 字符串单引号括起来(使用双引号也可以)

  3. 时间日期类型

    date 日期

    time 时间

    datetime 时间日期

表的操作

显示数据库下的所有表

show tables;

show tables from 库名;

创建表

create table 表名(

​ 列名1 类型1,

​ 列名2 类型2,

​ 列名3 类型3,……

​ 类名n 类型n

);

查看表的结构

DESC 表名;

SHOW COLUMNS FROM 表名;

删除表

drop table 表名;

修改表

alter table 表名 ;

alter table student ADD age TINYINT UNSIGEN;# 在student表中添加一列

alter table 表名 add 列名 属性;

alter table student DROP age;# 删除一列

alter table 表名 drop 列名;

alter table student MODIFY weight DOUBLE(20,2);

alter table 表名 MODIFY 列名 新属性; 修改字段的属性

DML

DML Data Manipulation Language 数据操纵语言

用来操纵数据库对象中包含的数据(增删改)

插入数据

INSERT INTO student(列名) VALUES(值);

INSERT INTO 表名(列名) VALUES(值);

删除数据

delete from 表名;

delete from 表名 where 条件;

where 子句;

修改数据

UPDATE 表名 SET 列名=新值 WHERE 条件;

数据完整性 约束

为了保证在操作的时候数据库中的数据能够正确反应显示情况,在表中会对数据做一些约束

  • 实体完整性性 一条学生信息必须包含学校(不可缺少)
  • 域完整性 名字 123 类型限制 取值范围限制 年龄0~150
  • 引用完整性 不能引用不存在的引用 不能插入一个不存在班级的同学
  • 自定义完整性
学号 姓名 班级
011 张三 1
024 李四 2
037 王五 4
班号 班级名
1 C++
2 Java
3 C#

非空约束 not null

值 不能为null 所有字段默认值都是null 所以设置not null必须赋值

  1. 创建表的时候添加非空约束
  2. 如何创建之后添加或者删除这个not null约束

删除约束 去掉not null

ALTER TABLE class MODIFY COLUMN classNo INT;

加上 not null

ALTER TABLE class MODIFY COLUMN classNo INT NOT NULL;

如果表中已经有null 设置非null属性会出问题 建议 先删除或者先修改表中非空字段

唯一性约束 unique

值只能在这个表中出现一次 可以为null 但必须表中不能重复

1
2
3
4
CREATE TABLE class(
classNo INT UNIQUE,
className VARCHAR(20)
);

主键约束(primary key)

自增约束(auto_increment)

自动增长 添加的时候 如果没有赋值 那么自动赋值

限制级约束(check)

默认值约束(default)

外键约束 foreign key