MYSQL基础知识

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

• 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 无符号

你可能感兴趣的:(MYSQL基础知识)