数据库部分---day3

文章目录

        • 1 数据操作
          • 1.1 修改指定的数据
          • 1.2 删除指定的数据
          • 1.3 统计数量
          • 1.4 删除指定的表
        • 2 Mysql 表与表之间的三种关系
          • 2.1 一对一
          • 2.2 一对多
          • 2.3 多对多
        • 3 Mysql 笛卡尔积连接、内连接、左外连接、右外连
        • 4 Mysql 索引
          • 4.1 创建普通索引
          • 4.2 查看索引
          • 4.3 删除索引
          • 4.4 创建唯一索引(主键是一种唯一索引)
          • 4.5 另外一种创建和删除方式
        • 5 Mysql 事务
        • 6 Mysql 锁
          • 6.1 添加读锁
          • 6.2 添加写锁

SQL的执行顺序: from join on where group by having select distinct order by limit

1 数据操作

有了解的同学可以直接掠过,我就简要写一些常用的命令

1.1 修改指定的数据
UPDATE users SET status = 10 WHERE username='ityi;
1.2 删除指定的数据
DELETE FROM users WHERE username='php'
1.3 统计数量
select count(1) from nav
select id,name from nav limit 2;
select id,name from nav limit 2,2;
1.4 删除指定的表
DROP TABLE test;
2 Mysql 表与表之间的三种关系
2.1 一对一

查找一个文章并显示每个文章的分类
这里有用到join on 我就写一下解释吧
join说白了就是两个表合在一起了可能有相同的列,就是
第一章表的每一行和第二章表的每一张匹配,如果第一章表有两行
第二张表为三行得到的新表里面就有2*3=6行,on后面跟着限制条件
我觉得和where是差不多的作用效果

2.2 一对多
2.3 多对多
3 Mysql 笛卡尔积连接、内连接、左外连接、右外连

查询数据的时候能不用连接语句尽量不要使用,笛卡尔积连接查询速度最慢,项目中用的比
较多的是内连接
内连接:inner join只返回两个表中连接字段相等的行。
左外连接:left join返回包括左表中的所有记录和右表中连接字段相等的记录。
右外连:right join返回包括右表中的所有记录和左表中连接字段相等的记录。

4 Mysql 索引

MySQL 索引的建立对于 MySQL 的高效运行是很重要的,索引可以大大提高 MySQL 的检索速度。
如果没有索引,执行查询时候必须从第一条记录开始,扫描整个表的记录,直到符合要求的记录。如果有了索引,mysql 无需扫描任何记录即可顺序找到目标记录的位置。简单说来, 索引就是提高查找数据速度,数据量越多,效果越明显。

4.1 创建普通索引
CREATE INDEX indexName ON mytable(username);
create index index_name on class(name);
4.2 查看索引
show index from table_name
show index from class
show index from class\G
4.3 删除索引
drop index index_name on class
4.4 创建唯一索引(主键是一种唯一索引)
create unique index index_name on class(name)
4.5 另外一种创建和删除方式
alter table class add index index_name(name);
alter table class add unique index_name(name);
alter table class drop index index_name;

Mysql 中常见的索引类型有普通索引、唯一索引、全文索引、空间索引 Spatial这部分内容我慢慢补充吧,我后面写项目的时候一步步帮大家补充完整。

5 Mysql 事务

事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
目的就是保证事务的一致性,防止出现程序错误或数据库没法连接等异常情况导致数据库的不一致
Mysql 中用 BEGIN, ROLLBACK, COMMIT来实现事务:

   - BEGIN 开始一个事务
   - ROLLBACK 事务回滚
   - COMMIT 事务确认

建表的例子:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0

CREATE TABLE `user` (
`id` int(0) NOT NULL AUTO_INCREMENT, 
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, 
`balance` decimal(10, 2) NULL DEFAULT NULL, 
 PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

INSERT INTO `user` VALUES (1, '张三', 100.00);
INSERT INTO `user` VALUES (2, '李四', 100.00);
SET FOREIGN_KEY_CHECKS = 1;

事务的执行:

begin;
update user set balance = balance-100 where id=1
rollback;

注意:
发现一个问题是命令行执行后的结果和Navicat执行后直接查看表的结果会有区别:
是因为只有commit之后表中内容才会发生改变,事务才会执行。
还有一个点要注意,rollback只能在事务里面才能回滚。

6 Mysql 锁

Mysql 中的锁有表级锁行级锁,这里主要给大家讲讲最常用的表级锁

6.1 添加读锁

可以并发读,但是不能并发写,读锁期间,没释放锁之前不能进行写操作。

lock table user read;
unlock tables

使用场景:读取结果集的最新版本,同时防止其他事务产生更新该结果集 主要用在需要数据依存关系时确认某行记录是否存在,并确保没有人对这个记录进行 UPDATE 或者 DELETE 操作

6.2 添加写锁

只有锁表的用户可以进行读写操作,其他用户不行 (并发下对商品库存的操作)

lock table user write;
unlock tables

你可能感兴趣的:(Go,Web(gin框架),mysql,sql)