本话旨在完成以下内容:
在数据库中,数据表是数据库中最重要和基本的操作对象,是数据存储的基本单位。换句话说我们操作数据库其实重要的就是操作数据表。本章将详细介绍数据表的基本操作,主要内容包括:创建数据表、查看数据表结构、修改数据表、删除数据表。

内容导航:
1.前言
2.掌握如何创建数据表
3.掌握查看数据表结构的方法
4.掌握如何修改数据表
5.熟悉删除数据表的方法
6.熟练操作综合案例数据表的基本操作
7.课后习题及答案
8.温故而知新

1.前言

我们前面说过其实学习数据库就学三个东西,一是安装,二是创建数据库,这两个我们已经学完了。下面就是学第三在创建好的数据库中创建数据表了。而表这种结构非常简单,你以前一定也使用过。对,和你用的Excel一样一样的。

2.掌握如何创建数据表

创建数据表,即指在已经创建好的数据库中建立新表。创建数据表的过程是规定列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整性和域完整性等)约束的过程。本部分将介绍创建数据表的语法形式、如何添加主键约束、外键约束、非空约束等。

后面这两句话你一定不理解,我来解释一下:

1.创建表的语法形式

大家记住数据表是属于数据库的,所以在创建表之前,应该用语法USE databasename指定操作是在哪个数据库中进行,如果没有选择数据库,会抛出错误。

创建表的语句是CREATE TABLE,语法如下:

CREATE TABLE <databasename> (); //其实这就可以了,已经结束了,简单不??但是你想啊,你这只是定义了
表名,但是表里面没有任何列啊!!
//正确如下
CREATE TABLE <databasename>
(
字段名1,数据类型 [列级别约束条件] [默认值], //[]代表可选,因为该列不一定需要约束和默认值
字段名2,数据类型 [列级别约束条件] [默认值], //数据类型我们后面会学哦,大家这里先抄袭就可以了
......
[表级别约束条件]
);
//其实这个表里面就是定义了列名,列的数据类型和该列的约束条件和默认值;最后是表的约束//注意事项:
//1.要创建的表的名称,不区分大小写,不能使用SQL语言中的关键字,如USE、DROP、DELETE等
//2.数据表中每一列(字段)的名称和数据类型都是必须有的,如果创建多列,要用逗号分开
//3.最后一行表约束可以没有,如果没有的话,最后一列无逗号,有的话表约束无逗号;即)前无逗号

现在我们创建数据库test_db;并用USE databasename;命令选用该数据库

创建并选用数据库test_db;
我们将要定义的表的结构

用CREATE TABLE tablename;创建表tb_empl;并用SHOW TABLES;查看该数据库中有多少数据表。

2.使用主键约束

其实我们数据表已经建好了,那后面这些都是啥呢??其实就是我们定义表语法结构[]里面的内容,即定义表中列的约束。大家第一次接触约束,很懵逼,不好意思,我也是。但是那又如何呢?现在我们学第一个约束,主键约束。

主键作用:一是唯一地标识表中的一条记录(其实就是表中的一行数据);二是可以结合外键(后面学)来定义不同数据表之间的关系;三是可以加快数据库查询速度。这三个作用很懵逼吧,大家看一下,暂时不用记的,因为这是我抄的哈哈哈。

怎么说主键呢?其实就是表中那个多列,我们将其中一列或多列一起定义为主键。问题来了,选用哪些列呢?为什么定义主键呢?主键约束要求主键列的数据唯一,并且不允许为空。就像身份证号一样,一个人只对应一个身份证号,它能够唯一地标识这一列的数据。后者为什么定义主键嘛,暂时我也不能很好的体会到作用。但有一点可以肯定的是那么多列数据,每一列只要根据这个主键就可以区分了。

这张表,你叫张三,出来好几个人;叫男的,出来好几个;叫年龄,也可能出来好几个,但是你叫身份证号,不好意思,就是能挑出一行,知道啥是主键了吧!!各位。至少你有一点点认识了吧!

单字段主键(这是用一个列定义主键)

格式一:在定义列的同时指定主键,语法是:字段名 数据类型 PRIMARY KEY [默认值],

下面是定义数据表tb_emp 2,其主键为id

创建数据表,并为id字段设置为主键

