目录
MySql是什么?
mysql是关系型数据库,window系统上的可视化软件为navicat。建议使用可视化软件,方便管理数据库。
以下内容会涉及到行格式、存储引擎内容,先放两个比较容易看懂的关于行格式和存储引擎的小内容,稍微看一下即可,也会附上一些总结性的博客。
先行的知识
存储引擎
存储引擎一共有四个:MYISAM、Memory、InnoDB、Archive,一般使用InnoDB,MYISAM次之,推荐博客:Mysql 存储引擎的区别和比较。
功能 | MYISAM | Memory | InnoDB | Archive |
存储限制 | 256TB | RAM | 64TB | None |
支持事务 | Y | |||
支持全文索引 | Y | |||
支持数索引 | Y | Y | Y | |
支持哈希索引 | Y | |||
支持数据缓存 | N/A | Y | ||
支持外键 | Y | |||
特点 | 高效、主要插入和查询 | 临时表、速度快、安全性不高 | 安全、并发、最常使用 | 适合存储归档、如日志 |
行格式
对于行格式谈论的比较多的是InnoDB的行格式:Compact
、Redundant
、Dynamic
和Compressed
,比较常用的是Dynamic,也是MySql5.7默认的行格式。
Dynamic、Compact、Compressed处理行溢出的方式不同,当行溢出时,Compact只存储前768个字节,Dynamic将行溢出部分数据存到新的页面并在原数据末尾添加一个这个页面的地址,Compressed把Dynamic存到新页面的数据进行了压缩。有兴趣可以看这个博文,写的不错。
MySql基本操作
数据库基本操作为增删改查。对于“增删改”可视化软件操作相对简单。查,一般来理解是对数据表中某些数据项进行查找和过滤,可视化软件和命令行相似,都需要比较复杂的语句,我们后续详说。
下面会按照对数据库、数据表、数据项三部分来进行详细解释。以下内容分为可视化软件,和命令行两大部分,分别进行增删改查的操作。命令行部分过一下就可以,但还是要知道大概有哪些内容。
可视化软件
数据库
选定数据库右键,你可以看到对数据库的一些操作,如下图。增(新建)删(删除)改(编辑)。
如果是多方操作数据库的时候,你需要时常使用“刷新”功能来观察数据库的最新变化(比如你通过命令行操作完数据库之后,在这里刷新一下数据库才可以看到数据库的最新状态)。双击数据库可以看到它的表、事务等内容。
数据表
如果是对表整体进行操作,直接在表处右键就可以对表的整体进行操作,如下图。增(新建)删(删除、清空)改(设计)查(打开)。
在设计表和新建表的时候,我们主要用到字段和选项。字段,顾名思义可以帮我们对数据表的字段进行设计,而选项可以对整个表的属性进行设计,比如存储引擎、行格式、字符集等。
建议谨慎修改表的字符集、储引擎、行格式,因为它们会影响数据在内存中的存储状态,相当于将整个表是所有数据项都修改了。修改速度慢、有可能会造成大量undo日志,并且可能会造成数据不一致的问题。
数据项
对于表中项的操作:下图点击项即可修改。+为增,-为删,点击表中的项即可修改。查有点复杂,之后一起说。
命令行
如果不使用可视化软件,直接操作命令行,在写数据库的代码时候,建议关键字大写,其他一般为小写。
基本操作
1、 启动mySql:进入mySql安装目录下的bin文件夹,输入
mysqld --console
2、连接mySql(使用root权限登录):
mysql -u root -p
使用root权限登录的原因是,我们在某些操作的时候需要root权限,非root权限无法操作。
3、输入密码,登录之后的命令行状态如下图。当命令行进入这个状态后,我们输入的所有语句,如果需要结束后面需要加上“;”
4、数据库、表、项的一些操作(详细见下)
5、关闭mySql连接:
exit
6、关闭mySql:
mysqladmin -uroot shutdown
数据库
1、增:CREATE DATABASE 数据库名,例:
CREATE DATABASE demoDB;
2、删:DROP DATABASE 数据库名,例
DROP DATABASE demoDB;
3、选择数据库:use数据库名,例
use demoDB;
查看数据库下有那些表,在选择数据库后:
show tables;
数据表
1、增。如果表不存在这个表则创建,每一行是对一个列的设置:包括 列名、数据类型、是否为空、是否自增或自减。列定义后最好指定主键,否则mySql会自己给数据表一个列作为主键,增加数据存储量。最后一行是数据表的设置:存储引擎、行格式、字符集等。注意,下面代码中的“`”不是单引号,是键盘上~下面的那个点。
注意,我们在这里构建数据表的时候,很多时候使用一个自增的数值作为主键。自增的性能比自减的性能要好,至于为什么?与mySql数据库的存储结构有关,作为基础,你只需要记住就可以,后续我们会详细解释。
CREATE TABLE IF NOT EXISTS `runoob_tb1`(
`id` INT UNSIGNED AUTO_INCREMENT,
`title` VARCHAR(100) NOT NULL,
PRIMARY KEY(`id`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
如果是创建与已知表结构相同的表,代码及示例如下。
CREATE TABLE 新表名 LIKE 已知表名;
CREATE TABLE demoTmp LIKE demoDB;
2、删。删除这个表:DROP DATABASE 数据表名,例
DROP DATABASE demoDB;
删除表中的所有数据:truncate table 原表,例
truncate table demoDB;
3、查:查看当前数据表中有哪些列
show columns from 表名;
查看表的设计:
SHOW CREATE TABLE 表名;
查看表的数据量:
SELECT COUNT(1) FROM 表名;
4、改:建议谨慎修改表的字符集、储引擎、行格式,因为它们会影响数据在内存中的存储状态,相当于将整个表是所有数据项都修改了。修改速度慢、有可能会造成大量undo日志、列值存储在页外等结果。
- 修改表的列(字段):alter table 表名 change 现有字段名称 修改后字段名称 数据类型,例
alter table runoob_tb1 change id r_id int(10) UNSIGNED AUTO_INCREMENT
- 修改表的默认字符集:ALTER TABLE 表名 DEFAULT CHARACTER SET 字符集名
- 修改表的默认字符集和所有列的字符集:ALTER TABLE 表名 CONVERT TO CHARACTER SET 字符集名
- 修改表的存储引擎:ALTER TABLE 表名 ENGINE=存储引擎名,对于比较大的表,直接更改存储引擎效率比较低,可以先将表中数据复制出来,然后清空本表的数据,更改原表的存储引擎,将复制表中的数据放到原表,最后删除复制表。
create table 复制表 like原表;
insert into 复制表 select * from 原表;
truncate table 原表;
alter table 原表 engine=新存储引擎名称;
insert into 原表 select * from 复制表;
drop table 复制表;
- 修改表的行格式:ALTER TABLE 表名 row_format=行格式名
数据项
1、增,在表中增加一条数据项:INSERT INTO 表( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );
2、删:DELETE FROM 表名 WHERE [条件语句],e.g.
DELETE FROM runoob_tb1 WHERE id=’10001’
3、改:UPDATE table_name SET field1=new-value1, field2=new-value2 WHERE [条件语句]
4、查:LIMIT 属性来设定返回的记录数,OFFSET指定SELECT语句开始查询的数据偏移量,默认情况下偏移量为0。
SELECT 列1, 列2
FROM 表1,表2 WHERE [条件语句]
[LIMIT N][ OFFSET M]
例如:
SELECT * FROM `user` LIMIT 3 OFFSET 2