Mysql 数据库基本操作

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Mysql 数据库基本操作

一、基本操作

1.1别名查询

select id,name,chinese+math+english  总分 from 表名;

1.2 去重查询:distinct

select distinct math from 表名

1.3 排序:order by

select ... from  表名 where... order by 列名 [asc|desc];
--查询同学各门成绩,依次按数学降序,英语升序,语文升序的方式显示
select name , math , english, chinese from table_name order by math desc,english,chinese;

注:ASC 为升序(从小到大);DESC为降序(从大到小)。默认为ASC。

1.4 条件查询:where

逻辑运算符 :

注:

1. where 条件可以使用表达式,但不能使用别名。

2. and的优先级高于OR,在同时使用时,需要使用小括()包裹优先执行的部分

部分使用案例:

1. IN

--查询数学成绩是58 或者 59 或者 98 或者 99 的同学及数学成绩
select name,math from table_name where math in(58,59,98,99);
 
--使用 OR 也可以实现
select name , math from table_name where math=58 or math=59 ro math=98 or math=99;

2. 模糊查询:like

-- % 匹配任意多个( 包括 0 个字符)
select name from table_name where name like '孙%';--匹配到孙悟空,孙权
 
-- _匹配严格的一个字符
select name from table_name where name like '孙_';--匹配到孙权

3.NULL的查询:is [not] null

--查询 qq_mail 已知的同学的姓名
select name,qq_mail from student where qq_email is not null;
 
--查询 qq_mail 未知的同学姓名
select name,qq_mail from student where qq_mail is null;

1.5 分页查询:LIMIT

--起始下标为0
 
-- 从0开始,筛选 n 条结果
select ... from table_name [where ...] [order by ...] limit n;
 
--从s 开始,筛选 n 条结果
select ... from table_neme [where ...] [order by ...] limint s,n;
 
--从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
select ... from table_name [where ...] [order by ...] limit n offset s

1.6 修改(Update)

语法:

update table_name set column =...[where ...] [order by ...][limit ...]

1.7 删除

语法:

delete from table_name [where ...] [order by ...] [limit ...]

二、数据库的约束

2.1 约束类型

1.NOT NULL -指示某列不能存储NULL值


2.UNIQUE -保证某列的每行的值必须是惟一的


3.DEFAULT -规定没有给列赋值时的默认值


4.PRIMARY KEY -NOT NULL 和 UNIQUE 的结合,确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的纪录


5.FOREIGN KEY -保证一个表中的数据匹配另一个表中的值的参照完整性


6.CHECK -保证列中的值符合指定的条件。对于MySQL数据库,对CHECK字句进行分析,但是忽略CHECK字句。

2.1.1NULL约束

创建表时,可以指定某列不为空

 create table student(id int not null,sn int,name varchar(20),qq_mail varchar(20));
 
 insert into student(sn,name,qq_mail) values(23,'zhangsan','353323@qq.com');
 Field 'id' doesn't have a default value

2.1.2 UNIQUE :唯一约束

指定sn 为唯一的

 create table  student(id int not null,sn int unique,name varchar(20),qq_mail varchar(20));
 
 insert into student values (1,2,'zhangsan','235@qq.com'),(2,2,'lisi','352@qq.com');
ERROR 1062 (23000): Duplicate entry '2' for key 'sn'

2.1.3 DEFAULT:默认值约束

指定插入数据是,name 列为空,默认值为unknown;

create table student (id int not null,sn int unique,name varchar(20) default 'unknow',qq_mail varchar(20));
 
 insert into student (id,sn,qq_mail)values (1,3,'35452@qq.com');

2.1.4 primary key:  主键约束

指定 id 列为主键


create table student (id int primary key auto_increment,sn int unique, name varchar(20) default'unknown',qq_mail varchar(20));

主键是not null 和unique的结合,可以不用not null  


三、新增

插入查询结果

 create table test_user(id int primary key auto_increment,
                        name varchar(20),
                        age int,
                        email varchar(20),
                        sex varchar(5),
                        mobile varchar(20));
 
--将学生表中的所有数据赋值到用户表
 
