数据库基础
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 关键字大小写不敏感,建议小写。