vlambda博客
学习文章列表

MySQL介绍及基本使用(一)

Chapter 9

MySQL介绍及基本使用

0.关系数据库

0.1 概念及特征

所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。

RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:

  • 数据以表格的形式出现
  • 每行为各种记录名称
  • 每列为记录名称所对应的数据域
  • 许多的行和列组成一张表单
  • 若干的表单组成database

0.2 相关术语

数据库: 数据库是一些关联表的集合。

  • 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
  • 列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。
  • 行:一行(=元组,或记录)是一组相关的数据。
  • 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
  • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
  • 外键:外键用于关联两个表。
  • 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
  • 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
  • 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

1.MySQL概述

MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关系数据库管理系统,关系型数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

  • MySQL 是开源的,目前隶属于 Oracle 旗下产品。
  • MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
  • MySQL 使用标准的 SQL 数据语言形式。
  • MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、 Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
  • MySQL 对PHP有很好的支持,PHP 是目前最流行的 Web 开发语言。
  • MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。
  • MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。

MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成, 如图所示的一个表格:

  • 表头(header): 每一列的名称;
  • 列(col): 具有相同数据类型的数据的集合;
  • 行(row): 每一行用来描述某条记录的具体信息;
  • 值(value): 行的具体信息, 每个值必须与该列的数据类型相同;
  • 键(key): 键的值在当前列中具有唯一性。

2.MySQL服务的启动和关闭

2.1 启动与停止服务

启动可以采用以下两种方式:

1.通过系统服务器启动MySQL

Windows 服务列表里设置手动或者自动方式启动后台运行服务。

2.在命令提示符下启动MySQL

net start mysql

停止,采用三种方式:

1.通过系统服务器启动MySQL

Windows 服务列表里设置手动或者自动方式停用后台运行服务。

2.在命令提示符下关闭MySQL

net stop mysql

3.第三方工具phpAdmin命令关闭(知道即可)

mysqladmin –uroot shutdown –proot

2.2 MySQL服务器连接和断开

  • 连接,cmd窗口中输入以下命令,并回车。
mysql –u root  –h127.0.0.1  –p password
  • 断开

mysql>提示符下,输入quit 或者 exit命令回车均可

3 MySQL数据库操作

3.1 创建数据库

语法格式如下:

CREATE  DATABASE  数据库名;

在创建数据库时,数据库命名有以下几项规则:

不能与其他数据库重名,否则将发生错误。

名称可以由任意字母、阿拉伯数字、下划线(_)和“$”组成,可以使用上述的任意字符开头,但不能使用单独的数字,否则会造成它与数值相混淆。

名称最长可为64个字符,而别名最多可长达256个字符。

不能使用MySQL关键字作为数据库名、表名。

在默认情况下,Windows下数据库名、表名的大小写是不敏感的,而在Linux下数据库名、表名的大小写是敏感的。为了便于数据库在平台间进行移植,建议采用小写来定义数据库名和表名。

3.2 查看数据库

成功创建数据库后,可以使用SHOW命令查看MySQL服务器中的所有数据库信息。

语法格式如下:

SHOW DATABASES;

3.3 选择数据库

虽然成功创建了数据库,但并不表示当前就在操作自己定义的数据库。可以使用USE语句选择一个数据库,使其成为当前默认数据库。 语法格式如下:

USE  数据库名;

3.4 删除数据库

语法格式如下:

DROP DATABASE  数据库名;

注意: 以上语法格式中,命令关键字不区分大小写。

4 MySQL数据表操作

4.1 创建数据表

创建MySQL数据表需要表名表字段名定义每个表字段信息:

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,
    `test` VARCHAR(20) DEFAULT("HLLO")
   PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

4.2 查看表结构

1.SHOW COLUMNS语句 语法格式:

SHOW  [FULL] COLUMNS  FROM 数据表名 [FROM 数据库名];

SHOW  [FULL] COLUMNS  FROM 数据库名.数据表名;

2.DESCRIBE语句 语法格式:

DESCRIBE 数据表名;

其中,DESCRIBE可以简写成DESC。

