三、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里面一切皆文件,我们在数据库里面创建的数据库和表都是以文件的形式存储于机器里面

root@(none) 15:41  mysql>create database sanchuang;
Query OK, 1 row affected (0.01 sec)

root@(none) 15:41  mysql>show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sanchuang          |
| student            |
| sys                |
+--------------------+
6 rows in set (0.01 sec)

root@(none) 15:41  mysql>use sanchuang;
Database changed
root@sanchuang 15:41  mysql>show tables;
Empty set (0.00 sec)

root@sanchuang 15:41  mysql>create table student(id int,name varchar(20));
Query OK, 0 rows affected (0.01 sec)

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

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

[root@localhost etc]# cd /data/mysql/
[root@localhost mysql]# ls
auto.cnf         ib_buffer_pool  localhost.localdomain.err  performance_schema  server-key.pem
ca-key.pem       ibdata1         localhost.localdomain.pid  private_key.pem     student
ca.pem           ib_logfile0     mysql                      public_key.pem      sys
client-cert.pem  ib_logfile1     mysql.sock                 sanchuang
client-key.pem   ibtmp1          mysql.sock.lock            server-cert.pem
[root@localhost mysql]# cd sanchuang/
[root@localhost sanchuang]# ls
db.opt
[root@localhost sanchuang]# ls
db.opt  student.frm  student.ibd
[root@localhost sanchuang]# pwd
/data/mysql/sanchuang
[root@localhost sanchuang]# 

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

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

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

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

还有哪些存储引擎?

 InnoDB、MyISAM、Memory

myisam

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

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

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

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

root@sanchuang 15:50  mysql>show tables;
+---------------------+
| Tables_in_sanchuang |
+---------------------+
| student             |
+---------------------+
1 row in set (0.00 sec)

示例:查看student表的结构:

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

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

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

示例:查看insert帮助文档

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

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

root@sanchuang 16:00  mysql>help insert
Name: 'INSERT'
Description:
Syntax:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [(col_name [, col_name] ...)]
    {VALUES | VALUE} (value_list) [, (value_list)] ...
    [ON DUPLICATE KEY UPDATE assignment_list]

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    SET assignment_list
    [ON DUPLICATE KEY UPDATE assignment_list]

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [(col_name [, col_name] ...)]
    SELECT ...
    [ON DUPLICATE KEY UPDATE assignment_list]

value:
    {expr | DEFAULT}

value_list:
    value [, value] ...

assignment:
    col_name = value

assignment_list:
    assignment [, assignment] ...

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

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

root@sanchuang 16:05  mysql>insert into student(id,name) value(1,"cali");
Query OK, 1 row affected (0.00 sec)

root@sanchuang 16:10  mysql>select * from student;
+------+------+
| id   | name |
+------+------+
|    1 | cali |
+------+------+
1 row in set (0.00 sec)

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

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

新建一个数据库

root@(none) 09:17  mysql>create database wangsh;
Query OK, 1 row affected (0.00 sec)

root@(none) 09:21  mysql>show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sanchuang          |
| student            |
| sys                |
| wangsh             |
+--------------------+
7 rows in set (0.00 sec)

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

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

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

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

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

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

[root@localhost /]# cd /data/mysql/
[root@localhost mysql]# ls
auto.cnf         ib_buffer_pool  localhost.localdomain.err  performance_schema  server-key.pem
ca-key.pem       ibdata1         localhost.localdomain.pid  private_key.pem     student
ca.pem           ib_logfile0     mysql                      public_key.pem      sys
client-cert.pem  ib_logfile1     mysql.sock                 sanchuang           wangsh
client-key.pem   ibtmp1          mysql.sock.lock            server-cert.pem
[root@localhost mysql]# cd wangsh/
[root@localhost wangsh]# ls
db.opt
[root@localhost wangsh]# cat db.opt 
default-character-set=utf8
default-collation=utf8_general_ci

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

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

root@(none) 09:29  mysql>show variables;
root@(none) 09:30  mysql>show variables like "%character%";
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | utf8                             |
| character_set_connection | utf8                             |
| character_set_database   | utf8                             |
| character_set_filesystem | binary                           |
| character_set_results    | utf8                             |
| character_set_server     | utf8                             |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.01 sec)

system  -->mysql系统

server  --> linux系统

character_set_database  -->数据里的字符集

server  -->system  --》database

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

示例:删除数据库 drop database

root@(none) 21:59  mysql>drop database wangsh;
Query OK, 0 rows affected (0.01 sec)

root@(none) 21:59  mysql>show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sanchuang          |
| student            |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

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

[root@localhost mysql]# cd /data/mysql/
[root@localhost mysql]# ls | grep wangsh
[root@localhost mysql]# 

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

库和表的关系

        库里有表,库里面包含表

        库:文件夹

        表:文件

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

新建表操作

root@wangsh 22:08  mysql>use sanchuang;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
root@sanchuang 22:08  mysql>create table wangsh.table1(id int,name varchar(20));
Query OK, 0 rows affected (0.01 sec)

root@sanchuang 22:09  mysql>show tables in wangsh;
+------------------+
| Tables_in_wangsh |
+------------------+
| table1           |
+------------------+
1 row in set (0.00 sec)

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

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

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

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

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

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

root@sanchuang 22:12  mysql>create table if not exists wangsh.table1(id int,name varchar(20));
Query OK, 0 rows affected, 1 warning (0.00 sec)

root@sanchuang 22:12  mysql>show warnings;
+-------+------+-------------------------------+
| Level | Code | Message                       |
+-------+------+-------------------------------+
| Note  | 1050 | Table 'table1' already exists |
+-------+------+-------------------------------+
1 row in set (0.00 sec)

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

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

root@sanchuang 22:41  mysql>create table t2(id int(4) not null primary key, name varchar(10) not null);
Query OK, 0 rows affected (0.01 sec)

root@sanchuang 22:41  mysql>desc t2
    -> ;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(4)      | NO   | PRI | NULL    |       |
| name  | varchar(10) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

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

查看表结构:

方法1: show create table t2;

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

方法2: desc t2;

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

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

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

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

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

字符集的继承问题:

                                                          库  --  表   -- 字段 

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

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

关系型数据库

        Mysql,oracle, MSSQL,postgresql

非关系型数据库

        redis,mongDB,TIDB,timeseriesDB

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

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

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

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

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

猜你喜欢

转载自blog.csdn.net/qq_48391148/article/details/125873969