首页 > 数据库 >MySQL基础 数据库表的增删改

MySQL基础 数据库表的增删改

时间:2024-12-15 20:57:07浏览次数:11  
标签:-- 数据库 MySQL 查询 int mysql 增删 table

文章目录

Mysql

一、原理定义概念

定义

数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。

数据库是长期储存在计算机内、有组织的、可共享的数据集合

分类:

​ 非结构化数据:

​ 数据相对来讲没有固定的特点,这种数据非常不便于检索

​ 但是生活中很多都是非结构化数据

​ 半结构化数据 :

​ 数据之间有着相同的存储结构 属性:值

​ 每一条数据的属性可以不同

​ 张三:

​ 三号学生

​ 李四:

​ 结构化数据 :

​ 创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的

数据。

​ 数据之间有着相同的存储结构 属性 值

​ 同一个结构模型中每一条数据的属性都是相同的,但是值有可能不同,这些数据非常便于存储和管理。

​ 于是针对这些数据,专门设计一套数据存储的软件,现在我们说的数据库主要用来存储这些数据

问题

​ 我们所有的数据库都放在软件中

​ 我们要获取到数据,就需要使用软件给我们提供的访问数据的接口

​ 最痛苦的就是程序员,我们就要为存储数据学习不同的数据库

​ 于是有人开始倡导:使用统一的操作数据库的方式

SQL(Structured Query Language)结构化查询语言

​ 全世界所有的结构化数据库都适用

​ 分类

​ DDL:数据库定义语言(定义数据库的一些组件 表 索引 视图 自增序列…)

​ DML:数据库操作语言(添加 删除 修改) CRUD

DQL:数据库查询语言 查询

​ DCL:数据库控制语言(权限 用户管理…) DBA工程师

​ SQL语言属于第四代语言,而java c++ 才属于第三代

安装Mysql…

二、数据库 管理

安装上数据库之后,就需要开始学习指令了,通过指令让MySQL去做出一些文件操作。

image-20240126173409500

如果将数据库管理系统与之前的文件管理做类比的话:

数据库管理系统文件管理
数据库文件夹
数据表文件夹下的excel文件

接下来,我们先学习 数据库(文件夹)相关操作的指令。

image-20240126173426879

2.1 内置客户端操作

当连接上MySQL之后,执行如下指令(一般称为SQL语句),就可以对MySQL的数据进行操作。

  • 查看当前所有的数据库: show databases;

  • 创建数据库:create database 数据库名 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

    create database bigdata29;
    
    create database bigdata29 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    
  • 删除数据库:drop database 数据库名;

  • 进入数据库(进入文件):use 数据库;

示例:

# 1.登录MySQL
[root@master ~]# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.25 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

# 2.查看当前数据库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.19 sec)

# 3. 创建数据库:  create database 数据库名 default charset 编码 collate 排序规则;
mysql> create database bigdata19 default charset utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.10 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bigdata19          |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

# 4. 删除数据库
mysql> drop database bigdata19;
Query OK, 0 rows affected (0.14 sec)

# 5. 查看当前数据库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

# 6. 进入数据库
mysql> use mysql;
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

# 7. 进入mysql数据库(文件夹),查看此数据库下的所有表。
mysql>  show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| engine_cost               |
| event                     |
| func                      |
| general_log               |
| gtid_executed             |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| server_cost               |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
31 rows in set (0.00 sec)

# 8. 退出
mysql>exit;

三、数据表 管理

3.1 内置客户端操作

数据表常见操作的指令:

  • 进入数据库 use 数据库;,查看当前所有表:show tables;

  • 创建表结构
    image-20240126173438353

    -- 注意:今后工作中,表名不要以中文起名字,一律使用英文
    -- 尤其是今后你们毕业后从事大数据开发中的有一个项目类别叫做数据中台(数据仓库)
    create table 表名(
        列名  类型,
        列名  类型,
        列名  类型,
        列名  类型
    )default charset=utf8;
    
    -- 安徽省合肥市蜀山区天气
    -- ah_hf_ss
    -- anhui_hefei_shushan
    create table students(id int,name varchar(255),email varchar(255),age int)default charset=utf8;
    
    create table tb1(
    	id int,
        name varchar(16)
    )default charset=utf8;
    
    create table tb2(
    	id int,
        name varchar(16) not null,   -- 不允许为空
        email varchar(32) null,      -- 允许为空(默认)
        age int
    )default charset=utf8;
    
    create table tb3(
    	id int,
        name varchar(16) not null,   -- 不允许为空
        email varchar(32) null,      -- 允许为空(默认)
        age int default 3            -- 插入数据时,如果不给age列设置值,默认值:3
    )default charset=utf8;
    
    create table tb4(
    	id int primary key,			 -- 主键(不允许为空、不能重复)
        name varchar(16) not null,   -- 不允许为空
        email varchar(32) null,      -- 允许为空(默认)
        age int default 3            -- 插入数据时,如果不给age列设置值,默认值:3
    )default charset=utf8;
    
  
  主键一般用于表示当前这条数据的ID编号(类似于人的身份证),需要我们自己来维护一个不重复的值,比较繁琐。所以,在数据库中一般会将主键和自增结合。
  
