什么是数据库?
简单来说,数据库及时存储大量数据的地方。
使用数据库的前提:安装docker
docker常用命令
- 安装mysql
docker run --name mysql1 -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7.27
- 查看所有进程
docker ps
- 关闭某个进程
docker kill mysql1
可能会导致需要重装mysql
- 重新运行mysql
docker container start musql1
- 删除容器
docker rm mysql1
注意:docker运行的容器不会进行数据持久化,一旦删除,十九就没了,可以通过 数据目录持久化解决
query命令
- 进入运行mysql1 的 linux虚拟机
docker exec -it mysql1 bash
- 连接上mysql
mysql -u root -p
- 展示databases(数据库)
show databases;
- 进入数据库
use databasename;
- 展示库内表名
show tables;
- 展示表内所有内容
select * from tablename
- 对标进行描述
desc tablename;
- 删除库/表
DROP TABLE/DATABASE name
尽可能不要通过update/delete直接操作数据库,若未写where,所有的数据都将被覆盖!!!!!!!!
尽可能不要通过update/delete直接操作数据库,若未写where,所有的数据都将被覆盖!!!!!!!!
尽可能不要通过update/delete直接操作数据库,若未写where,所有的数据都将被覆盖!!!!!!!!
在命令行中返回上一层 ===> ctrl + D
DBMS
DBMS 的全称就是 databases management system 及 数据库管理系统。
通过nodejs使用mysql
- 安装mysql库
yarn add mysql
- mysql 的基本结构
// 引入mysql
var mysql = require('mysql');
// 创建链接
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '123456',
});
// 进行链接
connection.connect();
// 通过链接 传递query命令,进行操作等
connection.query( query, [ (error, results, fields)=>{} ] )
//结束链接
connection.end();
- 创建database
connection.query('CREATE DATABASE IF NOT EXISTS huang DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_520_ci;', function (error, results, fields) {
// 创建数据库
if (error) throw error;
console.log('The solution is: ', results);
});
在mysql中,我们不能直接使用utf8,需要使用utf8mb4
- 创建table
//使用表
connection.query('use huang;');
connection.query(`CREATE TABLE IF NOT EXISTS user(
//我们必须对表进行描述
name text,
age int
)`, function (error, results, fields) {});
表内数据的增删查改
- 增
insert into tablename (key1,key2) values (value1,value2)
- 删
delete from tablename where name='xxx'
- 查(最近的10个)
select */name from tablename limit 10
- 改
update tablename set xxx='yyy' where name='xxx'
为表添加一列
alter table tablename add id serial;
mysql 的数据类型
mysql的数据类型分为五大类:
- 数字
- 字符串
- 时间/日期
- JSON
- 特殊类型
我们下面来着重介绍一下前三种
- 数字
| 类型 | 大小 |
|---|---|
| tinyint | 1 byte |
| smallint | 2 byte |
| mediumint | 3 byte |
| int/integer | 4 byte |
| bigint | 8 byte |
| float | 4 byte |
| double | 8 byte |
| double | 8 byte |
| serial | |
| bool |
其中 serial 等价于 BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE , 他是一个自动增长递增唯一值。
- 字符串
| 类型 | 特点 |
|---|---|
| char(100) | 永远是100个字符长度 |
| varchar(100) | 字符长度 <= 100 |
| binary(1024) | 永远是1k大小 |
| varbinary | <= 1k |
| blob | 一个很长的二进制 |
| text | 一个很长的文本 |
| enum('v1' 'v2') | 字符串只能是 v1 或 v2 |
| set('v1' 'v2') | 可以是v1 也可以是v2 也可以是v1 v2 |
- 时间
| 类型 | 特点 |
|---|---|
| data | xx年xx月xx日 |
| time | xx点xx分xx秒 |
| datatime | xx年xx月xx日xx点xx分xx秒 |
| timstamp | 时间戳 |
| year | xx年 |
在将时间传给前端时,最好先将其格式化为ISO 8601格式。
例如:'1990-12-01T15:30.000+08:00'
new Date(Date.parse('2000-12-01T15:30:00.000+08:00'))
//Fri Dec 01 2000 15:30:00 GMT+0800 (中国标准时间)
除了上述使用mysql库以外,我们也可以通过Sequalize 来实现对数据库的管理