MySQL学习笔记

合集下载

MySql-Mysql技术内幕~SQL编程学习笔记(1)

MySql-Mysql技术内幕~SQL编程学习笔记(1)

MySql-Mysql技术内幕~SQL编程学习笔记(1)1、MySQL的历史,⼀些相关概念。

2、MySQL数据类型*通常⼀个页内可以存放尽可能多的⾏,那么数据库的性能就越好,选择⼀个正确的数据类型⾄关重要。

1》UNSIGNED类型:将数字类型⽆符号化。

2》ZEROFILL:可以格式化整形显⽰,⼀旦启⽤该属性,MySQL数据库为列⾃动添加UNSIGNED属性。

0填充。

3》⽇期和时间类型⽇期数据类型占⽤空间的情况类型起始范围结束范围DATETIME1000-01-01 00:00:009999-12-31 23:59:59DATE1000-01-019999-12-31TIMESTAMP1970-01-01 00:00:002038-01-19 03:14:07YEARTIMETIMESTAMP与DATETIME显⽰的格式⼀样,但有些不同的地⽅:1>表⽰的时间范围不同2>TIMESTAMP类型的列可以设置⼀个默认值,⽽DATETIME类型不可以。

3>TIMESTAMP类型在更新表时可以设置⾃动更新为当前时间。

3》和⽇期时间相关的函数1>获取当前系统时间:now()、current_timestamp()、sysdate()1>>now():返回执⾏sql时的时间2>>current_timestamp():返回执⾏sql时的时间3>>sysdate():返回执⾏到当前sql时的时间2>时间加减函数:1>>date_add(date,interval expr unit):date_add(now(),interval 1 day)。

expr可正可负。

unit的值有year、month、day、hour、minute、second、microsecond、week。

2>>date_sub(date,interval expr unit):date_sub(now(),interval 1 day)。

MySQL学习笔记:生成一个时间序列

MySQL学习笔记:生成一个时间序列
T (SELECT @i := -1) t;END源自2018-05-29 00:55:32
博客园 用户登录 代码改变世界 密码登录 短信登录 忘记登录用户名 忘记密码 记住我 登录 第三方登录/注册 没有账户, 立即注册
MySQL学 习 笔 记 : 生 成 一 个 时 间 序 列
今天遇到一个需求是生成以下表格的数据,一整天24小时,每秒一行数据。
寻找颇旧,找到另外两个实现的例子,暂且学习一翻。另一个见另外一篇。
其中,SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1是为了生成一个虚拟的表格,这样子可以生 成一样多的行数,此次可用T表代替,只需满足T表数据量大于所需即可。
SELECT DATE_ADD('2018-01-01',INTERVAL @i := @i + 1 DAY) AS DATE FROM
SELECT DATE_ADD('2018-01-01',INTERVAL @i := @i + 1 DAY) AS DATE FROM (SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1) AS tmp, (SELECT @i := -1) t;

MySQL实战45讲(学习笔记)

MySQL实战45讲(学习笔记)

MySQL实战45讲(学习笔记)本系列是学习极客时间林晓斌的《MySQL实战45讲》系列的学习笔记。