insert into test_user(name,email) select name,qq_mail from student;

 四、查询

4.1 聚合查询

常见的统计总数、计算平均值,可以使用聚合函数来实现,常见的聚合函数有:

案列:

COUNT

--统计班级共有多少同学
select count(*) from student;
 
--统计班级收集的qq_mail有多少个,qq_mail为null的数据不会计入结果
select count(qq_mail) from student;

SUM

-- 统计数学成绩总分
select sum(math) from exam_result;
 
-- 不及格 <60 的总分,没有结果,返回null
select sum(math) from exam_result where math <60;

AVG

1. -- 统计平均总分
2. select AVG(chinese + math + english) 平均总分 from exam_result;

MAX

1. -- 返回英语最高分
2. select max(english) from exam_result;

MIN

1. -- 返回>70 分以上的数学的最低分
2. select min(math) from exam_result where math >70;

4.2 GROUP BY 子句

SELECT 中使用 GROUP BY 子句可以对指定列进行分组查询。需要满足:使用 GROUP BY 进行分组查询时,SELECT 指定的字段必须是“分组依据字段”,其他字段若想出现在SELECT 中则必须包含在聚合函数中

语法:

select column1,sum(column2),... from table group by column1,coulmn3;

示例:

create table emp(
id int primary key auto_increment,
name varchar(20) not null,
role varchar(20) not null,
salary numeric(11,2)
);
 
select role ,max(salary),min(salary),avg(salary) from emp group by role;

4.3 HAVING

GROUP BY 子句进行分组后,需要对分组结果再进行条件过滤时,不能使用WHERE 语句,而需要用HAVING

显示平均工资低于1500 的角色和它的平局工资

select role ,max(salary),min(salary),avg(salary) from emp group by role having avg(salary)<1500;

4.3 联合查询

4.3.1 内连接

示例:

(1)查询“许仙”同学的成绩

 select score.score from student join score on student.id=score.student_id and student.name='许仙

(2)查询所有同学的总成绩,及同学的个人信息:

select stu.sn,stu.name,stu.qq_mail,sum(sco.score) from student stu join score sco on stu.id =sco.student_id group by sco.student_id;
 
+-------+-----------------+-----------------+----------------+
| sn    | name            | qq_mail         | sum(sco.score) |
+-------+-----------------+-----------------+----------------+
| 09982 | 黑旋风李逵      | xuanfeng@qq.com |          300.0 |
| 00835 | 菩提老祖        | NULL            |          119.5 |
| 00391 | 白素贞          | NULL            |          200.0 |
| 00031 | 许仙            | xuxian@qq.com   |          218.0 |
| 00054 | 不想毕业        | NULL            |          118.0 |
| 51234 | 好好说话        | say@qq.com      |          178.0 |
| 83223 | tellme          | NULL            |          172.0 |
+-------+-----------------+-----------------+----------------+

(3)查询所有的同学的成绩,及同学的个人信息

