简介
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 数据库软件是一个客户端/服务器系统,由一个支持不同后端的多线程 SQL 服务器、几个不同的客户端程序和库、管理工具和广泛的应用程序编程接口 (API) 组成。
终端管理命令:mysqladmin
MariaDB 代替,MariaDB 数据库管理系统是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可。开发这个分支的原因之一是:甲骨文公司收购了 MySQL 后,有将 MySQL 闭源的潜在风险,因此社区采用分支的方式来避开这个风险。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品
关系型数据的组成
在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语:
数据库: 数据库是一些关联表的集合。
数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。
行:==一行(=元组,或记录)==是一组相关的数据,例如一条用户订阅的数据。
冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
外键:==外键用于关联两个表==。
复合键:复合键(组合键)将多个列作为一个索引键,一般用于==复合索引==。
索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
.
安装
参考APT安装方式的
$> sudo apt-get install mysql-server
安装后自动开启。
查看安装状态
$> systemctl status mysql
.
查看帮助
$> mysql --help
发生错误
ERROR 1045 (28000): Access denied for user 'neon'@'localhost' (using password: YES)
使用root 用户 解决,权限不够造成的
mysql -u root -p ###登录成功
mysql -h host -u user -p menagerie[数据库] ### 登录后,直接访问指定的数据库
退出
mysql> exit
访问数据库
查看数据库
SHOW DATABASES;
.
说明:mysql数据库描述用户访问权限
创建数据库
CREATE DATABASE menagerie;
如何访问数据库
USE mysql[数据库名称];
命令结尾没有分号
删除数据库
drop DATABASE [数据库]
数据类型
大致可以分为三类:数值、日期/时间和字符串(字符)类型;
数值类型
MySQL 支持所有标准 SQL 数值数据类型。
TINYINT | 1 Bytes | (-128,127) | (0,255) | 小整数值 |
---|---|---|---|---|
SMALLINT | 2 Bytes | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 Bytes | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 Bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 Bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 Bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 Bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
日期和时间类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR
。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
TIMESTAMP
类型有专有的自动更新特性,将在后面描述。
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
---|---|---|---|---|
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
字符串类型
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET
。该节描述了这些类型如何工作以及如何在查询中使用这些类型。
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255 bytes | 定长字符串 |
VARCHAR | 0-65535 bytes | 变长字符串 |
TINYBLOB | 0-255 bytes | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65 535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65 535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295 bytes | 极大文本数据 |
注意:char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。
CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。
有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。
数据库中表
MySQL数据表需要以下信息:
表名
表字段名
定义每个表字段
查看表相关信息
USE [数据库名称];
SHOW TABLES;
查看数据表的相关信息
显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值
等其他信息
SHOW COLUMNS FROM [数据表];
显示数据表的详细索引信息
SHOW INDEX FROM [数据表];
创建表
创建语句格式:CREATE TABLE table_name (column_name column_type);
后面追加的表示字段属性
CREATE TABLE IF NOT EXISTS `runoob_tbl`(
`runoob_id` INT UNSIGNED AUTO_INCREMENT,
`runoob_title` VARCHAR(100) NOT NULL,
`runoob_author` VARCHAR(40) NOT NULL,
`submission_date` DATE,
PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
NOT NULL
如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
AUTO_INCREMENT
定义列为自增的属性,一般用于主键,数值会自动加1。
PRIMARY KEY
关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。
ENGINE
设置存储引擎,CHARSET
设置编码。编码表示将数值存储的,进行编码,最后的读取的编码的方式。
实际使用过程
实例
以下为创建数据表 runoob_tbl 实例:
root@host### mysql -u root -p
Enter password:*******
mysql> use RUNOOB;
Database changed
mysql> CREATE TABLE runoob_tbl(
-> runoob_id INT NOT NULL AUTO_INCREMENT,
-> runoob_title VARCHAR(100) NOT NULL,
-> runoob_author VARCHAR(40) NOT NULL,
-> submission_date DATE,
-> PRIMARY KEY ( runoob_id )
-> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.16 sec)
mysql>
注意:MySQL命令终止符为分号 ; 。
删除表
Drop table [table name]
插入数据
格式:
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
使用箭头标记 ->
不是 SQL 语句的一部分,它仅仅表示一个新行,如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写 SQL 语句,SQL 语句的命令结束符为分号 ;
。
表中插入一条新记录时,如果没有为某个字段赋值,系统就会自动为这个字段插入默认值
实例
mysql> INSERT INTO runoob_tbl
-> (runoob_title, runoob_author, submission_date)
-> VALUES
-> ("JAVA 教程", "RUNOOB.COM", '2016-05-06');
我们并没有提供 runoob_id 的数据,因为该字段我们在创建表的时候已经设置它为 AUTO_INCREMENT(自动增加) 属性
查询数据
格式:
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
SELECT 命令可以读取一条或者多条记录。
你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
你可以使用 WHERE 语句来包含任何条件。
你可以使用 LIMIT 属性来设定返回的记录数。
Where 条件
格式:
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
条件连接符号
你可以使用 AND 或者 OR 指定一个或多个条件。
操作符 | 描述 | 实例 |
---|---|---|
= | 等号,检测两个值是否相等,如果相等返回true | (A = B) 返回false。 |
<>, != | 不等于,检测两个值是否相等,如果不相等返回true | (A != B) 返回 true。 |
> | 大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true | (A > B) 返回false。 |
< | 小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true | (A < B) 返回 true。 |
>= | 大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true | (A >= B) 返回false。 |
<= | 小于等于号,检测左边的值是否小于或等于右边的值, 如果左边的值小于或等于右边的值返回true | (A <= B) 返回 true。 |
UPDATE
格式:UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
mysql> UPDATE runoob_tbl SET runoob_title='学习 C++' WHERE runoob_id=3;
Query OK, 1 rows affected (0.01 sec)
DELETE
格式:DELETE FROM table_name [WHERE Clause]
LIKE字句,在条件设置中使用通配符
LIKE
用于在Where 子句中使用,通配符
与正则表达式的区别是: REGEXP
用于正则表达式,LIKE
仅仅用于通配符
通配符表
通配符 | 描述 |
---|---|
% | 替代 0 个或多个字符 |
_ | 替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist] 或 [!charlist] | 不在字符列中的任 |
实例
mysql> use RUNOOB;
Database changed
mysql> SELECT * from runoob_tbl WHERE runoob_author LIKE '%COM';
UNION 操作符
将多个表中查询结果集放入到一起输出
连接两个以上的 SELECT 语句的结果组合到一个结果集合。
格式:
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
将一个两个表中的数据整合输出到一个集合体中。
expression1, expression2, ... expression_n
: 要检索的列。
tables
:要检索的数据表。
WHERE conditions
:可选, 检索条件。
DISTINCT
:可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
ALL
: 可选,返回所有结果集,包含重复数据。
排序
ORDER BY
格式:
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]
你可以使用任何字段来作为排序
的条件,从而返回排序后的查询结果。
你可以设定多个字段来排序
。
你可以使用 ASC
或 DESC
关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
你可以添加 WHERE...LIKE
子句来设置条件。
分组
GROUP BY
格式:
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
选择一列,然后根据分组结果调用处理函数。
根据某一列的结果,对其进行分区。
.
JOIN
根据表之间数据连接关系来获取结果集
INNER JOIN(内连接,或等值连接):
获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接)
:获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接):
与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
NULL值的处理方式
MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作。
为了处理这种情况,MySQL提供了三大运算符
IS NULL: 当列的值是 NULL,此运算符返回 true。
IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
<>: 比较操作符(不同于 = 运算符),当比较的的两个值相等或者都为 NULL 时返回 true。
关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。
在 MySQL 中,NULL 值与任何其它值的比较(即使是 NULL)永远返回 NULL,即 NULL = NULL 返回 NULL 。
MySQL 中处理 NULL 使用 IS NULL 和 IS NOT NULL 运算符。
NULL 即指的是空值
ALTER 表格的修改
修改数据表名,以及数据的字段名
删除字段(一列)
ALTER TABLE [table name ] DROP [字段名称]
添加字段(新增一列)
ALTER TABLE [table name ] ADD [字段名] [数据类型] [FIRST] [AFTER 字段]
FIRST
第一列,[AFTER 字段]
在某一列后面
修改字段类型
ALTER TABLE [table name ] MODIFY [字段名称] [新的数据类型];
修改字段名称
ALTER TABLE testalter_tbl CHANGE [原来字段] [新字段名称] [新字段数据类型];
修改字段的属性:NULL或者默认值
修改表格的字段j 为NOT NULL且默认值 100
ALTER TABLE testalter_tbl MODIFY j BIGINT NOT NULL DEFAULT 100;
设置默认值
ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
删除默认值
ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
查询表
正则表达式
MySQL可以通过 LIKE ...% 来进行模糊匹配。
MySQL 同样也支持其他正则表达式的匹配, MySQL中使用 REGEXP 操作符来进行正则表达式匹配。
算术运算符
比较运算符
逻辑运算符
位运算符
总结
在学习使用MySQL 的时候,更多的是学习了关于SQL常见的增删改查相关内容。
这一步内容更多的是和SQL注入有关,而更多的使用方式,这里并不涉及。
参考文档
[1] mysql
[2]
[3]
0 评论