MySQL的库与表

这里声明一下哈,既然是学习笔记,难免会有写错或者个人理解不到位的地方,如果有大神会看的话还望批评指正。

今天写写对于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语句来实现,避免操作风险。

今天就先写这么多吧,发现写这玩意还挺耗时间的。。。有不对的地方欢迎大家指正。























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值