MySQL概述及数据库、表操作
前言:
JavaEE:企业级Java开发 Web
前端(页面:展示,数据!)
后台(连接点:连接数据库JDBC,链接前端(控制,控制视图跳转,给前端传递数据))
数据库是所有软件体系中最核心的存在 DBA
1 什么是数据库?
数据库(DB DataBase)
概念:数据仓库~软件,安装在操作系统(window, linux, mac…)之上!
作用:存储数据,管理数据,可以存储大量的数据,500万以下还是可以的!
2 数据库分类
关系型数据库: (SQL)
- MySQL,Oracle,Sql Server, DB2,SQLlite
- 通过表和表之间,行和列之间的关系进行数据的存储,比如学院信息表,考勤表…
非关系型数据库:(NoSQL~Not Only SQL)
- Redis,MongDB
- 以对象存储,通过对象自身的属性来决定操作
DBMS(数据库管理系统)
-
数据库的管理软件,科学有效的管理我们的数据。维护和获取数据
-
MySQL-数据库管理系统!
3 MySQL简介
MySQL是一个关系型数据库管理系统
前世:瑞典MySQL AB公司
今生:属于Oracle旗下产品
MySQL是最好的RDBMS(RElational Database Management System,关系数据库管理系统)应用软件之一。开源的数据库软件~
体积小、速度快、总体拥有成本低,招人成本比较低。
中小型网站、或某些大型网站都在使用!
此处省略MySQL的安装与初始化,可自行查找博客。
我采用的是 MySQL 8.0.18 + Sequel Pro
4 连接数据库
命令行连接!
mysql -u root -p123123 -- 连接数据库
查看数据库、表基本操作:
-- 单行注释(SQL的的单行注释)
/* (SQL的多行注释)
hello
world
*/
mysql> show databases; -- 查看所有数据库
mysql> use test; -- 使用数据库test
mysql> show tables; -- 查看该数据库中所有的表
mysql> describe teacher; -- 显示数据库中某个表的信息
mysql> create database jeverdata; -- 创建一个新的数据库
mysql> show databases; -- 查看此时的数据库
mysql> exit -- 退出连接数据库
Bye
数据库xxx语言:
- DDL 定义 (Database Define Language)
- DML 操作 (Database Manager Language)
- DQL 查询 (Database Query Language)
- DCL 控制 (Database Control Language)
5 操作数据库
操作数据库 --> 操作数据库中的表 --> 操作数据库中表的数据
mysql关键字不区分大小写
5.1 创建数据库
mysql> create database jeverdata;
Query OK, 1 row affected (0.00 sec)
也可直接在Navicat中创建,右键单机我的连接,选择创建数据库,之后按照下图勾选,即可创建成功!
2、删除数据库
mysql> drop database jeverdata;
Query OK, 0 rows affected (0.00 sec)
3、使用数据库
mysql> use test;
Database changed
4、查看数据库
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| medicine |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
6 rows in set (0.00 sec)
5.2 数据库的列类型
数值
-
tinyint 十分小的数据 1个字节
-
smallint 较小的数据 2个字节
-
int 标准的整数 4个字节
-
bigint 较大的数据 8个字节
-
float 浮点数 4个字节
-
double 浮点数 8个字节
-
decimal 字符串形式的浮点数 金融计算的时候,一般使用decimal
字符串
- char 字符串固定大小的 0~255
- **varchar 可变字符串 0~65535 ** 常用的变量 String
- tinytext 微型文本 2^8-1
- text 文本串 2^16-1 存放大文本
时间日期
java.util.Data
- data YYYY-MM-DD 日期格式
- time HH:mm:ss 时间格式
- datatime YYYY-MM-DD HH: mm: ss 最常用的时间格式
- timestamp 时间戳 --> 1970.1.1到现在的毫秒数! 也较为常用!
- year 年份表示
null
- 没有值,未知
- 注意,不要使用NULL进行运算,结果为NULL
5.3 数据库的字段属性(重点)
Unsigned:
- 无符号的整数
- 声明了该列不能声明为负数
zerofill:
- 0填充
- 不足的位数,使用0来填充,int(3) --> 5~005
自增:
- 通常理解为自增,自动在上一条记录的基础上+1(默认)
- 通常用来设计唯一的主键~index,必须是整数类型
- 可以自定义设计主键自增的起始值和步长
非空 not null
- 假设设置为not null,如果不给它赋值,就会报错!
- NULL,如果不填写值,默认就是null!
默认:
- 设置默认的值!
- gender,默认值为男,如果不指定该列的值,则会有默认的值
扩展:
/*项目中根据规范每一个表必须要存在以下五个字段:
id 主键
`version` 乐观锁
is_delete 伪删除
gmt_create 创建时间
gmt_update 修改时间
*/
6 操作数据表
6.1 创建表案例
-- 目标:创建一个school数据库
-- 创建学生表(列,字段) 使用SQL创建
-- 学号int、登陆密码varchar(20)、姓名、性别varchar(2)、出生日期(datatime)、家庭住址、email
-- 注意点,使用英文(),表的名称和字段 尽量使用``扩起来
-- AUTO_INCREMENT 自增
-- 字符串使用单引号扩起来
-- 所有的语句后面加,(英文的),最后一个不加
-- PRIMARY KEY 主键,一个表只能有一个唯一的主键
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 '密码',
`gender` 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
说明:其中数据库的引擎INNODB在 ‘数据表的类型’ 中说明。
格式:
CREATE TABLE [IF NOT EXISTS] `表名`(
`字段名` 列类型 [属性][索引][注释],
`字段名` 列类型 [属性][索引][注释],
...
`字段名` 列类型 [属性][索引][注释]
)[表类型][字符集设置][注释]
常用查看语句:
SHOW CREATE DATABASE school -- 查看创建数据库的语句
SHOW CREATE TABLE student -- 查看student数据表的定义语句
DESC student; -- 查看表的结构
数据表的类型
-- 关于数据库的引擎
/*
InnoDB 默认使用~
MYISAM 早些年使用
*/
MYISAM | INNODB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持(表锁定) | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大,约为MYISAM两倍 |
常规使用操作:
- MYSIAM: 节约空间,速度较快
- INNODB: 安全性高,支持事务的处理,多表多用户操作
设置数据库表的字符集编码:
CHARSET=utf8
如果不设置,会是mysql默认的字符集编码~(不支持中文!)
MySQL的默认编码是Latin1,不支持中文。
6.2 修改和删除数据表字段
-- 修改表名: ALTER TABLE 旧表名 RENAME AS 新表名
ALTER TABLE students RENAME AS student;
-- 增加表的字段: ALTER TABLE 表名 ADD 字段名 列属性
ALTER TABLE student ADD age INT(11);
-- 修改表的字段:
-- ALTER TABLE 表名 MODIFY 字段名 列属性[]
ALTER TABLE student MODIFY age VARCHAR(11) -- 修改约束
-- ALTER TABLE 表名 CHANGE 旧名字 新名字 列属性[]
ALTER TABLE student CHANGE age Age INT(11) -- 字段重命名
-- 删除表的字段
ALTER TABLE student DROP Age;
-- 删除表(如果表存在再删除)
DROP TABLE IF EXISTS student;
注意:
- change 用来字段重命名,不能修改字段类型和约束;
- modify 不能用来字段重命名,只能修改字段类型和约束;
所有的创建和删除操作尽量加上判断,以免报错!
写在最后
Making the most of every opportunity, because the days are evil.
——Ephesians 5: 16
To Demut and Dottie~