原⽂链接:https:///column/intro/13901 基础架构:⼀条SQL查询语句是如何执⾏的?https:///fengfeng2861285642/article/details/85131474https:///u014737928/article/details/85060991https:///u012131610/article/details/9005153502 ⽇志系统:⼀条SQL更新语句是如何执⾏的?https:///fengfeng2861285642/article/details/85712388https:///u014737928/article/details/85062279https:///u012131610/article/details/9005278703 事务隔离:为什么改了还看不见?https:///u014737928/article/details/99731828https:///u012131610/article/details/9016857804 深⼊浅出索引(上)https:///u012131610/article/details/9017404105 深⼊浅出索引(下)https:///u012131610/article/details/9017695306 全局锁和表锁:给表加个字段怎么有这么多阻碍?https:///u012131610/article/details/9019993807 ⾏锁功过:怎么减少⾏锁对性能的影响?https:///u012131610/article/details/9020891308 事务到底是隔离的还是不隔离的?https:///u012131610/article/details/9022900309 普通索引和唯⼀索引,应该怎么选择?https:///u012131610/article/details/9026055810 MySQL为什么有时候会选错索引?https:///u012131610/article/details/9027003111 怎么给字符串字段加索引?https:///u012131610/article/details/9039965212 为什么我的MySQL会“抖”⼀下?https:///u012131610/article/details/9043686713 为什么表数据删掉⼀半,表⽂件⼤⼩不变?https:///u012131610/article/details/9059947714 count(*)这么慢,该怎么办?https:///u012131610/article/details/9063344215 答疑⽂章(⼀):⽇志和索引相关问题https:///u012131610/article/details/9256390816 “order by”是怎么⼯作的?https:///u012131610/article/details/9071048517 如何正确地显⽰随机消息?https:///u012131610/article/details/9074652218 为什么这些SQL语句逻辑相同,性能却差异巨⼤?https:///u012131610/article/details/9103878919 为什么只查⼀⾏的语句,也执⾏这么慢?https:///u012131610/article/details/9141115220 幻读是什么,幻读有什么问题?https:///u012131610/article/details/9148902321 为什么我只改⼀⾏的语句,锁这么多?https:///u012131610/article/details/9178131722 MySQL有哪些“饮鸩⽌渴”提⾼性能的⽅法?https:///u012131610/article/details/9296907423 MySQL是怎么保证数据不丢的?https:///u012131610/article/details/9993657224 MySQL是怎么保证主备⼀致的?https:///u012131610/article/details/10000775225 MySQL是怎么保证⾼可⽤的?https:///u012131610/article/details/10003019226 备库为什么会延迟好⼏个⼩时https:///u012131610/article/details/100090270 27 主库出问题了,从库怎么办?https:///u012131610/article/details/100112609 28 读写分离有哪些坑https:///u012131610/article/details/100112952 29 如何判断⼀个数据库是不是出问题?https:///u012131610/article/details/100113348 30 答疑⽂章(⼆):⽤动态的观点看加锁https:///u012131610/article/details/100129983 31 误删数据后除了跑路,还能怎么办?https:///u012131610/article/details/100130039 32 为什么还有kill不掉的语句?https:///u012131610/article/details/100130460 33 查这么多数据,会不会把数据库内存撑爆?https:///u012131610/article/details/97107364 34 到底可不可以使⽤join?https:///u012131610/article/details/93158401 35 join语句怎么优化https:///u012131610/article/details/97240601 36 为什么临时表可以重名https:///u012131610/article/details/97757120 37 什么时候会使⽤内部临时表https:///u012131610/article/details/97884757 38 都说InnoDB好,那还要不要使⽤Memory引擎https:///u012131610/article/details/98028479 39 ⾃增主键为什么不是连续的?https:///u012131610/article/details/98168871 40 insert语句的锁为什么这么多?https:///u012131610/article/details/98937622 41 怎么最快的复制⼀张表https:///u012131610/article/details/99406030 42 grant之后要跟着flsh privileges吗?https:///u012131610/article/details/99539832 43 要不要使⽤分区表https:///u012131610/article/details/99620613 44 答疑(三)https:///u012131610/article/details/99670766 45 ⾃增id⽤完了怎么办?https:///u012131610/article/details/99714097《MySQL实战45讲》1~15讲https:///zxcc1314/article/details/84842650《MySQL实战45讲》16~30讲https:///zxcc1314/article/details/85216128《MySQL实战45讲》31~45讲https:///zxcc1314/article/details/88087028。

MySQL中文参考手册MySQL学习总结-MySQL-API函数描述

MySQL中文参考手册MySQL学习总结-MySQL-API函数描述

