当前位置: 首页 > article >正文

【MySQL — 数据库基础】深入解析MySQL常用表操作

 


 


1. 查看所有表


在使用表操作时,我们需要先选中一个数据库 :

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| java113            |
| mysql              |
| performance_schema |
| sys                |
| test               |
| xiaolei            |
+--------------------+
7 rows in set (0.00 sec)

mysql> use test;
Database changed

选中一个数据库之后,查看当前数据库有哪些表: 

mysql> show tables;
Empty set (0.04 sec)

    解析: 


因为我们查看表时选中的数据库是刚刚创建好的,所以是空表 ;

set 在不同上下文有不同的含义:

1. 设置


面向对象,使用 get/set 方法;


2. 集合(指的是数学上的集合)


(1)无序(不是升序降序的那种有序,而是区分不同集合只看元素种类,不看元素顺序

(2)唯一(集合内无重复元素)

上述的 set 则表示集合的意思,在数据库中进行一些查询操作,就会得到一系列的结果数据,把这些结果数据称为 “结果集”。 


2. 创建表


    语法:  

CREATE TABLE table_name (
    column1 datatype [constraint],
    column2 datatype [constraint],
    ...
);
  • table_ name:指定表的名称。
  • column:定义列的名称。
  • datatype: 指定列的数据类型,常见的如INT,VARCHAR, DATE 等。
  • constraint: 可选项,用来定义列的约束,如 NOT NULL、PRIMARY KEY, AUTO_INCREMENT 等。

     示例      


  • (1)创建一个用户表,其中包含用户编号、用户名、密码、生日,并指定字符集为utf8mb4,排序规则为 utf8mb4_0900_ai_ci 
mysql> create table users (
    id bigint,
    name varchar(20) comment '用户名',
    password char(32) comment'密码是32位的md5值',
    birthday date comment'生日'
) CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
Query oK, o rows affected(0.01 sec)

    注释 : 



  • (2)  创建一个表并指定存储引擎为MyISAM
mysql> create table t_myisam (
    id bigint,
    name varchar(20) comment'用户名'
) engine = MyISAM;
Query ok, 0 rows affected (0.01 sec)

在关系型数据库中,一个表有哪些列,每个列叫什么名字,每个列使用什么类型,都是需要提前确定好的,后续往表里存储的数据,都要严格遵守上述类型的要求:

mysql> create table test(id int , name varchar(20));
Query OK, 0 rows affected (0.11 sec)

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test           |
+----------------+
1 row in set (0.01 sec)

3. 查看表结构


mysql> desc 表名;

这个表操作是查看指定表的详细情况,查看的表结构是查看有哪些列,每个列是什么情况,不能查看表里的内容;


 通过 desc 表名,查看到的就是类似于"文件详情"内容,这样的内容也称为"元数据"(Meta Data)

mysql> create table test(id int , name varchar(20));
Query OK, 0 rows affected (0.11 sec)

mysql> desc test;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.18 sec)

    解析表结构    



4. 删除表 


 语法:

mysql> DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [,tbl_name] ...

# TEMPORARY:表示临时表  tbl_name:将要删除的表名

说明 :

  • 删除表是一个危险操作,执行删除语句时一定要谨慎
  • 删除表成功后,磁盘上对应的数据文件也会被删除
  • 一次可以删除多个表,表与表之间用逗号隔开

 注意: 

  • 删表操作比删库操作更危险,进行该操作一定要慎重!
  • 虽然删库意味着把所有的表都删除了,但是删库可以第一时间发现问题,程序在操作数据库时,可以第一时间反馈问题;处理问题越及时,损失越小;
  • 但是删表操作造成的问题非常隐蔽,程序在使用数据库的时候,绝大部分的逻辑是可以正常运行的,但是得到的数据是否正确,是否靠谱,后续的业务流程是否正确就很难说了;
  • 删表操作只是删除一个数据库的其中一个表,不知道多久才会访问到这张表从而触发报错,程序猿很可能在很久之后才能发现问题,造成的损失难以估量;

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test           |
+----------------+
1 row in set (0.01 sec)

mysql> desc test;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.18 sec)

mysql> drop table test;
Query OK, 0 rows affected (0.38 sec)

mysql> show tables;
Empty set (0.06 sec)

5. 表操作实践 


创建一个store数据库,用来管理商店的商品、顾客和订单数据,这个数据库有以下三个表组成: 


 创建一个store数据库

mysql> create database store;
Query OK, 1 row affected (0.01 sec)

mysql> use store; # 使用新创建的 store 数据库
Database changed

创建商品、顾客和订单数据的表

mysql> create table goods(
    goods_id bigint comment '商品编号', 
    goods_name varchar(50) comment '商品名', 
    goods_unitprice decimal(12,2) comment'零售单价', 
    goods_costprice decimal(12,2) comment '成本价', 
    goods_category varchar(20) comment '商品类型', 
    goods_provider varchar(50) comment '供应商'
);
Query OK, 0 rows affected (0.06 sec)