create table tb5(id int not null auto_increment primary key,name varchar(16) not null,email varchar(32) null,age int default 3)default charset=utf8;

注意:一个表中只能有一个自增列【自增列,一般都是主键】。

  • 删除表 drop table 表名;

  • 清空表 delete from 表名;truncate table 表名;(速度快、无法回滚撤销等)

  • 修改表

    • 添加列

      alter table 表名 add 列名 类型;
      alter table 表名 add 列名 类型 DEFAULT 默认值;
      alter table 表名 add 列名 类型 not null default 默认值;
      alter table 表名 add 列名 类型 not null primary key auto_increment;
      
    • 删除列

      alter table 表名 drop column 列名;
      
    • 修改列 类型

      alter table 表名 modify column 列名 类型;
      
    • 修改列 类型 + 名称

      alter table 表名 change 原列名 新列名 新类型 额外的配置;
      
      alter table  tb change id nid int not null;
      alter table  tb change id id int not null default 5;
      alter table  tb change id id int not null primary key auto_increment;
      
      alter table  tb change id id int; -- 允许为空,删除默认值,删除自增。
      
    • 修改列 默认值

      ALTER TABLE 表名 ALTER 列名 SET DEFAULT 1000;
      
    • 删除列 默认值

      ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;
      
    • 添加主键

      alter table 表名 add primary key(列名);
      
    • 删除主键

      alter table 表名 drop primary key;
      
  • 常见列类型

    create table 表(
    	id int,
        name varchar(16)
    )default charset=utf8;
    
    • int[(m)][unsigned][zerofill]

      int				表示有符号,取值范围:-2147483648 ~ 2147483647
      int unsigned	表示无符号,取值范围:0 ~ 4294967295
      int(5)zerofill	仅用于显示,当不满足5位时,按照左边补0,例如:00002;满足时,正常显示。
      
      mysql> create table L1(id int, uid int unsigned, zid int(5) zerofill) default charset=utf8;
      Query OK, 0 rows affected (0.03 sec)
      
      mysql> insert into L1(id,uid,zid) values(1,2,3),(2147483641,4294967294,300000);
      Query OK, 1 row affected (0.00 sec)
      
      mysql> insert into L1(id,uid,zid) values(2147483641,4294967294,300000);
      Query OK, 1 row affected (0.00 sec)
      
      mysql> select * from L1;
      +------------+------------+--------+
      | id         | uid        | zid    |
      +------------+------------+--------+
      |          1 |          2 |  00003 |
      | 2147483641 | 4294967294 | 300000 |
      +------------+------------+--------+
      2 rows in set (0.00 sec)
      
      mysql> insert into L1(id,uid,zid) values(214748364100,4294967294,300000);
      ERROR 1264 (22003): Out of range value for column 'id' at row 1
      mysql>
      
    • tinyint[(m)] [unsigned] [zerofill]

      有符号,取值范围:-128 ~ 127.
      无符号,取值范围:0 ~ 255
      
    • bigint[(m)][unsigned][zerofill]

      有符号,取值范围:-9223372036854775808 ~ 9223372036854775807
      无符号,取值范围:0  ~  18446744073709551615
      
    • decimal[(m[,d])] [unsigned] [zerofill]

      准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。
      
      xxxxx.xx
      decimal(7,2)  1.1
      
      例如:
      create table L2(
      	id int not null primary key auto_increment,
      	salary decimal(8,2)
      )default charset=utf8;
      
      mysql> create table L2(id int not null primary key auto_increment,salary decimal(8,2))default charset=utf8;
      Query OK, 0 rows affected (0.03 sec)
      
      mysql> insert into L2(salary) values(1.28);
      Query OK, 1 row affected (0.01 sec)
      
      mysql> insert into L2(salary) values(5.289);
      Query OK, 1 row affected, 1 warning (0.00 sec)
      
      mysql> insert into L2(salary) values(5.282);
      Query OK, 1 row affected, 1 warning (0.00 sec)
      
      mysql> insert into L2(salary) values(512132.28);
      Query OK, 1 row affected (0.00 sec)
      
      mysql> insert into L2(salary) values(512132.283);
      Query OK, 1 row affected, 1 warning (0.00 sec)
      
      mysql> select * from L2;
      +----+-----------+
      | id | salary    |
      +----+-----------+
      |  1 |      1.28 |
      |  2 |      5.29 |
      |  3 |      5.28 |
      |  4 | 512132.28 |
      |  5 | 512132.28 |
      +----+-----------+
      5 rows in set (0.00 sec)
      
      mysql> insert into L2(salary) values(5121321.283);
      

    ERROR 1264 (22003): Out of range value for column ‘salary’ at row 1
    mysql>

    • FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
      单精度浮点数,非准确小数值,m是数字总个数,d是小数点后个数。
    
    • DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
      双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。
    
    • char(m)
      定长字符串,m代表字符串的长度,最多可容纳255个字符。
    
      定长的体现:即使内容长度小于m,也会占用m长度。例如:char(5),数据是:yes,底层也会占用5个字符;如果超出m长度限制(默认MySQL是严格模式,所以会报错)。
          如果在配置文件中加入如下配置,
              sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
          保存并重启,此时MySQL则是非严格模式,此时超过长度则自动截断(不报错)。。
    
      注意:默认底层存储是固定的长度(不够则用空格补齐),但是查询数据时,会自动将空白去除。 如果想要保留空白,在sql-mode中加入 PAD_CHAR_TO_FULL_LENGTH 即可。
      查看模式sql-mode,执行命令:show variables  like 'sql_mode';
    
      一般适用于:固定长度的内容。
    
      create table L3(
          id int not null primary key auto_increment,
          name varchar(5),
          depart char(3)
      )default charset=utf8;
    
      insert into L3(name,depart) values("alexsb","sbalex");
    
    • varchar(m)
      变长字符串,m代表字符串的长度,最多可容纳65535个字节。
    
      变长的体现:内容小于m时,会按照真实数据长度存储;如果超出m长度限制((默认MySQL是严格模式,所以会报错)。
          如果在配置文件中加入如下配置,
              sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
          保存并重启mysql服务,此时MySQL则是非严格模式,此时超过长度则自动截断(不报错)。
    
      例如:
      create table L3(
          id int not null primary key auto_increment,
          name varchar(5),
        depart char(3)
      )default charset=utf8;
    
    mysql> create table L3(id int not null primary key auto_increment,name varchar(5),depart char(3))default charset=utf8;
    Query OK, 0 rows affected (0.03 sec)
    
    -- 插入多行
    mysql> insert into L3(name,depart) values("wu","WU"),("xiaohu","ALS");
    Query OK, 2 rows affected (0.00 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> select * from L3;
    +----+-------+--------+
    | id | name  | depart |
    +----+-------+--------+
    |  1 | wu    | WU     |
    |  2 | xiaohu | ALS    |
    +----+-------+--------+
    2 rows in set (0.00 sec)
    
    -- 非严格模式下,不会报错。
    mysql> insert into L3(name,depart) values("xiaohuqi","ALS");
    ERROR 1406 (22001): Data too long for column 'name' at row 1
    mysql> insert into L3(name,depart) values("xiaohu","ALSB");
    ERROR 1406 (22001): Data too long for column 'depart' at row 1
    mysql>
    
    -- 如果 sql-mode 中加入了 PAD_CHAR_TO_FULL_LENGTH ,则查询时char时空白会保留。
    mysql> select name,length(name),depart,length(depart) from L3;
    +-------+--------------+--------+----------------+
    | name  | length(name) | depart | length(depart) |
    +-------+--------------+--------+----------------+
    | wu    |            2 | WU     |              3 |
    | xiaohu |            5 | ALS    |              3 |
    +-------+--------------+--------+----------------+
    4 rows in set (0.00 sec)
    mysql>
    
    • text

      text数据类型用于保存变长的大字符串,可以组多到65535 (2**16 − 1)个字符。
      
      一般情况下,长文本会用text类型。例如:文章、新闻等。
      
      create table L4(
      	id int not null primary key auto_increment,
          title varchar(128),
      content text
      )default charset=utf8;
      
    
    - `mediumtext`
    
    

    A TEXT column with a maximum length of 16,777,215 (2**24 − 1) characters.

    
    - `longtext`
    
    

    A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 − 1)

    
    - `datetime`
    
    

    YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59)

    
    - `timestamp`
    
    

    YYYY-MM-DD HH:MM:SS(1970-01-01 00:00:00/2037年)

    
    

    对于TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储,查询时,将其又转化为客户端当前时区进行返回。

    对于DATETIME,不做任何改变,原样输入和输出。

    
    ```sql
    mysql> create table L5(
        -> id int not null primary key auto_increment,
        -> dt datetime,
        -> tt timestamp
        -> )default charset=utf8;
    Query OK, 0 rows affected (0.03 sec)
    
    mysql> insert into L5(dt,tt) values("2025-11-11 11:11:44", "2025-11-11 11:11:44");
    
    mysql> select * from L5;
    +----+---------------------+---------------------+
    | id | dt                  | tt                  |
    +----+---------------------+---------------------+
    |  1 | 2025-11-11 11:11:44 | 2025-11-11 11:11:44 |
    +----+---------------------+---------------------+
    1 row in set (0.00 sec)
    
    mysql> show variables like '%time_zone%';
    +------------------+--------+
    | Variable_name    | Value  |
    +------------------+--------+
    | system_time_zone | CST    | 
    | time_zone        | SYSTEM |
    +------------------+--------+
    2 rows in set (0.00 sec)
    -- “CST”指的是MySQL所在主机的系统时间,是中国标准时间的缩写,China Standard Time UT+8:00
    
    mysql> set time_zone='+0:00';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show variables like '%time_zone%';
    +------------------+--------+
    | Variable_name    | Value  |
    +------------------+--------+
    | system_time_zone | CST    |
    | time_zone        | +00:00 |
    +------------------+--------+
    2 rows in set (0.01 sec)
    
    mysql> select * from L5;
    +----+---------------------+---------------------+
    | id | dt                  | tt                  |
    +----+---------------------+---------------------+
    |  1 | 2025-11-11 11:11:44 | 2025-11-11 03:11:44 |
    +----+---------------------+---------------------+
    1 row in set (0.00 sec)
    
    • date
      YYYY-MM-DD(1000-01-01/9999-12-31)
    
    • time
      HH:MM:SS('-838:59:59'/'838:59:59')
    

    今后建表的时候,遇到整数默认用int 长整数bigint, 如果遇到字符串,默认用varchar(xx), 小数默认decimal(m,n), 遇到时间,默认使用timestamp。

    MySQL还有很多其他的数据类型,例如:set、enum、TinyBlob、Blob、MediumBlob、LongBlob 等,详细见官方文档:https://dev.mysql.com/doc/refman/5.7/en/data-types.html,上述就是关于数据表的一些基本操作。

四、SQL-DQL

概念

​ 关系模型中常用的概念:

​ 关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名

​ 记录:可以理解为二维表中的一行,在数据库中经常被称为记录

​ 字段:可以理解为二维表中的一列,在数据库中经常被称为字段

​ 域:属性的取值范围,也就是数据库中某一列的取值限制

​ 关键字:一组可以唯一标识记录的属性,数据库中常称为主键,由一个或多个列组成

​ 关系模式:指对关系的描述。其格式为:关系名(属性1,属性2, … … ,属性N),在数据库中成为表结构

scott用例表

​ emp 员工信息表

表名emp
字段名中文类型是否可以为空默认值其他说明
empno雇员编号int(11)主键
ename雇员名称varchar(255)
job岗位工种varchar(255)
mgr上级int(11)
hiredate雇佣日期date
sal工资decimal
comm奖金|津贴decimal
deptno部门编号int(11)
备注

​ dept 部门信息表

表名dept
主键deptno
字段名中文类型是否可以为空默认值其他说明
deptno部门编号int(11)主键
dname部门名称varchar (255)
loc地址varchar2(255)
备注

​ salgrade 薪资区间表

表名salgrade
主键
字段名中文类型是否可以为空默认值其他说明
grade等级int(11)
losal最低int(11)
hisal最高int(11)
DQL语句

格式

​ select 列名*N from 表名 where 查询条件1 and/or 查询条件2 group by 列 Having 分组条件 Order by 排序

规则

​ sql在书写的时候除了查询条件之外,大小写都可以

​ select * from user where uname =‘zs’;

​ SELECT * FROM USER WHERE UNAME = ‘zs’;

​ 保持大小写风格

​ 去公司之后需要看其他员工SQL大小写

​ – 属于SQL语句的注释

​ 所有的查询条件为字符串时,需要用’xxx’进行修饰,否则就会当做列名去处理

select查询列和别名

--查询所有员工信息(*通配符,默认查询所有的列)

--查询员工的姓名

--查询员工的薪资

--查询员工的姓名和薪资

--查询员工的姓名和薪资,推荐使用单引号

--查询到的数据可以直接进行运算

select的条件查询

​ 普通条件查询 => < != <> >= <=

--查询员工编号为7369的员工

--查询员工姓名叫做SMITH

--查询薪资大于2000的员工姓名

--查询工作为SALESMAN

--查询部门在20的员工

--查询薪资不等于2000的员工

​ in 在某个范围中查找

--查询 员工编号为 7369 7788 7881的员工信息

--查询 员工编号除了 7369 7788 7881之外的所有员工信息

--查询除了10,20部门之外的所有员工

​ null值查询

--查询不发放津贴的员工信息

--查询发放津贴的员工信息

​ 范围比较

-- 查询薪资范围在1000-4000之间的员工信息 [1000.4000]

​ 模糊查询 % _

--查询名字中有S的员工

--查询名字最后一个字符是S

--查询名字第一个字符是S

--查询名字第二个字符是A

--查询名字中有%的员工
--查询名字第8 188个字符是A,这是需要一些特殊的手段-》函数
-- % 代表任意字符的任意次数 _任意字符的一次

​ 多条件联合查询 and or

--and 必须前后同时满足条件才能返回结果
--or前后有一个满足条件就能返回结果

--查询在20部门并且薪资大于2000的员工

--查询在20部门或者薪资大于2000的员工

--查询不在20部门并且薪资小于2000的员工

select结果排序 order by

使用asc是升序排列(默认),使用desc可以降序排序

​ 单列

--按照薪资进行排序(默认升序)

--按照薪资进行排序(降序)

--按照薪资进行排序(升序)

--按照津贴进行排序(null排在最前面)

​ 多列

--多个排序的列

--多个排序的列(部门升序 薪资降序)

--多个排序的列(工作,薪资)

select结果分页

--每次查询前N行
 
--查询第N页,每页显示M个
--查询薪资大于1000的逆序排列,然后显示前5条记录

SQL语句错误

select enane from emp

1054 - Unknown column ‘enane’ in ‘field list’

将来出现错误的时候,直接将错误编号输入到百度查询即可

贴的员工信息

–查询发放津贴的员工信息


​	范围比较

```sql
-- 查询薪资范围在1000-4000之间的员工信息 [1000.4000]