MySQL函数描述、学习总结(适用版本:MySQL 3.23.7alpla)1. MySQL API (2)1.1. MySQL C API (2)1.2. C API数据类型 (3)1.3. C API函数概述 (6)1.4. C API函数描述 (9)1.4.1. mysql_affected_rows() (10)1.4.2. mysql_close() (11)1.4.3. mysql_connect() (11)1.4.4. mysql_change_user() (12)1.4.5. mysql_create_db() (13)1.4.6. mysql_data_seek() (14)1.4.7. mysql_debug() (15)1.4.8. mysql_drop_db() (15)1.4.9. mysql_dump_debug_info() (16)1.4.10. mysql_eof() (17)1.4.11. mysql_errno() (18)1.4.12. mysql_error() (19)1.4.13. mysql_escape_string() (20)1.4.14. mysql_fetch_field() (21)1.4.15. mysql_fetch_fields() (22)1.4.16. mysql_fetch_field_direct() (23)1.4.17. mysql_fetch_lengths() (23)1.4.18. mysql_fetch_row() (24)1.4.19. mysql_field_count() (26)1.4.20. mysql_field_seek() (27)1.4.21. mysql_field_tell() (28)1.4.22. mysql_free_result() (28)1.4.23. mysql_get_client_info() (29)1.4.24. mysql_get_host_info() (29)1.4.25. mysql_get_proto_info() (30)1.4.26. mysql_get_server_info() (30)1.4.27. mysql_info() (30)1.4.28. mysql_init() (31)1.4.29. mysql_insert_id() (32)1.4.30. mysql_kill() (32)1.4.31. mysql_list_dbs() (33)1.4.32. mysql_list_fields() (34)1.4.33. mysql_list_processes() (35)1.4.34. mysql_list_tables() (35)1.4.35. mysql_num_fields() (36)1.4.36. mysql_num_rows() (38)1.4.37. mysql_options() (38)1.4.38. mysql_ping() (40)1.4.39. mysql_query() (41)1.4.40. mysql_real_connect() (41)1.4.41. mysql_real_query() (43)1.4.42. mysql_reload() (44)1.4.43. mysql_row_seek() (45)1.4.44. mysql_row_tell() (45)1.4.45. mysql_select_db() (46)1.4.46. mysql_shutdown() (47)1.4.47. mysql_stat() (47)1.4.48. mysql_store_result() (48)1.4.49. mysql_thread_id() (49)1.4.50. mysql_use_result() (50)1.4.51. 为什么在mysql_query()返回成功后,mysql_store_result()有时返回NULL? (51)1.4.52. 我能从查询中得到什么结果? (51)1.4.53. 我怎样能得到最后插入的行的唯一ID? (52)1.MySQL API1.1. MySQL C APIC API代码是随MySQL分发的,它被包含在mysqlclient库且允许C程序存取一个数据库。

MySQL学习笔记:while循环

MySQL学习笔记:while循环

MySQL学习笔记:while循环 思考:while循环是否只能使⽤在存储过程或者存储函数之中,不能直接在查询语句中使⽤? ———— 循环⼀般在存储过程和存储函数中使⽤。

直接放⼏个例⼦: 例⼀: 1.创建存储过程DELIMITER $$CREATE PROCEDURE test_while_001(IN in_count INT) # 创建存储过程学习while循环的⽤法BEGINDECLARE COUNT INT DEFAULT 0;DECLARE SUM INT DEFAULT 0;WHILE COUNT < in_count DOSET SUM = SUM + COUNT;SET COUNT = COUNT + 1;END WHILE;SELECT SUM;END $$DELIMITER ; 2.调⽤存储过程CALL test_while_001(10); # 45 输出 3.删除存储过程DROP PROCEDURE test_while_001;例⼆: 1.创建函数DELIMITER $$CREATE FUNCTION my_test_function(quantity INT(10)) RETURNS INT(10) # 创建函数学习while循环的⽤法BEGINWHILE quantity MOD 12 > 0 DOSET quantity = quantity + 1;END WHILE;RETURN quantity;END $$DELIMITER ; 注意:创建函数之前必须更改系统设置否则⽆法创建函数SET GLOBAL log_bin_trust_function_creators=TRUE; 2.调⽤函数SELECT my_test_function(10);SELECT my_test_function(24);SELECT my_test_function(222); 3.删除函数DROP FUNCTION my_test_function; 例三: 1.如果存在,则删除DROP PROCEDURE IF EXISTS u_head_and_low_pro; 2.创建存储过程DELIMITER $$CREATE PROCEDURE u_head_and_low_pro()BEGINDECLARE n INT DEFAULT 10;SET n = n - 1;WHILE n > 0 DOSELECT n;SET n = n - 1;END WHILE;END $$DELIMITER ; 3.调⽤存储过程CALL u_head_and_low_pro(); 4.删除存储过程DROP PROCEDURE u_head_and_low_pro; 注:不依赖于任何数据库表,完整展⽰变量、while语句、存储过程的⽤法。

