这里声明一下哈,既然是学习笔记,难免会有写错或者个人理解不到位的地方,如果有大神会看的话还望批评指正。
今天写写对于MySQL的库与表一些学习心得。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一、数据库
对了,学习MySQL需要注意下自己使用的版本,每个版本的特性可能都不一样,我安装的是5.7.16的版本。该版本初始化时候会自动建立4个数据库:
information_schema数据库:记录用户、表、视图等元数据信息,类似与oracle的数据字典,对这个库只能做查询操作。而且这个库是由MySQL实例构建维护的一个虚拟库,数据目录下并不存在它的物理文件。
performance_schema数据库:MySQL服务的性能指标库,记录着整个数据库服务性能相关的数据,类似与oracle的系统v$视图。
mysql数据库:记录着用户权限、日志等信息。
sys数据库:5.7新增的数据库,本身并不存储性能数据,提供一系列的视图、过程与函数,查看performance_schema数据库中记录的性能数据,方便DBA分析诊断数据库的性能问题。
MySQL的database与schema其实是同一个概念,逻辑上看,MySQL的数据库类似于oracle数据库中的schema,不同的database下可以存在同名的数据对象。
MySQL的数据库就是数据目录下的一个子目录,以下我们通过两种方式创建数据库来体会一下:
1、sql语句创建数据库
mysql -uroot -p111111 #连接数据库
create database csh; #创建数据库
create schema test; #创建数据库(上面讲过了database跟schema是同一个概念,别忘了哦)
不信咱来看看结果是不是创建了两个数据库:
[root@localhost][(none)]> show databases;
+------------------------------+
| Database |
+------------------------------+
| information_schema |
| csh |
| mysql |
| performance_schema |
| sys |
| test |
+------------------------------+
2、操作系统层面创建数据库
cd /opt/mysql/data #进入数据目录
mkdir testdb #创建目录
mysql -uroot -p111111 #连接数据库
验证一下是否真的创建了一个数据库:
[root@localhost][(none)]> show databases like 'testdb';
+------------------------------+
| Database (testdb) |
+------------------------------+
| testdb |
+------------------------------+
通过sql语句新创建的数据库目录下,会生成一个db.opt文件,其中指定了该数据库的字符集相关的信息
[root@ppcdb test]# cat db.opt
default-character-set=utf8mb4 #继承character_set_database参数
default-collation=utf8mb4_general_ci #继承collation_database参数(这两个参数就是搭建时指定参数中的一部分哦)
对于操作系统层创建的数据库,咱最好也给它指定一下字符集,将这两行写入db.opt文件中,但是怎么查看字符集呢?
3、查看数据库的字符集
show create database csh; #查看csh数据库的创建语句,会显示character set;
select * from information_schema.schemata; #可查看所有数据库的字符集相关信息
4、使用数据库
use csh; #使用csh数据库
select database(); #查看当前使用的数据库
5、删除数据库(谨慎操作)
通过sql语句删除:
drop database test; #删除test数据库
系统层面删除
cd /opt/mysql/data #进入数据路径
rm -rf testdb #删除testdb数据库
二、表
表是关系型数据库的核心,用于存储数据,接下来建表开始我们数据库的旅程:
1、建表有太多太多的选项了,我们可以使用help命令来查看帮助文档
help create table; #查看建表语句的帮助文档
help alter table; #查看修改表语句的帮助文档
2、创建表
create table test1 (id int,name varchar(8)); #创建一张名为test1的表
3、修改表结构
增加字段
alter table table_name add (col_name col_type , ...);
删除字段
alter table table_name drop col_name;
修改字段长度有两种方式(注意:mysql的字符类型定义的长度为字符个数,而不是字节个数):
alter table table_name change col_name new_col new_type; #该方式可同时修改列名
alter table table_name modify col_name new_type;
mysql还支持多种类型同时变更哦(由于Innodb的表对象每次结构变更都相当于重建,这样可节省操作)
alter table table_name add col_name col_type,drop col_name,modify col_name new_type;
4、删除表(谨慎操作)
通过sql语句删除
drop table table_name;
操作系统层面删除:
如果表采用的是MyISAM存储引擎,那么可以进行直接删除
cd /opt/mysql/data/database_name #进入数据库路径
rm -rf table_name.* #删除表的物理文件
如果表采用的是Innodb存储引擎的话,分两种情况
采用的是共享表空间存储方式:
不可以在操作系统层删除表
采用的是独立表空间存储方式:
参考MyISAM表的操作。但是Innodb的表会有一些元数据信息存储于数据字典中,这样操作不会更新数据字典存在隐患。
5、表重命名(有意思的是这玩意支持跨库移动。。。)
rename table database_name.table_name to new_database_name.new_table_name;
当然,以上在操作系统层面建/删库或表重在说明原理,实际生活中最好所有的操作都通过sql语句来实现,避免操作风险。
今天就先写这么多吧,发现写这玩意还挺耗时间的。。。有不对的地方欢迎大家指正。