首页 > 数据库 >python 之 mysql8 基础

python 之 mysql8 基础

时间:2023-07-11 19:55:05浏览次数:52  
标签:存储 NO python create 基础 mysql8 int table id

一、表操作

1、查看当前所在的库

> select database():
+------------+
| database() |
+------------+
| oldboy |
+------------+

2、use database 选择库

3、查看表

> show tables  查看有几个表

> show create table student;  查看创建表的过程

+---------+--------------------------------------------------------------------------------------+
| Table   | Create Table                                                                         |
+---------+--------------------------------------------------------------------------------------+
| student | CREATE TABLE `student` (                                                             |
|         |   `id` int NOT NULL AUTO_INCREMENT,                                                  |
|         |   `name` varchar(20) NOT NULL,                                                       |
|         |   `sex` varchar(2) NOT NULL,                                                         |
|         |   `hobby` varchar(50) DEFAULT NULL,                                                  |
|         |   PRIMARY KEY (`id`)                                                                 |
|         | ) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+---------+--------------------------------------------------------------------------------------+

> desc   查看表结构

4、创建表

create table t1(id int(11), name varchar(20), age int);

5、修改表名

alter table t1 rename tt1;

6、删除表

drop table tt1;

二、表记录操作

select 查看   insert 插入  update 更新  delete  删除

1、查看

select * from t1;
select id, name from t1;

2、增加数据

insert into tt1 values(1, 'kevin', 18),(2, 'tanke', 20), (3, 'json', 21);

# 只增加部分字段
> insert into tt1(id, name) values(4, 'malin'), (6, 'sd');

3、修改数据

update 表名 set 字段名='子端值' where 条件;

update tt1 set age='88' where name='kevin';

update tt1 set age='89' where name='kevin' and id=1;

update tt1 set name='aaa'; # 全表改,一定不能使用

4、删除数据

> delete from tt1 where id=4;

>delete from t1 where id =1 and name='';

三、存储引擎

1、存储引擎

MySQL的存储引擎是指MySQL数据库系统用于管理和组织数据存储的组件或模块。存储引擎负责处理数据的存储、检索、索引和事务处理等功能。MySQL支持多个存储引擎,每个存储引擎都有自己独特的特点和适用场景。

  1. InnoDB:MySQL5.6以后默认的事务性存储引擎。它提供了ACID(原子性、一致性、隔离性和持久性)事务支持和行级锁定。InnoDB适用于处理大量并发操作和保证数据完整性的应用程序。

  2. MyISAM:MySQL早期的存储引擎之一。它对于读密集型应用程序具有较好的性能,但不支持事务和行级锁定。MyISAM适用于非事务性的应用程序,例如博客、新闻网站等。

  3. Memory:也称为Heap存储引擎,将数据存储在内存中,提供了快速的数据访问速度。然而,数据在服务器重启后会丢失,因此适用于临时数据存储或缓存等场景。

  4. Archive:这个存储引擎用于存储大量的归档数据,对于插入和查询效率很高,但不支持更新和删除操作。Archive适用于日志记录、数据归档等场景。

  5. NDB Cluster:也称为MySQL Cluster存储引擎,提供了高可用性和分布式数据库功能。它适用于需要水平扩展和高可靠性的应用程序,如大规模的Web应用和实时系统。

show engines;  # 在mysql8中查看支持的11种引擎:

+--------------------+---------+----------------------------------------------------------------+--------------+--------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA     | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+--------+------------+
| ndbcluster         | NO      | Clustered, fault-tolerant tables                               | <null>       | <null> | <null>     |
| CSV                | YES     | CSV storage engine                                             | NO           | NO     | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO     | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO     | NO         |
| ndbinfo            | NO      | MySQL Cluster system information storage engine                | <null>       | <null> | <null>     |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO     | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | <null>       | <null> | <null>     |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO     | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO     | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES    | YES        |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO     | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+--------+------------+

2、验证前三种存储引擎产生的文件

create table t2(id int) engine=MyISAM;

mysql8中产生三个文件

  • t2.MYD  :这是MyISAM表的数据文件,包含表中的实际数据记录。
  • t2.MYI :这是MyISAM表的索引文件,包含用于加快数据检索的索引结构。 
  • t2_381.sdi:这是MyISAM表的源数据文件,它包含了表的结构定义和其他相关信息。

在mysql5.6 中产生三个文件

  • .frm: 这个文件存表结构
  • .MYD:这个文件存数据 data
  • .MYI: 这个文件存数据的索引 index >>> 类似于是书的目录 >>> 加快查询速度的 
create table t3(id int) engine=InnoDB;

mysql8中产生一个文件

  • t3.ibd :表示InnoDB表的数据文件,InnoDB将表的数据索引存储在单独的.ibd文件中。