​ 模糊查询 % _

--查询名字中有S的员工

--查询名字最后一个字符是S

--查询名字第一个字符是S

--查询名字第二个字符是A

--查询名字中有%的员工
--查询名字第8 188个字符是A,这是需要一些特殊的手段-》函数
-- % 代表任意字符的任意次数 _任意字符的一次

​ 多条件联合查询 and or

--and 必须前后同时满足条件才能返回结果
--or前后有一个满足条件就能返回结果

--查询在20部门并且薪资大于2000的员工

--查询在20部门或者薪资大于2000的员工

--查询不在20部门并且薪资小于2000的员工

select结果排序 order by

使用asc是升序排列(默认),使用desc可以降序排序

​ 单列

--按照薪资进行排序(默认升序)

--按照薪资进行排序(降序)

--按照薪资进行排序(升序)

--按照津贴进行排序(null排在最前面)

​ 多列

--多个排序的列

--多个排序的列(部门升序 薪资降序)

--多个排序的列(工作,薪资)

select结果分页

--每次查询前N行
 
--查询第N页,每页显示M个
--查询薪资大于1000的逆序排列,然后显示前5条记录

SQL语句错误

select enane from emp

1054 - Unknown column ‘enane’ in ‘field list’

将来出现错误的时候,直接将错误编号输入到百度查询即可