4.3 修改表结构

语法格式如下:

ALTER[IGNORE] TABLE 数据表名 alter_spec[,alter_spec]…

其中,alter_spec子句定义要修改的内容,其语法如下: alter_specification:

  ADD [COLUMN] create_definition [FIRST | AFTER column_name ] //添加新字段
  |  ADD INDEX [index_name] (index_col_name,...)   //添加索引名称
  |  ADD PRIMARY KEY (index_col_name,...)    //添加主键名称
  |  ADD UNIQUE [index_name] (index_col_name,...)   //添加唯一索引
  |  ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}  //修改

字段名称

  |  CHANGE [COLUMN] old_col_name create_definition   //修改字段类型
  |  MODIFY [COLUMN] create_definition    //修改子句定义字段
  |  DROP [COLUMN] col_name     //删除字段名称
  |  DROP PRIMARY KEY     //删除主键名称
  |  DROP INDEX index_name     //删除索引名称
  |  RENAME [AS] new_tbl_name     //更改表名
  |  table_options

ALTER TABLE语句允许指定多个动作,其动作间使用逗号分隔,每个动作表示对表的一个修改。

4.4 重命名表

重命名数据表使用RENAME TABLE语句,语法如下:

RENAME TABLE 数据表名1 To 数据表名2

4.5 删除表

删除数据表的操作很简单,同删除数据库的操作类似,使用DROP TABLE语句即可实现。其格式如下:

DROP TABLE 数据表名;

4.6 更多参考

MySQL 8.0 官方文档: https://dev.mysql.com/doc/refman/8.0/en/

5.MySQL语句操作

5.1 插入记录

INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );

5.2 查询数据库记录

SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]

5.3 修改记录

UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]

5.4 删除记录

DELETE FROM table_name [WHERE Clause]

6.MySQL数据类型

6.1 数字类型

包括准确数字的数据类型(NUMERIC、DECIMAL、INTEGER和SMALLINT),还包括近似数字的数据类型(FLOAT、REAL和DOUBLE PRECISION)。其中的关键词INT是INTEGER的同义词,关键词DEC是DECIMAL的同义词。 在创建表时,使用哪种数字类型,应遵循以下原则。

(1)选择最小的可用类型,如果值永远不超过127,则使用TINYINT比INT强。

(2)对于完全都是数字的,可以选择整数类型。

(3)浮点类型用于可能具有小数部分的数。例如货物单价、网上购物交付金额等。

6.2 字符串类型

字符串类型可以分为3类:普通的文本字符串类型(CHAR和VARCHAR)、可变类型(TEXT和BLOB)和特殊类型(SET和ENUM)。它们之间都有一定的区别,取值的范围不同,应用的地方也不同。 (1)普通的文本字符串类型,即CHAR和VARCHAR类型,CHAR列的长度被固定为创建表所声明的长度,取值在1~255之间;VARCHAR列的值是可变长度的字符串,取值和CHAR一样。

(2)TEXT和BLOB类型。它们的大小可以改变,TEXT类型适合存储长文本,而BLOB类型适合存储二进制数据,支持任何数据,例如文本、声音和图像等。

(3)特殊类型SET和ENUM

使用字符串类型的原则

(1)从速度方面考虑,要选择固定的列,可以使用CHAR类型。

(2)要节省空间,使用动态的列,可以使用VARCHAR类型。

(3)要将列中的内容限制在一种选择,可以使用ENUM类型。

(4)允许在一个列中有多于一个的条目,可以使用SET类型。

(5)如果要搜索的内容不区分大小写,可以使用TEXT类型。

(6)如果要搜索的内容区分大小写,可以使用BLOB类型。

6.3 日期和时间数据类型

日期和时间类型包括:DATETIME、DATE、TIMESTAMP、TIME和YEAR。其中的每种类型都有其取值的范围,如赋予它一个不合法的值,将会被“0”代替。

说明: 在MySQL中,日期的顺序是按照标准的ANSISQL格式进行输出的。


文章部分内容来源:菜鸟教程(www.runoob.com)