数据库 [一]
三大范式
第一范式(1NF):
要求:无重复的列
第二范式(2NF):
要求:数据库中的表里面的 每个实例 可以唯一被确定 (属性完全依赖于主键)
消除子函数依赖
第三范式(3NF):
要求:数据库表中不包含 已经在其他表中 包含的非主关键字 信息
这话比较绕 ,比如说有两张表,一个表A存储学生基本信息,一个表B存储学生的年级信息,如果表A中已经存储了学生的姓名(name)【非主键】,那么表B中就不应该再存储学生的姓名(name)
2NF vs 3NF:
2NF:非主键信息是否完全依赖于主键,还是说部分依赖于主键的一部分
3NF:非主键列是直接依赖于主键,还是依赖于其他非主键列
表结构
表其实是一个二维的表,每一行是一个tuple(元组),每一列是一个attribute(属性)
SQL (Structure Query Language)语言
- DDL(Data Definition Language): 定义数据库对象:库,表,列等等
- DML(Data Manipulation Language): 数据操作语言,用来定义数据库记录(数据)增/删/改
- DCL(Data Control Language): 数据控制语言,用于定义访问权限,安全级别
- DQL(Data Query Language): 数据查询语言,用来查询记录(数据)。
MySQL中的关键字不区分大小写
SQL语句 以 ;结尾
DDL 操作数据库
- 创建数据库
CREATE DATABASE mydb;
- 查看所有数据库,查看创建的数据库信息
SHOW DATABASES;
SHOW CREATE DATABASE mydb;
- 修改数据库(将字符集切换为utf8)
ALTER DATABASE mydb CHARACTER SET utf8;
- 删除数据库
DROP DATABASE mydb;
- 其他语句
查看当前使用的数据库
SELECT DATABASE();
切换数据库
USE mydb2;
DDL 操作数据库中的表
- 创建数据表
CREATE TABLE EMPLOYEE(
ID CHAR(10) PRIMARY KEY;
NAME VARCHAR(100);#最长是100字节,可变长度
IMAGE BLOB;
AGE INT;
JOIN_DATE DATE;
DESCRIPTION TEXT;
SALARY DOUBLE;
);
- 查看当前数据库中的表名
SHOW TABLES;
- 查看表的所有属性
DESC EMPLOYEE;
- 修改表属性:
- 4.1 新增一个属性
ALTER TABLE employee ADD image blob;
- 4.2 修改属性的数据类型
ALTER TABLE employee MODIFY job_description VARCHAR(40);
修改表名称:
ALTER TABLE EMPLOYEE_INFO RENAME EMPLOYEE;
增加属性:
ALTER TABLE EMPLOYEE ADD SEX CHAR(1);
删除某一列属性:
ALTER TABLE EMPLOYEE DROP SEX;
修改属性的名称,数据类型:
ALTER TABLE EMPLOYEE MODIFY DESCRIPTION VARCHAR(500);
ALTER TABLE EMPLOYEE CHANGE NAME USERNAME VARCHAR(100);
- 删除数据库中的某个表
DROP TABLE EMPLOYEE_INFO;
- 其他语句
修改数据库中的表编码格式
ALTER TABLE EMPLOYEE CHARACTER SET utf8;