数据库基础

1.1 数据库分类

关系型数据库    (SQL)

·MySQL, Oracle, Sql Server, DB2, SQLlite

·通过表和表之间、列和列之间的关系进行数据的存储。 如:学员信息表,考勤表......

 

非关系型数据库    (NoSQL) not only

·Redis, MongDB

·非关系型数据库,对象存储,通过对象的自身属性来决定。

 

DBMS(数据库管理系统)

数据库的管理软件,科学有效的管理数据。维护和获取数据;

MySQL,数据库管理系统;

DB 与 DBMS 有区别,DB 用来存储数据,而 DBMS 用来操作 DB 中存取的数据。

 

1.2MySQL 简介

MySQL 是一个关系型数据库管理系统;

前世:瑞典的 MySQL AB 公司;

今生:属于 Oracle 旗下产品;

MySQL 是最好的 RDBMS(Relational DataBase Management System,关系型数据库管理系统)应用软件之一。

 

1.3SQL 语句

show databases; -- 展示所有数据库
use school; -- 切换数据库 use 数据库名
--Database changed

show tables; -- 查看数据库中所有表
describe student; -- 显示数据库某个表的所有信息 "describe 表名" 或简写 "desc 表名"

create database westos; -- 创建一个新数据库

exit; -- 退出连接
-- 单行注释
/*   (SQL 多行注释)

*/

数据库 XXX 语言 核心 CRUD 增删改查 CV 程序猿 API 程序猿 CRUD 程序猿

1 DDL 定义语言

2 DML 操作语言

3 DQL 查询语言 /

4 DCL 控制语言

 

2 操作数据库

操作数据库 -> 操作数据库中的表 -> 操作表中的数据

关键字不区分大小写

2.1 操作数据库 (了解)

创建数据库

CREATE DATABASE [IF NOT EXISTS] XXX;

删除数据库

DROP DATABASE [IF EXISTS] XXX;

使用数据库

USE `XXX`;

查看所有的数据库

SHOW DATABASES;

2.2 数据库的列类型

数值

(1)tinyint 十分小的数据 1 个字节

(2)smallint 较小的数据 2 个字节

(3)mediumint 中等的数据 3 个字节

(3)int 标准的整数 4 个字节 常用

(5)bigint 较大的数据 8 个字节

(6)float 浮点数 4 个字节

(7)double 双浮点数 8 个字节 (精度问题!)

(8)decimal 字符串形式的浮点数 金融计算的时候一般使用 decimal

 

字符串

(1)char 字符串固定大小的 0-255

(2)varchar 可变字符串 0-65535 常用的,对应 java 中的 string

(3)tinytext 微型文本 2^8-1

(4)text 文本串 2^16-1 保存大文本

 

时间日期

java.util.Date

(1)date YYYY-MM-DD,日期格式

(2)time HH:MM:SS,时间格式

(3)datatime YYYY-MM-DD HH:MM:SS 最常用的时间格式

(4)timestamp 时间戳, 1970.1.1 到现在的毫秒数!较为常用

(5)year 年份表示

 

null

(1)没有值,未知

(2)== 注意,不要使用 NULL 进行运算,结果为 NULL!

 

2.3 数据库的字段属性(重点)

Unsigned:

(1)无符号的整数

(2)声明该列不能声明为负数

 

zerofill:

(1)0 填充的

(2)不足的位数使用 0 填充 int(3) 5 ---- 005

 

Autoincrement:

(1)自动在上一条记录的基础上 +1(默认)

(2)通常用来设计唯一的主键 ~index,必须是整数类型

(3)可以自定义设计主键自增的起始值和步长

 

非空 NULL /not null :

(1)假设设置为 not null,如果不给他赋值就会报错

(2)NUll,如果不填写值,则默认就是 NUll

 

默认:

(1)设置默认的值

(2)例如 sex,默认值为:男。如果不指定该列的值,则默认都为男!

 

2.4 创建数据库表(重点)

CREATE TABLE IF NOT EXISTS `student`(
    `id` INT(5) NOT NULL AUTO_INCREMENT COMMENT '学号',
    `name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
    `password` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
    `sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
    `birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
    `address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
    `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

格式:

CREATE TABLE [IF NOT EXISTS] ` 表名 ` (
  ` 字段值 ` 列类型 [ 属性] [ 索引] [ 注释],
  ` 字段值 ` 列类型 [ 属性] [ 索引] [ 注释],
  ` 字段值 ` 列类型 [ 属性] [ 索引] [ 注释],
  ......
  ` 字段值 ` 列类型 [ 属性] [ 索引] [ 注释],
  )[ 表类型][ 字符集设置][ 注释]

2.5 数据表的类型

关于数据库引擎:

INNOBD 是默认使用的

MYISAM 早些时候使用

 

MYISAM

INNOBD

事务支持

不支持

支持

数据行锁定

不支持

支持

外键约束

不支持

支持

全文索引

支持

不支持

表空间的大小

较小

较大,约为 MYISAM 的两倍

常规使用操作:

MYISAM 节约空间,速度较快

INNODB 安全性较高,支持事务的处理,支持外键,多表多用户操作

 

在物理空间所在的位置:

所有的数据库文件均存在 data 目录下;

本质还是文件的存储!

 

MySQL 引擎在物理文件上的区别:

INNODB 在数据库表中只有一个 *.frm 文件,以及上级目录下的 ibdata 文件(8.0 版本不一样)

MYISAM 对应文件:

*.frm - 表结构的定义文件

*.MYD - 数据文件(data)

*.MYI - 索引文件(index)

 

设置数据库表的字符集编码

CHARSET=utf8

不设置的话会使用 MySQL 的默认编码,为 Latin1,不支持中文。

在 my.ini 配置默认的编码可以将 utf8 设为默认,但是不建议,改变物理设置可能导致自己主机能跑但是别的主机不能跑。

 

2.6 修改删除表

-- 修改表名   ALTER TABLE ` 旧表名 ` RENAME AS ` 新表名 `;
ALTER TABLE `student` RENAME AS `student0`;
-- 增加表的字段      ALTER TABLE ` 表名 ` ADD 字段值 列属性;
ALTER TABLE `student0` ADD age INT(3) NOT NULL COMMENT '年龄';

-- 修改表的字段 (重命名,修改约束)
-- 修改字段属性 ALTER TABLE ` 表名 ` MODIFY ` 字段名 `  列属性 [];
ALTER TABLE `student0` MODIFY `age` VARCHAR(3);
-- 修改字段名字 ALTER TABLE ` 表名 ` CHANGE ` 旧表名 ` ` 新表名 ` 列属性 [];
ALTER TABLE `student0` CHANGE `age` age1 INT(3);

-- 删除表的字段
ALTER TABLE ` 表名 ` DROP ` 字段名 `
ALTER TABLE `student0` DROP age1;

-- 删除表
-- DROP TABLE [IF EXISTS] ` 表名 `;
DROP TABLE [IF EXISTS] `student0`;

在创建或者删除表时尽量加上判断条件 [if (not) exists] 可以避免报错

 

注意点:

1、所有字段名使用 `` 包裹。

2、sql 关键字大小写不敏感,建议小写。