宋红康mysql高级篇笔记

宋红康mysql高级篇笔记

宋红康mysql高级篇笔记MySQL 是一款广泛应用于互联网领域的关系型数据库管理系统。

它的高级功能和优势使得它成为互联网开发者的首选。

本文将分享一些关于 MySQL 高级篇的笔记,涵盖了一些互联网技术介绍、互联网商业和技术应用方面的内容。

一、索引优化索引是提高数据库查询效率的重要手段之一。

在 MySQL 中,使用合适的索引可以显著提升查询性能。

首先,我们需要了解不同类型的索引,如主键索引、唯一索引和普通索引等。

其次,根据具体应用场景,我们可以使用覆盖索引、前缀索引、联合索引等技术进行索引优化。

此外,我们还要注意索引的维护和管理,及时进行索引的重建和优化。

二、查询优化在互联网应用中,查询是最常见的数据库操作之一。

如何编写高效的查询语句,能够快速地获取所需的数据,是每个开发者都应该关注的问题。

本节将介绍一些查询优化的技巧,例如避免使用通配符查询、合理使用 LIMIT 关键字、使用 EXPLAIN 分析查询执行计划等。

三、事务管理事务是保证数据库操作一致性和完整性的重要手段。

MySQL 支持事务的 ACID 特性,可以确保多个操作的原子性、一致性、隔离性和持久性。

本节将详细介绍如何使用事务管理,包括事务的开启、提交和回滚,以及事务并发控制的方法。

四、高级数据操作除了基本的增删改查操作,MySQL 还提供了一些高级数据操作功能,方便开发者完成复杂的数据处理任务。

本节将介绍如何使用子查询、联合查询、分组查询和多表操作等技术,实现更灵活和高效的数据操作。

五、存储引擎选择MySQL 支持多种存储引擎,如 InnoDB、MyISAM、Memory 等。

不同的存储引擎具有不同的特点和适用场景。

本节将比较各种存储引擎的优缺点,并给出存储引擎选择的建议。

六、高可用性和容灾备份在互联网应用中,数据库的高可用性和容灾备份是非常重要的。

本节将介绍如何使用主从复制、读写分离、故障转移和数据备份等技术,提高数据库的稳定性和可用性。

MySQL数据库学习笔记

MySQL数据库学习笔记