格式一:在定义完说有列之后指定主键,语法是:[CONSTRAINT <约束名>] PRIMARY KEY [字段名],

在创建表时用第二种方式设置主键

多字段联合主键(这是用多个列组合定义主键)

方式一(这里就一种方式哦,就是在表定义结束后设置多个字段为主键),格式为:PRIMARY KEY [字段1, 字段2,...字段n],

多列联合设置主键

3.使用外键约束(这部分大家或许不理解,但是要记得打代码哦)

一个表可以有一个或多个外键,一个表的外键可以是空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。

外键:首先它是表中的一个字段,它可以不是本表的主键,但对应另外一个表的主键。外键主要作用是保证数据引用的完整性,定义外键后,不允许删除在另一个表中具有关联关系的行。外键的作用是保持数据的一致性、完整性。

主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的那个表即是主表。

从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的那个表即是从表。

创建外键的语法:[CONSTRAINT <外键名>] FOREIGN KEY 字段名1 [,字段名2,...] REFERENCES <主表名> 主键列1 [,主键列2,...]

“外键名”为定义的外键约束的名称,一个表中不能有相同名称的外键;“字段名”表示子表需要添加外键约束的字段列;“主表名”即被字表外键所依赖的表的名称;“主键列”表示主表中定义的主键列,或者列组合。

创建部门表tb_dept1,设置字段id为主键列;定义表tb_emp5,并在tb_emp5表上创建外键约束。

tb_dept1的表结构

定义数据表tb_emp5,让它的键deptId作为外键关联到tbdept1的主键id

提示:关联指的是在关系型数据库中,相关表之间的联系。它是通过相容或相同的属性或属性组来表示的。子表的外键必须关联父表的主键,且关联字段的数据类型必须匹配,如果类型不一样,则创建子表时,就会出现错误。

4.使用非空约束

非空约束很简单,就是指定字段的值不能为空,如果添加数据时没有指定值(主要,我们还从来没有向表中添加过数据,只是设置了表头),数据库系统会报错。

语法:字段名 数据类型 NOT NULL,

非空设置

5.使用唯一性约束

唯一性约束,这个也好理解,就是要求这一列唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。

方式一:在定义完列之后直接指定唯一约束

语法:字段名 数据类型 UNIQUE,

方式一

方式二:在定义完所有列之后指定唯一约束

语法:[CONSTRAINT <约束名>] UNIQUE(<字段名>)

方式二

6.使用默认约束

这个默认约束也很好理解,即指定某列的默认值。如果该列你没有输入值,那么就是是默认值。比如你可以为性别这列默认为男(男多才选男,反之默认女),那么这列你不输入值,就默认为男。

语法:字段名 数据类型 DEFAULT 默认值

7.设置表的属性值自动增加

这个设置表的属性值自动增加可能有些同学无法理解,但是自动增加这四个字大家应该不能理解。比如第一个格子是10;那下一个格子自动增长为11,这是自动发生的,我们不用设置;那再下一个格子就自动增长为12了。这里之所以一次增长1是我想的,其实自动增长也未必是增长1嘛!

语法:字段名 数据类型 AUTO_INCREMENT

注意事项:在MySQL中AUTO_INCREMENT的初始值是1,每新增一条记录,字段值自动加1;一个表只能有一个字段使用AUTO_INCREMENT约束,且该字段必须为主键的一部分(这里为什么说是一部分?因为主键也能是一个字段,也可能是几个字段)。

数据库前面我关闭了,这里就重新登陆并选用test_db数据库
创建tb_emp8,并设自增长

到这里,不知道大家有没有疑问?设置这个自增长有什么用?而且到现在我们还没有用过。我先举个例子,你现在想在Excel里面设置一个表,表头时什么呢?学生编号,姓名,年龄,巴拉巴拉的。姓名,年龄啥的你都填了,这个编号呢?它是有规律的,从1开始,每次增1.这个时候你就会在这个编号这一列设置为自增长(当然我不知道Excel有没有这个功能,但是MySQL有)。

我们这里使用下这个自增长,虽然这部分是后面才要学的,但是大家也混个眼熟,并敲一下代码。

这个向表插入数据和查看表数据后面才学,大家姑且打一下

