mysql学习笔记

合集下载

MySQL个人学习笔记

MySQL个人学习笔记

MySQL个人学习笔记一、mysql常见的数据类型:int(8) 整形,float(5,1) 浮点型,规定插入的值不超过5位数字,小数点后面带两位数字且小数点超出后会四舍五入,double(5,2)一样是浮点型decimal(5,2) 一样是浮点型。

char(8)字符型,varchar(8)可变字符型。

date,values(‘2014-04-23’)或(20104423)time,values(‘12:30:50’)或(123050)year,values(2014)datetime,values(‘1993-03-12 12:30:12‘)或(012)null 类型。

表示什么都没有。

null 不等于 ' ' ~~~。

二、mysql常见的运算符:+、-、*、/、%、<,>,=,>=,<=,!=,<=>(用于安全等于null值。

no <=> null)NOT 或 !,AND 或 && ,OR 或 ||,三、mysql常见的函数:ABS(X)返回x的绝对值。

CURDATE() 返回当前的日期 2014-04-23CURTIME() 返回当前的时间 19:17:13NOW() 返回当前的日期和时间 2014-04-23 19:17:48聚合函数:AVG(COLUME) 求该列的平均值, COUNT(COL) 计算列中非null的行数,MIN(COL)求该列的最小值,MAX(COL) 求该列的最大值,SUM(COL) 求该列值的和,COUNT(*) 计算表中所有的行数,包括null值。

四、数据库和表:1、创建数据库。

create database db1; 或着 create databse if not exists db1;2、选择需要的数据库。

use db1;3、删除数据库。

drop database db1; 或者 drop databse if exists db1;4、创建表:create table table_name (name char(2),id int(2),....)type=xxxx;4.1 字段约束:首先 null 不等于 ' 'null:当某列的约束为null时,该字段的值可以插入null,表示没有数据。

mysql简单入门笔记

mysql简单入门笔记

mysql课堂笔记1、什么是数据库?什么是数据库管理系统?什么是SQL?他们之间的关系是什么?数据库:英文单词DataBase,简称DB。

按照一定格式存储数据的一些文件的组合。

顾名思义:存储数据的仓库,实际上就是一堆文件。

这些文件中存储了具有特定格式的数据。

数据库管理系统:DataBaseManagement,简称DBMS。

数据库管理系统是专门用来管理数据库中数据的,数据库管理系统可以对数据库当中的数据进行增删改查。

常见的数据库管理系统:MySQL、Oracle、MS SqlServer、DB2、sybase等....SQL:结构化查询语言程序员需要学习SQL语句,程序员通过编写SQL语句,然后DBMS负责执行SQL语句,最终来完成数据库中数据的增删改查操作。

SQL是一套标准,程序员主要学习的就是SQL语句,这个SQL在mysql中可以使用,同时在Oracle中也可以使用,在DB2中也可以使用。

三者之间的关系?DBMS--执行--> SQL --操作--> DB先安装数据库管理系统MySQL,然后学习SQL语句怎么写,编写SQL语句之后,DBMS对SQL语句进行执行,最终来完成数据库的数据管理。

