【MySQL】(基础篇四) —— 创建数据库和表

打印 上一主题 下一主题

主题 637|帖子 637|积分 1911

管理数据库和表

本文先容如何利用SQL命令管理MySQL的数据库和表
首先颠末前几篇文章中对于SQL前置知识的理解,我们知道,数据库和表的关系类似于文件系统中的文件夹和文件,一个数据库中可以有多个表,想要利用表并对其中的数据举行管理,首先应该对其所属数据库举行管理。
管理数据库

创建数据库

在MySQL中,创建数据库的SQL命令相对简单,基本语法如下:
  1. CREATE DATABASE 数据库名;
复制代码
数据库名应该包管唯一,如果你创建的数据库已经存在,可以添加 IF NOT EXISTS 子句,这样如果数据库已经存在,MySQL不会报错,而是继续执行后续的命令:
  1. CREATE DATABASE IF NOT EXISTS 数据库名;
复制代码
在创建数据库的过程中可以指定命据库的字符集和排序规则,可以利用 CHARACTER SET 和 COLLATE 子句从5.5.3版本开始,利用 utf8mb4 作为默认字符集,以及相应的 utf8mb4_0900_ai_ci 排序规则,以支持更广泛的Unicode字符,包括emoji和其他复杂的多字节字符。
  1. CREATE DATABASE 数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
复制代码
要查看当前服务器的默认字符集和排序规则,你可以运行以下SQL命令:
  1. SHOW VARIABLES LIKE 'character_set%';
  2. SHOW VARIABLES LIKE 'collation%';
复制代码
在命令行工具中,你可以直接输入这些命令来创建数据库。如果你利用的是图形界面工具,如Navicat等,通常会有相应的图形界面操作来帮助你创建数据库,其底层执行的也是类似的SQL命令。
【示例】创建一个数据库mysql_study,作为我们日后学习mysql时利用的数据库,设置数据库编码为utf8
  1. CREATE DATABASE mysql_study CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
复制代码
如果创建之后在navicat中没有体现,右键毗连,刷新

删除数据库

要删除一个数据库,可以利用 DROP DATABASE 命令。如果希望在数据库不存在时避免错误,可以添加 IF EXISTS 选项。
  1. DROP DATABASE IF EXISTS 数据库名;
复制代码
在数据库中执行删除操作的时间,尤其是删除一整个数据库,你应该非常的谨慎,多确认几遍总不是坏事,或者是提前创建好备份。
备份数据库

在MySQL中,备份数据库通常可以通过逻辑备份和物理备份两种方式举行。以下是这两种方法的详细操作:
逻辑备份

逻辑备份是将数据库中的数据以SQL语句的情势导出到文件中。最常用的工具是mysqldump命令。
利用mysqldump命令备份
  1. mysqldump -u 用户名 -p 数据库名 > 备份文件名.sql
复制代码


  • -u 后跟数据库用户名。
  • -p 表示必要输入密码,系统会提示你输入。
  • 数据库名 是你要备份的数据库名称。
  • 备份文件名.sql 是你想保存的备份文件名,通常以.sql末端。
利用图形化工具备份
如果你更倾向于图形界面操作,可以利用MySQL Workbench、Navicat等工具:

  • 毗连到你的数据库。
  • 探求“备份”或“导出”功能。
  • 选择数据库和备份格式(通常是SQL)。
  • 指定备份文件保存的位置和名称。
  • 开始备份过程。
【示例】在navicat中备份我们刚创建的数据库mysql_study

物理备份

物理备份是直接复制数据库的物理文件,如数据文件和日志文件。这种方式通常必要数据库处于锁定或非常有限活动的状态,并且操作较为复杂,一样平常由专业的数据库管理员执行,或者利用像Percona XtraBackup这样的工具来举行热备份(即在数据库运行时备份)。
管理表

对于数据库内部的表操作(如创建、修改表结构、删除表等),则涉及到另一套命令,包括 CREATE TABLE, ALTER TABLE, DROP TABLE 等。
创建表

列名和数据类型利用空格隔开,而不同列之间利用逗号隔开
  1. CREATE TABLE 表名 (
  2.   列名1 数据类型,
  3.   列名2 数据类型,
  4.   ...
  5.   PRIMARY KEY (主键列名)
  6. );
复制代码
NULL
NULL值就是没有值或缺值。允许NULL值的列也允许在插入行时不给出该列的值。不允许NULL值的列不担当该列没有值的行,换句话说,在插入或更新行时,该列必须有值。每个表列或者是NULL列,或者是NOT NULL列,这种状态在创建时由表的界说规定。请看下面的例子:
  1. CREATE TABLE orders
  2. (
  3.         cust_id int NOT NULL AUTO_INCREMENT,
  4.         order_date datetime NOT NULL,
  5.         order_num int NOT NULL,
  6.         PRIMARY KEY (cust_id )
  7. ) ENGINE=InnoDB;
