(三)操作数据表


1、概述

数据表,或简称为表,是数据库最重要的组成部分之一,是其他对象的基础,可以理解为类似于Excel表格,有多行多列,示例如下:
  假设要存储通讯录信息,对于数据库而言,是用表来进行存储,首先要根据实际需求确定关于通讯录要存储哪些数据。本例中要存储“姓名”、“性别”及“联系方式”,这种限定每一列的存储内容的值称为字段,同时还要确定好该字段所属的数据类型


  当存储了全部信息后,会发现实际上每一行就是一个用户完整的通讯录信息,因此像这样的一行就被称为一条记录。


2、创建数据表

在登录到MySQL之后,首先查看现已存在的数据库有哪些,假设本次要在“test”数据库中存储数据,则选择使用该数据库,并用“SELECT”验证当前使用的确实为“test”数据库(该部分语句可参见初涉MySQL)。

创建表的语法结构如下:

CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type,
column_name data_type,
……
)
其中“[IF NOT EXISTS]”在之前已经介绍过,而“column_name”指的是字段的名称,“data_type”则是数据类型;“,”是字段之间的分隔符,最后一个字段后不需要添加“,”。

采用这种输入方式可以使代码看起来更简洁明了
采用这种输入方式可以使代码看起来更简洁明了

根据语法创建该表,其中:

  • “username”即用户名称,数据类型为VARCHAR,最多存储20个字节;
  • “age”即用户年龄,数据类型为TINYINT,UNSIGNED指的是无符号,即非负;
  • “birthday”即用户出生日期,数据类型为DATE;
  • “salary”即用户收入,数据类型为FLOAT,最多存储8位数,小数点后2位数;
  • “resume”即用户信息摘要,数据类型为TEXT。

3、查看数据表

语法结构如下:

SHOE TABLES [FROM db_name]
[LIKE 'pattern' | WHERE expr]

示例如下:

添加“[FROM db_name]”之后,可以查看其他数据库下含有的数据表,例如查看mysql数据库下的数据表:


4、查看数据表结构

对于已创建成功的数据表,若想查看其结构是否与输入的相一致,可使用如下语句:

SHOE COLUMNS FROM tbl_name

DESC tbl_name

SHOW CREATE TABLE tbl_name

示例如下:

SHOE COLUMNS FROM tbl_name
SHOE COLUMNS FROM tbl_name
DESC tbl_name
DESC tbl_name
SHOW CREATE TABLE tbl_name
SHOW CREATE TABLE tbl_name

  这种模式会将数据表创建时的源码、使用的储存引擎及编码都显示出来,但是格式会比较乱,可以在末尾添加“\G”进行格式化处理,便于查看:


SHOW CREATE TABLE tbl_name\G
SHOW CREATE TABLE tbl_name\G

5、记录的插入与查找

如果用Excel表格来举例,那么之前仅仅是完成了“列”的创建,现在要来填充“行”的内容,也就是记录,语句如下:

INSERT [INTO] tbl_name [(col_name,……)] VALUES(val,……)

语法中字段名加上了中括号,意味着可以省略,如果省略字段称,就要为所有的字段都赋值,示例如下:

如果在省略字段名的情况下,有的字段没有赋值,系统就会报错,提示字段名与值不匹配:

当然也可以对指定的字段名进行赋值,例如只对“用户名称”与“用户收入”进行赋值:

注意:

  1. 字段名与赋值的类型、个数、顺序始终能一一对应;
  2. 赋值时不要超过字段所定义的长度;
  3. 如果需要插入空值,使用null;
  4. 插入日期或字符时,使用单引号(‘’)包围。

若要验证记录是否已被写入数据表,可以使用“SELECT expr,… FROM tbl_name”,来查看,关于“SELECT”的详细语法,日后会介绍到,此处先简单的使用一下:

此处的 * 是指字段的过滤
此处的 * 是指字段的过滤

6、空值与非空

当用户在网站注册账户时,可能会遇到一些必填的选项,那么对于数据表而已,同样可以设置某些字段可以为空或禁止为空,例如:

其中“NULL”表示该字段值允许为空
其中“NULL”表示该字段值允许为空

创建的数据表“tb2”,用于空值与非空的测试,其中“NULL”,代表该字段值允许为空;“NOT NULL”,则表示该字段值禁止为空:

查看数据表的基本结构,可见对于字段值是否允许为空,用户名是不允许,而用户年龄允许为空。


之后分别输入两条字段互相为空的记录:

第一条记录中对于用户年龄设为空值,成功计入了数据表,但是第二条用户名设为空,系统提示错误,显示“用户名”字段不允许为空。查看表中数据发现,只有第一条记录被写入:


7、自动编号

在数据储存的过程中,有时需要保证某条记录的唯一性,此时可以为该字段添加“AUTO_INCREMENT”属性,即自动编号,默认情况下,起始值为1,每次的增量为1,即1、2、3、……,且必须与主键组合使用;自动编号的数据类型一定是数值型,如果使用小数类型,则必须保证小数点后的位数为0。

主键约束即“PRIMARY KEY”,可以保证数据的唯一性,每张数据表只能存在一个主键,且自动设置为“NOT NULL”。

创建数据表“tb3”,用于自动编号的测试:

之后查看“tb3”的基本结构:


  可见“id”字段的主键自动设为“NOT NULL”,且自动编号,意味着之后只需要向数据表中输入“用户名”即可:

由于只输入用户姓名,因此必须标明字段“(username)”,在输入了4条记录后,查看该数据表,证明“id”字段的确自动赋值为1、2、3、4。

注意:
自动编号必须与主键一同使用,但主键并不是必须与自动编号一同使用,虽然二者都可以保证数据的唯一性。

创建数据表“tb4”,用于测试主键赋值的唯一性:


主键写“PRIMARY KEY”或“KEY”都可以
主键写“PRIMARY KEY”或“KEY”都可以

此时向表中写入记录,注意没有自动赋值,所有字段都需要写入数据:



  可见当“id”为6或第一次为32时,记录都被写入数据表,但第二次重复写入32时,系统提示出错,因此保证了数据的唯一性。


8、唯一约束

唯一约束即“UNIQUE KEY”,同样可以保证记录的唯一性,与主键约束不同的是:每张数据表可以存在多个唯一约束;唯一约束的字段值可以为空。

此时可能会有疑问:既然数据表中允许存在多个唯一约束,唯一约束又允许为空,相当于数据表中存在多个空值,岂不是互相矛盾?
要注意数据在存储时,即使有多个值,但最终保留的空值只有一个,因此也符合了唯一性。

创建数据表“tb5”,用于测试唯一约束的实际效果:

再输入第二次“Tom”时,系统提示错误,证明其具有唯一性:


9、默认约束

默认约束即“DEFAULT”,当插入记录时,如果没有明确为字段赋值,系统则会自动赋予其默认值。
  创建数据表“tb6”,用于演示默认值的实际效果:

ENUM即枚举值,详细可参见[数据类型](http://www.jianshu.com/p/d4324057b548)
ENUM即枚举值,详细可参见[数据类型](http://www.jianshu.com/p/d4324057b548)

其中对于“性别”字段设计了“男性”、“女性”、“保密”三种可选项,其中默认是“保密”。

在输入记录时,只写入了用户名为“Tom”,因此性别为默认自动添加的“保密”。


10、操作数据表的SQL语句汇总:

  • 创建数据表
    CREATE TABLE [IF NOT EXISTS] table_name(
    column_name data_type,
    column_name data_type,
    ……
    );

  • 查看数据表
    SHOE TABLES [FROM db_name]
    [LIKE 'pattern' | WHERE expr]

  • 查看数据表结构
    SHOE COLUMNS FROM tbl_name;

    DESC tbl_name;

    SHOW CREATE TABLE tbl_name\G;

  • 插入记录
    INSERT [INTO] tbl_name [(col_name,……)] VALUES(val,……);

  • 查看记录
    SELECT expr,… FROM tbl_name;


版权声明:欢迎转载,欢迎扩散,但转载时请标明作者以及原文出处,谢谢合作!             ↓↓↓
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容

  • 1、MySQL启动和关闭(安装及配置请参照百度经验,这里不再记录。MySQL默认端口号:3306;默认数据类型格式...
    强壮de西兰花阅读 643评论 0 1
  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,033评论 0 19
  • .数据库 数据库的发展: 文件系统(使用磁盘文件来存储数据)=>第一代数据库(出现了网状模型,层次模型的数据库)=...
    小Q逛逛阅读 960评论 0 2
  • 回顾和概述 数据类型 整型 浮点型 字符型 日期时间型 数据表操作 如何创建数据表 PRIMARY KEY(主键约...
    齐天大圣李圣杰阅读 698评论 0 0
  • 总是每天清晨,在人还没有彻底醒来的时候,就习惯眯着眼睛透过窗子看看天空。总是每天清晨,在人还没有彻底醒来的时候,就...
    依兰袭香阅读 903评论 0 1