MySQL数据库学习笔记数据库 DDL: 数据定义语⾔, 包含数据库和表相关的操作(MySQL中保存数据需要先建库再建表,最后把数据保存到表中) DML: 数据操作语⾔, 包含增删改查相关的SQL DQL: 数据查询语⾔, 只包含查询相关的SQL TCL: 事务控制语⾔, 包括和事务相关的SQL DCL: 数据控制语⾔, 包括⽤户管理及权限分配相关的SQLDDL数据定义语⾔ 数据库相关SQL 1. 查询所有数据库 show databases; 2. 创建数据库 格式: create database 数据库名; 指定字符集格式: create database 数据库名 character set utf8/gbk; 举例: create database db1; create database db2 character set utf8; create database db3 character set gbk; show databases; 3. 查询数据库详情 格式: show create database 数据库名; 举例: show create database db1; show create database db2; show create database db3; 4. 删除数据库 格式: drop database 数据库名; drop database db3; 5. 使⽤数据库必须使⽤了某个数据库之后才能执⾏表和数据相关的SQL 格式: use 数据库名; use db1; 表相关SQL 操作表相关的SQL 必须使⽤了某个数据库之后再操作use db1; 1. 创建表 格式: create table 表名(字段1名类型,字段2名类型); 指定字符集格式: create table 表名(字段1名类型,字段2名类型) charset=utf8/gbk; 举例: create table person (name varchar(20),age int); create table student(name varchar(20),score int) charset=utf8; create table car(name varchar(20),price int) charset=gbk; 2. 查询所有表 格式: show tables; 3. 查询表详情 格式: show create table 表名 举例: show create table person; 4. 查看表字段 格式: desc 表名; 举例: desc student; 5. 删除表 格式: drop table 表名 举例: drop table car; 表相关SQL(续) use db1; 1. 修改表名格式: rename table 原名 to 新名; rename table student to stu; 2. 添加表字段 最后添加格式: alter table 表名 add 字段名类型; 最前⾯添加个格式: alter table 表名 add 字段名类型 fifirst; xxx字段后⾯添加格式: alter table 表名 add 字段名类型 after xxx; 举例: alter table person add gender varchar(5); //最后⾯ alter table person add id int fifirst; //最前⾯ alter table person add salary int after name;//name后⾯ 3. 删除表字段 格式: alter table 表名 drop 字段名; alter table person drop salary; 4. 修改表字段 格式: alter table 表名 change 原名新名新类型; alter table person change gender salary int;DML数据操作语⾔(数据相关SQL语句) 1. 插⼊数据 全表插⼊格式: insert into 表名 values(值1,值2); 值的数量和表字段⼀致 批量插⼊格式: insert into 表名 values(值1,值2),(值1,值2),(值1,值2); 举例: insert into person values("Tom",18); //全表插⼊ insert into person(name) values("Jerry"); //指定字段插⼊ insert into person values("AAA",10),("BBB",20), ("CCC",30); 中⽂问题: insert into person values("刘德华",30); 如果执⾏上⾯包含中⽂的SQL 报以下错误执⾏ set names gbk; 2. 查询数据 格式: select 字段信息 from 表名 where 条件; 举例: select name from person; //查询表中所有的名字 select name,age from person; //查询表中所有名字和年龄 select * from person; //查询表中所有数据的所有字段信息 select * from person where age>20; //查询年龄⼤于20岁的信息 select * from person where name='Tom'; //查询Tom的信息 3. 修改数据 格式: update 表名 set xxx=xxx,xxx=xxx where 条件; 举例: update person set age=8 where name='Jerry'; update person set name="张学友",age=50 where name="刘德华"; update person set age=15 where age<20; 4. 删除数据 格式: delete from 表名 where 条件; 举例: delete from person where name='Tom'; delete from person where age<20; delete from person; 约束* 概念:对表中的数据进⾏限定,保证数据的正确性、有效性和完整性。

(转)MySQL学习笔记-redolog和binlog两阶段提交

(转)MySQL学习笔记-redolog和binlog两阶段提交

(转)MySQL学习笔记-redolog和binlog两阶段提交原⽂:https:///qq_38937634/article/details/113100472?utm_term=mysql%E6%97%A5%E5%BF%97%E4%B8%A4%E9%98%B6%E6%AE%B5%E6%8F%90%E4%BA%A4&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduweb~default-2-113100472&spm=3001.4430⽂章⽬录MySQL学习笔记-redo log 和 binlog&两阶段提交1.笔记图2.⼀条更新语句是如何被执⾏的3.redo log4.binlog5.为什么要有两份⽇志?6.更新语句内部执⾏流程7.两阶段提交MySQL学习笔记-redo log 和 binlog&两阶段提交前⾯学习了⼀条查询语句的执⾏过程⼀般是经过连接器、分析器、优化器、执⾏器等功能模块,最后到达存储引擎,⽽⼀条更新语句的执⾏流程也会按照查询查询语句的流程⾛⼀遍,但更新语句会涉及到两个⽇志模块,分别是 redo log 和 binlog,这篇⽂章学习⼀下这两个⽇志的作⽤。