3.掌握查看数据表结构的方法

上面我们讲述了如何创建数据表,现在我们查看表结构的定义,以确认表的定义是否正确。其实有人迷糊,因为我们再用Excel创建表后就没有查看过。为什么MySQL需要呢?因为Excel是有界面的,你创建的时候本来就能看见你创建的表长啥样。但是MySQL使用命令行创建表时你是看不到自己预期的结果的。

查看表结构可以使用DESCRIBE和SHOW CREATE TABLE语句。(麻烦,怎么有两个命令,1个不好吗?因为效果有点不一样哦)

1.查看表基本结构语句DESCRIBE

语法:DESCRIBE 表名; 简写:DESC 表名;

NULL:表示该列是否可以存储NULL值;Key:表示该列是否已编制索引,PRI表示该列是表主键的一部分,UNI表示该列是UNIQUE索引的一部分,MUL表示在列中某个给定值允许出现多次;Default:表示该列是否有默认值,如果有的话值是多少;Extra:表示可以获取的与给定列有关的附加信息,例如AUTO_INCREMENT等。

2.查看表详细结构语句SHOW CREATE TABLE

语法:SHOW CREATE TABLE <表名G>

SHOW CREATE TABLE语句可以用来显示创建表时的CREATE TABLE语句,其不仅可以查看创建表时的详细语句,还可以查看存储引擎和字符编码。如果不加'G'参数,显示结果可能非常混乱。加上后显示会很直观。

SHOW CREATE TABLE

4.掌握如何修改数据表

上面我们学习了创建表和查看表,那此刻如果我们发现自己创建的有错怎么办??对,就是修改!!

修改表指的是修改数据库中已经存在的数据表的结构。MySQL使用ALTER TABLE语句修改表。

1.修改表名

命令:ALTER TABLE <旧表名> RENAME [TO] <新表名>

2.修改字段的数据类型

修改字段的数据类型,就是把字段的数据类型转换成另一种数据类型。这里的数据类型和大家学的Java里面的数据类型相似。只是MySQL里面有自己的数据类型罢了。后面会讲到MySQL里面的数据类型。

命令:ALTER TABLE <表名> MODIFY <字段名> <数据类型>

3.修改字段名

命令:ALYER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>

这里需要说明一下,其实这个命令可以仅修改数据类型,即就字段名和新字段名一样,改变新数据类型;也可以仅修改字段名,即新数据类型和原数据类型一样,改变新字段名;也可以两个都修改。

注意:由于不同类型的数据在电脑中存储的方式及长度并不相同,修改数据类型可能会影响到数据表中已有的数据记录。因此,当数据库表中已经有数据时,不要轻易修改数据类型。

4.添加字段

随着业务需求的变化,可能需要在已经存在的表中添加新的字段。一个完整字段包括字段名、数据类型、完整性约束。

命令:ALTER TABLE <表名> ADD <新字段名> <数据类型> [约束条件] [FIRST | AFTER 已存在字段名];

FIRST为可选参数,其作用是将新添加的字段设置为表的第一个字段;AFTER为可选参数,其作用是将新添加的字段加到指定的已存在字段名的后面。

FIRST和AFTER用于指定新增字段在表中的位置,如果SQL语句中没有这两个参数,则默认将新添加的字段设置为数据表的最后列。

1.添加无完整性约束条件的字段

2.添加有完整性约束条件的字段

3.在表的第一列添加一个字段

4.在表的指定列之后添加一个字段

5.删除字段

命令:ALTER TABLE <表名> DROP <字段名>;

6.修改字段的排列位置

ALTER TABLE <表名> MODIFY <字段1> <数据类型> FIRST|AFTER <字段2>;

这里需要说明一下,<字段1> <数据类型>指要修改的字段即该字段的数据类型;FIRST和AFTER <字段2>这是二选一,其中若选FIRST是指将字段1放在表的最前面一列,若选AFTER <字段2>是指将字段1放在字段2的后面。

1.修改字段为表的第一个字段:

2.修改字段到表的指定列之后

7.更改表的存储引擎