select stu.id ,stu.sn,stu.name,stu.qq_mail,sco.score,sco.course_id,cou.name from student stu join score sco on stu.id=sco.student_id join course cou on sco.course_id =cou.id order by stu.id;
+----+-------+-----------------+-----------------+-------+-----------+--------------------+
| id | sn    | name            | qq_mail         | score | course_id | name               |
+----+-------+-----------------+-----------------+-------+-----------+--------------------+
|  1 | 09982 | 黑旋风李逵      | xuanfeng@qq.com |  70.5 |         1 | Java               |
|  1 | 09982 | 黑旋风李逵      | xuanfeng@qq.com |  98.5 |         3 | 计算机原理         |
|  1 | 09982 | 黑旋风李逵      | xuanfeng@qq.com |  33.0 |         5 | 高阶数学           |
|  1 | 09982 | 黑旋风李逵      | xuanfeng@qq.com |  98.0 |         6 | 英文               |
|  2 | 00835 | 菩提老祖        | NULL            |  60.0 |         1 | Java               |
|  2 | 00835 | 菩提老祖        | NULL            |  59.5 |         4 | 语文               |
|  3 | 00391 | 白素贞          | NULL            |  33.0 |         1 | Java               |
|  3 | 00391 | 白素贞          | NULL            |  68.0 |         3 | 计算机原理         |
|  3 | 00391 | 白素贞          | NULL            |  99.0 |         5 | 高阶数学           |
|  4 | 00031 | 许仙            | xuxian@qq.com   |  67.0 |         1 | Java               |
|  4 | 00031 | 许仙            | xuxian@qq.com   |  23.0 |         3 | 计算机原理         |
|  4 | 00031 | 许仙            | xuxian@qq.com   |  56.0 |         5 | 高阶数学           |
|  4 | 00031 | 许仙            | xuxian@qq.com   |  72.0 |         6 | 英文               |
|  5 | 00054 | 不想毕业        | NULL            |  81.0 |         1 | Java               |
|  5 | 00054 | 不想毕业        | NULL            |  37.0 |         5 | 高阶数学           |
|  6 | 51234 | 好好说话        | say@qq.com      |  56.0 |         2 | 中国传统文化       |
|  6 | 51234 | 好好说话        | say@qq.com      |  43.0 |         4 | 语文               |
|  6 | 51234 | 好好说话        | say@qq.com      |  79.0 |         6 | 英文               |
|  7 | 83223 | tellme          | NULL            |  80.0 |         2 | 中国传统文化       |
|  7 | 83223 | tellme          | NULL            |  92.0 |         6 | 英文               |
+----+-------+-----------------+-----------------+-------+-----------+--------------------+

4.3.2 外连接

外连接分为左外连接和右外连接,如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完全显示我们就说是右外连接。

语法:

-- 左外连接,表1完全显示
select 字段名 from 表名1 left join 表名2 on 连接条件;
-- 右外连接,表2完全显示
select 字段 from 表名1 right join 表名2 on 连接条件;

示例:

--"老外学中文"同学,没有考试成绩,也显示出来了
select * from student left join score on student.id=score.student_id;
 
--对应的右外连接为
 select * from score right join student on student.id=score.student_id;

4.3.3 自连接

自连接是指在同一张表连接自身进行查询

示例:

显示所有“计算机原理”成绩比“Java”成绩高的成绩信息

select s1.* from score s1 ,score s2 where s1.student_id= s2.student_id and s1.score<s2.score and s1.course_id=1 and s2.course_id=3;

注:自连接必须使用别名

4.3.4 子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询

示例:

(1)单行子查询:返回一行纪录的子查询

查询与“不想毕业”同学的同班同学:

mysql> select * from student where classes_id =(select classes_id from student where name='不想毕业');
+----+-------+-----------------+-----------------+------------+
| id | sn    | name            | qq_mail         | classes_id |
+----+-------+-----------------+-----------------+------------+
|  1 | 09982 | 黑旋风李逵      | xuanfeng@qq.com |          1 |
|  2 | 00835 | 菩提老祖        | NULL            |          1 |
|  3 | 00391 | 白素贞          | NULL            |          1 |
|  4 | 00031 | 许仙            | xuxian@qq.com   |          1 |
|  5 | 00054 | 不想毕业        | NULL            |          1 |
+----+-------+-----------------+-----------------+------------+

(2)多行子查询:返回多行纪录的子查询

查询“语文” 或“英文”课程的成绩信息

使用 IN
select * from score where course_id in (select id from course where
name='语文' or name='英文');
 
-- 使用 NOT IN
select * from score where course_id not in (select id from course where
name!='语文' and name!='英文')

[NOT] EXISTS 关键字:

 select * from score sco where exists (select cou.id from course cou where (name='语文' or name='英文') and cou.id=sco.course_id);
+-------+------------+-----------+
| score | student_id | course_id |
+-------+------------+-----------+
|  98.0 |          1 |         6 |
|  59.5 |          2 |         4 |
|  72.0 |          4 |         6 |
|  43.0 |          6 |         4 |
|  79.0 |          6 |         6 |
|  92.0 |          7 |         6 |
+-------+------------+-----------+
 
 select * from score sco where not exists (select cou.id from course cou where (name='语文' or name='英文') and cou.id=sco.course_id);
