数据库—MySQL ( 入门 )

数据库分类

关系型数据库:(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

时间日期格式描述
dateYYYY-MM-DD日期格式
timeHH:mm:ss时间格式
datetimeYYYY-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 早些年使用

MYISAMINNODB
事务支持不支持支持
数据行锁定不支持支持
外键约束不支持支持
全文索引支持不支持
表空间大小较小较大,是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`);

以上的操作都是物理外键,数据库级别的外键,我们不建议使用,(避免数据库过多造成困扰)

最佳做法:
数据库就是单纯的表,只用来存放数据,只有行(数据)和列(字段)
我们想使用多张表的数据,想实现外键的功能(用程序实现)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值