mysql> desc goods;
+-----------------+---------------+------+-----+---------+-------+
| Field           | Type          | Null | Key | Default | Extra |
+-----------------+---------------+------+-----+---------+-------+
| goods_id        | bigint        | YES  |     | NULL    |       |
| goods_name      | varchar(50)   | YES  |     | NULL    |       |
| goods_unitprice | decimal(12,2) | YES  |     | NULL    |       |
| goods_costprice | decimal(12,2) | YES  |     | NULL    |       |
| goods_category  | varchar(20)   | YES  |     | NULL    |       |
| goods_provider  | varchar(50)   | YES  |     | NULL    |       |
+-----------------+---------------+------+-----+---------+-------+
6 rows in set (0.01 sec)


mysql> create table customer(
    customer_id bigint, 
    customer_name varchar(20), 
    customer_gender bool, 
    customer_phone_num varchar(20), 
    customer_email_address varchar(255), 
    customer_create_time datetime
);
Query OK, 0 rows affected (0.04 sec)


mysql> desc customer;
+------------------------+--------------+------+-----+---------+-------+
| Field                  | Type         | Null | Key | Default | Extra |
+------------------------+--------------+------+-----+---------+-------+
| customer_id            | bigint       | YES  |     | NULL    |       |
| customer_name          | varchar(20)  | YES  |     | NULL    |       |
| customer_gender        | tinyint(1)   | YES  |     | NULL    |       |
| customer_phone_num     | varchar(20)  | YES  |     | NULL    |       |
| customer_email_address | varchar(255) | YES  |     | NULL    |       |
| customer_create_time   | datetime     | YES  |     | NULL    |       |
+------------------------+--------------+------+-----+---------+-------+
6 rows in set (0.01 sec)



mysql> create table purchase(
    order_id varchar(32),
    customer_id bigint,
    goods_id bigint,
    nums int, 
    amount decimal(12, 2), 
    create_time datetime
);
Query OK, 0 rows affected (0.02 sec)


mysql> desc purchase;
+-------------+---------------+------+-----+---------+-------+
| Field       | Type          | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+-------+
| order_id    | varchar(32)   | YES  |     | NULL    |       |
| customer_id | bigint        | YES  |     | NULL    |       |
| goods_id    | bigint        | YES  |     | NULL    |       |
| nums        | int           | YES  |     | NULL    |       |
| amount      | decimal(12,2) | YES  |     | NULL    |       |
| create_time | datetime      | YES  |     | NULL    |       |
+-------------+---------------+------+-----+---------+-------+
6 rows in set (0.01 sec)


mysql> show tables;
+-----------------+
| Tables_in_store |
+-----------------+
| customer        |
| goods           |
| purchase        |
+-----------------+
3 rows in set (0.01 sec)

    补充     


 (1)使用 int 表示钱来增加运算效率     


注意:如果用 decimal 来表示钱,会出现存储空间大,运算速度慢的问题:


要改进这个问题,让价格运算能按照比较高效的方式来运算存储,同时又保证高精度运算,我们可以直接使用 int 来表示钱:

  • 使用小数表示,意思是单位是“元”,如果使用“分”或者“厘”来表示单位,就可以使用整数来表示;
  • 某个商品的价格是1块2毛5分,使用 int 可以表示为 125;
  • 但是有些场景要求更高精度,不方便单位换算,就还是用回 decimal。 

 


http://www.kler.cn/a/514674.html

相关文章:

  • jupyter notebook环境问题
  • 人工智能之深度学习_[4]-神经网络入门
  • MyBatis和JPA区别详解
  • C语言小项目——通讯录
  • 【Linux】环境变量
  • 【RAG落地利器】向量数据库Chroma入门教程
  • Servlet3 简单测试
  • 加强版第二十二章KTL光流法
  • priority_queue底层实现细节
  • 图片生成Prompt编写技巧
  • ASP.NET Blazor部署方式有哪些?
  • 让旅游更智能:基于AR的旅游导览应用解析
  • jupyter notebook环境问题
  • 爬虫基础之爬取某站视频
  • VIVO大数据面试题及参考答案
  • PID 控制算法(二):C 语言实现与应用
  • KT148A语音芯片一个mp3语音,有办法分成一段一段的吗
  • typescript 书写.d.ts文件
  • 【ubuntu 连接显示器无法显示】可以通过 ssh 连接 ubuntu 服务器正常使用,但服务器连接显示器没有输出
  • AI新玩法:Flux.1图像生成结合内网穿透远程生图的解决方案
  • win暂停更新设置
  • react上增加错误边界 当存在错误时 不会显示白屏
  • Spring 中 Bean 是什么?从类到 Bean 的核心概念解析
  • SpringBoot对于Spring的扩展
  • 图论 n 皇后问题
  • Hadoop特点和HDFS命令