MYSQL简介
MySQL是一个开源的关系型数据库管理系统,也是最流行的关系型数据库管理系统之一,使用标准化的 SQL 语言用于访问数据库。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
MYSQL历史
MySQL由创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被Oracle收购,MySQL的所有权也落入Oracle的手中。
在Oracle控制下的MySQL开发,有两个主要问题:
1.MySQL核心开发团队是封闭的,完全没有Oracle之外的成员参加。很多高手即使有心做贡献,也没办法做到。
2.MySQL新版本的发布速度,在Oracle收购Sun之后大为减缓。Widenius有一个ppt,用数据比较了收购之前和之后新版本的发布速度。有很多bugfix和新的feature,都没有及时加入到发布版本之中。
以上这两个问题,导致了各个大公司,都开发了自己定制的MySQL版本,包括Yahoo/ Facebook/ Google/ 阿里巴巴等等。
之后MySQL之父,觉得MySQL是开源社区的资产,任何个人/组织都无权据为己有。为了依靠广大MySQL社区的力量来更快速的发展MySQL,另外开分支是必须的。依靠Sun/Oracle来发展MySQL,实在很不靠谱,于是决定另开分支,这个分支的名字叫做MariaDB。
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB。
安装mysql
CentOS系列发行版:
yum groupinstall mariadb //安装mariadb服务软件包组
yum groupinsrall mariadb-client //安装mariadb客户端软件包组
yum intall mariadb-server //安装mariadb服务软件包
yum install mariadb //安装mariadb客户端软件包
使用mysql
[root@localhost:~]# mysql -u[USERNAME] -h[HOST] -p[PASSWORD] //连接MYSQL
mysql用户账户由两部分组成:USERNAME@HOST(HOST用于限制此用户可以登录的远程主机)
-uUSERNAME : 用户名(默认为root)
-hHOST :服务器主机(默认为localhost)
-pPASSWORD : 用户的密码(默认只使用-p空密码,之后交互式输入密码)
mysql支持通配符:
% 表示匹配任意长度的任意字符(172.16.0.0/16 = 172.16.%.%)
_ 表示任意的单个字符
mysql客户端命令:
命令 | 解释 | 描述 |
---|---|---|
? (?) | Synonym for 'help'. | |
clear (\c) | Clear the current input statement. | 清除当前输入的语句 |
connect (\r) | Reconnect to the server. Optional arguments are db and host. | 重新连接,通常用于被剔除或异常断开后重新连接,SQL*plus下也有这样一个connect命令 |
delimiter (\d) | Set statement delimiter. | 设置命令终止符,缺省为;,比如我们可以设定为/来表示语句结束 |
ego (\G) | Send command to mysql server, display result vertically. | 控制结果显示为垂直显示 |
exit (\q) | Exit mysql. Same as quit. | 退出mysql |
go (\g) | Send command to mysql server. | 发送命令到mysql服务 |
help (\h) | Display this help. | |
nopager (\n) | Disable pager, print to stdout. | 关闭页设置,打印到标准输出 |
notee (\t) | Don't write into outfile. | 关闭输出到文件 |
pager (\P) | Set PAGER [to_pager]. Print the query results via PAGER. | 设置pager方式,可以设置为调用more,less等等,主要是用于分页显示 |
print (\p) | Print current command. | |
prompt (\R) | Change your mysql prompt. | 改变mysql的提示符 |
quit (\q) | Quit mysql. | |
rehash (#) | Rebuild completion hash. | 自动补齐相关对象名字 |
source (.) | Execute an SQL script file. Takes a file name as an argument. | 执行脚本文件 |
status (\s) | Get status information from the server. | 获得状态信息 |
system (!) | Execute a system shell command. | 执行系统命令 |
tee (\T) | Set outfile [to_outfile]. Append everything into given outfile. | 操作结果输出到文件 |
use (\u) | Use another database. Takes database name as argument. | 切换数据库 |
charset (\C) | Switch to another charset. Might be needed for processing binlog with multi-byte charsets. | 设置字符集 |
warnings (\W) | Show warnings after every statement. | 打印警告信息 |
nowarning (\w) | Don't show warnings after every statement. | |
========== | ====== | ====== |
上面的所有命令,扩号内的为快捷操作,即只需要输入""+ 字母即可执行
For server side help, type 'help contents' 注意这里的描述help contents将获得服务器端的相关帮助信息
MariaDB [(none)]>HELP KEYWORD; // 查看指定关键词的帮助
MariaDB [(none)]>select version(); // 查看版本信息
show index from [TABLES_NAME]; // 显示数据表的详细索引信息,包括主键
数据库管理
MariaDB [(none)]>create database [DATABASES_NAME]; // 创建指定数据库
MariaDB [(none)]>show databases; // 列出所有的数据库列表
MariaDB [(none)]>drop database [DATABASES_NAME]; //删除指定数据库
数据表管理
MariaDB [(none)]>create table [TABLES_NAME](COLUMNS_NAME COLUMNS_TYPE);
// 创建数据表(字段不能为空)
MariaDB [(none)]>show tables; //列出指定数据库中的所有表
MariaDB [(none)]>drop table [TABLES_NAME]; //删除指定的数据表
数据值管理
MariaDB [(none)]>show columns from [TABLES_NAME];显示字段属性
修改数据
// 如果数据是字符型,必须使用单引号或者双引号,如:"value"。
插入数据
MariaDB [(none)]>insert into [TABLES_NAME] (FIELD1,FIELD2,...FILED[N])
VALUES(VALUE1,VALUE2,...VALUE[N]) //一次插入多条数据
数据查询
select * from [TABLES_NAME]; // 显示指定数据表中的所有数据
select [FIELDS] from [TABLES_NAME]; // 现实指定数据表中的指定字段
select [FIELDS1],[FIELDS1] from [TABLES_NAME]; // 现实指定数据表中的指定字段
更新数据
MariaDB [(none)]>UPDATE table_name SET field1=new-value1, field2=new-value2
//更新指定字段的数据
删除数据
MariaDB[(none)]>DELETE FROM table_name //删除整个表,可以配合where删除指定记录。
MYSQL操作符
操作符 | 描述 | 示例 |
---|---|---|
= | 等号,检测两个值是否相等,如果相等返回true | (A = B) 返回false。 |
<>, != | 不等于,检测两个值是否相等,如果不相等返回true | (A != B) 返回 true。 |
> | 大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true | (A > B) 返回false。 |
< | 小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true | (A < B) 返回 true。 |
>= | 大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true | (A >= B) 返回false。 |
<= | 小于等于号,检测左边的值是否小于于或等于右边的值, 如果左边的值小于或等于右边的值返回true | (A <= B) 返回 true。 |
====== | ====== | ======= |
条件查询
where
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
and
and 并且,多条件查询
or
or 或者,多条件查询
like
like 类似(模糊查找,和MYSQL通配符结合使用)
SELECT field1, field2,...fieldN FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
union
union 多表查询组合到一个结果集合中。
MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。UNION 只会选取不同的值,UNION ALL 可以选取重复的值!
MySQL UNION 操作符语法格式:
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
(
DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
ALL: 可选,返回所有结果集,包含重复数据。)
SELECT country FROM Websites
UNION ALL
SELECT country FROM apps
ORDER BY country;
ORDER 排序
ORDER BY [COLUMNS_NAME] [arguments];按照指定的字段和排序方式,排序
参数:desc 倒序、asc 正序
null值的处理
为了处理这种情况,MySQL提供了三大运算符:
IS NULL: 当列的值是 NULL,此运算符返回 true。
IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
<=>: 比较操作符(不同于=运算符),当比较的的两个值为 NULL 时返回 true。
关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。
在
MySQL 中,NULL 值与任何其它值的比较(即使是 NULL)永远返回 false,即 NULL = NULL 返回false 。
MySQL 中处理 NULL 使用 IS NULL 和 IS NOT NULL 运算符。
数据类型
1 、整型
• tinyint(m) 1节 个字节 范围(-128~127)
• smallint(m) 2节 个字节 范围(-32768~32767)
• mediumint(m) 3节 个字节 范围(-8388608~8388607)
• int(m) 4节 个字节 范围(-2147483648~2147483647)
• bigint(m) 8节 个字节 范围(+-9.22*10 的18 次方)
取值范围如果加了unsigned ,则最大值翻倍,如tinyint unsigned的取值范围为(0~256)
int(m) 里的m 是表示SELECT 查询结果集中的显示宽度,并不影响实际的取值范围
MySQL 可以为整型类型指定宽度,例如Int(11) ,对绝大多数应用这是没有意义的:它不会限制值的合法范围,只是规定了MySQL的一些交互工具(例如MySQL 命令行客户端)用来显示字符的个数。对于存储和计算来说,Int(1) 和Int(20)是相同的。
2 、浮点型(float 和double) ,近似值
• float(m,d) 型 单精度浮点型 8 位精度(4 字节) m 总个数,d 小数位
• double(m,d) 型 双精度浮点型 16 位精度(8 字节) m 总个数,d小数位
• 设一个字段定义为float(6,3) ,如果插入一个数123.45678,实际数据库里存的是123.457 ,但总个数还以实际为准,即6位
3 、定点数
• 在数据库中存放的是精确值, 存为十进制
• decimal(m,d) 参数m<65 是总个数,d<30且 且 d<m 是小数位
• MySQL5.0 和更高版本将数字打包保存到一个二进制字符串中(每4 个字节存9 个数字)。例如,decimal(18,9) 小数点两边将各存储9 个数字,一共使用9 个字节:小数点前的数字用4个字节,小数点后的数字用4 个字节,小数点本身占1 个字节
• 浮点类型在存储同样范围的值时,通常比decimal 使用更少的空间。float 使用4 个字节存储。double 占用8 个字节
• 因为需要额外的空间和计算开销,所以应该尽量只在对小数进行精确计算时才使用decimal—— 例如存储财务数据。但在数据量比较大的时候,可以考虑使用bigint 代替decimal
4 、字符串(char,varchar,_text)
• char(n) 固定长度,最多255 个字符
• varchar(n) 可变长度,最多65535 个字符
• tinytext 可变长度,最多255 个字符
• text 可变长度,最多65535 个字符
• mediumtext 可变长度,最多2 的24 次方-1 个字符
• longtext 可变长度,最多2 的32 次方-1 个字符
• BINARY(M) 固定长度,可存二进制或字符,允许长度为0-M 字节,
• VARBINARY(M) 可变长度,可存二进制或字符,允许长度为0-M 字节
• 内建类型:ENUM 枚举, SET 集合
char和varchar:
• 1.char(n) 若存入字符数小于n ,则以空格补于其后,查询之时再将空格去掉。所以char 类型存储的字符串末尾不能有空格,varchar 不限于此。
• 2.char(n) 固定长度,char(4) 不管是存入几个字符,都将占用4 个字节,varchar 是存入的实际字符数+1 个字节(n< n>255) ,所以varchar(4),存入3 个字符将占用4个字节。
• 3.char 类型的字符串检索速度要比varchar 类型的快。
varchar 和text:
• 1.varchar 可指定n ,text 不能指定,内部存储varchar 是存入的实际字符数+1 个字节(n< n>255) ,text 是实际字符数+2 个字节。
• 2.text 类型不能有默认值
• 3.varchar 可直接创建索引,text 创建索引要指定前多少个字符。
varchar 查询速度快于text
5.二进制数据: :BLOB
• BLOB 和text 存储方式不同,TEXT 以文本方式存储,英文存储区分大小写,而Blob 是以二进制方式存储,不分大小写
• BLOB 存储的数据只能整体读出
• TEXT 可以指定字符集,BLOB 不用指定字符集
6. 日期时间类型
• date 日期 '2008-12-2'
• time 时间 '12:25:36'
• datetime 日期时间 '2008-12-2 22:06:44'
• timestamp 自动存储记录修改时间
• YEAR(2), YEAR(4) :年份
若定义一个字段为timestamp ,这个字段里的时间数据会随其他字段修改的时候自动刷新,这个数据类型的字段可以存放这条记录最后被修改的时间。
修饰符
所有类型:
• NULL 数据列可包含NULL值
• NOT NULL 数据列不允许包含NULL值
• DEFAULT 默认值
• PRIMARY KEY 主键
• UNIQUE KEY 唯一键
• CHARACTER SET name 指定一个字符集
• AUTO_INCREMENT 自动递增,适用于整数类型
• UNSIGNED 无符号