Code前端首页关于Code前端联系我们

mysql函数管理数据库,mysql数据库基本操作语句

terry 2年前 (2023-09-30) 阅读数 40 #Mysql
文章标签 Mysql

本文目录:

  • 1.掌握Python管理MySQL数据库
  • 2.MySQL(DML数据处理语言,添加/删除/修改数据库数据)
  • 3. MYSQL使用基础与进阶分享

掌握Python使用MySQL数据库

本文需要 PyMySQL 驱动程序才能在 Python 中运行 MySQL 数据库。

Python运行MySQL的前提是必须安装MySQL数据库并且可以正常连接和使用。下面详细介绍安装步骤。

注意。在安装的时候,我们需要允许管理员权限来安装,否则会因为权限不足而无法安装。

首先需要下载MySQL安装包。您可以从官网下载地址下载对应的版本,也可以直接在线pull安装:

权限设置:

初始化MySQL:

启动MySQL:

查看MySQL工作状态:

Mysql安装成功后,root的默认密码为空。以下命令可用于为 root 用户创建密码:

登录:

创建数据库:

查看数据库:

使用 pip 命令安装 PyMySQL 模块:

如果系统不支持 pip 命令,可以通过以下方法安装:

pymysql .connect 函数:连接数据库

输出结果显示如下:表面数据库连接成功

使用pymysql connect() 方法连接到数据库。连接参数解释如下:

conn.cursor(): 获取游标

如果要使用数据库,仅仅连接数据是不够的,我们需要获取一个操作数据库 Cursor 才可以使用用于以下操作。游标的主要作用是在读取数据、添加数据等数据库操作后获取返回结果。通过 conn downcursor() 方法在生成的数据库连接实例上创建游标。例如:

输出结果为:

游标返回一个游标实例对象,其中包含许多用于工作数据的方法,例如执行sql语句,sql执行命令:execute()和executemany()

execute(query,args=none):

executemany(query , args=None):

其他游标对象如下:

数据库连接工作原理的完整示例如下:

上述结果的输出为:

创建游标的代码表如下。 :

数据库表创建如下。成功:

输入数据实现代码:

输入数据结果:

Python 查询 Mysql 使用 fetchone() 方法获取单条数据,使用 fetchall() 方法获取多块数据。

查询数据代码如下:

输出结果:

DB API 定义了数据库操作的一些错误和异常。下表列出了这些错误和异常:

本文介绍如何连接到 Python。 Mysql执行数据的增、删、改、查操作。文章通过简码提供了示例表演,为工程师使用Python运行Mysql提供支持。

MySQL(DML数据操作语言,添加/删除/修改数据库数据)

输入数据

在表名(字段)中输入值(‘数据’);

在表(姓名、年龄)中输入姓名1;从表2中选择姓名、年龄; #表2数据信息复制到表1

更改数据

更新表名 set 'field'='data'; #更改数据

deselect from table name where field=value; #删除数据

trim table表名; #清除所有数据无法恢复

DQL(数据查询语言,用于查询数据)

select查询字段from表名【where满足条件】;

【按组分组】

【顺序排序依据】

【限制输出结果】

从表名中选择*; )从表名中选择字段; #写入指定字段数据

select st.name,st.age,th.name,th.age from st,th; #检查一张或多张表中的数据

SELECT 字段名称 FROM 表名 WHERE 条件 1 OR 条件 2 [...OR 条件 n];

示例:SELECT * FROM 学生 WHERE 年龄 20 OR 教育!='学院'; #询问年龄小于20岁或学历不等于专科生的人

SELECT 字段名 FROM 表名 WHERE 条件1 AND 条件2 [...AND 条件n];

示例:SELECT *来自 22 岁且教育程度=“大学”的学生; # 查询年龄超过22岁及受过高等教育的学生信息

从表名中选择年龄为(12,17,23)的字段; -28 SELECT * from Clock name order by field name;#排序,顺序字段

