数据库分类
关系型数据库:(SQL)
MySQL、Oracle、Sql Server、DB2、SQLlite
通过表和表之间,行与列之间的关系进行数据的存储,类似Excel表
非关系型数据库:(NoSQL)
Redis,MongDB
非关系型数据库,对象存储,通过对象自身的属性来决定
DBMS(数据库管理系统)
数据库的管理软件,科学有效的管理我们的数据,维护和获取数据
MySQL,数据库管理系统
MySQL简介
MySQL是一个关系型数据库管理系统
前世:瑞典MySQL AB 公司
今生: Oracle
MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一
Navicat 一款数据库的可视化工具
可根据 sql语句:select VERSION() 查询MySQL版本
开始建立我们的数据库:
新建数据库对应的SQL语句
CREATE DATABASE `MyDB` CHARACTER SET utf8 COLLATE utf8_general_ci:
新建表
对应的SQL语句
CREATE TABLE `person` (
`id` int(10) NOT NULL ,
`name` varchar(100) NOT NULL ,
`age` int(3) NOT NULL ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
ROW_FORMAT=DYNAMIC
接下来我们可以查看person表
尝试添加记录
通过命令行方式操作数据库
只要是在配置环境变量时有配置MySQL的path
就可以直接访问mysql
不然的话需要切换到MySQL的bin目录下
CTRL+R 打开cmd
查看
修改密码的SQL:
update mysql.user set authentication_string = password('123456') where user = 'root' and Host = 'localhost';--修改用户密码
flush privileges; --刷新权限
一:操作数据库
创建数据库:
create database [ if not exists ] myDB;
删除数据库:
drop database [ if exists ] myDB;
展示所有数据库:
show databases;
注意:所有的语句都要以分号结尾
使用指定的数据库:
use mydb;
展示指定数据库中所有的表
show tables;
查看指定表的描述信息:
describe person;
亦可简写为desc
单行注释:--
多行注释:/* */
退出命令:exit
数据库xxx语言
DDL定义
DML操作
DQL 查询
DCL 控制
注意 :使用数据库的时候如果表名或字段名是一个特殊字符,就需要用`包含
该符号在tab键上方
二:数据库的列类型
数值:
数值 | 描述 | 所占字节数 |
---|---|---|
tinyint | 十分小的数据 | 1个 |
smallint | 较小的数据 | 2个 |
mediumint | 中等大小的数据 | 3个 |
int | 标准的整数 | 4个 最常用 |
bigint | 较大的数据 | 8个 |
float | 浮点数 | 4个 |
double | 浮点数 | 8个 |
decimal | 字符串形式的浮点数,一般在金融计算的时候使用 | 9个 |
字符串:
字符串 | 描述 | 范围 |
---|---|---|
char | 字符串固定长度 | 0-255个字符 |
varchar | 可变字符串 | 0-65535 一般常用的变量使用 对应Java中的String |
tinytext | 微型文本 | 2^8-1 |
text | 文本串 | 2^16-1 |
时间日期
java.util.Date
时间日期 | 格式 | 描述 |
---|---|---|
date | YYYY-MM-DD | 日期格式 |
time | HH:mm:ss | 时间格式 |
datetime | YYYY-MM-DD HH:mm:ss | 最常用的时间格式 |
timestamp | 无 | 时间戳,1970.1.1到现在的毫秒数 较为常用 |
year | 无 | 年份表示 |
Null
没有值,未知。
注意,不要使用Null进行运算,结果也会为null
三:数据库的字段属性(重点)
Unsigned:
无符号的整数 -> 声名该列的值不能为 负数
zerofill:
0填充 -> 不足的位数使用0来填充
例如 int(3) 写 5 --> 005
自增:
自动在上一条记录的基础上+1(默认)
通常用来设置唯一的主键,index,必须是整数类型
可以自定义设置主键自增的起始值和步长
非空 NULL | not null
假设设置为not null,如果不给他赋值, 就会报错
Null,如果不填写值,默认就是null !
默认
设置默认的值
拓展
每个表都必须存在以下5个字段,表示一个记录存在意义!
字段 | 含义 |
---|---|
id | 主键 |
version | 乐观锁 |
is_delete | 伪删除 |
gmt_create | 创建时间 |
gmt_update | 修改时间 |
四、创建数据库表
学号int
登录密码varchar(20)
姓名
性别
出生日期
家庭住址
email
注意事项:
使用英文的() 、表的名称和字段 尽量使用 ``括起来
字符串使用 单引号或者双引号 括起来(注意不是`)
除了最后一个语句 其他语句的末尾加,
一个表只能有一个主键
create table if not exists `student`(
`id` int(4) not null auto_increment comment "学号",
`name` varchar(30) not null default "匿名" comment "姓名",
`pwd` varchar(20) not null default "123456" comment "密码",
`sex` varchar(2) not null default "女" comment "性别",
`birthday` datetime default null comment "出生日期",
`address` varchar(50) default null comment "家庭住址",
`email` varchar(50) default null comment "邮箱",
primary key(`id`)
)engine = innodb default charset = utf8
格式:
create table [ if not exists ] `表名`(
`字段名称` 类型 [属性] [索引] [注释],
`字段名称` 类型 [属性] [索引] [注释],
.......
`字段名称` 类型 [属性] [索引] [注释]
)[表类型][字符集设置][注释]
常用命令 ——逆向操作
show create database mydb --查看创建数据库的语句
show create table student --查看创建表的语句
desc student --显示表的结构
五、数据表的类型
关于数据库引擎
innodb 默认使用
myisam 早些年使用
MYISAM | INNODB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间大小 | 较小 | 较大,是MYISAM的2倍 |
常规使用操作
MYISAM:节约空间,速度较快
INNODB:安全性高,事务的处理,多表多用户操作
数据库的物理存储位置
InnoDB在数据库中只有一个*.ibd文件,以及上级目录的ibdata1文件
而MYISAM就有此图中的三个文件
设置数据库表的字符集编码
charset=utf8
不设置的话,会是mysql的默认字符集编码(不支持中文)
mysql的默认字符集编码是Latin1,不支持中文
可以在建表的时候设置编码 亦可在配置文件中设置
在my.ini 中配置
character-set-server=utf8
修改删除表
一 、修改
– 修改表名, alter table 旧表名 rename as 新表名
alter table teacher rename as teacherTable;
– 增加表的字段 alter table 表名 add 字段 列属性
alter table teachertable add age char(2);
– 修改表的字段 (重命名、 修改约束)
– 修改约束 alter table 表名 modify 字段 列属性[]
alter table teachertable modify age VARCHAR(2)
– 字段重命名 alter table 表名 change 旧字段 新字段 列属性[]);
alter table teachertable change age ages int(1);
– 删除表的字段
alter table teachertable drop ages;
二 、删除
– 删除表
drop table if exists teachertable;
注意所有的创建和删除操作尽量加上判断,以免报错
六、MySQL 数据管理
外键
constraint 就是约束的意思
方式一、在创建表的时候,增加约束(麻烦,比较复杂)
create table `grade`(
`gradeid` int(10) not null auto_increment comment '年级id',
`gradename` varchar(50) not null comment '年级名称',
primary key (`gradeid`)
)engine = innodb default charset = utf8;
drop table if exists `student`;
-- 学生表的 gradeid字段要引用年级表的gradeid字段
-- 定义外键
-- 给这个外键添加约束 (执行引用) references
create table if not exists `student`(
`id` int(4) not null auto_increment comment "学号",
`name` varchar(30) not null default "匿名" comment "姓名",
`pwd` varchar(20) not null default "123456" comment "密码",
`sex` varchar(2) not null default "女" comment "性别",
`birthday` datetime default null comment "出生日期",
`address` varchar(50) default null comment "家庭住址",
`email` varchar(50) default null comment "邮箱",
`gradeid` int(10) not null comment '学生年级',
primary key(`id`),
key `FK_gradeid`(`gradeid`),
constraint `FK_gradeid` foreign key (`gradeid`) references `grade`(`gradeid`)
)engine = innodb default charset = utf8
注意:要删除有外键关系的表的时候,必须先删除引用别人的表(从表),再删除被引用的表(主表)
方式二、创建表成功后,再添加外键约束
drop table if exists `student`;
-- 学生表的 gradeid字段要引用年级表的gradeid字段
-- 定义外键
-- 给这个外键添加约束 (执行引用) references
create table if not exists `student`(
`id` int(4) not null auto_increment comment "学号",
`name` varchar(30) not null default "匿名" comment "姓名",
`pwd` varchar(20) not null default "123456" comment "密码",
`sex` varchar(2) not null default "女" comment "性别",
`birthday` datetime default null comment "出生日期",
`address` varchar(50) default null comment "家庭住址",
`email` varchar(50) default null comment "邮箱",
`gradeid` int(10) not null comment '学生年级',
primary key(`id`)
)engine = innodb default charset = utf8
-- 创建表的时候没有外键关系
alter table `student` add constraint `FK_gradeid` foreign key(`gradeid`) references `grade`(`gradeid`);
以上的操作都是物理外键,数据库级别的外键,我们不建议使用,(避免数据库过多造成困扰)
最佳做法:
数据库就是单纯的表,只用来存放数据,只有行(数据)和列(字段)
我们想使用多张表的数据,想实现外键的功能(用程序实现)。