标签:--,数据库,MySQL,查询,int,mysql,增删,table
From: https://blog.csdn.net/lou0720/article/details/144492440

相关文章

  • MySQL基础函数使用
    DQL中的函数#官方函数链接https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format4.1单行函数函数都是数据库提前给我们准备好的,所以我们可以直接调用,使用函数可以让指定的列计算出我们需要的数据单行函数:指的是操作一行......
  • MySQL 插入一条 SQL 语句,redo log 记录的是什么?
    MySQL插入一条SQL语句,redolog记录的内容在MySQL的InnoDB存储引擎中,redolog(重做日志)主要用来保证事务的持久性和崩溃恢复能力。redolog记录的是对数据页的物理变更,而不是SQL语句本身。当执行一条插入语句时,redolog的记录主要包括对数据页的修改信息,以及事务相关......
  • MySQL 无法远程连接?
    MySQL无法远程连接?先看清楚报错信息,一般都有解答。虽然报错信息写的有点难懂0.云服务器商防火墙与服务器防火墙请登陆你的云服务器防火墙管理web进行相关配置。服务器本身的防火墙配置可以使用:sudoufwstatusSTFW!1.mysqldeamon配置问题/etc/mysql/mysql.conf.......
  • 超大规模数据库集群保稳系列:数据库攻防演练建设实践11
     01背景1.1初识混沌工程首先我们先了解一下什么是混沌工程?简单而言,混沌工程是在系统上进行实验的技术手段,目的是建立对系统抵御生产环境中失控条件的能力以及信心。这主要体现在两个方面,从系统角度来讲,混沌工程可以提升我们架构的容错能力和韧性,降低故障发生率和复发率,提......
  • 超大规模数据库集群保稳系列:数据库攻防演练建设实践8
     01背景1.1初识混沌工程首先我们先了解一下什么是混沌工程?简单而言,混沌工程是在系统上进行实验的技术手段,目的是建立对系统抵御生产环境中失控条件的能力以及信心。这主要体现在两个方面,从系统角度来讲,混沌工程可以提升我们架构的容错能力和韧性,降低故障发生率和复发率,提......
  • 什么是数据库的逻辑删除?数据库的物理删除和逻辑删除有什么区别?
    数据库的逻辑删除逻辑删除是指通过标记的方式将数据标记为删除状态,而不直接从数据库中删除该数据。这通常通过在表中增加一个“删除标志”字段(例如is_deleted或status)来实现。逻辑删除的数据通常在业务逻辑中被忽略,但在数据库中仍然存在。逻辑删除的特点保留数据:数据并未被......
  • 什么是数据库的逻辑外键?数据库的物理外键和逻辑外键各有什么优缺点?
    什么是数据库的逻辑外键?逻辑外键是指通过业务逻辑在代码层面维护外键约束,而不是使用数据库中定义的物理外键。逻辑外键通常通过程序保证表之间的关联性和约束关系,例如在插入、更新或删除数据时,依靠应用程序的逻辑代码来校验关联关系。数据库的物理外键物理外键是通过数据库的外......
  • MySQL 事务的二阶段提交是什么?
    MySQL事务的二阶段提交是什么?二阶段提交(Two-PhaseCommit,2PC)是分布式事务中的一种协调协议,用于确保多个资源(如数据库或数据节点)在事务提交时保持一致性。MySQL在存储引擎(如InnoDB)和Binlog(归档日志)之间使用二阶段提交来保证事务的一致性。在MySQL中,二阶段提交的典型场景......
  • MySQL 三层 B+ 树能存多少数据?
    MySQL三层B+树能存多少数据?MySQL的B+树索引结构广泛用于存储引擎(如InnoDB)中,用于实现高效的查询。B+树的高度和每一层的节点数量直接影响其存储能力。以下是计算三层B+树能存储的数据量的过程。B+树的存储结构概述节点大小:在InnoDB中,B+树的每个节点(页)大小通常......
  • MySQL 在设计表(建表)时需要注意什么?
    MySQL在设计表(建表)时需要注意的要点设计数据库表是MySQL开发中非常重要的一环。合理的表结构设计可以提升性能、减少存储开销,并提高维护性。以下是一些关键的注意事项:1.明确需求和数据建模在建表前,应深入了解业务需求,完成详细的数据建模。使用工具(如ER图)设计清晰的表......