Mysql入门

古城微笑少年丶 2022-05-29 02:25 202阅读 0赞

一、SQL包含四种程序设计语言类别的语句:

1、数据定义语言Data Definition Language(DDL), DDL使我们有能力创建或删除表格。也可以定 义索引(键),规定表之间的链接。
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引

2、数据操作语言Data Manipulation Language(DML)
供用户实现对数据的追加、删除、更新、查询等操作。
SELECT - 从数据库表中获取数据
UPDATE - 更新数据库表中的数据
DELETE - 从数据库表中删除数据
INSERT INTO - 向数据库表中插入数据

3、数据控制语言Data Control Language(DCL)
GRANT - 授权
REVOKE - 撤销授权
DENY - 拒绝授权

4、和事物控制语言(TCL)
SAVEPOINT - 设置保存点
ROLLBACK - 回滚
COMMIT - 提交

二、Mysql入门操作

1、链接数据库: mysql -h localhost -u root -p (-h 服务器的主机名 -u 用户 -p 密码)

2、数据库操作

  1. 创建数据: create database mydb;
  2. 显示数据: show databases;
  3. 创建表:
  4. ![70][]
  5. 查看表结构:desc t\_user;
  6. ![format_png][]

三、 select语句使用

  1. 先创建一张树表:
  2. DROP TABLE IF EXISTS `t_tree`;
  3. CREATE TABLE `t_tree` (
  4. `id` int(11) NOT NULL AUTO_INCREMENT,
  5. `pid` int(11) NOT NULL,
  6. `name` varchar(255) NOT NULL,
  7. `code` varchar(255) DEFAULT NULL,
  8. `is_parent` int(11) NOT NULL COMMENT '0 父节点 1子节点',
  9. `open` int(11) DEFAULT '0' COMMENT '1、展开 0收缩',
  10. `checked` int(11) DEFAULT '0' COMMENT '1、选中 0不选中',
  11. `val` int(11) DEFAULT NULL,
  12. `is_action` int(11) DEFAULT NULL,
  13. PRIMARY KEY (`id`)
  14. ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

1、使用select将is_parent=1的查询出来作为“父节点”,is_parent!=1的作为“子节点”;

  1. 使用if语句:
  2. SELECT id,IF(is_parent=1,"父节点","子节点") as node_name FROM t_tree;
  3. 使用case when语句:
  4. SELECT id,CASE WHEN is_parent=1 THEN "父节点" ELSE "子节点" END as node_name FROM t_tree;

2、like模糊查询

  1. 查询所有以“用户”开头的所有记录
  2. SELECT * from t_tree WHERE `name` LIKE "用户%"; `
  3. 创建一个新闻表t\_news和新闻的评论表t\_comment;
  4. 创建新闻表
  5. DROP TABLE IF EXISTS `t_news`;
  6. CREATE TABLE `t_news` (
  7. `id` int(11) NOT NULL AUTO_INCREMENT,
  8. `news_id` char(255) NOT NULL,
  9. `author_id` int(11) NOT NULL,
  10. `news_title` varchar(255) NOT NULL,
  11. `news_content` text NOT NULL,
  12. `news_imgs` text,
  13. `create_time` varchar(255) NOT NULL DEFAULT '0000-00-00 00:00:00',
  14. `update_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
  15. PRIMARY KEY (`id`),
  16. KEY `newsId` (`news_id`)
  17. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
  18. 创建评论表
  19. DROP TABLE IF EXISTS `t_comment`;
  20. CREATE TABLE `t_comment` (
  21. `id` int(11) NOT NULL AUTO_INCREMENT,
  22. `comment_id` varchar(255) NOT NULL,
  23. `comment_content` varchar(255) NOT NULL,
  24. `comment_imgs` text NOT NULL,
  25. `create_time` varchar(255) NOT NULL DEFAULT '0000-00-00 00:00:00',
  26. `news_id` int(11) NOT NULL,
  27. `user_id` int(11) NOT NULL,
  28. `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  29. PRIMARY KEY (`id`),
  30. KEY `news_id` (`news_id`),
  31. CONSTRAINT `news_id` FOREIGN KEY (`news_id`) REFERENCES `t_news` (`id`)
  32. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
  33. t\_news测试数据

70 1 t_comment 测试数据70 2

3、等值查询,查询所有右评论的新闻和新闻对应的评论

  1. SELECT n.id,n.news_title,n.news_content,n.news_imgs,c.news_id,c.comment_content,c.comment_imgs FROM t_news AS n,t_comment AS c WHERE n.id=c.news_id;

4、左外连接

  1. SELECT n.id,n.news_content,c.comment_content,c.comment_imgs FROM t_news AS n LEFT JOIN t_comment as c ON n.id=c.news_id;
  2. 查询结果(观察查询结果可以看出,左连接的主表是左边表t\_news,查询t\_news全部, t\_comment对应无记录的null填充) ![70 3][]

5、右外连接

SELECT n.id,n.news_title,n.news_content,n.news_imgs,c.news_id,c.comment_content,c.comment_imgs FROM t_news AS n RIGHT JOIN t_comment AS c ON n.id=c.news_id;

查询结果(观察查询结果可以看出,右连接查询主表是右边表,即查询t_commetns的所有记录)

70 4

6、select嵌套查询

  1. 查看新闻作者id5的新闻的所有评论
  2. SELECT * FROM t_comment AS c WHERE c.news_id in(SELECT n.id FROM t_news AS n WHERE n.author_id=5);

7、select max group by 行列变换

  1. DROP TABLE IF EXISTS `t_score`;
  2. CREATE TABLE `t_score` (
  3. `id` int(11) NOT NULL AUTO_INCREMENT,
  4. `subject` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  5. `num` double DEFAULT NULL,
  6. `name` varchar(255) DEFAULT NULL,
  7. PRIMARY KEY (`id`)
  8. ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
  9. -- ----------------------------
  10. -- Records of t_score
  11. -- ----------------------------
  12. INSERT INTO `t_score` VALUES ('1', '语文', '78', '刘翠');
  13. INSERT INTO `t_score` VALUES ('2', '数学', '85', '刘翠');
  14. INSERT INTO `t_score` VALUES ('3', '英语', '89', '刘翠');
  15. INSERT INTO `t_score` VALUES ('4', '物理', '70', '刘翠');
  16. INSERT INTO `t_score` VALUES ('5', '化学', '65', '刘翠');
  17. INSERT INTO `t_score` VALUES ('6', '语文', '99', '刘萍');
  18. INSERT INTO `t_score` VALUES ('7', '数学', '69', '刘萍');
  19. INSERT INTO `t_score` VALUES ('8', '英语', '79', '刘萍');
  20. INSERT INTO `t_score` VALUES ('9', '物理', '80', '刘萍');
  21. INSERT INTO `t_score` VALUES ('10', '化学', '78', '刘萍');
  22. SELECT `name`,
  23. MAX(CASE subject WHEN '语文' THEN num END) AS 语文,
  24. MAX(CASE subject WHEN '数学' THEN num END) AS 数学,
  25. MAX(CASE subject WHEN '英语' THEN num END) AS 英语,
  26. MAX(CASE subject WHEN '物理' THEN num END) AS 物理,
  27. MAX(CASE subject WHEN'化学' THEN num END) AS 化学
  28. FROM t_score GROUP BY `name`;

四、mysql数据库事务

mysql架构图

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlbmdjaGVuZ3d1MjAxMg_size_16_color_FFFFFF_t_70

  1. MySQL 事务主要用于处理操作量大,复杂度高的数据,在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务,事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行,事务用来管理 insert,update,delete 语句。一般来说,事务是必须满足4个条件(ACID),原子性(**A**tomicity,或称不可分割性)、一致性(**C**onsistency)、隔离性(**I**solation,又称独立性)、持久性(**D**urability):

原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样,回滚主要是利用undo log日志实现;

一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作;

隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable),使用mvcc可见性算法实现;

持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失,通过innodb的redo log 实现。

1、用 BEGIN, ROLLBACK, COMMIT来实现

  1. BEGIN 开始一个事务
  2. ROLLBACK 事务回滚
  3. COMMIT 事务确认

2、直接用 SET 来改变 MySQL 的自动提交模式:

  1. SET AUTOCOMMIT=0 禁止自动提交
  2. SET AUTOCOMMIT=1 开启自动提交

3、查看数据库隔离级别

  1. show variables like "%tx\_iso%";

4、MVCC(多版本并发控制,Multi-Version concurrentncy Control)

  1. mvcc主要是为了提高数据库并发性能,同一行数据有读写操作的时候,会上锁阻塞,,mvcc用更好的方式去处理读写请求,使得发生读写请求冲突时不用加锁。在mvcc中读是快照读,而不是当前读,当前读是悲观锁,那么是么是快照读和当前读
  2. 当前读是指读取数据库的记录,都是当前最新版本,会对当前读取的数据进行加锁,防止其他事物修改数据,是悲观锁的操作,常见的当前读有:
  3. 共享锁:select lock in share mode
  4. 排它锁:select ... for update
  5. 排它锁:update insertdelete
  6. 快照读主要涉及到undo logreadview。每张表的单行记录除了用户自定义的字段外,还有三个字段变量对用户是不可见的,即:
  7. db\_trx\_id(自增的事务id)
  8. db\_roll\_pointer(回滚指针)
  9. db\_row\_id(隐藏主键)
  10. 一行记录再有事务操作时,trx\_id会自增一次,并将这条记录存放到undolog中,而roll\_pointer则指向undolog该条记录中的上一个版本,即trx\_id小于自己的上一个,这样就形成一个版本链。
  11. 那么一旦需要回滚,当前记录是如何确认自己在哪一个版本版本链中呢,这里就需要救助另一个视图,即readviewreadview中记录着四个字段:
  12. m\_ids(表示在生成readview时当前系统中活跃的读写事务trx\_idl列表,即还未commit的事务)
  13. min\_trx\_id(生成readview时当前系统中活跃的读写事务中最小的事务id,即m\_ids的最小值)
  14. max\_trx\_id(生成readview时系统中应该分配该下一个事务的id值)
  15. creator\_trx\_id(生成readview时事务的‘事务id’)
  16. 有了read view中的这些参数,mysql的使用以下的可见性算法来得到版本链中可用的版本
  17. trx\_id == crator\_trx\_id 可以访问这个版本
  18. trx\_id < min\_trx\_id: 可以访问这个版本
  19. trx\_id > max\_trx\_id : 不可以访问这个版本
  20. min\_trx\_id<=trx\_id <=max\_trx\_id 如果trx\_idm\_ids中是不可以访问这个版本
  21. 当开启事务后,当做select是就会产生read view

发表评论

表情:
评论列表 (有 0 条评论,202人围观)

还没有评论,来说两句吧...

相关阅读

    相关 mysql入门

    连接数据库 A:用命令连接mysql(注意-h -u -p之后都是直接连ip用户名和密码,没有空格,示列如下) mysql -h127.0.0.1 -uroot  -p12

    相关 mysql入门

    连接数据库 A:用命令连接mysql(注意-h -u -p之后都是直接连ip用户名和密码,没有空格,示列如下) mysql -h127.0.0.1 -uroot  -p12

    相关 Mysql入门

    一、SQL包含四种程序设计语言类别的语句: 1、数据定义语言Data Definition Language(DDL), DDL使我们有能力创建或删除表格。也可以定   

    相关 MySQL入门(上)

    什么是数据库? [数据库的详细介绍][Link 1] 想详细了解数据库是什么的可以直接点击上面的连接查看. 在此我们只需要简单了解一下数据库即可. 从字面

    相关 MySQL入门

    MySQL入门 数据库简介 用途:用于存储生活的一切数据,如:身份、住房、车票、网站、… 概念:数据库服务器、数据库、数据表、一行数据(一条)、一列数据

    相关 MySQL入门

      目录 数据库引擎 索引 数据结构 b+tree hash full-text b+tree索引 聚集索引 非聚集索引 b+tree索引的应用 主键索

    相关 Mysql 入门

    > 数据库就是一种特殊的文件,其中存储着需要的数据 一:操作数据库 1.1 命令行 连接 mysql -uroot -p 回车后输入密码,当前