MySQL学习笔记
- 格式:doc
- 大小:443.00 KB
- 文档页数:65
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课堂笔记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数据库保存有组织的数据的容器。
(通常是一个文件或一组文件)人们经常使用数据库这个术语代替他们使用的软件。
这是不正确的,确切的说,数据库软件应称为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的总的概括可以分为两个部分:三建、四句。
三建指的是:建库、建表格、建约束。
四句指的是:添加、删除、修改、查询。
数据库:存放数据的库,由表、关系、以及操作对象组成,它存放在表中。
实体:行,客观存在,可以被描述的事物。
在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讲》系列的学习笔记。
原⽂链接: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自学笔记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逻架构图⼆、连接器⼯作原理刨析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是一种开源的关系型数据库管理系统,被广泛应用于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入门指南与进阶实战》阅读记录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的安装包并进行安装。
在安装过程中,需要设置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基础知识的基础上,我们才能更好地应用这些高级功能。
MySQL学习笔记Table of Contents1. MySQL数据库的数据1.1. 数据值类型(data type)1.1.1. 数值1.1.2. 字符串1.1.3. 日期和时间1.2. 列类型(column type)1.2.1. 数值类的数据列类型1.2.2. 字符串类数据列类型1.2.3. 日期,时间型数据列类型1.3. 唯一编号1.4. 字符集支持1.4.1. MySQL4.1以前版本1.4.2. MySQL4.1以后版本1.4.3. 各级字符集的查询方法1.4.4. Unicode支持1.5. 如何选择数据列类型?1.6. 表达式操作符1.7. 类型转换2. 查询优化2.1. 索引2.2. 查询优化程序2.3. 数据列类型与查询效率2.4. 有效地加载数据2.5. 调度和锁定2.6. 服务器优化2.7. 硬件优化3. 数据库管理3.1. 数据目录3.2. MySQL数据表在系统中表现形式3.3. 数据表最大尺寸限制3.4. 状态文件和日志文件3.5. 调整MySQL数据目录位置4. MySQL数据库日常管理4.1. 数据库安全管理4.2. 服务器的启动和关闭4.3. 连接故障恢复4.4. MySQL用户帐号管理4.5. 日志文件管理4.5.1. 日志失效处理4.6. MySQL服务器的一些优化配置4.7. 优化服务器4.8. 运行多个MySQL服务器4.9. MySQL服务器镜像配置5. 数据库安全5.1. 保护MySQL安装程序文件5.2. 权限表5.3. 建立加密连接6. 数据库的备份、维护和修复6.1. 检查/修复数据表6.2. 备份数据库6.3. 使用备份恢复数据7. MySQL程序介绍8. MySQL How-To8.1. 连接数据库服务器8.2. 更新用户密码8.3. MySQL读取配置文件的顺序8.4. 重设置MySQL管理员密码的方法8.5. NULL值8.6. 使用SQL变量8.7. 改变默认提示符8.8. 非优化的全数据表DELETE操作8.9. MySQL事务处理示例List of Tables1.1. 转义序列1.2. 数值类数据列类型1.3. 字符串类数据列类型1.4. 日期,时间类型列1.5. 算术操作符1.6. 逻辑操作符1.7. 位操作符1.8. 比较操作符1.9. 操作符优先级(由高至低排列)3.1. 状态文件和日志文件3.2. MySQL数据目录及目录中文件位置的调整方法4.1. 访问权限表4.2. 权限作用范围(由ON子句设置)4.3. 日志启动选项4.4. BDB和InnoDB数据表日志选项Chapter 1. MySQL数据库的数据Table of Contents1.1. 数据值类型(data type)1.1.1. 数值1.1.2. 字符串1.1.3. 日期和时间1.2. 列类型(column type)1.2.1. 数值类的数据列类型1.2.2. 字符串类数据列类型1.2.3. 日期,时间型数据列类型1.3. 唯一编号1.4. 字符集支持1.4.1. MySQL4.1以前版本1.4.2. MySQL4.1以后版本1.4.3. 各级字符集的查询方法1.4.4. Unicode支持1.5. 如何选择数据列类型?1.6. 表达式操作符1.7. 类型转换MySQL数据库是由数据组成的,为了能方便管理和使用这些数据,我们把这些数据进行分类,形成各种数据类型,有数据值的类型,有表中数据列的类型,有数据表的类型。
理解MySQL的这些数据类型能使我们更好地使用MySQL数据库。
下面对各种数据类型进行简单的介绍。
1.1. 数据值类型(data type)对MySQL中数据值的分类,有数值型、字符型、日期型和空值等,这和一般的编程语言的分类差不多。
1.1.1. 数值MySQL中的数值分整型和浮点型两种。
MySQL支持科学记数法。
整型可以是十进制,也可是十六进制数。
1.1.2. 字符串MySQL支持以单或双引号包围的字符序列。
如“MySQL tutorial”、…Mysql Database‟。
MySQL能识别字符串中的转义序列,转义序列用反斜杠()表示。
下面是一个转义序列列表。
Table 1.1. 转义序列如果字符串本身包含有单双引号,则用以下三种方法中的一种来表示:∙字符串的引号和字符串两端的引号双同,则双写该引号。
如:'mysql''s test'。
∙用与字符串的引号不同的引号把字符串引起来,如:"mysql's test"。
∙用反斜杠转义引号,如:"mysql' test",'mysql' test'。
这样就不用理会字符串两端的是单引号还是双引号了。
字符串可由一个十六进制数表示,如0x61表示字符"a"。
由MySQL 4.0开始,字符串值也可用ANSI SQL 表示法X'val'来表示。
如X'61'表示字符"a"。
从MySQL 4.1开始,可以为字符串值专门指定一个字符集。
1.1.3. 日期和时间MySQL默认按“年-月-日”的顺序显示日期。
1.2. 列类型(column type)MySQL数据库的表是一个二维表,由一个或多个数据列构成。
每个数据列都有它的特定类型,该类型决定了MySQL如何看待该列数据,我们可以把整型数值存放到字符类型的列中,MySQL则会把它看成字符串来处理。
MySQL中的列类型有三种:数值类、字符串类和日期/时间类。
从大类来看列类型和数值类型一样,都是只有三种。
但每种列类型都还可细分。
下面对各种列类型进行详细介绍。
1.2.1. 数值类的数据列类型数值型的列类型包括整型和浮点型两大类。
Table 1.2. 数值类数据列类型1.2.1.1. 整型数据列类型MySQL有五种整型数据列类型,即TINYINT,SMALLINT,MEDIUMINT,INT和BIGINT。
它们之间的区别是取值范围不同,存储空间也各不相同。
在整型数据列后加上UNSIGNED属性可以禁止负数,取值从0开始。
声明整型数据列时,我们可以为它指定个显示宽度M(1~255),如INT(5),指定显示宽度为5个字符,如果没有给它指定显示宽度,MySQL会为它指定一个默认值。
显示宽度只用于显示,并不能限制取值范围和占用空间,如:INT(3)会占用4个字节的存储空间,并且允许的最大值也不会是999,而是INT整型所允许的最大值。
1.2.1.2. 浮点型数据列类型MySQL有三种浮点型数据列类型,分别是:FLOAT,DOUBLE和DECIMAL。
浮点类数据类型有一个最大可表示值和一个最小非零可表示值,最小非零可表示值决定了该类型的精确度。
MySQL 4.0.2版之后,FLOAT和DOUBLE都可以指定UNSIGNED属性。
当指定该属性时,取值范围不平移到正数区间,而只是简单地把浮点类型的负数部份去掉。
浮点类型也有M(1~255)和D(1~30,且不能大于M-2)。
分别表示显示宽度和小数位数。
M和D在FLOAT 和DOUBLE中是可选的,默认,当MySQL版本大于3.23.6时,FLOAT和DOUBLE类型将被保存为硬件所支持的最大精度。
DECIMAL的M和D值在MySQL3.23.6后可选,默认D值为0,M值为10。
1.2.1.3. 如何选择数值类数据列类型?为了节省存储空间和提高数据库处理效率,我们应根据应用数据的取值范围来选择一个最适合的数据列类型。
如果把一个超出数据列取值范围的数存入该列,则MySQL就会截短该值,如:我们把99999存入SMALLINT(3)数据列里,因为SMALLINT(3)的取值范围是-32768~32767,所以就会被截短成32767存储。
显示宽度3不会影响数值的存储。
只影响显示。
对于浮点数据列,存入的数值会被该列定义的小数位进行四舍五入。
如把一个1.234存入FLOAT(6.1)数据列中,结果是1.2。
DECIMAL与FLOAT和DOUBLE的区别是:DECIMAL类型的值是以字符串的形式被储存起来的,它的小数位数是固定的。
它的优点是,不会象FLOAT和DOUBLE类型数据列那样进行四舍五入而产生误差,所以很适合用于财务计算;而它的缺点是:由于它的存储格式不同,CPU不能对它进行直接运算,从而影响运算效率。
DECIMAL(M,D)总共要占用M+2个字节。
1.2.1.4. 数值类数据列的属性∙ZEROFILL属性适用于所有数值类数据列类型,作用是,如果数值的宽度小于定义的显示宽度,则在数值前填充0。
∙UNSIGNED属性不允许数据列出现负数。
∙AUTO_INCREMENT属性可生成独一无二的数字序列。
只对整数类的数据列有效。
∙NULL和NOT NULL属性设置数据列是否可为空。
∙DEFAULT属性可为数据列指定默认值。
1.2.2. 字符串类数据列类型字符串可以用来表示任何一种值,所以它是最基本的类型之一。
我们可以用字符串类型来存储图象或声音之类的二进制数据,也可存储用gzip压缩的数据。
下表介绍了各种字符串类型:Table 1.3. 字符串类数据列类型L+1、L+2是表示数据列是可变长度的,它占用的空间会根据数据行的增减面则改变。
数据行的总长度取决于存放在这些数据列里的数据值的长度。
L+1或L+2里多出来的字节是用来保存数据值的长度的。
在对长度可变的数据进行处理时,MySQL要把数据内容和数据长度都保存起来。
如果把超出字符串最大长度的数据放到字符类数据列中,MySQL会自动进行截短处理。
ENUM和SET类型的数据列定义里有一个列表,列表里的元素就是该数据列的合法取值。
如果试图把一个没有在列表里的值放到数据列里,它会被转换为空字符串(“”)。
字符串类型的值被保存为一组连续的字节序列,并会根据它们容纳的是二进制字符串还是非二进制字符而被区别对待为字节或者字符:∙二进制字符串被视为一个连续的字节序列,与字符集无关。
MySQL把BLOB数据列和带BINARY 属性的CHAR和VARCHAR数据列里的数据当作二进制值。
∙非二进制字符串被视为一个连续排列的字符序列。
与字符集有关。
MySQL把TEXT列与不带BINARY属性的CHAR和VARCHAR数据列里的数据当作二进制值对待。
在MySQL4.1以后的版本中,不同的数据列可以使用不同的字符集。
在MySQL4.1版本以前,MySQL用服务器的字符集作为默认字符集。
非二进制字符串,即我们通常所说的字符串,是按字符在字符集中先后次序进行比较和排序的。
而二进制字符串因为与字符集无关,所以不以字符顺序排序,而是以字节的二进制值作为比较和排序的依据。