常见的数据库主要分为三类,SQL(关系型数据库)、NoSQL(非关系型数据库)、NewSQL。
SQL
SQL即关系型数据库(RDBMS — Relational Database Management System),SQL 是基于关系型数据模型设计的数据库,SQL用二维表格表示实体以及实体之间的关系,对数据的操作也几乎全部建立在一个或多个关系表格上,通过对这些关联的表格分组、合并、连接、选取等运算来实现数据库的管理。
常见的关系型数据库有:
Orcale
MySQL
Microsoft SQL server
PostgreSQL
SQLLite
MariaDB
关系型数据库特点
事务性
最近做了一个简单的短链接服务,短链接使用自增 id 转化为 62 进制(10 个数字+26个小写字母+26个大写字母),但是发现插入数据库报了索引插入重复。
展示
创建测试表
CREATE TABLE `test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`short_url` varchar(255) NOT NULL COMMENT '测试',
PRIMARY KEY (`id`),
UNIQUE KEY `short_url` (`short_url`)
) ENGINE=InnoDB AUTO_INCREMENT
show processlist
show processlist 用来查看 MySQL 正在运行的线程,如果使用 root 账号可以看到所有用户的线程或者只能看到所使用账号自己的线程,当然如果该用户被赋予了 Process 权限也是可以查看所有用户的线程的。
命令使用展示:
mysql> show processlist;
+-----+------+-----------+------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | S
今天要查询一个根据手机号返回用户的姓名,但是想要的 SQL 查询的结果的顺序和 in 后面数组里手机号顺序一样,使用 order by field(phone,111,222)
select name,phone from users where phone in
(18800000000,18800000000001) order by field(phone, 18800000000,18800000000001)
数据库优化有哪些?分别需要注意什么?
数据库设计
尽可能地使用最有效(最小)的数据类型
tinyint(1Byte)
smallint(2Byte)
mediumint(3Byte)
int(4Byte)
bigint(8Byte)
bad case:int(1)/int(11)
不要将数字存储为字符串,字符转化为数字,用int存储ip而非char(15)
优先使用enum或set,sex enum (‘F’, ‘M’)
避免使用NULL字段
NULL字段很难查询优化
NULL字段的索引需要额外空间
NULL字段的复合索引无效
bad case:`name` char(32) default
事情起因
有个同事需要一个管理系统,需要管理一些图片什么的,我就想着让他用我写的这套系统,然后就想着把代码和库复制一份出来给他用就可以了,然后我顺便可以把一些需要写到配置里的东西提炼下,让这套系统成为一个可复制部署的 CMS 系统。
实操删库过程
第一步
很熟练的把代码复制一份,nginx 配置复制并修改一份。
第二步:删库
登陆数据库
新建库、切到新建库
删库:因为我部署这个博客系统的时候有把初始化数据库的 sql 文件放到服务器上,我看了下还在。然后直接source init.sql。
3步完成之后,有种莫名的感觉涌上心头,然后打开我的博客,发现里面数据已经空了。。其实我这里使用了Ph
MySQL修改表的存储引擎有三种方式
alter table
该方式需要执行很长时间
mysql> alter table mytable engine=InnoDB;
导入导出
使用mysqldump导出表,修改导出文件里的create table后面表的名称。
创建新的表。
mysqldump导出的表里会包含drop table,所以要注意!删除该句。防止数据丢失
创建和查询
mysql> create table new_table_name like table_name;
mysql> alter table new_table_name engin