select 字段名称 order by desc;按字段分组; #每个字段只显示一个

示例:SELECT id,name,age,phone,place,GROUP_CONCAT(age,place) FROM Students GROUP BY Age,place; #根据年龄、地区组请求学生信息并显示每个组的记录

选择表名以外的字段;示例: SELECT DISTINCT 年龄 FROM FROM; # 查询学生年龄组

select field 1, field 2, group_concat (分组依赖字段名) from 表名 group 分组依赖字段名; #查询每组的记录条数,显示(使用GROUP BY关键字配合GROUP_CONCAT()函数即可显示每组的记录条数)

示例:select id,name,age,phone,GROUP_CONCAT(age) from学生按年龄分组; # 按年龄查询学号、姓名、年龄、电话号码,并显示各组记录

SELECT 字段名 FROM 表名 [其他条件] LIMIT int, int;参数1开始读取第一条记录的条数,参数2为要继承的记录条数

示例:SELECT * FROM Students ORDER BY LIMIT 0.5; # 查询按年龄排序的学生信息,从位置0开始,只显示5条

select field name from table name where field name regexp 'matching method';

(^ 匹配以特定字符或字符串开头的条目,

$ 匹配以特定字符或字符串结尾的条目

[^字符集] 匹配除“字符集”之外的任何字符

S1|S2 |S3 匹配 S1 S2 S3 中的每个字符串

字符串 {N} 对应字符串出现 N 次

字符串 {M,N} 对应字符串至少出现 M 次,最多出现 N 次)

聚合函数查询

从表名中选择一个数字(字段名);任意参数,返回所选集合中非NULL值的行数; for 参数“*”返回所选集合中所有行的数据,包含 NULL 值的行

示例:SELECT COUNT(*) FROM Students;

select amount(字段名称) from table name; #表字段值之和

select avg(字段名称) from 表名称; #表字段平均值

从表名中选择 max(字段名); #表字段最大值

select min(field name) from table name; #表字段最小值

连接请求

a.内连接:列出数据表中满足连接条件的数据行,并将它们连接成新记录【只有满足条件的记录才会显示在查询结果中】内连接最常见的例子是等值连接,也表示被连接的表中的字段与各个表中的相同

select 字段名1,字段名2 from 表名1 内连接表名2 where 连接条件;

示例:选择 s。 name,d.dname 来自 HR 内部加入部门 d WHERE s.dpid = d.id; # 将员工表的dpid字段和部门表的id字段连接起来,查询员工姓名和部门名称

b.外连接:与内连接不同,外连接使用 OUTER JOIN 关键字来连接两个表。外连接生成的结果集不仅包含满足连接条件的行数据,还包含左表(左外连接的表)、右表(右连接的表外连接)或双向连接表(用于完全外部连接的表)。所有数据行。

select 字段名称 1 from 表名称 LEFT|RIGHT 将表名称 2 与表名称 1.字段名称 1 = 表名称 2.字段名称 2;

示例:select s.name,d.dname fromEmployees LEFT JOIN 部门 d IS s.dpid = d.id; #连接员工表的dpid字段和部门表的id字段,查询员工姓名和部门名称。如果右表没有对应的连接数据,则自动添加NULL值。

示例:SELECT s.name,d.dname FROM 人员 s RIGHT JOIN 部门 d ON s.dpid = d.id; # 连接员工表的dpid字段和部门表的id字段并询问员工姓名和部门名称,如果左表没有对应的连接数据,会自动添加NULL值

示例: SELECT 字段名1,字段名2 FROM 表名1,表名2 WHERE 连接条件AND 约束条件;示例: SELECT s.name, d.dname FROM 人员 s, 部门 d WHERE s.dpid = d.id AND s.dpid1; # 查询员工姓名和部门名称,条件是员工表的dpid字段等于部门表的id字段且dpid大于1

合并查询结果

