MySQL数据库的基本使用
1.数据库的基本操作
1.1 数据库的创建
MySQL在完成安装之后,会有几个必须需要创建的数据库,我们可以使用show databases;进行查看。
创建数据库的命令是:CREATE DATABASE DATABASE_NAME;
其中database_name是需要创建的数据库的名称,这个名称不可以与已经存在的数据库重名。
在数据库创建完毕之后可以使用SHOW CREATE DATABASE 来进行查看数据库的定义。
1.2 数据库的删除
删除数据是将已经存在的数据库从磁盘空间上清除,清除之后,数据库中的所有数据也将会一同被删除。
删除命令是:DROP DATABASE DATABASE_NAME;
其中database_name是要删除数据库的名称,如果指定的数据库不存在,就会删除出错。
PS:使用DROP DATABASE 命令的时候要非常谨慎,因为这个命令不会给出任何的提醒,如果一旦被删除,数据库中的数据会全部被删除,而且没法恢复。
1.3 创建数据表
数据表是属于数据库的,在创建数据表之前,应该使用语句USE <数据库名称>指定是在那个数据库中进行的操作。创建数据表的命令如下:
CREATE TABLE<表名称>
(
字段名称1,数据类型 [列级别约束条件] [默认值],
......
[表级别约束条件]
)
在创建表的时候需要注意下面信息:
- 要创建表的名称,不区分大小写,不能使用SQL语言中的关键字。
- 数据表中每一列(字段)的名称和数据类型,如果创建多列,使用逗号进行隔开。
例如: #创建学生表 CREATE TABLE STUDENT ( id INT(10), name VARCHAR(20) );
1.4 主键约束
主键又成为主码,是表中一列或者多列的组合。主键约束要求主键列唯一,并且不允许为空。主键可以唯一的标识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据查询的速度。主键分为单字段主键和多字段主键。
1.4.1 单字段主键
主键是由一个字段组成的,主要有下面两种:
(1)在定义列的同时指定主键:
字段名 数据类型 PRIMARY KEY [默认值]
(2)在定义完所有的列之后指定主键:
[CONSTRAINT <约束名>] PRIMARY KEY [字段名]
1.4.2 多字段联合主键
主键是由多个字段联合组成的,主要形式如下:
PRIMARY KEY [字段1,字段2.....]
1.5 外键约束
外键是用来在两个表的数据之间建立链接,它可以是一列或者是多列。一个表可以由一个或者多个外键。外键对应是参照完整性,一个表的外键可以为空值,如果不是空值,则每个外键值必须等于另外一个表中的主键的某个值。
外键可以不是本表中的主键,但是一定是另外一张表中的主键。外键主要的作用是保证数据引用的完整性,定义外键之后,不允许删除在另外一个表中具有关联性关系的行。
FOREINGN KEY 字段名1[,字段名2,.....] REFERENCES<主键名> 主键列1[,主键列2....]
1.6 非空约束
非空约束是指字段的值不可以为空。对于使用了非空约束的字段,如果用户在进行添加的时候没有指定值,就会报错。
字段名 数据类型 NOT NULL
1.7 唯一性约束
唯一性约束要求该列唯一,允许为空,但是只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。
(1)定义完之后直接指定唯一约束:
字段名 数据类型 UNIQUE
(2)定义完所有列之后指定唯一约束
[CONSTRAINT <约束名>] UNIQUE(<字段名>)
1.8 默认约束
默认约束是指顶某列的默认值。就是在系统插入的时候默认是某个值。
字段名 数据类型 DEFAULT 默认值
1.9 表的属性值自动增加
可以通过AUTO_INCREMENT关键字来实现自动增加记录而字段值加1。一个表中只能有一个字段使用AUTO_INCREMENT约束,并且该字段必须是主键的一部分。AUTO_INCREMENT约束的字段可以是任何整数类型。
字段名 数据类型 AUTO_INCREMENT
1.10 查看数据表结构
1.10.1 DESCRIBE
DESCRIBE/DES语句可以查看表的字段信息,其中包括字段名、字段数据类型、是否时主键、是否有默认值等等。
DESCRIBE 表名;
或者
DESC 表名;
1.10.2 SHOW CREATE TABLE
SHOW CREATE TABLE语句可以用来显示创建表的时候的CREATE TABLE语句。
SHOW CREATE TABLE <表名\G>;
PS : 加上\G之后会让显示的结果更加清晰
1.11 修改数据表
修改数据表是指修改数据库中已经存在的数据表的结构。
1.11.1 修改表名
MySQL时通过ALTER TABLE语句来实现表名的修改的。
ALTER TABLE <旧表名> RENAME [TO] <新表名>
PS:其中TO是可选项
1.11.2 修改字段的数据类型
修改字段的数据类型是指把字段的数据类型转换成另一种数据类型。
ALTER TABLE <表名> MODIFY <字段名> <数据类型>
PS:其中表名是要修改的数据类型所在的表的名称,字段名是需要修改的字段,数据类型是修改后字段的新的数据类型
1.11.3 修改字段名称
ALTER TABLE<表名> CHANGE <旧字段> <新字段> <新数据类型>
PS:其中旧字段是需要修改的字段,新字段是修改后的字段,数据类型是修改后的数据类型,如果不需要修改那就保持和之前的一样就可以,但是这个不可以为空
PS:由于不同类型的数据在机器中存储的方式以及长度可能并不相同,修改数据类型可能会影响到数据表中已有的数据记录,所以如果表中有数据的话不要轻易去修改数据类型。
1.11.4 添加字段
ALTER TABLE <表名> ADD <新字段> <数据类型> [约束条件] [FIRST|AFTER 已存在字段名]
PS:FIRST为可选择参数,其作用是将新添加的字段设置为表的第一个字段;AFTER也是可选择参数,其作用是将新添加的字段添加到指定的已存在的字段的后面。如果不选择默认添加到最后。
1.11.5 删除字段
ALTER TABLE <表名> DROP <字段名>
1.11.6 修改字段的排序位置
ALTER TABLE <表名> MODIFY <字段1> <数据类型> FIRST|AFTER <字段2>
1.12 修改表的存储引擎
ALTER TABLE <表名> ENGINE=<更改之后的存储引擎名称>
1.13 删除表的外键约束
对于数据库中定义的外键,如果不再需要的话可以进行删除,一旦删除外键,就会解除与主表之间的关联关系。
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>
PS:其中外键约束名称是指CONSTRAINT关键字后面的参数
1.14 删除数据表
删除数据表就是把数据库中已经存在的表从数据库中删除。在删除之前请做好表的备份,因为一旦删除,表的定义和数据都会被删除。
1.14.1 删除没有被关联的表
DROP TABLE [IF EXISTS] 表1,表2......;
PS:IF EXISTS是可选项,加上之后如果不存在要删除的表会给你提示,不加会报错。
1.14.2 删除被其他表关联的主表
数据表之间如果存在外键关联的情况下,如果直接删除主表,会显示删除失败。其原因是破坏了表的参照完整性。如果确定要进行删除,就需要先删除主表对应的子表,然后再删除主表,但是这样会删除掉两个表的数据。有时候我们需要保留子表的数据,就需要单独删除主表,这个时候就可以先删除关联的外键约束,然后再进行删除即可。
2. 数据库的存储引擎
数据库存储引擎是数据库低层软件组件,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据操作。不同的数据引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。MySQL的核心就是存储引擎。
MySQL提供了多个不同的存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。在MySQL中,不需要在整个服务器中使用同一种存储引擎,针对具体的需求,可以对每一张表使用不同的存储引擎。可以使用命令:show engines;来查看所有支持的引擎。
其中Support列的值表示某种引擎是否可以使用,YES表示可以,NO表示不可以,DEFAULT表示该引擎是默认存储引擎。
2.1 InnoDB存储引擎
InnoDB是事务型数据库的首选引擎,它支持事务安全表(ACID),支持行级锁和外键。
InnoDB主要特征有下面几种:
- InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全存储引擎。InnoDB锁定在行级并且也在SELECT语句中提供了一个类似于非锁定读。这些功能增加了多用户部署和性能。在SQL查询中,可以自由的将InnoDB类型的表于其他MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。
- InnoDB是为了处理巨大的数据量的并且获得最大性能设计。它的CPU效率可能是任何其他基于磁盘的关系型数据库引擎所不能匹敌的。
- InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB将它的表和索引在一个逻辑表空间中,表空间可以包含数个文件(或原始磁盘分区)。这与MYISAM表不一样,例如MYISAM表中每个表被存在分离的文件中。InnoDB表可以是任何尺寸。
- InnoDB支持外键完整性约束。
- InnoDB被用在众多需求高性能的大型数据库站点。
2.2 MYISAM存储引擎
MYISAM是基于ISAM存储引擎,并对其进行扩展。它是在web、数据仓库和其他应用环境中比较常用的存储引擎之一。MyISAM拥有较高的插入、查询的速度,但是不支持事务。
MyISAM的主要特征有下面几种:
- 大文件(达到63位文件长度)在支持大文件的文件系统和操作系统上被支持。
- 当把删除和更新以及插入操作混合使用的时候,动态尺寸的行会产生更少的碎片。
- 每个MyISAM表的最大索引数是64,这个可以通过重新编译来进行改变,每个索引最大的列数是16个。
- 最大的键长度是1000字节,这个也可以通过重新编译来进行改变。
- BLOB和TEXT列可以被索引。
- NULL值被允许在索引列中。每个值占每个键的0~1个字节。
- 所有数字键值以高字节优先被存储以允许一个更高的索引压缩。
- 每个表一个AUTO_INCREMENT列的内部处理。MyISAM位INSERT和UPDATE操作字段更新这一列。
- 可以把数据文件和索引文件放到不同的目录。
- 每个字符可以有不同的字符集。
- 有VARCHAR的表可以有不同的字符集。
- VARCHAR和CHAR列可以多达64KB。
2.3 MEMORY存储引擎
MEMORY存储引擎将表中的数据存储到内存中,为查询和引用其他表数据提供快速访问。
MEMORY的主要特征有下面几种:
- MEMORY表的每个表可以有多达32个索引,每个索引16列,以及500字节的最大键长度。
- MEMORY存储引擎执行HASH和BTREE索引。
- 可以在一个MEMORY表中有非唯一键。
- MEMORY表可以使用一个固定的记录长度的格式。
- MEMORY不支持BLOB或TEXT列。
- MEMORY支持AUTO_INCREMENT列和对包含NULL值的列的索引。
- MEMORY表在所有客户端之间共享。
- MEMORY表内容被存在内存中,内存是MEMORY表和服务器在查询处理时的空闲中,创建的内部表共享。
- 当不需要MEMORY表的内容时,要释放被MEMORY表所占用的内存,可以执行DELETE FROM或者TRUNCATE TABLE,或者删除整个表。
2.4 存储引擎的选择
不同的存储引擎有各自的特点,下面时部分存储引擎的特点:
如果要提供提交,回滚和崩溃恢复能力的事务安全能力,还要实现并发控制,InnoDB是个不错的选择。如果数据表主要是用来插入数据和查询记录,那么MyISAM引擎是个不错的选择。如果只是临时存放数据,并且数据量不大,并且也不需要较高的数据安全性,可以选择将数据保持在内存中的MEMORY引擎,mysql中使用该引擎作为临时表,存放查询的中间结果。如果只有INSERT和SELECT操作,可以选择Archive引擎,Archive存储引擎支持高并发的插入操作,但是本身并不是事务安全的。Archive存储引擎比较适合存储归档数据,比如记录日志信息等等。