+-------+------------+-----------+
| score | student_id | course_id |
+-------+------------+-----------+
|  70.5 |          1 |         1 |
|  98.5 |          1 |         3 |
|  33.0 |          1 |         5 |
|  60.0 |          2 |         1 |
|  33.0 |          3 |         1 |
|  68.0 |          3 |         3 |
|  99.0 |          3 |         5 |
|  67.0 |          4 |         1 |
|  23.0 |          4 |         3 |
|  56.0 |          4 |         5 |
|  81.0 |          5 |         1 |
|  37.0 |          5 |         5 |
|  56.0 |          6 |         2 |
|  80.0 |          7 |         2 |
+-------+------------+-----------+

FROM

在from子句中使用子查询:子查询语句出现在from子句中。这里是把一个子查询当做一个临时表使用。

示例:

查询所有比“中文系2019级3班”平均分高的成绩信息:

-- 获取“中文系2019级3班”的平均分,将其看作临时表
SELECT
avg( sco.score ) score
FROM
score sco
JOIN student stu ON sco.student_id = stu.id
JOIN classes cls ON stu.classes_id = cls.id
WHERE
cls.NAME = '中文系2019级3班';

查询成绩表中,比以上表平均分高的成绩:

SELECT
*
FROM
score sco,
(
SELECT
avg( sco.score ) score
FROM
score sco
JOIN student stu ON sco.student_id = stu.id
JOIN classes cls ON stu.classes_id = cls.id
WHERE
cls.NAME = '中文系2019级3班'
) tmp
WHERE
sco.score > tmp.score;

4.3.5 合并查询

union all

该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。

示例:查询id小于3,或者名字为“Java”的课程

-- 可以看到结果集中出现重复数据Java
 select * from course where id<3 union all select * from course where name ='Java';
+----+--------------------+
| id | name               |
+----+--------------------+
|  1 | Java               |
|  2 | 中国传统文化       |
|  1 | Java               |
+----+--------------------+

union和 关键字or 使用方法一样,用于取得两个结果集的并集。当使用该操作符时,会去掉结果集中的重复行(or 只能用于一个表,二union能用于多个表,当union作用于多个表时需要多个结果列对应)

五、索引事务

5.1 索引

5.1.1 使用

创建主键约束、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建对应的索引

--查看索引
show index from 表名;
 
--创建索引
create index 索引名 on 表名(字段名);
 
--删除索引
drop index 索引名 on 表名;

5.1.2 索引背后的数据结构

索引背后使用的数据结构为B+树,在了解B+树之前,我们先认识一下B- 树。B- 树也称为B树,实际上是一个N叉搜索树。当树的高度越高,进行查询比较的时候访问磁盘的次数就越多,IO流的访问次数也就越高,导致速度变慢,因此N叉搜索树降低了树的高度,也就意味着降低了访问磁盘的次数,加快了访问速度。

B树:

B+树:

B+树的特点


1.一个节点可以存储N个key,N个key划分出了N个区间,(而不是N+1个区间 )


2.每个节点中的key的值,都会在子节点中存在(同时key是结点的最大值)


3.B+ 树的叶子节点,是首尾相连,类似于一个链表~


4.由于叶字节点是完整的数据集合,只在叶子节点这里存储数据表的每一行的数据,而非叶字节点,只存key值本身即可


B+树的优点:


1.当前一个节点保存更多的key,最终树的高度是相对更矮的,查询的时候减少了IO访问次数(和B B树是一样的)


2.所有的查询最终都会落到叶字节点。(查询任何一个数据,经过的IO访问次数,是一样的)


3.B+树的所有叶子节点构成链表,此时比较方便范围查询


4.由于数据都在叶字节点上,非叶子节点,只存储key,导致非叶子节点,占用空间是比较小的,这些非叶子节点就可能在内存中缓存(或者是缓存一部分)。又进一步减少了IO的次数!!!

总结:

(1) 对于插入、删除数据频率高的表,不适合用索引

(2) 对于某列修改频率高的,该列不适合用索引