在mysql5.6 中产生两个文件

  • .frm: 这个文件存表结构
  • .ibd: 这个文件存数据的索引和数据
create table t4(id int) engine=MEMORY;

mysql8中产生一个文件

  • t4_383.sdi

在mysql5.6 中产生一个文件

  • .frm: 这个文件存表结构

四、数据类型

1、整型

tinyint   smallint  mediumint  int    bigint

# 不同的类型存储的范围不一样

存储范围比较:
tinyint:1个字节------>8位------>2 **8----> 256----->0-255----->-128-127

smallint:  2个字节存储----->16位---->2 ** 16 ----> 65536----->0-65535---->-32768-32767

mediumint: 3个字节存储----->24位----->2 ** 24--->16777216-----> 0-16777215 ----> -8388608 - 8388607

int:  4个字节------>32位----->2 ** 32----> 21...---->

bigint: 8个字节----->64为----->2 ** 64---->

验证:

create table t5 (id tinyint);

> insert into t5 values(999);
(1264, "Out of range value for column 'id' at row 1")   # 在mysql8中会直接报错

create table t5 (id smallint);

> insert into t5  values(6666666);
(1264, "Out of range value for column 'id' at row 1")

结论:在mysql8中指定int的类型之后,数据超过范围会直接报错,而mysql5.6中会存储最大的范围数字

2、浮点型

float   double  decimal

float(255, 30); # 255表示的是存储的位数,30代表的是小数位数
double(255,30); # 255表示的是存储的位数,30代表的是小数位数
decimal(65, 30); # 65表示的是存储的位数,30代表的是小数位数。 decimal最大只能存65位

decimal(8, 2) # 表示的最大范围是:999999.99

三者的区别

create table t6(id float(255, 30));
create table t7(id double(255, 30));
create table t8(id decimal(65, 30)); 

插入数据
insert into t6 values(1.111111111111111111111111);

+--------------------+
| id |
+--------------------+
| 1.1111111640930176 |
+--------------------+

insert into t7 values(1.111111111111111111111111);

+--------------------+
| id                 |
+--------------------+
| 1.1111111111111112 |
+--------------------+

insert into t8 values(1.111111111111111111111111);

+----------------------------------+
| id                               |
+----------------------------------+
| 1.111111111111111111111111000000 |
+----------------------------------+

"""得出结论:精确度不一样, 生产环境推荐使用decimal """
decimal >>> double >>> float

3、字符串

char 和  varchar

char(4): 它是定长,那么他就存4位,如果没有超出4位,空格填充到4位,超出4位,报错或者,最大存4位
varchar(4):可变长的,不超出4位,有几位存几位,不会使用空格填充,超出4位,报错或者,最大存4位

验证

create table t9(id int, name char(4));
insert into t9 values(1, 'kevin');

create table t10(id int, name varchar(4));
insert into t10 values(1, 'kevin');

在mysql8中超出范围会直接报错  

如何查看严格模式
1. select @@sql_mode;
2. show variables like '%sql_mode%' # 模糊查询,变量中带有mode的

# 设置严格模式
1. 永久修改:需要改配置文件
2. 临时修改:
set global sql_mode='STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH';

在mysql8 中查看name字段的长度与mysql5.6有区别,看不到填充位数

> select char_length(name) from t10;

4、五种日期类型

DATE:用于存储日期值,格式为 'YYYY-MM-DD'。

TIME:用于存储时间值,格式为 'HH:MM:SS'。

DATETIME:用于存储日期和时间值,格式为 'YYYY-MM-DD HH:MM:SS'。

TIMESTAMP:也用于存储日期和时间值,格式为 'YYYY-MM-DD HH:MM:SS'。但是,TIMESTAMP 在MySQL中有特殊的行                           为,会自动转换为当前时区的时间,并在插入或更新时自动记录时间戳。

YEAR:用于存储年份值,格式为 'YYYY'。在MySQL 8中,YEAR 数据类型仅存储年份,不包含月份和日期。

创建表: 

> create table t11(id int,
                          -> reg_time datetime,
                          -> update_time date,
                          -> delete_time time,
                          -> birth year,
                          -> timetamp timestamp);

插入数据:

 INSERT INTO t11 VALUES (1, '2023-07-11 10:30:00', '2023-07-11', '10:30:00', 1990, CURRENT_TIMESTAMP);

CURRENT_TIMESTAMP 换成 NOW()也行

5、枚举类型

enum:多选一
create table t15 (id int, hobby enum('tangtou', 'hejiu', 'xijio', 'chouyan'));
insert into t15 values(1, 'tangtou');

+----+---------+
| id | hobby   |
+----+---------+
| 1  | tangtou |
+----+---------+

set:
多选多
create table t16 (id int, hobby set('tangtou', 'hejiu', 'xijio', 'chouyan'));

