一:数据库的创建与删除
1.介绍
数据库是用于存储和操作诸如表,数据库视图,触发器,存储过程等数据的对象的集合。
2.创建数据库
3.显示数据库
SHOW DATABASES
语句显示MySQL数据库服务器中的所有数据库。
其中:
information_schema
,performance_schema
和mysql
是我们安装MySQL时可用的默认数据库。
4.使用数据库
5.删除数据库
二:表类型与存储引擎
1.介绍
了解MySQL中每个表类型的功能至关重要,以便您可以有效地使用它们来最大限度地提高数据库的性能。
2.存储引擎
每个存储引擎都有自己的优点和缺点。了解每个存储引擎功能至关重要,并为表选择最合适的功能,以最大限度地提高数据库的性能。
- MyISAM
- InnoDB
- MERGE
- MEMORY(HEAP)
- ARCHIVE
- CSV
- FEDERATED
3.Myisam
MyISAM扩展了以前的ISAM存储引擎。 MyISAM表针对压缩和速度进行了优化。 MyISAM表也可以在平台和操作系统之间移植。
MyISAM表的大小可达256TB
,这个数据里是非常巨大的。 此外,MyISAM表可以压缩为只读表以节省空间。 在启动时,MySQL会检查MyISAM表是否有损坏,甚至在出现错误的情况下修复它们。MyISAM表不是事务安全的。
在MySQL 5.5之前,MyISAM是创建表但是不用明确指定存储引擎时的默认存储引擎。 从版本5.5起,MySQL使用InnoDB作为默认存储引擎。
4.innoDB
InnoDB表完全支持符合ACID和事务。 它们也是性能最佳的。InnoDB表支持外键,提交,回滚,前滚操作。InnoDB表的大小最多可达64TB
。
像MyISAM一样,InnoDB表可以在不同的平台和操作系统之间移植。如果需要,MySQL还会在启动时检查和修复InnoDB表。
5.MERGE
MERGE表是将具有相似结构的多个MyISAM表组合到一个表中的虚拟表。MERGE存储引擎也被称为MRG_MyISAM引擎。 MERGE表没有自己的索引; 它会使用组件表的索。
使用MERGE表,可以在连接多个表时加快性能。MySQL只允许您对MERGE表执行SELECT,DELETE,UPDATE和INSERT操作。如果在MERGE
表上使用DROP TABLE
语句,则仅删除MERGE
规范。基础表不会受到影响。
6.Memory
内存表存储在内存中,并使用散列索引,使其比MyISAM表格快。内存表数据的生命周期取决于数据库服务器的正常运行时间。内存存储引擎以前称为HEAP。
7.Archive
归档存储引擎允许将大量用于归档目的的记录存储为压缩格式以节省磁盘空间。
归档存储引擎在插入时压缩记录,并在读取时使用zlib
库对其进行解压缩。
归档表只允许INSERT和SELECT
语句。 ARCHIVE
表不支持索引,因此需要完整的表扫描来读取行。
8.CSV
CSV存储引擎以逗号分隔值(CSV)文件格式存储数据。
CSV表格提供了将数据迁移到非SQL应用程序(如电子表格软件)中的便捷方式。
CSV表不支持NULL
数据类型。 此外,读操作需要全表扫描。
9.FEDERATED
FEDERATED存储引擎允许从远程MySQL服务器管理数据,而无需使用集群或复制技术。
本地联合表不存储任何数据。
从本地联合表查询数据时,数据将从远程联合表自动拉出。
三:创建表
1.语法
InnoDB表类型带来了诸如ACID事务,引用完整性和崩溃恢复等关系数据库管理系统的诸多好处。
2.定义列
说明:
column_name
指定列的名称。每列具有特定数据类型和大小,例如:VARCHAR(255)
。NOT NULL
或NULL
表示该列是否接受NULL
值。DEFAULT
值用于指定列的默认值。AUTO_INCREMENT
指示每当将新行插入到表中时,列的值会自动增加。每个表都有一个且只有一个AUTO_INCREMENT
列。
3.如果定义为主键
四:序列
1.介绍
使用MySQL序列为表的ID列自动生成唯一编号。
在MySQL中,序列是以升序生成的整数列表,即1
,2
,3
...
许多应用程序需要序列来生成主要用于识别的唯一数字。
要自动在MySQL中创建序列,可以在列上设置AUTO_INCREMENT
属性,这通常是主键列。
2.AUTO_INCREMENT的使用规则
(这个三点都要注意,以前倒是没注意)
- 每个表只有一个
AUTO_INCREMENT
列,其数据类型通常为整数。 - 必须对
AUTO_INCREMENT
列进行索引,它可以是PRIMARY KEY或UNIQUE索引。 AUTO_INCREMENT
列必须具有NOT NULL约束。当您为列设置AUTO_INCREMENT
属性时,MySQL会自动将NOT NULL
约束隐式添加到列中。
3.序列原理
AUTO_INCREMENT
列的起始值为1
,当您向列中插入NULL值或在INSERT语句中省略其值时,它将增加1
。- 要获取最后生成的序列号,请使用LAST_INSERT_ID()函数。 我们经常要后续语句中使用最后一个插入ID,例如将数据插入到表中。 最后生成的序列在会话中是唯一的。 换句话说,如果另一个连接生成序列号,从连接中可以使用
LAST_INSERT_ID()
函数获取它。 - 如果将新行插入到表中并指定序列列的值,如果序列号不存在于列中,则MySQL将插入序列号,如果序列号已存在,则会发出错误。 如果插入大于下一个序列号的新值,MySQL将使用新值作为起始序列号,并生成大于当前值的唯一序列号。这会在序列中产生一段空白(不连续)。
-
如果使用UPDATE语句将
AUTO_INCREMENT
列中的值更新为已存在的值,如果该列具有唯一索引,则MySQL将发出重复键错误。 如果将AUTO_INCREMENT
列更新为大于列中现有值的值,MySQL将使用最后一个插入序列号加1
的值作为下一行列号值。 例如,如果最后一个插入序列号为3
,然后又将其更新为10
,那么新插入行的序列号不是11
,而是4
。 -
如果使用DELETE语句删除最后插入的行,MySQL可能会也可能不会根据表的存储引擎重复使用已删除的序列号。 如果您删除一行,则MyISAM表不会重复使用已删除的序列号,例如,如果删除表中的最后一个插入
ID
为10
,则MySQL仍会为新行生成11个下一个序列号。 与MyISAM表类似,InnoDB表在行被删除时不重复使用序列号。
五:Alter修改表结构
1.介绍
ALTER TABLE
语句来更改现有表结构(如添加或删除列,更改列属性等)。
- 首先,在
ALTER TABLE
子句之后指定要更改的表名称。 - 其次,列出一组要应用于该表的操作。操作可以是添加新列,添加主键,重命名表等任何操作。
ALTER TABLE
语句允许在单个ALTER TABLE
语句中应用多个操作,每个操作由逗号(,
)分隔。
2.示例表
3.为列设置自增
4.添加新的列
添加一个名为complete
的新列,以便在任务表中存储每个任务的完成百分比。
注意到after。
5.删除列
6.重命名表
将tasks
表重命名为work_items
表。
六:重命名表
1.介绍
使用MySQL RENAME TABLE
语句和ALTER TABLE
语句重命名表。
要更改一个或多个表,我们使用RENAME TABLE
语句:
除了表之外,我们还可以使用RENAME TABLE
语句来重命名视图。
在执行RENAME TABLE
语句之前,必须确保没有活动事务或锁定表。
请注意,不能使用RENAME TABLE
语句来重命名临时表,但可以使用ALTER TABLE语句重命名临时表。
在安全性方面,我们授予旧表的任何权限必须手动迁移到新表。
必须手动调整引用该表的其他数据库对象,如视图,存储过程,触发器,外键约束等。