标签:

假设你已拥有创建和修改服务器上数据库所必需的权限,那么我们来看一下如何创建数据库以及数据库中的表。在本章的示例中,我们将为一个虚拟的书店建立一个数据库:

CREATE DATABASE bookstore;

通过这条简单的SQL语句,我们已经创建了名为bookstore的数据库。另外,MySQL语句以及子句中的保留字对大小写不敏感。数据库与表名对大小写是否敏感取决于你所用的操作系统,比如在Linux系统上对大小写是敏感的,而Window系统对大小写不敏感。按照通常的习惯,在SQL说明文档中保留字均使用大写字母,而数据库名,表名以及字段名都使用小写字母。你可能也注意到了SQL语句结尾处的分号。一条完整的SQL语句可能不止一行,直到输入分号以后,客户机程序才会将SQL语句发送到服务器解析执行。

创建好数据库后,这虽然只是空库,但是我们可通过下面的语句从默认数据库切换到新数据库:

USE bookstore

使用上述语句,就不必在每个SQL语句中都指定所用到的数据库名了。默认情况下,MySQL会把最后一个指定的数据库作为当前使用的数据库。该语句是基于客户机程序的SQL语句,所以在句尾不必添加分号。

下面,我们将创建第一个表,以后blog将把数据添加到此表中。首先创建一个存放图书基本信息的数据库,因为这是书店业务的核心信息:

CREATE TABLE books (

book_id INT,

title VARCHAR(50),

author VARCHAR(50)

);

上面的SQL语句创建了带有三个列的图书信息表。圆括号内是列的全部列表。接下来输入DESCRIBE语句可查看刚刚创建的表的结果,该结果以表格形式输出:

DESCRIBE books;

考虑到书店规模有点大,我们认为还需要为数据元素多添加几个列:出版商,出版年份,ISBN码,图书类型,图书描述等等。我们还想让MySQL自动为book_id列分配一个数字编号,这样在添加一行新记录时就不必担心有重复问题发生。另外,我们决定将作者字段的真实作者名改为标识码,通过标识码可将本表与包含作者名字段的其他表关联起来。这种方式将数据统一起来,可以简化数据的输入,也使排列查找操作更容易实现。输入下列SQL语句可在已创建好的数据表中完成修改操作:

ALTER TABLE books

CHANGE COLUMN book_id book_id INT AUTO_INCREMENT PRIMARY KEY,

CHANGE COLUMN author author_id INT,

ADD COLUMN description TEXT,

ADD COLUMN genre ENUM (‘novel‘,‘poetry‘,‘drama‘),

ADD COLUMN publisher_id INT,

ADD COLUMN pub_year VARCHAR(4),

ADD COLUMN isbn VARCHAR(20);

在这个SQL语句的起始行后,可以看到每个修改或添加字段的子句都是由一个逗号分开的。第二行子句修改book_id列,即便是使用原来的列名和数据类型,我们也要将其重写一遍。我们还要为其添加AUTO_INCREMENT标记,它负责执行前一段提到的任务,就是将任意一个唯一的值分配给表中的每条记录。另外,我们还要将该字段设为主键,以提高数据检索的速度。

第一个CHANGE子句可能会让人感到迷惑,因为其中列名(book_id)出现了二次。当了解CHANGE子句的语法时,你就会明白其中的意义了,第一个book_id表示将要修改的现在列,该子句余下的部分用于指定一个新列。要想更好地理解这个子句的意思,可查看第二条CHANGE子句:该子句用新列author_id替代了现有列author。数据表中不再有名为author的列。

在第三行子句中,我们修改了author列,令其名称及数据类型与将要创建的authors表中的名称与类型一致。如同books表中的索引列代表图书一样,authors表中也有一个代表每个作者的索引列。我们把books表和authors表关联起来做查询操作,这样就可通过books表的author_id列找到author表中相应的记录。由于authors表中相应列的数据类型是INT,所以该子句中author_id列的数据类型也一定是INT。

第四行子句为每本书添加了一个描述列。该列的数据类型是文本类型,文本类型是可变长数据类型,可支持长度小于64千字节的数据。

在genre列中,为了确保统一性,事先已列举了几个可用的值。该字段允许为空值或NULL,空值或NULL并不需要指定。

向books表输入数据之前,我们先快速建立一个authors表。该表做为备查表。首先要向authors表中添加数据,因为我们向books表中添加数据时,需要知道books表中authors列的标识号:

CREATE TABLE authors(

author_id INT AUTO_INCREMENT PRIMARY KEY,

author_last VARCHAR(50),

author_first VARCHAR(50),

country VARCHAR(50)

);

根据需要,我们还要把books表与authors表通过author_id字段关联起来。这个例子先保存起来后面blog再用。

标签:

mysql创建数据库表_mysql基础之创建数据库和表相关推荐

  1. mysql基础表和修理表_MySQL基础知识——创建数据库和表

    /*Navicat MySQL Data TransferSource Server : 本地MySQLSource Server Version : 80021Source Host : 127.0 ...

  2. mysql vs创建表_MYSQL基础三--表的操作一

    1.表的数据库对象包括:列.索引和触发器. 列(columns):创建表的时候必须指定列的名字和数据类型: 索引(Indexs):指定数据库表列建立起来的顺序,提供快速访问数据的途径: 触发器(Tri ...

  3. mysql用命令行创建表_mysql命令行创建表

    命令来查看表中的数据的变化: mysql>select*from students; 7.用文本方式将数据装入一个数据库表: 创建一个文本文件"student.sql",每行 ...

  4. mysql创建视图语法_MySQL教程91-MySQL创建视图

    创建视图是指在已经存在的 MySQL 数据库表上建立视图.视图可以建立在一张表中,也可以建立在多张表中. 基本语法 可以使用 CREATE VIEW 语句来创建视图. 语法格式如下: CREATE V ...

  5. hive根据已有表创建新表_Hive基础之创建表

    1.创建基础表 在这个网页里详细记录了创建表的每个语法,下面就一一来看这些创建表的语法内容: CREATE TABLE [IF NOT EXISTS] [db_name.]table_name ``[ ...

  6. mysql导入三个基本表_mysql 基础导入导出

    导入导出mysqldump 导出:mysqldump -u root -p --databases 数据库1 数据库2 > xxx.sql 导入:系统命令行: MySQL -u用户名 -p密码 ...

  7. mysql按首数字分表_MySql基础-数据分表

    有时候会出现数据冗余,比如下面情况 首先,我们需要建一个类型表,把goods表中cate字段中的所有类型存到类型表中,有两种方法: 第一种方法: #建一个新表类型表 create table good ...

  8. 1在mysql进行定义操作系统_Mysql基础知识一

    1.数据库的定义 数据:描述事物符号记录.(包括数字.文字.图形.图像.声音.档案记录等)以记录形式统一的格式进行存储.广义上的数据:出现在计算机内部的一切二进制数据流都为数据狭义上的数据:只是数字或 ...

  9. mysql大于等于怎么写_MySQL 对于千万级的大表要怎么优化?我写了6000字的深度解读...

    千万级大表如何优化,这是一个很有技术含量的问题,通常我们的直觉思维都会跳转到拆分或者数据分区,在此我想做一些补充和梳理,想和大家做一些这方面的经验总结,也欢迎大家提出建议. 从一开始脑海里开始也是火光 ...

  10. 讲mysql执行流程书籍_MySQL 基础架构 1. 一条SQL查询语句的执行过程(个人学习笔记)...

    MySQL的逻辑架构图: MySQL 大体分为 "server 层" 和 "存储引擎层" 两部分: Server 层 包括 连接器.查询缓存.分析器.优化器.执 ...

最新文章

  1. Hadoop学习笔记—7.计数器与自定义计数器
  2. Nat. Med. | 制定指导原则以报告AI在临床试验中的使用
  3. 50颗传感器、超1亿像素,算力700TOPS,这个自动驾驶平台有点儿炫!
  4. 【bzoj2555】Substring【后缀平衡树入门】
  5. xss植入_前端安全之XSS攻击
  6. Python编程基础10:列表
  7. linux xbrowser 安装包,xmanager安装包
  8. 机器学习5——决策树
  9. 运营简史:互联网运营的20年发展与演变
  10. Pimple研究及PHP框架搭建
  11. 什么是ISO 21434?给汽车软件开发人员的合规贴士
  12. 华为手机如何默认数据存在存储卡里面
  13. [源码、文档、分享] iOS/iPhone学习系列、代码教程(转)
  14. 【PaddleOCR】一、PaddleOCR安装、测试(Win10)
  15. iOS超级签名流程及代码(php版本)
  16. Android系统10 RK3399 init进程启动(十八) isLoggable日志级别输出控制
  17. 切绳子【洛谷P1577】【二分】
  18. 使用_smu_debug_mode了解undo tablespace
  19. 双隐藏层BP网络的matlab仿真,求遗传算法优化含有两个隐含层的BP神经网络的matlab程序...
  20. 人工智能 java 坦克机器人系列: 强化学习_Java坦克机器人系列强化学习

热门文章

  1. 兜兜转转。最终还是选择了它——C语言学习历程
  2. 六级阅读翻译——2017.11.13
  3. oracle大杂烩(二)
  4. FITC-TAT-Smad7-HA融合蛋白,荧光素标记TAT-Smad7-HA融合蛋白
  5. 算法初步(一)寻找最小正整数
  6. 读书随笔(6)密码恢复
  7. 帆软报表参数传给网络报表_在报表中给session赋值实现报表间参数共享
  8. 大数据处理需要用到的九种编程语言
  9. 商标注册后的注意事项
  10. linux上传文件到百度云盘(使用shell脚本,不依赖python库)