关于sql:初级程序员的SQL拾遗②表操作

52次阅读

共计 3525 个字符,预计需要花费 9 分钟才能阅读完成。

前言

尽管平时开发中常常接触 MySQL,但大多数的数据库操作都是通过 ORM 映射实现的,本人并没有从底层接触 SQL。

本文继 高级程序员的 SQL 拾遗 -①(增删改查)
次要内容包含:建库、建表、字段、束缚、查问等

理论开发过程中,与增删改查相比,建表、删表、束缚之类的这些低频操作更加不重要,因为数据库大部分工夫还是在增删改查(精确的说是查)。

所以本文的内容更不须要记,只需了解即可。

得益于弱小的可视化工具 Navicat(或者 PHPMyAdmin),咱们能够用鼠标实现建表,并转换成 SQL 语句。
能够说,如果会用 Navicat,SQL 语句就不须要记住了(因为能够用软件生成)。

一、玩转 Navicat

这个软件有 30 试用版,也能找到谐和版,可自行搜寻。

关上软件连贯到 MySQL 服务后,左侧会显示以后 MySQL 的所有数据库:

新建数据库(图形化)

在左侧任意数据库上右键 -> 新建数据库,输出信息即可。


(在此处须要科普一下,为什么要用 utf8mb4?
因为 MySQL 内置的 utf8 是阉割版,用 3 字符示意
而真正的 UTF- 8 是 1~4 可变字符,换言之 MySQL 的 utf8 并不能示意所有 UTF- 8 字符
而 utf8mb4 才是真正 4 字符的 UTF-8
这是 MySQL 的一个坑)

能够看到表 test1 曾经显示进去了,
这个操作用命令行怎么实现呢?
首先须要理解一下什么叫做“查问”

查问(Query)

SQL 终端输出的一组能够实现特定性能的 SQL 语句称为一个查问。
留神此处的 Query 并不是增删改查的查(SELECT),也绝不仅限于查。

能够了解成,所有 SQL 语句的执行过程都是查问过程。
也就是粗犷的简化成,查问 == 执行 SQL 语句
Query 不仅包含了 CRUD,还包含各种库操作、表操作。

接下来,在查问中用 SQL 建一个名为 test2 的数据库。

新建数据库(命令行)

首先在 Navicat 中新建查问(也就是新建一个输出 SQL 语句的性能)
输出 SQL 代码后执行

// 建设数据库
CREATE DATABASE 数据库名 

// 示例:建设名为 test2 的数据库
CREATE DATABASE test2 

刷新后就会呈现新增的数据库。

双击新建的库后,图标变成绿色,文章前面的内容都能够通过在此数据库的 Query 中操作。

同理,删除数据库的语句是:

·“

// 删除数据库
DROP DATABASE 数据库名

// 删除名为 test2 的数据库
DROP DATABASE test2

演示 Navicat 生成 SQL 语句

这是软件最神奇之处。

首先新建表,而后任意编辑表内字段。

编辑实现后不须要保留,此时点击 SQL 预览。

此时就能够发现,软件曾经主动为咱们生成了 SQL 语句:

这对于初学者学习 SQL 十分有帮忙,有利于在大脑中疾速建设某种性能和 SQL 代码的关联。

到此如果看明确并纯熟应用 Navicat,前面的内容就不必看了(不是)。

二、常见表操作

创立(CREATE)

当初咱们能够拿出方才 Navicat 生成的 SQL 代码来看看:

// 软件生成的 SQL 语句