select 字段名称 name from 表 JOIN select 字段名称 from 表名称; #Union关键字合并所有查询结果并删除相同记录

示例: SELECT dpid FROM Personnel UNION SELECT id FROM Department; #检查员工表dpid和部门表id是否有重复数据只显示一次

select 字段名 drom 表名 UNION ALL select 字段名 from 表名; #关键字 UNION ALL 只是将结果合并在一起

示例:SELECT dpid FROM Personnel UNION ALL SELECT id FROM Department; # 查询员工表dpid和部门表id,显示所有

MYSQL基础和高级共享

MySQL 是由瑞典 MySQL AB 公司开发的关系数据库管理系统。它是 Oracle 产品,也是最流行的关系数据库管理系统之一。

端口是3306。

如果表很多,使用Linux脚本,需要根据需要修改:

就像创建一样,如果存在就添加。

可以制作两篇文章:

例如:

在添加、删除或更改表中的现有列时使用。

添加LISA

默认添加到末尾,但可以指定位置。 FIRST:添加第一个

AFTER 字段名称:在

之后添加指定字段 示例:

删除 DROP

修改 MODIFY 基本上更改原始列的类型或约束。您还可以使用 FIRST 和 AFTER 字段名称来指示更改在哪里?

更改字段名称 CHANGE

您可以将数据从表 2 复制到表 1,但不能复制约束条件。

单行

多行,注意只有一个 VALUES:

不要写(第 1 行,第 2 行...)此部分默认一一对应

在除了上面的方法之外,还可以使用SET。将相应的值添加到每一行。

如果没有过滤,一切都会改变。可以使用 WHERE 来完成过滤。

如果没有过滤,所有内容都会被删除。相当于清算。

删除

先删除表,然后创建新表。与 DELETE FROM 相比,TRUNCATE 速度更快,因为 DELETE FROM 会一条条删除记录。

查询执行顺序

FROM -- WHERE -- SELECT -- GROUP BY -- HAVING -- ORDER BY -- LIMIT

注意

如果数据量很大,几百万条,使用分页LIMIT 部分中的选项...OFFSET...方法非常消耗资源并且需要很长时间。最好和WHERE一起使用,例如:

REGEXP使用正则表达式来匹配。查询时必须与 WHERE 或 HAVING 一起使用。

如果两个表之间存在交集,并且需要使用两个表中的数据,则可以使用内连接查询。

LEFT JOIN 关键字返回左表 (table1) 中的所有行,即使右表 (table2) 中没有匹配项。如果正确的表中没有匹配项,则结果为 NULL。

用法:

RIGHT JOIN 关键字返回右表 (table2) 中的所有行,即使左表 (table1) 中没有匹配项。如果左表中没有匹配项,则结果为 NULL。将 LEFT JOIN 表 1 和 2 的顺序替换为 REGHT JOIN。

只要左表 (table1) 和右表 (table2) 中存在匹配,关键字 FULL OUTER JOIN 就会返回行。这相当于合并 LEFT JOIN 和 RIGHT JOIN 的结果。

但是 MySQL 不支持 FULL OUTER JOIN。

这是 SELECT 嵌套。

IN 使用一个查询的结果作为另一查询的条件。例如:

EXISTS 用于判断查询子句中是否有记录。如果存在一条或多条记录,则返回 True,否则返回 False。如果属实就填满。例如:

索引的本质是排序的数据结构。使用索引可以提高查询速度。

常见的索引有:

MySQL使用外键约束来保证表间数据的完整性和准确性。使用外键的条件:

外键的优点:可以关联两个表,保证数据的一致性,可以实现一些级联操作。

向两个现有表添加外键。例如:主表为 A,子表为 B,外键为辅助,外键约束名称为 a_fk_b

将字段作为外键添加到子表

添加外键子表键约束

如果记录为删除后,会报错:[Err] 1451 -Emarea no can be returned: aforeignkeyconstraintfails (...)

