最新Mysql燕十八学习笔记资料
- 格式:doc
- 大小:1.77 MB
- 文档页数:81
MySQL数据库学习教程从⼊门到进阶全套笔记(完整版)【MySQL学习1】SQL语⾔简介及数据库简介本节⼤致介绍数据库。
【MySQL学习2】MySQL简介及安装和卸载熟练地掌握数据库的安装与卸载。
【MySQL学习3】MySQL常⽤的图形管理⼯具图形化管理⼯具是为了更好操作数据库。
【MySQL学习4】MySQL数据库基本操作(⼀)_DDLDDL(Data Definition Language),数据定义语⾔。
本节讲DDL-数据库操作。
- 对数据库的常⽤操作- 对表结构的常⽤操作- 修改表结构【MySQL学习5】MySQL数据库基本操作(⼆)_DMLDML(Data Manipulation Language),指数据操作语⾔,⽤来对数据库中表的数据记录进⾏更新。
插⼊insert、删除delete、更新update。
【MySQL学习6】MySQL约束之主键约束约束实际上就是表中数据的限制条件。
本节介绍添加单列主键、添加多列联合主键、删除主键。
表在设计的时候加⼊约束的⽬的就是为了保证表中的记录完整性和有效性,⽐如⽤户表有些列的值(⼿机号)不能为空,有些列的值(⾝份证号)不能重复。
【MySQL学习7】MySQL约束之⾃增长约束通过给字段添加 auto_increment 属性来实现主键⾃增长。
可以⾃定义起始值。
注意delete和truncate之后的⾃增长的区别。
【MySQL学习8】MySQL约束之⾮空约束与唯⼀约束⾮空约束就是必须有数据,不允许为空。
唯⼀约束就是指定的那个参数,它所在的⼀列⾥每个数据都不允许有重复。
【MySQL学习9】MySQL约束之默认约束和零填充约束默认值约束就是在不指定值的时候使⽤提前设定好的值。
零填充约束只是为了对齐,值的位数不长时在前⾯补0,了解即可。
【MySQL学习10】MySQL数据库DQL基本查询(⼀)数据库管理系统⼀个重要功能就是数据查询,数据查询不应只是简单返回数据库中存储的数据,还应该根据需要对数据进⾏筛选以及确定数据以什么样的格式显⽰。
MySQL必知必会笔记(一)基础知识和基本操作第一章了解MySQL数据库保存有组织的数据的容器。
(通常是一个文件或一组文件)人们经常使用数据库这个术语代替他们使用的软件。
这是不正确的,确切的说,数据库软件应称为DBMS(数据库管理系统),数据库是通过DBMS创建和操纵的容器。
漱口可以是保存在硬件设备上的文件,但也可以不是。
你使用DBMS来代替自己访问数据库。
表表是一种结构化的文件可用来存储某种特定的类型的数据。
某种特定类型数据的结构化清单。
模式关于数据库和标的布局及特性的信息列表中的一个字段。
表由列组成。
列中存储着表里某部分的信息。
数据类型所容许的数据的类型。
每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据。
行表中的一个记录主键一列(或一组列),其值能够唯一区分表中的每个行。
虽然不是必须的,但是一般都建立主键。
便于以后的数据管理表中任何列都可以作为主键,只要满足以下条件:1 任意两行都不具有相同的主键值。
2 每个行都必须有一主键值(主键值不允许为NULL)主键的最好习惯:不更新主键列的值不重用主键列的值不在主键列中使用可能会更改的值什么是sqlSql是结构化查询语言的缩写。
Sql是一种专门用类与数据库通信的语言。
第二章 MySQL简介什么是Mysql Mysql是一种DBMS,即它是一种数据库软件。
Mysql版本主要更改4-——InnoDB引擎,增加了事务处理、并、改进全文搜索等支持4.1——对函数库、子查询、集成帮助等的重要增加、5——存储过程、触发器、游标、试图等。
第三章使用mysql连接主机名端口一个合法用户用户口令Mysql -u root -p -h myserver -P 9999选择数据库可使用USE关键字,mysql语言组成部分的一个关键字,绝不要使用关键字命名一个表或列USE dataname;显示数据库列表SHOW DATABASES;一个数据库内的表的列表(USE进入数据库的情况下)SHOW TABLES;SHOW也可以用来显示表列SHOW COLUMNS FROM column;DESCRIBE 是SHOW COLUMNS的一种快捷方式;DESCRIBE cust;其他的SHOW语句SHOW STATUS 显示广泛的服务器状态信息SHOW CREATE DATABASE 显示创建特定数据库的MYSQL语句SHOW CREATE TABLE 显示创建特定表的MYSQL语句SHOW GRANTS 显示授权用户的安全权限SHOW ERRORS 显示服务器的错误信息SHOW WARNINGS 显示服务器的警告信息MySQL必知必会笔记(二)SELECT语句检索排序过滤通配符搜索正则表达式搜索第四章检索数据检索单列SELECT columnOne FROM table;检索多列SELECT columnOne,columnTwo,columnThire FORM table;检索所有列SELECT * FROM products; //一般,除非你确实需要表中的每个列,否则最好不要用*通配符检索不同的行检索出来的数据不重复DISTINCT关键字,顾名思义返回不同的值SELECT DISTINCT columnOne FROM table; //检索出来的columnOne 没有重复值DISTINCT关键字应用于所有列而不仅是前置它的列SELECT DISTINCT vend_id,prod_price......要求vend_id,prod_price这两列都不出现重复的值限制结果条数sql语句后面加入下面sql语句LIMIT 5 显示结果的前5条LIMIT 3,4从行3开始的后4行LIMIT 4 OFFSET 3 从行3开始的后4行第五章排序检索数据子句 Sql语句是由子句构成,有些子句是必须的,有些事可选的。
一、MySQL概述1、什么是数据库?答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库2、什么是 MySQL、Oracle、SQLite、Access、MS SQL Server等?答:他们均是一个软件,都有两个主要的功能:o a. 将数据保存到文件或内存o b. 接收特定的命令,然后对文件进行相应的操作3、什么是SQL ?答:MySQL等软件可以接受命令,并做出相应的操作,由于命令中可以包含删除文件、获取文件内容等众多操作,对于编写的命令就是是SQL语句。
二、MySQL安装MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。
MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
想要使用MySQL来存储并操作数据,则需要做几件事情:a. 安装MySQL服务端b. 安装MySQL客户端b. 【客户端】连接【服务端】c. 【客户端】发送命令给【服务端MySQL】服务的接受命令并执行相应操作(增删改查等)下载/downloads/mysql/安装windows:/article/f3ad7d0ffc061a09c3345bf0.htmllinux:yum install mysql-servermac:一直点下一步客户端连接连接:1、mysql管理人默认为root,没有设置密码则直接登录mysql -h host -u root -p 不用输入密码按回车自动进入2、如果想设置mysql密码mysqladmin -u root password 1234563、如果你的root现在有密码了(123456),那么修改密码为abcdef的命令是: mysqladmin -u root -p password abcdef退出:QUIT 或者 Control+D三、数据库基础分为两大部分:1、数据库和表的创建;2、数据库和表内容的操作数据库操作-思路图1、数据库和表的创建(一)数据库的创建1.1、显示数据库1 SHOW DATABASES;默认数据库:mysql - 用户权限相关数据test - 用于用户测试数据information_schema - MySQL本身架构相关数据1.2、创建数据库# utf-8CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATEutf8_general_ci;# gbkCREATE DATABASE 数据库名称 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;1.3、打开数据库USE db_name;注:每次使用数据库必须打开相应数据库显示当前使用的数据库中所有表:SHOW TABLES;1.4、用户管理用户设置:创建用户create user '用户名'@'IP地址' identified by '密码';删除用户drop user '用户名'@'IP地址';修改用户rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';;修改密码set password for'用户名'@'IP地址' = Password('新密码')PS:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)用户权限设置:show grants for'用户'@'IP地址' -- 查看权限grant 权限 on 数据库.表 to '用户'@'IP地址' -- 授权revoke 权限 on 数据库.表 from '用户'@'IP地址' -- 取消权限all privileges 除grant外的所有权限select仅查权限select,insert 查和插入权限...usage 无访问权限alter 使用alter tablealter routine 使用alter procedure和drop procedurecreate 使用create tablecreate routine 使用create procedurecreate temporary tables 使用create temporary tablescreate user 使用create user、drop user、rename user和revoke all privilegescreate view 使用create viewdelete 使用deletedrop 使用drop tableexecute 使用call和存储过程file使用select into outfile 和 load data infilegrant option 使用grant 和 revokeindex 使用indexinsert 使用insertlock tables 使用lock tableprocess 使用show full processlistselect使用selectshow databases 使用show databasesshow view 使用show viewupdate 使用updatereload 使用flushshutdown 使用mysqladmin shutdown(关闭MySQL)super 使用change master、kill、logs、purge、master和set global。
Mysql 三大列类型1. 数值型整型Tinyint 、Smallint、Mediumint 、Int、Bigint小数型Float(D,M),Decimal(D,M)2. 字符串型Char(M)Varchar(M)Text 文本类型3. 日期时间类型Date 日期Time 时间Datetime 时间类型Year年类型一.整型列的字节与存储范围从数学上讨论tinyint ,建表时既能足够存放,又不浪费空间。
即:(1). 占据空间(2). 存储范围通过占用字节和所存范围分关系合理的选择类型例:Tinyint经测试,Tinyint 的默认为有符号-128~127之间,当越界时自动取相应 的边界值。
若要存0~255无符号时:列的可选属性:Tinyin t (M ) un sig ned zerofill.M :宽度(在0填充的时候才有意义)Un sig ned:无符号类型(非负),影响存储范围 Zerofill :0填充(默认无符号)1> insert into test-> (name,age3)-> ualu&s->「赵六'/S');u QIC, 1 row aff©et&d (0.00 soc)箕from t&st;I id I name I age I agel I age2 I age3 I卜--------- + ------------- + --------------- + -------------- + --------------- + ----------------- +rows in at (0.07 SEC)列可以声明默认值,而且推荐声明默认值not null default 0; ysql> alter table test add tinyint(3j not null default 0;uery 0IC, 9 rows affected (0.13 $ec)ecords: 9 Duplicates: 0 Uarnings: O小数型/浮点型、定点型Float(M,D):M代表总位数,D代表小数位(6,2)为例:-9999.99 ->9999.99 12345G789一一一一张张张张李张李王制LLuNi NULLLLuNLLJNI NULL NULLLLuN三四三四五六6NULL NULL I NULL ILLuNNULL | 2G0 | NULL | NULL !NULL I 0 I NULL I NULL |NULL I NULL I 127 I NULL Iy$ql> t M from 七。
《快速念咒:MySQL入门指南与进阶实战》阅读记录1. 第一章数据库基础在开始学习MySQL之前,了解一些数据库的基础知识是非常重要的。
数据库是一个用于存储和管理数据的计算机软件系统,它允许用户通过关键字或特定的查询语言来检索、更新和管理数据。
在数据库中,数据是以表格的形式进行组织的,每个表格都包含了一组相关的数据项,这些数据项被称为记录。
表(Table):表是数据库中存储数据的基本单位。
每个表都有一个唯一的名称,并由行(Row)和列(Column)组成。
每一行代表一个数据记录,每一列代表一个特定的数据属性。
字段(Field):字段是表中的一列,代表了数据的一种属性。
每个字段都有一个唯一的名称和一个数据类型,用于定义该字段可以存储的数据种类。
主键(Primary Key):主键是表中的一个特殊字段,用于唯一标识表中的每一行记录。
主键的值必须是唯一的,且不能为NULL。
外键(Foreign Key):外键是一个表中的字段,它的值引用了另一个表的主键值。
外键用于建立两个表之间的联系,确保引用完整性。
索引(Index):索引是一种数据库优化技术,用于提高查询性能。
通过创建索引,数据库可以更快地定位到表中的特定记录,而不必扫描整个表。
SQL(Structured Query Language):SQL是用于与数据库进行交互的编程语言。
它包括用于数据查询、插入、更新和删除的操作符和语法结构。
理解这些基本概念是学习MySQL的前提。
通过掌握SQL语言的基本语法和操作,你将能够有效地管理和操作数据库中的数据。
在接下来的章节中,我们将深入探讨MySQL的具体应用,包括如何创建和管理数据库、表、以及如何执行复杂的查询操作。
2. 第二章数据库设计《快速念咒:MySQL入门指南与进阶实战》是一本全面介绍MySQL 数据库的书籍,其中第二章详细阐述了数据库设计的基础知识和实践技巧。
在这一章节中,作者首先介绍了数据库设计的基本概念和目标,包括数据模型、实体关系模型(ER模型)等,并解释了如何通过这些模型来描述现实世界中的数据和业务逻辑。
Mysql三大列类型1.数值型整型Tinyint、Smallint、Mediumint、Int、Bigint小数型Float(D,M),Decimal(D,M)2.字符串型Char(M)Varchar(M)Text 文本类型3.日期时间类型Date 日期Time 时间Datetime 时间类型Year年类型一.整型列的字节与存储范围从数学上讨论tinyint,建表时既能足够存放,又不浪费空间。
即:(1). 占据空间(2). 存储范围Tinyint微小的列类型,1字节。
通过占用字节和所存范围分关系合理的选择类型。
例:Tinyint经测试,Tinyint的默认为有符号-128~127之间,当越界时自动取相应的边界值。
若要存0~255无符号时:列的可选属性:Tinyint(M) unsigned zerofill.M:宽度(在0填充的时候才有意义)Unsigned:无符号类型(非负),影响存储范围Zerofill:0填充(默认无符号)列可以声明默认值,而且推荐声明默认值not null default 0;二.小数型/浮点型、定点型Float(M,D):M代表总位数,D代表小数位(6,2)为例:-9999.99 –>9999.99Decimal(D,M) :三.字符型列Char:定长,char(M),M代表宽度,即:可容纳的字符数0<=M<=255 Varchar:变长,0<=M<=65535(约2W—6W个字符受字符集影响)Text文本串,(约2W—6W个字符受字符集影响)区别在哪呢?char定长:M个字符,如果存的小于M个字符,实占M个字符varchar:M个字符,存的小于M个字符,设为N,N<M,实占N个字符因此,char定长若存空格,读取时会丢失。
而变长不会。
Char利用率小于等于100%,而varchar永远小于100%,1-2个字节用于标志实存字符长度。
读书笔记Mysql是怎样运⾏的| Mysql是怎样运⾏的⼀、mysql基本知识1. 查看表的基本信息show table status使⽤show table status like tableName可以查看指定表的基本信息,包括存储引擎,⾏格式等2. MySQL数据类型的⼤⼩tinyint1字节int,integer4字节bigint8字节float4字节double8字节varchar(n)表⽰n个字符,⽆论汉字和英⽂,Mysql都能存⼊n个字符,仅是实际字节长度有所区别char(n),定长,表⽰该列占⽤n个字符,根据不同的字符集,实际占⽤字节⼤⼩不⼀样对于定长字符集如ascii,char(n)固定占⽤n个字节,如果实际数据不⾜n个字节,会在末尾补上空字符(0x00)对于变长字符集如utf8(1~3),gbk(1~2),也会在变长字段长度列表中存储该列的长度3. update的⼤致流程⼆、InnoDB记录存储结构InnoDB中数据的存储是在磁盘上的,⽽数据处理的过程则在内存中.InnoDB将数据划分为若⼲个页,以页作为磁盘和内存之间交互的基本单位,InnoDb中页的⼤⼩⼀般为16KB拓展阅读:1. InnoDB⾏格式1-1. InnoDB中的⾏格式类别1. compact,version 5.6 默认使⽤2. redundant,3. dynamic,version 5.7默认使⽤4. compressed1-2. 如何指定⾏格式CREATE TABLE 表名 (列的信息) ROW_FORMAT=⾏格式名称ALTER TABLE 表名 ROW_FORMAT=⾏格式名称1-3. 各种⾏格式的区别1-3-1. compact⾏格式compact⾏格式的内容:变长字段⻓度列表+ NULL列表+ 记录头信息+ 列值1-3-1-1. 变长字段⻓度列表在mysql中,变长字段中存储多少字节的数据是不固定的,所以在存储时,需要将这些数据占⽤的字节数也存起来,所以这些变长字段占⽤的存储空间分为两部分:1.真正的数据内容2.字段的长度在compact⾏格式中,把所有变长字段的真实数据占⽤的字节长度都存放在记录的开头部位,从⽽形成⼀个变长字段长度列表,各变长字段数据占⽤的字节数按照列的顺序逆序存放.注意,如果某个变长字段内容为null,是不会放⼊这个列表中的,⽽是放在了NULL列表中.字段的长度⽤1或2个字节表⽰,具体规则如下:当字段最⼤长度 <= 255字节时⽤⼀个字节表⽰字段最⼤长度 > 255,但实际使⽤字节 <= 127,也使⽤1个字节表⽰其他情况使⽤2个字节表⽰1-3-1-2. NULL列表存储每条记录中允许为NULL的字段,将实际为NULL的字段⽤1表⽰,实际不为NULL的字段⽤0表⽰,也是逆序存放,每个允许为NULL的列⽤⼀个位来表⽰,如果记录中所有的列都不允许为null,则null列表就不存在.MySQL规定NULL值列表必须⽤整数个字节的位表⽰,如果使⽤的⼆进制位个数不是整数个字节,则在字节的⾼位补0.1-3-1-3. compact记录头信息5字节记录头信息由5个字节组成,也就是40个⼆进制位名称⼤⼩(bit)描述预留位11没有使⽤预留位21没有使⽤delete_mask1表⽰该记录是否被删除min_rec_mask1B+树的每层⾮叶⼦节点中的最⼩记录都会添加该标记n_owned4表⽰当前页⽬录中拥有的记录数heap_no13表⽰当前记录在本⻚中的位置,因为页中会⾃动记录最⼩记录和最⼤记录,分别放在第0位和第1位,所以⽤户添加的记录在页中的位置是从2开始的record_type3表⽰当前记录的类型,0表⽰普通记录,1表⽰B+数⾮叶⼦节点记录,2表⽰最⼩记录,3表⽰最⼤记录next_record16表⽰从当前记录的真实数据到下⼀条记录的真实数据的地址偏移量1-3-1-4. 列值MySQL⾃动添加的隐藏列MySQL会为每个记录添加⼀些隐藏列,如DB_ROW_ID,DB_TRX_ID,DB_ROLL_POINTER,具体情况如下:列名是否必须占⽤空间描述row_id否6字节⾏ID,当我们创建的表中没有明确指定主键,且表中没有unique修饰的列时,会⾃动创建这个列,⽤来唯⼀标识⼀条记录transaction_id是6字节事务IDroll_pointer是7字节回滚指针列名是否必须占⽤空间描述⾏溢出数据在compact和redundant⾏格式中,对于占⽤存储空间⾮常⼤的列,在记录的真实数据处只会存储该列的⼀部分数据,把剩余的数据分散存储在⼏个其他的页中,然后记录的真实数据处⽤20个字节存储指向这些页的地址,dynamic⾏格式对于⾮常⼤的数据,会把它的全部数据存储到其他页中,然后在记录的真实数据处存储这些页的地址1-3-2. redundant⾏格式redundant⾏格式是MySQL5.0之前⽤的⼀种⾏格式,字段长度偏移列表+ 记录头信息+ 列值1-3-2-1. 字段长度偏移列表redundant⾏格式会把记录中所有列的长度信息都按照逆序存储到字段长度偏移列表中.⽽且存储长度的⽅式是采⽤相邻数值的差值来计算各个列值得长度1-3-2-2. redundant记录头信息6字节与compact⾏格式的记录头信息对⽐来看,有两处不同:1. redundant⾏格式多了n_field和1byte_offs_flagn_field:表⽰记录中列的数量1byte_offs_flag:标记字段长度偏移列表中的偏移量是使⽤1字节还是2字节表⽰的2. redundant⾏格式没有record_type属性1-3-2-3. redundant中null的处理如果变长数据类型的列值为null,则在字段长度偏移列表中记录偏移量为0即可,也就是会重复上⼀个偏移量的值,不⽤占⽤记录的真实数据部分如果存储null值的字段是char(M)数据类型的,则占⽤记录的真实数据部分,并把该字段对应的数据使⽤0x00字节填充.1-3-2-4. 列值和compact类似1-3-3. dynamic⾏格式和compressed⾏格式这两种⾏格式类似于compact⾏格式,只不过在处理⾏溢出数据时有点不⼀样,它们把该列的所有字节都存储到其他页上,只在记录的真实数据处存储其他页的地址,另外compressed⾏格式会采⽤压缩算法对页⾯进⾏压缩.2. InnoDB数据页结构2-1. 常见的数据页类型1. 存放表空间头部信息的页2. 存放insert buffer信息的页3. 存放inode信息的页4. 存放undo⽇志信息的页5. 存放记录的页(索引页)2-2. 索引页2-2-1. 索引页结构名称中⽂名占⽤空间简单描述File Header⽂件头部38字节页的⼀些通⽤信息(上⼀页,下⼀页等) Page Header页⾯头部56字节数据页专有的⼀些信息Infinum + Supremun最⼩记录和最⼤记录26字节两个虚拟的⾏记录User Records⽤户记录动态改变实际存储的⾏记录内容Free Space空间空间动态改变页中尚未使⽤的空间Page Directory页⽬录动态改变页中的某些记录的相对位置File Trailer⽂件尾部8字节校验页是否完整2-2-1-1. File Header⽂件头部38字节⽂件头部的组成部分名称占⽤空间(字节)描述fil_page_space_or_chksum4页的校验和fil_page_offset4页号fil_page_prev4上⼀页的页号fil_page_next4下⼀页的页号fil_page_lsn8页被最后修改时对应的⽇志序列位置(Log Sequence Number)fil_page_type2当前页的类型fil_page_file_flush_lsn8仅在系统表空间的⼀个页中定义,代表⽂件⾄少被刷新到了对应的lsn值fil_page_arch_log_no_or_space_id4页属于哪个表空间名称占⽤空间(字节)描述fil_page_type当前页的类型:类型名称⼗六进制描述fil_page_type_allocated0x0000最新分配,还没使⽤fil_page_undo_log0x0002Undo⽇志⻚fil_page_inode0x0003段信息节点fil_page_ibuf_free_list0x0004Insert Buffer空闲列表fil_page_ibuf_bitmap0x0005Insert Buffer位图fil_page_type_sys0x0006系统页fil_page_type_trx_sys0x0007事务系统数据fil_page_type_fsp_hdr0x0008表空间头部信息fil_page_type_xdes0x0009扩展描述页fil_page_type_blob0x000A blob页fil_page_index0x45BF索引页,也就是我们所说的数据页2-2-2. Page Header页⾯头部56字节名称占⽤空间(字节)描述page_n_dir_slots2本页中页⽬录的数量page_heap_top2还未使⽤的空间的最⼩地址,也就是说从该地址之后就是Free Spacepage_n_heap2本页中记录的数据(包括最⼩和最⼤记录以及被标记为删除的记录)page_free2第⼀个被标记为删除的记录地址(各个已删除的记录通过next_record也会组成⼀个单链表,这个单链表中的记录可以被重新利⽤)page_garbage2已删除记录占⽤的字节数page_last_insert2最后插⼊记录的位置page_derection2记录插⼊的⽅向page_n_direction2⼀个⽅向连续插⼊的记录数量page_n_recs2该页中记录的数量(不包括最⼩和最⼤记录以及被标记为删除的记录)page_max_trx_id8修改当前页的最⼤事务ID,该值仅在⼆级索引中定义page_level2当前页在B+树中所处的层级page_index_id8索引ID,表⽰当前页属于哪个索引page_btr_seg_leaf10B+树叶⼦段的头部信息,仅在B+树的Root页定义page_btr_seg_top10B+树⾮叶⼦段的头部信息,仅在B+树的Root页定义2-2-2-1. 页⽬录Page Derectory页⽬录的作⽤页⽬录将页中记录按顺序划分为⼏组,并在页⽬录中记录每组的中的最⼤值,这样就可以通过⼆分查找法快速定位要查找⽬标所在的组,然后遍历该组中数据即可查到.页⽬录的划分规则对于最⼩记录所在的分组只能有⼀条记录,最⼤记录所在的分组可有有1~8条记录,其他分组中可以有4~8条记录.⼀开始数据页中只有最⼩纪录和最⼤记录两个记录,它们分属于两个分组之后每插⼊⼀条记录,都会从⻚⽬录中找到主键值⽐本记录的 主键值⼤并且差值最⼩的槽,然后把该槽对应的记录的 n_owned值加1,表⽰本组内⼜添加了⼀条记录,直到该组中 的记录数等于8个在⼀个组中的记录数等于8个后再插⼊⼀条记录时,会将组中 的记录拆分成两个组,⼀个组中4条记录,另⼀个5条记录。
Mysql笔记(附Mysql基础书pdf版)资料数据库篇SHOW DATABASES; //显⽰数据库系统中已经存在的数据库CREATE DATABASE 数据库名; //创建数据库DROP DATABASE 数据库名; //删除数据库表篇注:在使⽤操作表语句前,⾸先要使⽤USE语句选择数据库。
选择数据库语句的基本格式为“USE 数据库名”。
否则会报错,1046;CREATE TABLE 表名 ( 属性名数据类型 [完整性约束条件],属性名数据类型 [完整性约束条件],属性名数据类型);表名不能为SQL语句的关键字,⼀个表可以有多个属性。
定义时,字母⼤⼩写均可,各属性之间⽤逗号隔开,最后⼀个属性不需要加逗号。
主键主键有唯⼀值单字段主键属性名数据类型 primary key //创建主键,写在属性名数据类型后⾯;多字段主键primary key(属性名 1,属性名2,属性名n)两者的组合可以确定唯⼀的⼀条记录;外键外键不⼀定必须为⽗表的主键,但必须是唯⼀性索引,主键约束和唯⼀性约束都是唯⼀性索引;外键可以为空值;设置外键的基本语法规则如下:CONSTRAINT 外键别名 FOREIGN KEY(属性 1.1,属性1.2,属性1.n)REFERENCES 表名(属性2.1,属性2.2,属性2.n)其中,“外键别名”参数是为外键的代号;“属性1”参数列表是⼦表中设置的外键;“表名”参数是指⽗表的名称;“属性2”参数列表是⽗表的主键。
设置表的⾮空约束设置表的唯⼀性约束设置表的属性值⾃动增加查看表结构DESCRIBE 表名; // 查看表基本结构语句,可缩写为desc 表名SHOW CREATE TABLE 表名; //查看表详细结构语句(包含存储引擎、字符编码)删除表DROP TABLE 表名;//删除没有被关联的普通表删除⽗表需要先将外键删除,然后才能去删除⽗表。
字段篇//通过ALTER TABLE语句ALTER TABLE 旧表名 RENAME [TO] 新表名;//修改表名 TO参数是可选参数,是否在语句中出现不会影响语句的执⾏。
Mysql三大列类型1.数值型整型Tinyint、Smallint、Mediumint、Int、Bigint小数型Float(D,M),Decimal(D,M)2.字符串型Char(M)Varchar(M)Text 文本类型3.日期时间类型Date 日期Time 时间Datetime 时间类型Year年类型一.整型列的字节与存储范围从数学上讨论tinyint,建表时既能足够存放,又不浪费空间。
即:(1). 占据空间(2). 存储范围Tinyint微小的列类型,1字节。
通过占用字节和所存范围分关系合理的选择类型。
例:Tinyint经测试,Tinyint的默认为有符号-128~127之间,当越界时自动取相应的边界值。
若要存0~255无符号时:列的可选属性:Tinyint(M) unsigned zerofill.M:宽度(在0填充的时候才有意义)Unsigned:无符号类型(非负),影响存储范围Zerofill:0填充(默认无符号)列可以声明默认值,而且推荐声明默认值not null default 0;二.小数型/浮点型、定点型Float(M,D):M代表总位数,D代表小数位(6,2)为例:-9999.99 –>9999.99Decimal(D,M) :三.字符型列Char:定长,char(M),M代表宽度,即:可容纳的字符数0<=M<=255 Varchar:变长,0<=M<=65535(约2W—6W个字符受字符集影响)Text文本串,(约2W—6W个字符受字符集影响)区别在哪呢?char定长:M个字符,如果存的小于M个字符,实占M个字符varchar:M个字符,存的小于M个字符,设为N,N<M,实占N个字符因此,char定长若存空格,读取时会丢失。
而变长不会。
Char利用率小于等于100%,而varchar永远小于100%,1-2个字节用于标志实存字符长度。
Char(M)如何占据M个字符宽度?答:如果实际存储内容不足M个,则后面加空格补齐,取出来的时候再把后面的空格去掉,(所以如果内容后面有空格,将会被清除)选择原则:1.空间利用效率(M固定选Char)2.速度速度上:定长速度快些,四.日期时间列类型Date 日期Time 时间Datatime 时间类型Year 年类型1.Year类型:1个字节表示1901-2155年【0000年表示错误时】如果输入两位,“00--69”表示2000—2069,如果输入两位“70--99”表示1970—1999如果记得麻烦,输入四位就行了、2.Date类型:典型格式,1992-08-12 ‘1000-01-01’→’9999-12-31’3.Time 类型,典型格式hh:mm:ss ‘-838:59:59’→’+838:59:59’4.Datetime 典型格式:’1989-05-06 12:23:34’‘1000-01-01 00:00:00’ ‘9999-12-31 23:59:59`注意:在开发中很少使用日期时间类型来表示一个需要精确到秒的列,原因:虽然日期时间类型能够精确到秒,而且方便查看。
但是计算不便。
用时间戳来表示。
时间戳: 1970-01-01 00:00:00 到当前的秒数面试1:当表示性别时,可用1或0表示男女,如,可能会问到为什么不用enum枚举,原因:enum不符合关系型数据库设计理念,而且字节上不比tinyint少。
实例:增删改查之案例过程分析用户注册表单收集,提交数据,注册页面收集到表单的数据后,形成insert语句,user表插入该条数据,用户注册完成前台用户中心,用户新昵称,根据新昵称和用户id,形成update语句,完成昵称修改管理后台点击会员列表,此时,网页形成select语句,查询出所有会员的数据,完成会员的查看管理员后台选中某用户并且删除,捕捉此用户的id,根据用户id形成相应的delete语句执行delete语句,完成用户的删除。
阶段总结(一)列类型的概念数值型整型tinyint smallint mediumint int bigint整型的unsigned代表无符号,zerofill代表0填充,M代表宽度(在0填充)浮点型/定点型float(M,D) unsigned M 精度,即总位数,D 代表小数位decimal比float更精确。
字符型Char(M)定长,可存储的字符数,M<=255Varchar(M) ,变长,可存储的字节数,M<=65535Char与varchar的不同点Char(M),实占M个字符,不够M个右侧补空格,取出时,在去除右侧空格,导致右侧真有空格时会丢失。
Varchar(M),有1-2个字节来标记真实的长度,日期时间型Year 1901-2155,如果输2位,‘00-69’之间+2000,‘70-99’之间+1900Date YYYY-MM-DD,范围在1000-01-01→9999-12-31Time HH :ii:ss,范围在-838:59:59→838:59:59Datetime YY-MM-DD HH:ii:ss 1000-01-01 00:00:00→9999-12-31 23:59:59开发中的一个问题—精确到秒的时间表示方式,不是用datetime,而是用int来表示时间戳用时间戳方便计算,而且方便格式化成不同的显示样式。
建表语句Create table 表明(列名称,列类型[列属性][默认值],…..)engine 引擎名charset 字符集增:insert答:往哪张表增,增那几列,各为什么值?Insert into 表名(列1,列2,..列N)Values(值1,值2..值N)**如果不声明插入的列,则默认插入所有列。
改:update答:修改哪张表,修改那几列,修改成什么值?在哪几行上生效?Update表名Set列1 = 值1,列2 = 值2,….列N =值NWhere 表达式;删:delete删除哪张表的数据,删除哪些行?Delete from 表名Where 表达式查:select * from 表名查询的五种语句:where,group,having,order by,limit 一.Where 条件查询比较运算符1.In <值1,值2,值3…..值N>,等于1 N任意一个。
例:select goods_id from goods where cat_id in(4,5);2.Between 值1 and 值2,表示在值1和值2之间例:select goods_id from goods where cat_id between 1 and 5; 逻辑运算符1.Not 逻辑非例:select good_id from goods where cat_id not in(4,5);2.Or 逻辑或3.And 逻辑与模糊查询:案例:想查找‘诺基亚’开头的所有商品Like→像,% →通配任意字符_ →单个字符Select goods_id from goods where goods_name like ‘诺基亚%’;Select goods_id from goods where goods_name like ‘诺基亚__’;二.Group分组查询Group by作用:把行按字段分组语法:group by col1,col2…colN运用场合:常见于统计场合,如按栏目计算帖子数,统计每个人的平均成绩等。
Group与统计函数Max:求最大,min:求最小,sum:求总和,avg:求平均,count:求总行数练习:1.2.3.4.5.6.7.8.9.10.11.12.13.三.Having*******例题:只用一个select,不用子查询和左连接。
四.Order byOrder by 排序功能接一个或多个字段对查询结果进行排序知识点在本项目案例的运用对栏目的商品按价格由高到低或由低到高排序知识点的运用场合描述各种排序场合,如取热点新闻,发帖状元等。
多重排序:Limit在语句的最后起到了限制条目的作用。
Limit offset,[N]offset:偏移量,N:条目;如果不写,则从头开始写。
即:limit 0,N;Truncate table清空表思考:取出每个栏目下最贵的商品解法一:首先建个临时表g2,将goods表导入g2,此时,g2中每个栏目的第一个goods_id就是该栏目下最贵的那个,再取出每个栏目下的第一个。
解法二:思想类似解法一,将select后的结果看作是一张表。
五.良好的理解模型1.Where 表达式:把表达式放在行中,看表达式是否为真,2.列:理解成变量,可以运算3.取出结果:可以理解成一张临时表六.子查询1.Where型子查询2.From型子查询3.Exist型子查询一.Where型子查询是指把内层的查询结果作为外层查询的比较条件。
二.From型子查询把内层的查询结果当成表供外层继续查询使用了from + where子查询。
三.Exists子查询把外层的查询结果拿到内层,看内层的查询是否成立。
阶段总结二查selectWhere 表达式表达式在哪一行成立,哪一行就取出来=,!=/<>,>,<,>=,<=,in,between and,or,notGroup by分组,一般和统计函数配合使用Max,min,avg,sum,countHaving数据在表中,表在硬盘或内存以文件形式存在Where就是针对表文件发挥作用的查询的结果,也可以看成一张表,其文件一般临时存在缓冲区针对查询的结果发挥作用Order by作用:排序可以针对字段,升序【asc】,降序【desc】。
有可能一个字段拍不出结果,可以选用其他字段继续排列Limit限制条目Limit【offset】【N】Offset:偏移量N:取出条目,取出3-5条,limit2,3.Where型,内层的查询结果作为外层查询的比较条件From型子查询把内层的查询结果供外层再次查询注意:内层的查询结果看成临时表,加as临时表名Exists型子查询把外层的查询结果带入到内层,看内层是否成立。
Union:联合作用:把两次或多次查询结果合并要求:两次查询的列数一致。
推荐:查询的每一列,相对应的列类型也一样。
可以来自于多张表。
多条sql语句union后的列名以第一个sql语句的列名为准。
利用from型子查询,并配合sum聚合函数来实现。
如果不同的语句取出的行,有完全相同,(每个列的值都相同)那么相同的行将会合并(去重复)如果不去重复,可以加all。
如果子句中有order by,limit,需加()。