INSERT INTO t16 VALUES (1, 'tangtou,hejiu');

+----+---------------+
| id | hobby         |
+----+---------------+
| 1  | tangtou,hejiu |
+----+---------------+

五、整型中的数字含义

 

 

 

 

 

 

 

 

 

 

 

 

 

UPDATE user SET authentication_string = PASSWORD('Zjz5740') WHERE Host = 'localhost' AND User = 'root';

 

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Zjz5740';

 

 

 

在上述示例中,START TRANSACTION表示启动一个事务,COMMIT表示提交事务。在事务中,首先执行CREATE TABLE语句创建表,然后执行INSERT INTO语句插入数据,最后通过COMMIT提交事务。

如果创建表或插入数据的任何一步出现错误,您可以使用ROLLBACK语句回滚事务,使之前的操作不会对数据库产生影响。

标签:存储,NO,python,create,基础,mysql8,int,table,id
From: https://www.cnblogs.com/dgp-zjz/p/17543428.html

相关文章

  • Java扩展Nginx之三:基础配置项
    欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览经历了前面两篇的入门和编译源码之后,从本篇起,咱们用理论结合实战的方式进入系统的nginx-clojure学习之旅作为《Java扩展Nginx》系列的第三篇,本文会与大家一起了......
  • JAVA基础0711
    方法方法重载在同一个类中,方法名相同,参数列表不同。与返回值无关。参数列表不同:参数的个数不同。参数的对应的数据类型不同。方法的调用:执行方法中的代码方法名(参数列表);有返回值类型的方法:1.普通调用方法名(参数列表);2.赋值调用数据类型变量名=方法名......
  • 《Web安全基础》02. 信息收集
    目录1:CDN绕过1.1:判断是否有CDN服务1.2:常见绕过方法1.3:相关资源2:网站架构3:WAF4:APP及其他资产5:资产监控本系列侧重方法论,各工具只是实现目标的载体。命令与工具只做简单介绍,其使用另见《安全工具录》。1:CDN绕过CDN(ContentDeliveryNetwork,内容分发网络)是构建在现有网络......
  • 使用Python读取图片
    一、Python学习两大道具1.dir()工具作用:支持打开package,看到里面的工具函数示例:(1)输出torch库包含的函数dir(torch)(2)输出torch.AVG函数中的参数dir(torch.AVG)2.help()工具作用:说明书,查看库中函数某个参数的说明或使用方法示例:(1)输出torch库中AVG......
  • 《Kali渗透基础》08. 弱点扫描(二)
    @目录1:OpenVAS/GVM1.1:介绍1.2:安装1.3:使用2:Nessus2.1:介绍2.2:安装2.3:使用3:Nexpose本系列侧重方法论,各工具只是实现目标的载体。命令与工具只做简单介绍,其使用另见《安全工具录》。本文以kali-linux-2023.2-vmware-amd64为例。1:OpenVAS/GVM1.1:介绍OpenVAS(OpenVulne......
  • Unity Shader 基础光照(build)
    1.光学基础1.1光源:光线由光源发出,在实时渲染中,我们通常把光源当成一个没有体积的点。用l代表光的方向,用辐照度来量化光的强度。辐照度的意思表示垂直于l的单位面积上单位时间穿过的能量。如果光于平面不垂直,则辐照度为cosS/l,S为光线与平面法线的夹角。1......
  • vue2基础 入门vue2
    vue基础vue项目搭建vue单文件组件mustach表达式vue指令methods方法filters过滤器computed计算属性watch监听器vue组件vue-router路由vue生命周期vue组件通信slot插槽vuex状态管理前言vuejs是一个构建数据驱动的渐进式MVVM框架......
  • java基础
    java注:本笔记是对以前学习内容的总结,因此,很容易出现一些多线程,JVM,框架,@Component注解等。如果你无法理解,可以前往元动力官网,这个网站的两位老师很厉害,本文就是基于他们的笔记来写的。序章计算机基础知识二进制的存储计算机中,所有数据都是以二进制来进行存储的,在这些之中1b......
  • 「Python」参数化查询防止SQL注入攻击
    importpymysql#1.链接mysqlconn=pymysql.connect(user='root',password="123",host='127.0.0.1',database='cars'#需要去数据库创建表,无法在此创建) #2.获取一个游标cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)#返回的查询结果以字典的形式表示,其......
  • 第二节 Java基础概念
    题目1:(选择)下列关于java变量声明那个是错误的:A.intx=5;B.doubled=3.14;C.chargrade=‘C’;D.Stringname=‘黑马程序员’;讲解:D字符串需要用双引号引起来题目2:(看代码说结果)看代码说结果,不要去运行。doublemoney=10.0;money=money+5;money-=2.......