• 三、mysql 存储引擎-建库建表操作


    目录

    知识点1:mysql里面的数据库和表都以文件形式存储在linux系统里面

    我们在mysql里面创建数据库和表以后,也会生成对应的目录和文件

    知识点2: 存储引擎是什么?

     innodb 是MYSQL 的存储引擎(默认的存储引擎)

    还有哪些存储引擎?

    示例:查看数据库里有哪些表:

    示例:查看student表的结构:

    示例:查看insert帮助文档

    示例:向刚创建的表里面插入数据

    知识点3:新建数据库操作

    新建一个数据库

    查看刚才创建的数据库的字符集结构

    方法1:直接输入语句  show create database wangsh;

    方法2:进入新建库对应的文件夹里面查看db.opt文件的内容也可以查看数据库的字符集内容

    show variables;会将所有的变量都显示出来

    示例:删除数据库 drop database

    将数据库删除以后,linux系统里面对应数据库的那个目录也会删除

    库和表的关系

    新建表操作

    当一个表存在时,我们再次新建这个表名会报错

    但是我们可以加 if not exists 来解决这个问题

    主键:表里面的一列或多列不能重复

    查看表结构:

    方法1: show create table t2;

    方法2: desc t2;

     存储引擎和字符集的捆绑问题

    字符集的继承问题:

    关系型数据库

    非关系型数据库

    结构化数据和非结构化数据


    知识点1:mysql里面的数据库和表都以文件形式存储在linux系统里面

    linux里面一切皆文件,我们在数据库里面创建的数据库和表都是以文件的形式存储于机器里面

    1. root@(none) 15:41 mysql>create database sanchuang;
    2. Query OK, 1 row affected (0.01 sec)
    3. root@(none) 15:41 mysql>show databases;
    4. +--------------------+
    5. | Database |
    6. +--------------------+
    7. | information_schema |
    8. | mysql |
    9. | performance_schema |
    10. | sanchuang |
    11. | student |
    12. | sys |
    13. +--------------------+
    14. 6 rows in set (0.01 sec)
    15. root@(none) 15:41 mysql>use sanchuang;
    16. Database changed
    17. root@sanchuang 15:41 mysql>show tables;
    18. Empty set (0.00 sec)
    19. root@sanchuang 15:41 mysql>create table student(id int,name varchar(20));
    20. Query OK, 0 rows affected (0.01 sec)

    ################################################### 

    我们在mysql里面创建数据库和表以后,也会生成对应的目录和文件

    1. [root@localhost etc]# cd /data/mysql/
    2. [root@localhost mysql]# ls
    3. auto.cnf ib_buffer_pool localhost.localdomain.err performance_schema server-key.pem
    4. ca-key.pem ibdata1 localhost.localdomain.pid private_key.pem student
    5. ca.pem ib_logfile0 mysql public_key.pem sys
    6. client-cert.pem ib_logfile1 mysql.sock sanchuang
    7. client-key.pem ibtmp1 mysql.sock.lock server-cert.pem
    8. [root@localhost mysql]# cd sanchuang/
    9. [root@localhost sanchuang]# ls
    10. db.opt
    11. [root@localhost sanchuang]# ls
    12. db.opt student.frm student.ibd
    13. [root@localhost sanchuang]# pwd
    14. /data/mysql/sanchuang
    15. [root@localhost sanchuang]#

    ################################################### 

    知识点2: 存储引擎是什么?

    数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能,许多数据库管理系统都支持多种不同的存储引擎。MySQL 的核心就是存储引擎。

     innodb 是MYSQL 的存储引擎(默认的存储引擎)

    还有哪些存储引擎?

     InnoDB、MyISAM、Memory

    myisam

    student.frm文件  ---》存储表结构的  frame

    student.ibd文件   ---》 innodb data 和index

    ###################################################

    示例:查看数据库里有哪些表:

    1. root@sanchuang 15:50 mysql>show tables;
    2. +---------------------+
    3. | Tables_in_sanchuang |
    4. +---------------------+
    5. | student |
    6. +---------------------+
    7. 1 row in set (0.00 sec)

    示例:查看student表的结构:

    1. root@sanchuang 16:00 mysql>desc student;
    2. +-------+-------------+------+-----+---------+-------+
    3. | Field | Type | Null | Key | Default | Extra |
    4. +-------+-------------+------+-----+---------+-------+
    5. | id | int(11) | YES | | NULL | |
    6. | name | varchar(20) | YES | | NULL | |
    7. +-------+-------------+------+-----+---------+-------+
    8. 2 rows in set (0.00 sec)

     当我们不知道某个命令的具体语法时候可以使用help来查看语法规则

    ################################################### 

    示例:查看insert帮助文档

    []里面的代表可接可不接

    {}里面的表示可以选择一个

    1. root@sanchuang 16:00 mysql>help insert
    2. Name: 'INSERT'
    3. Description:
    4. Syntax:
    5. INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    6. [INTO] tbl_name
    7. [PARTITION (partition_name [, partition_name] ...)]
    8. [(col_name [, col_name] ...)]
    9. {VALUES | VALUE} (value_list) [, (value_list)] ...
    10. [ON DUPLICATE KEY UPDATE assignment_list]
    11. INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    12. [INTO] tbl_name
    13. [PARTITION (partition_name [, partition_name] ...)]
    14. SET assignment_list
    15. [ON DUPLICATE KEY UPDATE assignment_list]
    16. INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    17. [INTO] tbl_name
    18. [PARTITION (partition_name [, partition_name] ...)]
    19. [(col_name [, col_name] ...)]
    20. SELECT ...
    21. [ON DUPLICATE KEY UPDATE assignment_list]
    22. value:
    23. {expr | DEFAULT}
    24. value_list:
    25. value [, value] ...
    26. assignment:
    27. col_name = value
    28. assignment_list:
    29. assignment [, assignment] ...

    ################################################### 

    示例:向刚创建的表里面插入数据

    1. root@sanchuang 16:05 mysql>insert into student(id,name) value(1,"cali");
    2. Query OK, 1 row affected (0.00 sec)
    3. root@sanchuang 16:10 mysql>select * from student;
    4. +------+------+
    5. | id | name |
    6. +------+------+
    7. | 1 | cali |
    8. +------+------+
    9. 1 row in set (0.00 sec)

    ################################################### 

    知识点3:新建数据库操作

    新建一个数据库

    1. root@(none) 09:17 mysql>create database wangsh;
    2. Query OK, 1 row affected (0.00 sec)
    3. root@(none) 09:21 mysql>show databases;
    4. +--------------------+
    5. | Database |
    6. +--------------------+
    7. | information_schema |
    8. | mysql |
    9. | performance_schema |
    10. | sanchuang |
    11. | student |
    12. | sys |
    13. | wangsh |
    14. +--------------------+
    15. 7 rows in set (0.00 sec)

    ################################################### 

    查看刚才创建的数据库的字符集结构

    方法1:直接输入语句  show create database wangsh;

    1. root@(none) 09:22 mysql>show create database wangsh;
    2. +----------+-----------------------------------------------------------------+
    3. | Database | Create Database |
    4. +----------+-----------------------------------------------------------------+
    5. | wangsh | CREATE DATABASE `wangsh` /*!40100 DEFAULT CHARACTER SET utf8 */ |
    6. +----------+-----------------------------------------------------------------+
    7. 1 row in set (0.00 sec)

    ################################################### 

    方法2:进入新建库对应的文件夹里面查看db.opt文件的内容也可以查看数据库的字符集内容

    1. [root@localhost /]# cd /data/mysql/
    2. [root@localhost mysql]# ls
    3. auto.cnf ib_buffer_pool localhost.localdomain.err performance_schema server-key.pem
    4. ca-key.pem ibdata1 localhost.localdomain.pid private_key.pem student
    5. ca.pem ib_logfile0 mysql public_key.pem sys
    6. client-cert.pem ib_logfile1 mysql.sock sanchuang wangsh
    7. client-key.pem ibtmp1 mysql.sock.lock server-cert.pem
    8. [root@localhost mysql]# cd wangsh/
    9. [root@localhost wangsh]# ls
    10. db.opt
    11. [root@localhost wangsh]# cat db.opt
    12. default-character-set=utf8
    13. default-collation=utf8_general_ci

    ################################################### 

    show variables;会将所有的变量都显示出来

    root@(none) 09:29  mysql>show variables;
    
    1. root@(none) 09:30 mysql>show variables like "%character%";
    2. +--------------------------+----------------------------------+
    3. | Variable_name | Value |
    4. +--------------------------+----------------------------------+
    5. | character_set_client | utf8 |
    6. | character_set_connection | utf8 |
    7. | character_set_database | utf8 |
    8. | character_set_filesystem | binary |
    9. | character_set_results | utf8 |
    10. | character_set_server | utf8 |
    11. | character_set_system | utf8 |
    12. | character_sets_dir | /usr/local/mysql/share/charsets/ |
    13. +--------------------------+----------------------------------+
    14. 8 rows in set (0.01 sec)

    system  -->mysql系统

    server  --> linux系统

    character_set_database  -->数据里的字符集

    server  -->system  --》database

    ################################################### 

    示例:删除数据库 drop database

    1. root@(none) 21:59 mysql>drop database wangsh;
    2. Query OK, 0 rows affected (0.01 sec)
    3. root@(none) 21:59 mysql>show databases;
    4. +--------------------+
    5. | Database |
    6. +--------------------+
    7. | information_schema |
    8. | mysql |
    9. | performance_schema |
    10. | sanchuang |
    11. | student |
    12. | sys |
    13. +--------------------+
    14. 6 rows in set (0.00 sec)

    将数据库删除以后,linux系统里面对应数据库的那个目录也会删除

    1. [root@localhost mysql]# cd /data/mysql/
    2. [root@localhost mysql]# ls | grep wangsh
    3. [root@localhost mysql]#

    ################################################### 

    库和表的关系

            库里有表,库里面包含表

            库:文件夹

            表:文件

    ################################################### 

    新建表操作

    1. root@wangsh 22:08 mysql>use sanchuang;
    2. Reading table information for completion of table and column names
    3. You can turn off this feature to get a quicker startup with -A
    4. Database changed
    5. root@sanchuang 22:08 mysql>create table wangsh.table1(id int,name varchar(20));
    6. Query OK, 0 rows affected (0.01 sec)
    7. root@sanchuang 22:09 mysql>show tables in wangsh;
    8. +------------------+
    9. | Tables_in_wangsh |
    10. +------------------+
    11. | table1 |
    12. +------------------+
    13. 1 row in set (0.00 sec)

    ################################################### 

    当一个表存在时,我们再次新建这个表名会报错

    1. root@sanchuang 22:09 mysql>create table wangsh.table1(id int,name varchar(20));
    2. ERROR 1050 (42S01): Table 'table1' already exists

    但是我们可以加 if not exists 来解决这个问题

    如果表已经存在,那么不报错,不存在则新建

    有一条警告,可以用show warnings;来查看

    1. root@sanchuang 22:12 mysql>create table if not exists wangsh.table1(id int,name varchar(20));
    2. Query OK, 0 rows affected, 1 warning (0.00 sec)
    3. root@sanchuang 22:12 mysql>show warnings;
    4. +-------+------+-------------------------------+
    5. | Level | Code | Message |
    6. +-------+------+-------------------------------+
    7. | Note | 1050 | Table 'table1' already exists |
    8. +-------+------+-------------------------------+
    9. 1 row in set (0.00 sec)

    ################################################### 

    主键:表里面的一列或多列不能重复

    1. root@sanchuang 22:41 mysql>create table t2(id int(4) not null primary key, name varchar(10) not null);
    2. Query OK, 0 rows affected (0.01 sec)
    3. root@sanchuang 22:41 mysql>desc t2
    4. -> ;
    5. +-------+-------------+------+-----+---------+-------+
    6. | Field | Type | Null | Key | Default | Extra |
    7. +-------+-------------+------+-----+---------+-------+
    8. | id | int(4) | NO | PRI | NULL | |
    9. | name | varchar(10) | NO | | NULL | |
    10. +-------+-------------+------+-----+---------+-------+
    11. 2 rows in set (0.01 sec)

    ################################################### 

    查看表结构:

    方法1: show create table t2;

    1. root@sanchuang 22:44 mysql>show create table t2;
    2. +-------+--------------------------------------------------------------------------------------------------------------------------------------+
    3. | Table | Create Table |
    4. +-------+--------------------------------------------------------------------------------------------------------------------------------------+
    5. | t2 | CREATE TABLE `t2` (
    6. `id` int(4) NOT NULL,
    7. `name` varchar(10) NOT NULL,
    8. PRIMARY KEY (`id`)
    9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
    10. +-------+--------------------------------------------------------------------------------------------------------------------------------------+
    11. 1 row in set (0.00 sec)

    方法2: desc t2;

    1. root@sanchuang 22:46 mysql>desc t2;
    2. +-------+-------------+------+-----+---------+-------+
    3. | Field | Type | Null | Key | Default | Extra |
    4. +-------+-------------+------+-----+---------+-------+
    5. | id | int(4) | NO | PRI | NULL | |
    6. | name | varchar(10) | NO | | NULL | |
    7. +-------+-------------+------+-----+---------+-------+
    8. 2 rows in set (0.00 sec)

    ################################################### 

     存储引擎和字符集的捆绑问题

    字符集可以和库捆绑,也可以和表捆绑,但是存储引擎和表捆绑的,不是和库捆绑,因为库是一个文件夹,而表示文件,是存放在磁盘上面的

    ################################################### 

    字符集的继承问题:

                                                              库  --  表   -- 字段 

            如果不给字段,表指定字符集的话,它会自动继承,字段继承表,表继承库,如果指定则使用指定的字符集。

    ################################################### 

    关系型数据库

            Mysql,oracle, MSSQL,postgresql

    非关系型数据库

            redis,mongDB,TIDB,timeseriesDB

            非关系型数据库一般是 KEY:VALUE 键值对来存储,例如redis

    ################################################### 

    结构化数据和非结构化数据

            结构化数据一般是指关系型数据库表示和存储,可以用二维表来逻辑表达实现的数据

            非结构化数据顾名思义,就是没有固定结构的数据,包括所有格式的办公文档,文本,图片,XML,HTML,各类报表,等都属于非结构化数据,对于这类数据,我们一般直接整体进行存储,而且一般存储为二进制的数据格式。

  • 相关阅读:
    2022-07-30 面试题:Vue中的data为什么必须是一个函数而非对象
    当我们写下一个 int a 后计算机发生了什么?
    【18】c++设计模式——>适配器模式
    linux查看服务器内核CUP版本相关命令
    C# .NET 6 使用WorkFlow Core 创建工作审批流
    使 DAO 保持粘性的四个因素
    Remix 开发小技巧(五)
    vue路由(十一)vue路由: 判断是否登录,未登录跳转到登录页
    基于k-mean算法的医学图像分割matlab仿真
    aardio增加窗口透明度函数
  • 原文地址:https://blog.csdn.net/qq_48391148/article/details/125873969