2、在windows操作系统当中,怎么使用命令来启动和关闭mysql服务呢?语法:net stop服务名称;net start服务名称;3、mysql安装了,服务启动了,怎么使用客户端(DOS或者MySQL 自己的客户端)登录mysql数据库呢?使用bin目录下的mysql.exe命令来连接mysql数据库服务器本地登录(显示编写密码的形式):C:\Users\409>mysql -uroot-ppasswdmysql: [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 12Server version: 8.0.28 MySQL Community Server - GPLCopyright (c) 2000, 2022, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h'for help. Type '\c' to clear the current input statement.mysql>本地登录(隐藏密码的形式):C:\Users\409>mysql -uroot-pEnter password: ******Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 13Server version: 8.0.28 MySQL Community Server - GPLCopyright (c) 2000, 2022, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h'for help. Type '\c' to clear the current input statement.mysql>4、MySQL常用命令1、退出mysql :exit2、查看mysql中有哪些数据库?:show databases;mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || sys |+--------------------+mysql默认自带了4个数据库。

MySQL必知必会笔记

MySQL必知必会笔记

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笔记

mysql笔记

mysql笔记Mysql的第一次回忆Mysql的总的概括可以分为两个部分:三建、四句。

三建指的是:建库、建表格、建约束。

四句指的是:添加、删除、修改、查询。

数据库:存放数据的库,由表、关系、以及操作对象组成,它存放在表中。

实体:行,客观存在,可以被描述的事物。

在java中称为对象。

又称之为记录。

属性:列,事物的特征。

又称之为字段。

数据库服务器:在机器上安装了一个数据库管理程序,一个数据库服务器可以管理多个数据库,一个数据库可以创建多张表。

三建建库:使用关键字create database 库名;建表:使用关键字create table 表名(属性1 类型primary key ;属性2 类型,属性3 类型);在创建表的时候,要注意使用关键字“use 库名”使用指定的数据库。

在创建表时,要根据需要保存的数据创建相应的列,并且根据其类型定义相应的类型。

Mysql中的数据类型:int、char (固定的字符类型)、varchar(可变得字符类型)、boolean 、float(m,d)m代表指定显示的长度,d代表指定的小数位数、text、DateTime、timeStamp时间搓可以自动记录update 、insert的时间。

(时间的规定:从某个时间到现在所经历的毫秒数。

)建约束作用:保障传入数据的数据有效性和准确性。

约束分为:主键约束、外键约束、唯一值约束、非空、检查约束(在mysql中没用)、默认值约束、标识列。

主键约束:在属性后面加上关键字primary key,作用是保证记录的唯一性。

它的值不能重复,也不能为null。

外键约束:在表的外键引用主表的主键。

通过约束后,在进行删除操作时,必须先删子表,再删父表。

在进行更新的时候,必须先更新父表,在更新子表。

不过加入级联删除删除后可以省去删除的麻烦(on delete cascade),加入级联更新后可以省去更新的麻烦(on update cascade)。

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自学笔记1. 字符串mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+| hello | "hello" | ""hello"" | hel'lo | 'hello |+-------+---------+-----------+--------+--------+mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+| hello | 'hello' | ''hello'' | hel"lo | "hello |+-------+---------+-----------+--------+--------+2. 数据库、表、索引、列和别名如果标识符是一个受限掉的词或包含特殊的字符,当使用它时,必须以一个` (backtick) 来引用它。

mysql> SELECT * FROM `select` WHERE `select`.id > 100;句法意味着表在当前数据库中。

MySQL实战45讲学习笔记:第一讲

MySQL实战45讲学习笔记:第⼀讲⼀、MySQL逻架构图⼆、连接器⼯作原理刨析1、连接器⼯作原理图2、原理图说明1、连接命令mysql -h$ip -P$port -u$user -p2、查询链接状态3、长连接端连接1、什么是长链接?数据库⾥⾯,长连接是连接成功后,如果客户端持续有请求,则⼀直使⽤同⼀个链接。

2、什么是短连接?短连接则是指每次执⾏完很少的⼏次查询就断开连接,下次查询重新建⽴⼀个3、尽量使⽤长链接建⽴连接的过程通常是⽐较复杂的,所以我建议你在使⽤中尽量减少建⽴的动作,也就是使⽤长连接三、使⽤长链接困惑及解决⽅案1、为什么MySQL占⽤内存涨得特别快但是全部是⽤长连接后,你可能会发现,有些时候MySQL占⽤内存涨得特别快,这是因为MySQL在执⾏过程中临时使⽤的内存管理在连接对象⾥⾯的,这些资源会在连接断开的时候才释放,所以如果长链接积累下来,可能导致内存占⽤⼤,被系统强⾏杀掉,从现象看就是MySQL异常重启了2、如何解决MySQL占⽤内存涨得特别快1、定期断开长链接,使⽤⼀段时间,或者程序⾥⾯判断执⾏过⼀个占⽤内存的⼤查询后,断开连接,之后要查询再连接2、如果你⽤的是MySQL5.7或更新版本,可以在每次执⾏⼀个⽐较⼤的操作后,通过执⾏mysql_reset_connection来重新初始化连接资源,这个过程不需要重连或重新做权限验证,但是会将连接回复到刚刚创建完时的状态四、查询缓存1、⼯作流程刨析图解1. MySQL拿到⼀个查询请求后,会先到查询缓存看看,之前是不是执⾏过这条语句,如果有,就直接返回给客户端2. 如果语句不在查询缓存中,就会继续后⾯的执⾏阶段。

3. 执⾏完成后,执⾏结果会被存⼊查询缓存中,4. 如果查询命中缓存MySQL不需要执⾏后⾯的复杂操作,就可以直接返回结果,这个效率会很⾼2、为什么⼤多数情况下⽐建议使⽤查询缓存?1、查询缓存的失效⾮常频繁,只要有⼀个表更新,这个表上所有的查询缓存都被清空2、对于更新压⼒⼤的数据库来说,查询缓存的命中率会⾮常低,3、除⾮你的业务就是有⼀张静态表,很长时间才会更新⼀次(⽐如⼀个系统配置表)1、默认语句不实⽤查询缓存MySQL提供的按需使⽤的⽅式query_cache_type 设置成 DEMAND2、确定需要查询缓存的语句mysql> select SQL_CACHE * from T where ID=10;MySQL 8.0 版本直接将查询缓存的整块功能删掉了,也就是说 8.0 开始彻底没有这个功能了。

mysql基础笔记”

mysql基础笔记”MySQL是一种开源的关系型数据库管理系统,被广泛应用于Web 应用程序的数据存储和管理。

下面是关于MySQL基础的一些笔记:1. 数据库,MySQL是基于数据库的,数据库是一个用于存储和管理数据的容器。

可以创建多个数据库,每个数据库可以包含多个表。

2. 表,表是数据库中的一个组成部分,用于存储数据。

表由行和列组成,每一列代表一个数据字段,每一行代表一条记录。

3. 字段,字段是表中的列,用于存储特定类型的数据。

每个字段都有一个数据类型,如整数、字符串、日期等。

4. 主键,主键是表中的一列或一组列,用于唯一标识表中的每一行。

主键的值不能重复,且不能为空。

5. 外键,外键是表中的一列,用于建立表与表之间的关系。

外键与其他表中的主键相关联,用于确保数据的完整性和一致性。

6. 查询,查询是从数据库中检索数据的操作。

可以使用SQL语句来编写查询,SQL是结构化查询语言。

7. 插入,插入是向表中添加新记录的操作。

可以使用INSERT语句来插入数据。

8. 更新,更新是修改表中现有记录的操作。

可以使用UPDATE语句来更新数据。

9. 删除,删除是从表中删除记录的操作。

可以使用DELETE语句来删除数据。

10. 索引,索引是对表中的一列或多列进行排序的结构,用于加快数据的检索速度。

可以根据索引进行快速的查询操作。

11. 视图,视图是基于一个或多个表的查询结果,可以像表一样使用。

视图可以简化复杂的查询操作,提供更方便的数据访问方式。

12. 事务,事务是一组数据库操作的集合,要么全部执行成功,要么全部回滚。

事务可以确保数据的一致性和完整性。

13. 存储过程,存储过程是一组预编译的SQL语句,可以在数据库中进行复杂的操作。

存储过程可以提高数据库的性能和安全性。

14. 触发器,触发器是与表相关联的特殊类型的存储过程,可以在插入、更新或删除数据时自动执行。

以上是关于MySQL基础的一些笔记,希望对你有所帮助。

《快速念咒:MySQL入门指南与进阶实战》笔记

《快速念咒: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数据库基础笔记

mysql数据库基础笔记MySQL是一款开源免费的关系型数据库管理系统,被广泛应用于各种应用程序中。

对于初学者来说,掌握MySQL数据库的基础知识是非常重要的。

在本文中,将向读者们介绍MySQL数据库的基础知识,包括如何安装、创建数据库和表、插入数据以及查询数据等。

第一步:安装MySQL数据库。

首先,我们需要下载MySQL的安装包并进行安装。

在安装过程中,需要设置root用户的密码,同时也可以选择安装路径和配置选项。

安装完成后,我们就可以开始使用MySQL 数据库了。

第二步:创建数据库。

在MySQL中,我们可以通过SQL命令来创建数据库。

例如,我们可以使用以下的命令创建一个名为“testdb”的数据库:CREATE DATABASE testdb;第三步:创建表。

在数据库中,我们需要创建表来存储数据。

我们可以使用以下的命令创建一个名为“users”的表:CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), age INT);上述命令创建了一个包含三个字段(id、name、age)的数据表,其中id是自增字段,作为主键。

第四步:插入数据。

接下来,我们需要向表中插入数据。

我们可以使用以下的命令插入一条数据:INSERT INTO users (name, age) VALUES ('John Smith', 30);这个命令将“John Smith”和“30”分别插入到“name”和“age”字段中。

第五步:查询数据。

最后,我们可以使用SELECT命令来查询表中的数据。

例如,我们可以使用以下的命令来查询users表中的所有数据:SELECT * FROM users;这个命令将返回users表中的所有数据。

除了上述基础操作外,MySQL还有许多高级功能,例如数据关联、表连接以及事务控制等。

不过,在掌握MySQL基础知识的基础上,我们才能更好地应用这些高级功能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

创建student表CREATE TABLE student (sNo int(11) NOT NULL DEFAULT '0',sName varchar(10) DEFAULT NULL,sSex enum('m','f') DEFAULT 'm',sAge tinyint(4) DEFAULT '18',sClass varchar(10) DEFAULT NULL,PRIMARY KEY (sNo),KEY index_name (sName)) ENGINE=InnoDB DEFAULT CHARSET=utf8;创建course表CREATE TABLE course(cNo tinyint(4) NOT NULL,cName varchar(20) NOT NULL,cCredit tinyint(4) NOT NULL,PRIMARY KEY ( cNo)) ENGINE=InnoDB DEFAULT CHARSET=utf8;创建score表create table score(sNo int not null,cNo tinyint not null,score tinyint,primary key(sNo,cNo),constraint foreign key(sNo) references student(sNo),constraint foreign key(cNo) references course(cNo))engine=innoDB default charset=utf8;insert into coursevalues(1,"计算机操作系统",3),(2,"计算机基础教程",2),(3,"计算机导论",4),(4,"C++ Primer",4),(5,"MySQL入门与精通",5); mysql的SQL语句:创建表:create table student(id int not null primary key,name char(10) not null,sex char(2) not null);修改表结构:增加,删除,修改字段alter table studentdrop sex,add birthday date,alter name set default ‘zhangsan’;//设置默认值修改字段为非空alter table student modify sSex char(2) not null;修改字段的名称:alter table studentchange name name2 varchar(10);修改字段的顺序中的位置首先,先删除此字段,然后再增加此字段,并标示位置alter table studentdrop name2;alter talbe studentadd name varchar(10) after id; 或者add name varchar(10) second;修改表名:alter table student rename student2;显示表的字段状态:show columns from student;显示数据库中表的信息:show table status;修改表的存储引擎类型:alter table student engine=myisam;增加主键:alter table student add primary key(id);删除主键:alter table student drop primary key;加索引:alter table talbename add index 索引名(字段1,字段2,。

);删除某个索引:alter table tablename drop index 索引名;修改为自增:alter table student modify id int auto_increment;修改字段的类型:alter table student modify id int;修改性别的类型alter table student modify sSex enum('m','f') default 'm' ;插入数据:insert into student(id,name,sex)values(1,”zhangsan”,’1’),(2,”lisi”,’2’),(3,”xiaocao”,’2’);数据的修改操作:首先,单表的UPDATE语句:UPDATE [LOW_PRIORITY] [IGNORE] tbl_nameSET col_name1=expr1 [, col_name2=expr2 ...][WHERE where_definition][ORDER BY ...][LIMIT row_count]修改表(/数据库)的字符集:(此方法能修改表的所有字段的字符集)alter table studentconvert to character set utf8;或者修改表(/数据库)的默认字符集(此方法只能修改默认字符集,某个字段的字符集可能不会改变)alter table studentdefault character set=utf8;解决中文乱码问题:把字符集改为utf8例外一种方法:修改默认文件的配置/etc/f[mysqld]添加:character-set-server=utf8[client]default-character-set=utf8[mysql]default-character-set=utf8第五章创建高性能的索引索引(在MySQL中也叫“键(key)”)是存储引擎用于快速找到记录的一种数据结构。

索引对于良好的性能非常关键。

尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要。

在数据量较小负载较低时,不恰当的索引对性能的影响可能不明显,但当数据量主键增大时,性能则会急剧下降。

索引可以包含一个或多个列的值。

如果索引包含多个列,那么列的顺序也十分重要,因为MySQL只能高效地使用索引的最左前缀列。

5.1.1索引的类型在MySQL中,索引是在存储引擎层而不是在服务器层实现的,所以,并没有统一的索引标准:不同的存储引擎的索引的工作方式并不一样,也不是所有的存储引擎都支持所有类型的索引。

一、B-Tree索引所用B-Tree数据结构来存储数据。

大多数MySQL存储引擎都支持这种索引。

实际上,很多存储引擎使用的是B+Tree,即每一个叶子节点都包含指向下一个叶子节点的指针,从而方便叶子节点的范围遍历。

InnoDB的索引则使用的是B+Tree这种数据结构。

请具体查看B+Tree的数据结构:非叶子节点不存储数据,只存储指向下一层节点的指针,只有叶子节点才存储被索引的数据,且叶子节点有一个指针指向下一个相邻叶子节点。

B-Tree索引能够加快访问数据的速度,因为存储引擎不再需要进行全表(磁盘中)扫描来获取需要的数据,取而代之的是从索引(在内存)中搜索。

索引对多个值进行排序的顺序的依据是create table语句中定义索引列的顺序。

B-Tree索引适合用于全键值、键值范围或键前缀查找。

全值匹配全值匹配指的是和索引中的所有列进行匹配。

匹配最左前缀在where条件中只匹配索引列的第一列,或前几列。

匹配列前缀可以只匹配某一列的值得开头部分。

例如where name=”J%”。

匹配范围值可以匹配某一列设定一个范围,前提是,在索引中匹配范围列的前面的列,必须是具体的值,否则不能利用索引。

精确匹配某一列并范围匹配另外一列例如,索引中的第一列是某个确定的值,且第二列是一个范围匹配。

只访问索引的查询只访问索引的查询,即查询只需要访问索引,而无需访问数据行。

这就是所谓的覆盖索引。

B-Tree索引的限制:1.如果不是按照索引的最左列开始查找,则无法使用索引。

2.不能跳过索引中的列。

否则,也不能使用索引。

3.如果查询中有某个范围查询,则其右边所有列都无法使用索引优化查询。

二、哈希索引哈希索引(hash index)基于哈希表实现,只有精确匹配索引所有列的查询才有效。

对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码(hash code),哈希码是一个较小的值,并且不同键值的行计算出来的哈希码也不一样。

哈希索引将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针。

如果多个列的哈希值相同,索引会以链表的方式存放多个记录指针到同一个哈希条目中。

在Mysql中,只有Memory存储引擎显示支持哈希索引。

这也是Memory引擎表的默认索引类型,Memory引擎同时也支持B-Tree索引。

例外,Memory引擎是支持非唯一哈希索引的。

由于哈希索引只存储哈希值和对应的数据行指针,所以索引的结构十分紧凑,这也让哈希索引查找的速度非常快。

然后,哈希索引也有它的限制:1.哈希索引只包含哈希值和行指针,而不存储字段值,所以不能使用索引中的值来避免读取行。

2.哈希索引数据并不是按照索引值顺序存储的,所以也就无法用于排序。

3.哈希索引不支持部分索引列匹配查找,因为哈希索引始终是使用索引列的全部内容来计算哈希值得。

例如,在数据列(A,B)上建立哈希索引,如果查询只有数据列A,则无法使用该索引。

4.哈希索引只支持等值比较查询,包括=,IN(),<=>。

也不支持任何范围查询。

例如where price>100。

5.访问哈希索引的数据非常快,除非有很多哈希冲突。

当出现哈希索引冲突的时候,存储引擎必须遍历链表中所有的行指针,逐行进行比较,直到找到所有符合条件的行。

6.如果哈希冲突很多的话,一些索引维护操作的代价也会很高。

自适应哈希索引(adaptive hash index)InnoDB会监控对表上各索引页的查询。

如果发现默写索引值被使用得非常频繁时,它会在内存中基于B-Tree索引之上再创建一个哈希索引。

则建立哈希索引会带来性能的提升。

不需要对整张表都构建哈希索引,所以构建速度会特别快。

InnoDB会自动根据访问的频率和模式自动地为某些热点建立哈希索引。

这是一个完全自动地,内部的行为,用户无法控制或者配置,不过如果有必要,完全可以关闭该功能。

默认是开启的。

5.2索引的优点1.索引大大减少了服务器需要扫描的数据量。

2.索引可以帮助服务器避免排序和临时表。

3.索引可以将随机I/O变为顺序I/O。

三星系统(three-star system)索引将相关的记录放到一起则获得一星;如果索引中的数据顺序和查找中的排列顺序一致则获得二星;如果索引中的列包含了查询中需要的全部列则获得三星。

相关文档
最新文档