(3) 通过某列或某几列的条件查询频率高的,可以对这些列创建索引

5.2 事务

事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。

在不同的环境中,都可以有事务。对应在数据库中,就是数据库事务。

5.2.1 使用

(1)开启事务:start transaction;

(2)执行多条sql 语句

(3)回滚或提交:rollback/commit;

说明:rollback即是全部失败,commit即是全部成功。

start transaction;
 
--阿里巴巴账户减少2000
update account set money=money -2000 where name='阿里巴巴';
 
--四十大盗账户增加2000
update account set money=money+2000 where name ='四十大盗';
 
commit;

5.2.2 特性  

1.原子性:原子性要求所有语句要么全部成功,要么全部不成功,不能部分成功


2.一致性:规定了事物提交前后,永远只可能存在事物提交前的状态和事物提交后的状态,从一个一致性的状态到另一个一致性状态,而不可能出现中间的过程态。


3.持久性:事务修改的内容是写到硬盘上的,持久存在的,重启也不丢失


4.隔离性:为了解决“并发”执行事务,引起的问题

并发执行事务可能产生的问题:

(1)脏读问题(给写加锁)

一个事务A正在对数据进行修改的过程中,还没提交之前,另外一个事务B,也对一个数据进行了读取,此时B的读操作成为“脏读”,读到的数据也成为“脏数据”。“脏”是“无效”的意思,因为在事务A未提交之前,A可能会又把数据改了。为了解决脏读问题,MySQL引入了“写操作加锁”这样的机制。这样当事务A写的时候,事务B就没法读,意味着“写操作”和“读操作”不能并发了。这个给写加锁的操作,就降低了并发程度(降低了效率),提高了隔离性(提高了数据的准确性)。


(2)不可重复读(给读加锁)*


事务1 已经提交了数据,此时数据2 开始读取数据,在读取过程中,事务 3 又提交了新的数据,此时意味着同一个事务2 之内,多次读取数据,读出来的结果是不相同的(预期是一个事务中,多次读取结果是一样的),就叫做“不可重复读”。此时便需要通过读加锁(在事务2读取数据的过程中,事务 3 不能对数据进行修改),进一步的降低了事务的并发处理能力(处理效率也降低)


(3)幻读(彻底串行化)


当事务B读取student.java 时,事务A就创建了一个Teacher.java,此时导致事务B读取的结果集不同。


在读和写加锁的前提下,一个事务两次读取同一个数据,发现读取的数据值是一样的,但是结果集不一样(Student.java)代码内容不变,但是第一次看到的是只有Student.java这个文件,第二次看到的是Student.java 和 Teacher.java 了。这种就成为“幻读”。数据库使用“串行化”这样的方式来解决幻读,彻底放弃并发处理事务,一个接一个的串行的处理事务,这样做,并发程度是最低的(效率最慢的),隔离性是最高的(准确性也是最高的)

对应上述问题,MySQL提供了4中隔离级别,就对应上面的几个情况:

read uncommitted 没有进行任何锁限制,并发最高(效率最高),隔离性最低(准确性最低)


read committed     给写加锁了 , 并发程度降低,隔离性提高了


repeatable read    给写和读都加锁  并发程度有降低,隔离性又提高了


serializable           串行化,并发程度最低,隔离性最高


六、JDBC编程

6.1 Java的数据库编程:JDBC

JDBC,即Java Database Connectivity,java数据库链接。是一种用于执行SQL语句的Java API,它是Java中的数据库链接规范。这个API有java.sql.*,javax.sql.* 包中的一些类和接口组成。


JDBC编程需要导入相应的jar包,在高版本的idea中,需要导入相对应的jar包。


导包:

首先需要在项目中new一个Directory,

然后将jar包所在的路径直接粘贴在我们建好的Directory包中

把这个目录记作项目的库

6.2 数据库连接 Connection

Connection 接口实现类由数据库提供,获取Connection对象通常有两种方式

一种是通过DriverManger(驱动管理类)的静态方法获取:

//加载JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver");
 