前面章节已经介绍过存储引擎(虽然你我还很懵逼,但是..),知道存储是MySQL中的数据存储在文件或者内存中时采用的不同技术实现。可以根据自己的需要,选择不同的引擎,甚至可以为每一张表选择不同的存储引擎。MySQL中主要存储引擎有:MyISAM、InnoDB、MEMORY(HEAP)、BDB、FEDERATED等。可以使用SHOW ENGINES;语句查看系统支持的存储引擎。

更改表存储引擎的命令:ALTER TABLE <表名> ENGINE=<更改后的存储引擎名>;

8.删除表的外键约束

对于数据库中定义的外键,如果不再需要,可以将其删除。外键一旦删除,就会解除主表和从表间的关联关系。

大家对外键可能还是很陌生,我们这里回忆一下,虽然回忆后的结果是你我还不明白外键的作用,但是回忆总是好的嘛!!外键其实是指定该表与有主键的那张表的一种关系。如果删除了这个外键,那么这两张表就没关系了。好了,就回忆这么多。再多也无用。

命令:ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>

5.熟悉删除数据表的方法

删除数据表就是将数据库中已经存在的表从数据库中删除。注意,删除表后,表的一切就消失了(万一你删错就GG了)。因此,在进行删除操作前,最好对表中的数据做个备份,以免造成无法挽回的后果。

1.删除没有被关联的表

我们解释下这里的关联的表指的是什么,其实就是数据表之间如果存在外键关联的情况下,主表就是关联的表。其他情况下,即使是从表,都可以用这里删除的方法删除。

命令:DROP TABLE [IF EXISTS] 表1,表2,...表n; 这里可以删除1个表,也可以删除多个,逗号隔开即可。

这里解释可选项[IF EXISTS]是什么意思。1.如果没有这句话:删除的时候存在该表,则删除成功;没有该表,则报ERROR错误;2.如果有这句话:删除的时候存在该表,则删除成功;没有该表,则报WARNING警告。下面亲测后发现,无论是报错还是报警告,都不影响其他表的删除(不懂的话看例子吧!)

2.删除被其他表关联的主表

其实这里讲的就是有外键约束的主从表中的从表。

如果直接删除主表,则会报错。此时我们可以先删除从表,再删除主表。但是有时候可能需要保留从表,这是如果要删除主表,只需要将关联的表的外键约束条件取消,然后就可以删除主表。

6.熟练操作综合案例数据表的基本操作

本话前面已经介绍了MySQL中数据表的各种操作,如创建表、添加各类约束、查看表结构,以及修改和删除表。这里通过一个综合案例来回顾一下本话知识。

1.登录数据库

2.创建数据库company

3.创建两个表offices和employees

4.将第二个表employees的mobile字段修改到officeCode字段后面

5.将表employees的birth字段改名为employee_birth

6.修改sex字段,数据类型为CHAR(1),非空约束。

7.删除字段note

8.增加字段名favoriate_activity,数据类型为VARCHAR(100)

9.删除表offices

第一步:删除外键约束

第二步:删除表offices

10.修改表employees存储引擎为MyISAM

11.将表employees名称修改为employees_info

7.课后习题及答案

1.删除表时和用ALTER TABLE对表进行修改时,需要注意什么?

回答:表删除操作将把表的定义和表中的数据(虽然我们现在还没有学向表中添加数据)一起删除,并且无法恢复。因此执行删除表的操作时,应当慎重。在删除表前,最好对表中的数据进行备份(后面学习),这样当操作失误时,可以对数据进行恢复。

对表的修改也是一样的道理,在修改前也要确保对数据进行完整的备份,因为数据库的改变是无法撤销的。

2.每一个表中都要有一个主键吗?

回答:并不是每一个表都需要主键,如果多个表之间进行连接操作时,需要用到主键。因此并不需要为每个表建立主键,而且有些情况最好不使用主键。

3.每一个表都可以随意选择存储引擎吗?

回答:按道理说每个表都可以随意选择存储引擎,但是外键约束不能跨引擎使用。即如果表之间需要关联外键,则不能指定不同的存储引擎。

4.