CREATE TABLE `test2`.` 无标题 `  (`id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NULL,
  `sex` int(1) NULL,
  `phone` varchar(255) NULL,
  PRIMARY KEY (`id`)
);

咱们能够演绎出,创立表的写法是:

// 创立数据表

CREATE TABLE ` 数据库名 `.` 数据表名 `  (
    ` 字段 1` 字段 1 的属性,
    ` 字段 2` 字段 2 的属性,
    ......
    ` 字段 n` 字段 n 的属性,
)

留神此处相似单引号的符号并不是单引号',而是 TAB 上方的那个键。

助记:

  • CREATE 指令实用于所有示意新增的性能,如新增数据库、数据表、索引等
  • 库的操作对象是 DATABASE,而表的操作对象是 TABLE
  • 新建数据表时须要写上表的字段和属性,而新建数据库不须要

用这种办法创立一个名为 table1 的数据表,接下来筹备看如何删除它。

删除(DROP)和清空(TRUNCATE)

SQL 的写法具备很强的规律性,咱们就是要把这种法则找进去以便了解和记忆。

// 删除某个数据表
DETELE TABLE 数据表名

// 举例:删除 table1 数据表
DETELE TABLE table1

助记:

  • 和 CREATE 用法雷同,DROP 实用于所有示意删除的性能,如删除数据库、表、索引
  • 库的操作对象是 DATABASE,标的操作对象是 TABLE
  • 对于数据库和数据表,删除的语句构造都是 DELETE + 操作对象 + 对象名

对于表有一种非凡的操作,能够艰深的了解成清空表,即只删除数据不删除构造:

// 状况某个数据表的数据,但不扭转其构造
TRUNCATE TABLE table_name
// 举例:清空 table1
TRUNCATE TABLE table1

助记:

  • 清空数据只能够对数据表应用
  • 状况语句构造和删除语句只有指令不同,其余雷同

小结

此处类比数据库的建设、删除,总结了数据表的建设、删除、清空操作。

三、字段操作

前置条件:建一张名为 table2 的表,任意设置一些字段,相似如下:

软件主动生成了如下的 SQL 语句,如果读者懒得手动加字段,能够间接执行即可取得和本文一样的环境。

// 软件生成的 SQL 语句

CREATE TABLE `test2`.` 无标题 `  (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `name` varchar(255) NULL COMMENT '姓名',
  `age` int(11) NULL COMMENT '年龄',
  `number` varchar(11) NULL COMMENT '学号',
  PRIMARY KEY (`id`)
);

所以咱们又能总结出增加一个字段的写法:

// 最精简的字段写法
` 字段名 ` 类型(长度) 是否为空束缚,

// 带正文的字段写法
` 字段名 ` 类型(长度) 是否为空束缚 COMMENT '正文内容',

这里肯定要睁大眼睛,字段名是 TAB 上方的符号,而正文是单引号!

当初曾经晓得字段的写法,那么字段类型共有多少种呢?
实际上很多,图片里只是一小部分。

但最罕用的依然是 int、varchar、date、timestrap,
至于其余类型,须要用到的时候,先用 navicat 增加一个,再看看生成的 SQL 即可。
这就叫授人以渔(确信)。

束缚

“师爷,你给翻译翻译,什么叫束缚?”
“束缚就是束缚呗。”

束缚实质是对字段取值范畴的限定,
如果没有束缚,字段能够取其类型中的任何值

但有时不容许字段呈现 NULL 或者反复值等状况,这时就须要束缚了。

常见束缚包含:

  • NOT NULL 不容许容许字段为空
  • UNIQUE 不容许反复的值(例如学生的学号)
  • DEFAULT 默认值
  • 主键束缚
  • 外键束缚

非空、惟一值、默认值很好了解。
在 Navicat 中点击设计表,增加两个字段,别离设置非空和默认值:

主动生成了以下 SQL 语句:

// 主动生成的 SQL 语句

ALTER TABLE `test2`.`table2` 
ADD COLUMN `test_null` varchar(255) NOT NULL AFTER `number`,
ADD COLUMN `test_default` varchar(255) NULL DEFAULT 123123123 AFTER `test_null`;

这样就能够演绎出这些束缚的写法:

  • 非空束缚应用NOT NULL,否则写NULL
  • 默认值应用DEFAULT 默认值
  • 惟一值 Navicat 没有间接设置的选项,实际上应用UNIQUE

接下来有一个问题:多种束缚同时写的时候,有没有程序要求?

来做个测试,同时设置非空和默认值,生成的语句,能够看到 null 在前,default 在后:

// 主动生成的 SQL 语句

ALTER TABLE `test2`.`table2` 
ADD COLUMN `test_default` varchar(255) NOT NULL DEFAULT 123123123 AFTER `name`;

接下来调换地位,在 Query 中执行:

// 调换束缚的程序

ALTER TABLE `test2`.`table2` 
ADD COLUMN `test_default` varchar(255) DEFAULT 123123123 NOT NULL AFTER `name`;

是能够胜利的,SQL 开发者没那么傻,必定会想到这一点。

小结

咱们能够调整上文提到的个别字段的写法:

// 个别状况下字段写法,其中束缚能够扭转程序
` 字段名 ` 类型(长度) 束缚 1 约数 2 ... COMMENT '备注内容',

四、总结

和上一篇文章不同,本文的内容简直齐全不必记,一是因为都是低频操作,二是因为曾经有很智能的生成工具,咱们不是 DBA,不会天天和建表删表打交道。
笔者认为更重要的是讲述如何生成 SQL,把握这项操作后,无论是什么没见过语句,都能够灵便面对了。

正文完
 0