1.笔记图2.⼀条更新语句是如何被执⾏的连接器:负责跟客户端建⽴连接、获取权限、维持和管理连接分析器:词法分析:识别出 SQL 语句⾥⾯的字符串分别代表什么,把 SQL 语句中字符串 T 识别成“表名 T,把字符串 ID 识别成列 ID语法分析:根据词法分析的结果,语法分析器会根据语法规则,判断你输⼊的这个 SQL 语句是否满⾜ MySQL 语法优化器:优化器是在表⾥⾯有多个索引的时候,决定使⽤哪个索引,或者在⼀个语句有多表关联(join)的时候,决定各个表的连接顺序执⾏器:调⽤存储引擎提供的接⼝3.redo logWAL(Write-Ahead Logging):先写⽇志,再写磁盘当有记录需要更新时,InnoDB 引擎就会先把记录写到 redo log,并更新内存,这时更新就算完成InnoDB 的 redo log 是固定⼤⼩的,可以配置为⼀组 4 个⽂件,每个⽂件的⼤⼩是 1GB,从头开始写,写到末尾就⼜回到开头循环写Tips:write pos 表⽰当前记录的位置,写到第 3 号⽂件末尾后就回到 0 号⽂件开头,checkpoint 表⽰当前要擦除的位置,擦除记录前要把记录更新到数据⽂件如果 write pos 追上 checkpoint,表⽰ redo log 满了,这时不能再执⾏新的更新,得停下来先擦掉⼀些记录,把 checkpoint 推进⼀下crash-safe:InnoDB 就可以保证即使数据库发⽣异常重启,之前提交的记录都不会丢失4.binlogMySQL Server 层也有⾃⼰的⽇志,称为归档⽇志(binlog),binlog ⽇志只能⽤于归档redo log 是 InnoDB 引擎特有的,binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使⽤redo log 是物理⽇志,记录的是在某个数据页上做了什么修改,binlog 是逻辑⽇志,记录的是这个语句的原始逻辑,⽐如给 ID=2 这⼀⾏的 c 字段加 1redo log 是循环写的,空间固定会⽤完,binlog 是可以追加写⼊的,binlog ⽂件写到⼀定⼤⼩后会切换到下⼀个,并不会覆盖以前的⽇志5.为什么要有两份⽇志?最开始 MySQL ⾥并没有 InnoDB 引擎,MyISAM 没有 crash-safe 的能⼒,binlog ⽇志只能⽤于归档InnoDB 是另⼀个公司以插件形式引⼊ MySQL 的,使⽤另外⼀套⽇志系统 redo log 来实现 crash-safe 能⼒6.更新语句内部执⾏流程update T set c=c+1 where ID=2执⾏器先找引擎取 ID=2 这⼀⾏,ID 是主键,引擎直接⽤树搜索找到这⼀⾏,如果 ID=2 这⼀⾏所在的数据页本来就在内存中,就直接返回给执⾏器,否则,需要先从磁盘读⼊内存,然后再返回执⾏器拿到引擎给的⾏数据,把这个值加上 1,⽐如原来是 N,现在就是 N+1,得到新的⼀⾏数据,再调⽤引擎接⼝写⼊这⾏新数据引擎将这⾏新数据更新到内存中,同时将这个更新操作记录到 redo log ⾥⾯,此时 redo log 处于 prepare 状态。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
24.拆分表可以避免大量冗余数据的出现。
25.多表查询
合并结果集,指的是把两个select语句的查询结果合并到一起,被合并的两个结果列数和列的数据类型必须相同,合并方式有:
--Union,合并时去除重复记录(一行);
格式:select * from表1UNIONselect * from表2;
--Union all,合并时不会移除重复记录(一行);
关键字有:
Between….and;值在什么范围内。
In(集合);值包含在集合中。
Is null;值为空,is not null;值不为空。
And;与
Or;或
Not;非
d.DCL:数据控制语言,用来定义访问权限和安全级别,常用的语句有:
Grant将权限或角色授予用户,
Revoke从用户或数据库角色中回收权限,
19.在MySQL中,字符串类型和日期类型都要用单引号括起来,比如:’mysql’,’2020-01-01’
20.在命令提示行窗口里面用select语句,可以在语句结尾处加上\G ;,来改变显示的效果(按每条记录来显示)。
21.Ctrl键加/,可以对一行进行注释。
第三部分,数据完整性
22.数据完整性,是指保证用户输入的数据是正确的,分为:
10.MySQL的端口号:3306
11.目前通用的字符集编码是:utf-8
12.数据库对象:存储、管理和使用数据的不用结构形式,如:表,视图,存储过程,函数,触发器,事件等。
13.数据库:存储数据库对象的容器。
14.存储引擎:MySQL中的数据都使用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制,索引技巧,锁定水平,并且最终提供不同的功能和能力,这种存储技术就叫做存储引擎,存储引擎分为以下几种:
2.常见数据库:
a.Oracle:运行稳定,可移植性高,功能齐全,性能超群,适用于大型企业领域,甲骨文公司的产品,收费!
b.DB2:速度快,可靠性好,适用于海量数据,恢复性极强,适用于大中型企业领域,IBM公司的产品,收费!
c.MySQL,开源,体积小,速度快,适用于中小型企业领域,甲骨文公司产品,免费!
Lock对数据库的特定部分进行锁定,
e.TCL:事务控制语言,常用语句有:
Commit提交事务处理,
Rollback事务处理回滚,
Savepoint设置保存点,
17.结果集指的是查询结果显示的表格。
18.常用数据类型:
Double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数;
a.实体完整性:表中的一行就是一个实体,标识每一行数据不重复,属于行级约束,类型有:
主键约束(primary key),每个表中要有一个主键,数据唯一,并且不能为NULL。添加方式:
--Create table表名(字段1数据类型primary key,字段2数据类型);
--create table表名(字段1数据类型,字段2数据类型,primary key(要设置主键的字段名));
--create table表名(字段1数据类型,字段2数据类型,primary key(主键1,主键2));---联合主键
--Alter table表名add constraint primary key(主键);
唯一约束(unique),指定列的数据不能重复,但可以为空值。添加方式:
Create table表名(字段1数据类型,字段2数据类型Unique);
b.DML:数据操作语言(针对表里面的数据),用来操作数据库表中的记录,常用的语句有:
Insert添加数据到数据库中,命令:insert into表名(列1,列2,列3,列4) values (值1,值2,值3,值4);
Update修改数据表中的数据,命令:update表名set列名=新数据where列名=值;
Char:固定长度字符串类型;
Varchar:可变长度字符串类型;
Text:字符串类型,用于存储大文本;
Blob:二进制类型,可用于存储二进制文件,如声音、视频、图片;
Date:日期类型,格式为:yyyy-mm-dd
Time:时间类型,格式为:hh:mm:ss
Datetime:日期时间型,格式为:yyyy-mm-dd hh:mm:ss
c.MEMORY:使用内存来存储数据,访问非常快,但是不安全,一旦服务器关闭数据就会丢失。
15.文件.frm存储表定义,.myd(mydata)存储数据,.MYI(myindex)存储索引。(在data文件夹下)
第二部分,SQL语言
16.Sql分类:
a.DDL:数据定义语言(跟表结构相关的操作,与表里面的数据无关),用来定义数据库对象,常用的语句有:
--对查询结果取别名,用as关键字。
查询结果排序:使用关键字order by,ASC升序(默认),DESC降序。
聚合函数:
Count():统计制定列不为NULL的记录行数;与NULL值的字段进行计算时,结果都为NULL,可以使用IFNULL(字段名,0),把NULL字段设置为0再参加计算。
Max():计算制定列的最大值;
--Group by +聚合函数,对分组之后的数据做计算。
--Group by + having,用来分组查询后指定一些条件来输出查询结果。Having的作用于where一样,但having只能用在group by后面。
Having与where的区别:
--Having是指分组后对数据进行过滤;
--Where是在分组前对数据进行过滤;
7.MySQL数据库:
A.系统数据库(安装完成之后默认自带4个):
rmation_schema:存储数据库对象信息,如用户表信息,列信息,里面的内容不能动。
b.Performance_schema:存储数据库服务器性能参数信息,里面的内容不能动。
c.Mysql:存储数据库用户权限信息。
d.Sys:通过这个库可以快速的了解系统的元数据信息,以视图的形式把Information_schema和Performance_schema结合起来,让用户更容易理解相关的数据。
5.修改MySQL数据库的密码:
方法一:命令提示符中,在数据库”MySQL”下执行:alter user‘root’@’localhost’identidied by‘新密码’;
方法二:在命令提示符下执行:mysqladmin -u root–p‘新密码’;回车后输入’旧密码’。
6.语句结束要用分号;。
Fromwheregroup byhavingselectorder bylimit;
模糊查询:使用like关键字,下划线‘_’代表一个字符,百分号%代表任意字符。
字段控制查询:
--去除重复记录,命令:select distinct字段名from表名;
--把查询字段的结果进行运算生成新的字段,必须都是数据型,例如:SELECT * , IFNULL(age ,0) + IFNULL(score,0) FROM student;
Min():计算制定列的最小值;
Sum():计算制定列的和;
AVG():计算制定列的平均值;
分组查询,在使用分组查询时,select后面直接跟的字段一般都要在group by后面出现。
--Group by只显示每个组的第一条记录,但与distinct去重复不一样。
--Group by + group_concat(),可以显示每个分组里面包含的记录的集合。
d.SQL Server:全面,效率高,界面好,操作容易,但是不跨平台,适用于中小型企业领域,微软公司产品,收费!
3.数据库类型:关系型数据库(Oracle、DB2、MySQL、SQL Server),非关系型数据库NOsql(MongoDB、Redis、HBase)。
4.RDBMS(关系型数据库)专业术语:数据库,表,列,行,主键,外键,索引。
a.MYISAM:不支持事务,也不支持外键,访问速度快,对事务完整性没有要求或者以select、insert为主的应用基本都可以使用这个引擎。MySQL5.5及以前的版本默认的存储引擎就是MYISAM。
b.INNODB:支持事务,提供了具有提交、回滚、崩溃恢复能力的事务安全。但是处理效率没有MYISAM高。MySQL5.5之后的版本默认的存储引擎为INNODB。
B.用户数据库,用户自己创建的数据库。
8.常用命令:
a.创建数据库:Create database数据库名;
b.删除数据库:drop database数据库名;
c.查看数据库:show databases;
d.使用数据库:use数据库名;
e.查看数据库表:show tables;
9.常用的图形化管理工具:Navicat,要先安装好数据库才能安装Navicat,否则会报错。
MySQL学习笔记
第一部分,数据库介绍
第二部分,SQL语言
第三部分,数据完整性
第四部分,多表查询
第五部分,子查询
第六部分,事务
第七部分,视图
第八部分,自定义函数和存储过程
第九部分,索引
第一部分,数据库介绍
1.DBMS:数据库管理系统,一个管理数据库的软件,通常所说的数据库(Oracle、DB2、MySQL、SQL Server)都是指的数据库管理系统。
alter table表名add列名数据类型;添加列
Alter table表名drop列名;删除列
Alter table表名modify列名数据类型;修改列的数据类型
Alter table表名change原列名新列名ቤተ መጻሕፍቲ ባይዱ据类型;修改列名
alter table add constraint在已有的表上增加约束,
相关文档
最新文档