//创建数据库连接
Connection connection =DriverManager.getConnection(url);

一种是通过DataSource(数据源)对象获取。实际应用中会使用DataSource对象

         DataSource dataSource =new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");//固定为“root”
        ((MysqlDataSource)dataSource).setPassword("123456");//安装数据库时设置的密码

以上两种方式的区别是:


1.DriverManager类来获取的Connection连接,是无法重复利用的,每次使用完以后释放资源时,通过connection.close()都是关闭物理连接。


2.DataSource是提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接是可以复用的,每次使用完数据库连接,释放资源调用connection.close()都是将Connection 连接对象回收

6.3 Statement对象

statement对象主要是将SQL语句发送到数据库中,JDBC API中主要提供了三种Statement对象。


Statement: 用于执行不带参数的简单SQL语句


PreparedStatement: 用于执行带或者不带参数的SQL语句;SQL语句会预编译在数据库系统;执行速度快于Statement对象


CallabelStatement:用于执行数据库存储过程的调用


主要掌握两种执行SQL的方法


(1)executeQuery()方法执行后返回单个结果集的,通常用于select语句


(2)executeUpdate()方法返回值是一个整数,指示受影响的行数,通常用于update、insert、delete语句


6.4 ResultSet 对象

ResultSet 对象它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套getxxx方法提供了对这些中数据的访问


ResultSet 里的一行一行排列,每行有多个字段,并且有一个纪录指针,指针所指的数据行叫做当前数据行,我们只能来操作当前行的数据行。我们如果想要取得某一条纪录,就要使用ResultSet 的next()方法,如果我们想要得到ResultSet里的所有纪录,就应该使用while循环。

插入代码示例:

public class JDBCInsert {
    public static void main(String[] args) throws SQLException {
        //JDBC 需要通过以下步骤来完成开发
        //1.创建并初始化一个数据源
        Scanner scanner=new Scanner(System.in);
        DataSource dataSource =new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");//固定为“root”
        ((MysqlDataSource)dataSource).setPassword("123456");//安装数据库时设置的密码
        //可以直接创建MysqlDataSource对象
        //MysqlDataSource dataSource=new MysqlDataSource();
 
        //2.和数据库服务器建连接
        Connection connection =dataSource.getConnection();//此时需要使用java.sql中的Connection
 
        //3.构造 SQL 语句
        /*//此时代码是写死的
        String sql="insert into student values(1,'张三')";
        PreparedStatement statement=connection.prepareStatement(sql);*/
        System.out.println("请输入学生姓名:");
        String name=scanner.next();
        System.out.println("请输入学号:");
        int id=scanner.nextInt();
 
        String sql="insert into student value(?,?)";
        PreparedStatement statement=connection.prepareStatement(sql);
        statement.setInt(1,id);
        statement.setString(2,name);
        System.out.println(statement);
 
        //4.执行 SQL 语句
        int ret=statement.executeUpdate();
        System.out.println("ret="+ret);
 
        //5.释放必要的资源
        statement.close();
        connection.close();
    }
}

查询代码示例:

public class JDBCSelect {
    public static void main(String[] args) throws SQLException {
        MysqlDataSource mysqlDataSource=new MysqlDataSource();
        mysqlDataSource.setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
        mysqlDataSource.setUser("root");
        mysqlDataSource.setPassword("123456");
 
        Connection connection=mysqlDataSource.getConnection();
 
        String sql="select * from student";
        PreparedStatement statement =connection.prepareStatement(sql);
 
        ResultSet resultSet=statement.executeQuery();
 
        while (resultSet.next()){
            //
            int id=resultSet.getInt("id");
            String name=resultSet.getString("name");
            System.out.println("id="+id+"name="+name);
        }
 
    }
}
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
12 3
|
3天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
14 3
|
3天前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE &#39;log_%&#39;;`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
20 2
|
16天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
110 15
|
10天前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。
|
16天前
|
关系型数据库 MySQL 数据库
数据库数据恢复—MYSQL数据库文件损坏的数据恢复案例
mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。
|
21天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
29天前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据
|
1月前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
40 1
|
1月前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
62 4