原因是MySQL中指定了外键关系,导致更新或删除数据错误。这可以通过设置 FOREIGN_KEY_CHECKS 变量来避免。步骤1:禁用外键限制,我们可以使用:SETFORIGN_KEY_CHECKS=0;第二步:删除数据第三步:启用外键限制,我们可以使用:SETFORIGN_KEY_CHECKS=1;您可以使用以下命令查看 FOREIGN_KEY_CHECKS 的当前值: SELECT @@FOREIGN_KEY_CHECKS;

使用 UNION 连接两个查询。如果第一个查询返回 M 行,第二个查询返回 N 行,那么组合查询通常会返回 M+N 行。

每个查询必须包含相同的列、表达式和聚合函数。

默认情况下会删除相同的行。如果需要保留相同的行,请使用 UNION ALL。

只能包含一个 ORDER BY 子句,并且必须位于语句末尾。

内置函数很多,参见:MySQL函数

我们通常使用START TRANSACTION或BEGIN来开启事务,COMMIT在事务中发出命令,SAVEPOINT:相当于设置一个还原点,ROLLBACK TO:回滚到某个还原点

一般使用格式如下:

在打开事务期间,默认锁

可以根据类型共享锁(SHARED LOCK)和独占锁(EXCLUSIVE LOCK)或者读锁(READ LOCK)和写锁(WRITE LOCK)。 )。

按照粒度,分为表锁和行锁。表锁由数据库服务器应用,行锁由存储引擎应用。

另外,我们可以显示锁

锁定时,如果没有索引,表就会被锁定。如果添加索引,则该行被锁定

InnoDB 默认支持行锁。锁的获取是分步进行的,并不是所有的锁都会同时获取,所以锁竞争的时候会出现死锁

解决方案:

即 ACID 属性:

因为并发事务导致上述问题,解决上述问题,我们可以设置事务隔离级别。

MySQL 默认隔离级别(重复读)

查看当前会话隔离级别

方法 1

方法 2

设置 schema 隔离级别 slavus ​​ ​​​​ 如下:

这主要包括三个线程:binlog线程、I/O线程和SQL线程。

同步过程:

由于MySQL主从集群只进行主从同步,而子不同步,所以需要读写分离。

业务层面必须实现读写分离,只有写数据可以在主节点上完成,读数据可以在主节点或子节点上完成

索引是一种排序的数据结构帮助 MySQL 高效检索数据

MySQL 索引有

推荐的两个网络工具:

简单来说,B 树是在红黑树的基础上,通过在单个节点存储多个值来实现的(平衡二叉树),降低高度。每个节点存储一个索引和对应的数据。指针、同级节点递增

,B+树在B树的基础上优化。非叶子节点存储子节点的起始索引,叶子节点存储索引和数据引用并存在。双向光标

如下图:

不同的引擎在主键索引中存储的数据不同,比如常规的MyISAM和InnoDB

MyISAM B+树叶节点存储对表数据的引用,而InnoDB B+树叶节点存储主键以外的数据。

其他:

表示由几列组成一个索引,语法:

由于公共索引 B+ 的树结构是基于列创建的,所以我们的搜索条件也必须基于列的顺序索引列(其中column1=x,column2=y,columnN...),否则扫描全表

如果填写某列(+,-,*,/,!),则不使用索引。

OR 索引失败

OR 在某些情况下导致索引。并非所有 OR 都使索引无效。如果OR连接同一字段,则索引不无效。否则,索引无效。 。

这一点相信大家都能理解。如果您对前缀进行模糊搜索,它将不会被索引。

这两种用途都会使索引失效。另外,IN使用了索引,但是如果IN值的范围很大,索引就会失效,会进行全表扫描。请参阅:在 MySQL 中使用 IN 是否会导致使用索引?

不使用索引。

前往收银台。

因此设计表时建议不能为空,而是设置为默认值“”(NOT NULL DEFAULT“”)

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门