复制代码
在navicat中,可以通过右键表——>【计划表】来查看和管理表中的字段信息

主键
主键值必须唯一。即,表中的每个行必须具有唯一的主键值。如果主键利用单个列,则它的值必须唯一。如果利用多个列,则这些列的组合值必须唯一。作为主键的列,不可以有NULL属性。主键可以在创建表时界说(如这里所示),或者在创建表之后界说.
主键在船建表之后的类似的语句界说:
  1. PRIMARY KEY (列名1[,列名2, 列名3...])
复制代码
AUTO_INCREMENT
在上面创建orders表的命令中,有一行为:
  1. cust_id int NOT NULL AUTO_INCREMENT,
复制代码
AUTO_INCREMENT告诉MySQL,本列每当增加一行时主动增量。每次执行一个INSERT操作时,MySQL主动对该列增量(从而才有这个关键字AUTO_INCREMENT),给该列赋予下一个可用的值。这样给每个行分配一个唯一的cust_id,从而可以用作主键值。
每个表只允许一个AUTO_INCREMENT列,而且它必须被索引(如,通过使它成为主键)。
覆盖AUTO_INCREMENT 如果一个列被指定为AUTO_INCREMENT,则它必要利用特殊的值吗?你可以简单地在INSERT语句中指定一个值,只要它是唯一的(至今尚未利用过)即可,该值将被用来更换主动生成的值。后续的增量将开始利用该手工插入的值。
那么,如安在利用AUTO_INCREMENT列时获得这个值呢?可利用last_insert_id()函数获得这个值,如下所示:
  1. SELECT last_insert_id()
复制代码
此语句返回末了一个AUTO_INCREMENT值,然后可以将它用于后续的MySQL语句。
默认值
如果在插入行时没有给出值,MySQL允许指定此时利用的默认值。默认值用CREATE TABLE语句的列界说中的DEFAULT关键字指定。
MySQL不允许利用函数作为默认值,它只支持常量。
很多数据库开发人员利用默认值而不是NULL列,特殊是对用于计算或数据分组的列更是如此。
引擎类型
上述建表例子中利用的CREATE TABLE语句全都以ENGINE=InnoDB语句结束。
MySQL有一个详细管理和处理数据的内部引擎。在你利用CREATE TABLE语句时,该引擎详细创建表,而在你利用SELECT语句或举行其他数据库处理时,该引擎在内部处理你的哀求。多数时间,此引擎都隐蔽在DBMS内,不必要过多关注它。
MySQL具有多种引擎。它打包多个引擎,这些引擎都隐蔽在MySQL服务器内,全都能执行CREATE TABLE和SELECT等命令。不同的引擎具有各自不同的功能和特性,为不同的使命选择正确的引擎能获得良好的功能和灵活性。
以下是几个必要常用的引擎:


  • InnoDB是一个可靠的事件处理引擎,它不支持全文本搜刮;
  • MEMORY在功能等同于MyISAM,但由于数据存储在内存(不是磁盘)中,速率很快(特殊适合于临时表);
  • MyISAM是一个性能极高的引擎,它支持全文本搜刮,但不支持事件处理。
在没有特殊需求(全文搜刮等)的要求下,利用默认引擎即可,从MySQL 5.5版本开始,InnoDB成为默认存储引擎。也不必要特殊指出。在涉及到这些特殊需求的环境下,我会为你详细解说
修改表结构

添加列、删除列、修改列界说等
  1. -- 添加列
  2. ALTER TABLE 表名
  3. ADD 列名 数据类型;
  4. -- 删除列
  5. ALTER TABLE 表名
  6. DROP COLUMN 列名;
  7. -- 修改列定义(列名、数据类型、NULL等)
  8. ALTER TABLE 表名
  9. MODIFY 列名 新数据类型;
复制代码
利用ALTER TABLE要极为小心,应该在举行改动前做一个完备的备份(模式和数据的备份)。数据库表的更改不能撤销,如果增加了不必要的列,大概不能删除它们。类似地,如果删除了不应该删除的列,大概会丢失
该列中的所有数据。
删除表

  1. DROP TABLE IF EXISTS 表名;
复制代码
删除表没有确认,也不能撤销,执行这条语句将永久删除该表,请谨慎利用。
重定名表

利用RENAME TABLE语句可以重定名一个表:
  1. RENAME TABLE 旧表名 TO 新表名;
复制代码
RENAME TABLE所做的仅是重定名一个表。可以利用下面的语句对多个表重定名:
  1. RENAME TABLE backup_customers TO customers,
  2.                          backup_vendors To vendors,
  3.                          backup_products TO products;
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

冬雨财经

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表