sql数据表改为自动递增显示与其他表关联_MySQL萌新第一季 第四话-数据表的基本操作...相关推荐

  1. Excel如何实现表单编号自动递增?

    Excel经常被用作业务单据的制作,例如出库单,一个很现实的需求是表单自动编号,希望每次打印时编号会自动递增. 很幸运Excel能够支持自动编号的实现,网上的方法很多,但自己找了半天也没能成功实现.不 ...

  2. 表单数据自动录入_智能记账系统,公式已设好,可直接录入数据,凭证报表自动生成...

    [智能记账系统,公式已设好,可直接录入数据,凭证报表自动生成] 公司最近业务繁重,身为公司的财务人员每天都得应对一些收支款项管理,实在是令人头疼,跟我一个小组的张会计也被这件事情烦得不得了,没有好用的 ...

  3. 伊洛纳登录显示服务器连接中,伊洛纳萌新入坑常见问题汇总

    伊洛纳萌新入坑常见问题汇总,很多玩家对一些入坑时遇到的问题不是很明白小编将问题做了一个汇总,有需要的玩家一定记得看看哦!快来看看本期的伊洛纳萌新入坑常见问题汇总吧! Q:为什么要读取电话权限? 我们采 ...

  4. 萌新做点小玩意儿DAY-15 线性表(顺序表)及其应用

    众所周知,程序=数据结构+算法.今天开始就做几个数据结构有关的小玩意儿,首先就是线性表,线性表是最简单,最常见的数据结构之一,线性表就是n个具有相同特性的数据元素的有限集合.线性表的特点就是一对一,除 ...

  5. itunes一直显示正在验证iphone恢复_换新iPhone了,四个方法轻松解决新旧iPhone的资料迁移...

    假如你有一部旧iPhone,又买了一部新iPhone,现在要把旧iPhone上的资料,迁移到新iPhone上去,该怎么办呢?教授给大家介绍4种简单实用的方法. 方法一:iCloud备份与还原 这个方法 ...

  6. Java POJO Bean 对象与 Web Form 表单的自动装配

    PS: 我一直在找寻为什么 struts2有自动将form字段和getter setter 自动 匹配的功能, 这篇文章解答了我的疑惑 深度剖析:Java POJO Bean 对象与 Web Form ...

  7. Oracle 学习笔记(四) Oracle表空间和数据文件

    tablespace是oracle的逻辑结构,datafile是oracle的物理结构. tablespace由datafile组成. tablespace 分为: permanent tablesp ...

  8. 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解...

    salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解 建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schema ...

  9. salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解

    建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schema Builder查看表结构以及多表之间的关联关系,可以登录后点击setup在左侧搜索框输入schema ...

最新文章

  1. hashmap实现原理_Java中HashMap底层实现原理(JDK1.8)源码分析
  2. JS题目总结:原型链/new/json/MVC/Promise
  3. C++中public,protected,private访问范围和用法
  4. 说说初用 Mock 工具测试碰到的坑
  5. 使用DELPHI编写一个小的控件
  6. AJAX ControlToolkit学习日志-Tabs(27)
  7. (二)GKE上MLOps的Jenkins作业和部署
  8. L3-016 二叉搜索树的结构 (30 分)-PAT 团体程序设计天梯赛 GPLT
  9. java+jdk+1.6.0+45+64_jdk1.6.0_45.tar.gz
  10. wps直接打开CVS文件会把长串数字订单号最后4位变为0
  11. 开源又好用的录屏软件
  12. struts2拦截器定义
  13. Matlab中_pkg.exe,pkg是什么文件?pkg文件怎么安装?
  14. 桌面显卡和CPU性能天梯图
  15. 计算机无法备份,无法备份和备份会话失败iTunes问题解决
  16. feather初体验
  17. APP:校园网登录app—中小南—源码简析
  18. emmc和ssd的区别
  19. layui.js和layui.all.js的区别
  20. MyEclispe发布web项目-遁地龙卷风

热门文章

  1. mysql vector查找_vectort
  2. 极具设计感的专辑分类设计,给你带来不一样的灵感
  3. 圣诞美妆海报还没想好怎么设计,看这里,PSD分层模板!
  4. APP时间界面设计模板,可临摹学习的好素材
  5. 泛型 (Generics)一定是最易懂简单的
  6. C++友元函数简单示例
  7. Go语言入门编程学习结束
  8. Go语言学习Day06
  9. 内存分配器ptmalloc,jemalloc,tcmalloc调研与对比
  10. Redis架构图-1