欢迎来到疯狂MySQL系列第二节
上一节我们主要介绍了MySQL的来历、简介,以及三个平台的安装方法
本节内容你将会学到:如何创建数据库,建表,以及表的CRUD(增删改查)
第一张表
首先我们进入mysql交互式命令行界面
打开终端,输入mysql -uroot,当出现mysql>时,说明你已经成功进入了
这是我们第一次进入MySQL,可以看看初始时候我们有哪些数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema | |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set(0.03 sec)
可以看到初始的时候会有4个数据库,这4个数据库是MySQL自带的,具体有啥用我们以后再讲,这里我们来建立一个测试数据库test
mysql> create database test;
Query OK, 1 row affected (0.00 sec)
创建成功,现在我们进入这个数据库
mysql> use test;
Database changed
好了,现在我们已经进入test这个数据库了,以后我们的教学和测试都会在这个数据库里进行演示
既然数据库已经建好了,我们想看看里面有哪些表,该怎么看呢
mysql> show tables;
Empty set(0.00 sec)
空空如也,啥都没有。当然嘛,刚建立的数据库肯定是空的哇,别慌,现在我们创建我们人生中第一张表
我们以学校学生表作为对象,创建一张表student,用于管理学生的信息,建表语句如下:
CREATE TABLE `student` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '学生姓名',
`sex` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1男2女',
PRIMARY KEY (`id`)
) ENGINE=InnoDB CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT '学生tb';
千万别忘了最后那个;号哦,在这个命令行中,MySQL区分一条语句的结束,就是以;号作为判断的,在结束之前,我们可以随便换行或者空格都行,反正最后必须加上;
这就是一张很简单的student表,现在我来解释下是什么意思id: 作为每一行的唯一标示,这个 id 叫做主键,它是必不可少的,没一张表都必须包含一个主键,这是数据库的规范
name:类型为 VARCHAR(128),这个类型叫变长字符串,允许最多存放128个字符,这里用来存放学生的姓名
sex:用来表示学生的性别,使用的是 TINYINT(1) 类型,这是MySQL里最小的整型类型,只有1个字节大小,这里用1来表示男生,2来表示女生
以上就是student表的数据类型说明啦,关于MySQL的数据类型,下一节我会专门讲这个,先不要急,咱们先慢慢玩下去
咱们再稍微解下最后一行是什么意思ENGINE=InnoDB:表示该表所用的数据库引擎为InnoDB,这个引擎是绝大部分情况下都会使用的,一般不会变,这里暂且不表
CHARSET=utf8mb4:表示字符集为utf8mb4,像VARCHAR这样的字符串类型,就会受到这个字符集的约束,这里也暂时不多解释
COLLATE=utf8mb4_general_ci:这个表示所使用的比较规则为utf8mb4_general_ci,这个是与上面的字符集相关的,也就是说不同的字符集会对应不同的比较规则,用于排序等等
COMMENT:这个很简单,就是对这个表进行一个简单的注释,说明这个表的用途
最后那一行,我们在建立绝大多数表的时候都是按照这个来,所以这里先不做过多解释,咱们现在不管建什么表,都先按这些规则来
好啦,表建立好了,如果你想看一下这个表的定义,可以输入下面的命令:
mysql> desc student;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(128) | NO | | | |
| sex | tinyint(1) | NO | | 0 | |
+-------+--------------+------+-----+---------+----------------+
3 rows in set(0.00 sec)
可以很清晰的看到咱们表是如何定义的啦
总结
这里做一个小小的总结,对上面的内容进行一个小小的复习查看有哪些数据库:SHOW DATABASES
创建数据库:CREATE DATABASE [数据库名称];
删除数据库:DROP DATABASE [数据库名称];
选择数据库:USE [数据库名称];
查看该数据有哪些表:SHOW TABLES;
删除表:DROP TABLE [表名称];
查看表的定义:DESC [表名称];
建表语法:
CREATE TABLE (
字段名1 数据类型 [列级约束条件],
字段名2 数据类型 [列级约束条件],
...
[表级约束以及索引等]
)[数据库引擎] [字符集] [字符集比较规则] [表级注释];
插入数据
基于student表,咱们插入一行数据
INSERT INTO student (`name`, `sex`) VALUES ('小明', 1);
因为主键id是自增的,所以不需要咱们自己去显示地插入
现在student表已经新增了一条数据啦,咱们来查看一下
mysql> select* from student;
+----+--------+-----+
| id | name | sex |
+----+--------+-----+
| 1 | 小明 | 1 |
+----+--------+-----+
1 row in set(0.00 sec)
总结
插入操作的语法规则
INSERT [INTO] (列名1, 列名, ...) VALUES (列值1, 列值2, ...), (列值1, 列值2, ...) ...;列名需要和列值一一对应起来,只需要写你指定的数据列,对于没有指定的列,则该列的值为相应的DEFAULT的值,如果表定义时候没有指定DEFAULT,并且不是主键的话,则会抛出异常,数据插入失败
可以同时插入多条数据
插入的值一定要和该列的数据类型相匹配
列名如果要用引号包起来,那就只能用反引号 ``,这条规则适用于所有语句,当然你也可以不用引号,也是没问题的
更新数据
刚刚插入的小明同学改名字啦,现在需要更新下他的数据
UPDATE student SET name = '小张' WHERE name = '小明';
可以看到咱们在后面跟了WHERE子句,因为咱们要指定更新小明的名字,如果不指定的话,那表里所有的名字都叫小张了
同样,现在来查看下是否更新成功
mysql> select* from student;
+----+--------+-----+
| id | name | sex |
+----+--------+-----+
| 1 | 小张 | 1 |
+----+--------+-----+
1 row in set(0.00 sec)
成功修改!
总结
更新数据的语法规则
UPDATE SET 列名1 = 列值1, 列名2 = 列值2 ... ;更新时一定要注意 where 子句确定修改范围
多个列之间用,号隔开
删除数据
现在需要把刚刚修改的小张删除掉
DELETE FROM student WHERE name = '小张';
再来看看数据是否删除成功
mysql> select* from student;
Empty set(0.00 sec)
因为表里面就只有1条数据,现在删除之后表就空啦
总结
删除数据的语法规则
DELETE FROM ;和更新操作一样,注意 where 子句的范围
查询数据
前面的新增数据,更新数据和删除数据都非常简单,查询(Query)是MySQL中的重中之重,也是一个难点。我们在查询数据的时候,需要对查询结果进行筛选,还有需要确定显示的格式等等,咱们由浅入深,慢慢地剖析其中的奥妙
这里先介绍下查询的种类:单列数据查询
多列数据查询
子查询
连接查询
分组查询
以上只是对查询进行了一个粗略的分类,等我们具体用到的时候再进行分析
基于咱们的student表,本节先介绍简单的 单列数据查询和 多列数据查询
先插入几行数据,作为查询的基础
mysql> INSERT INTO student (name, sex) VALUES ('小明', 1), ('小红', 2), ('小张', 1);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
查询1:查出名字为小明的数据
这是一条单列数据查询
mysql> SELECT* FROM student WHEREname = '小明';
+----+--------+-----+
| id | name | sex |
+----+--------+-----+
| 2 | 小明 | 1 |
+----+--------+-----+
1 row in set(0.00 sec)
查询2:查出性别为男的学生数据
很明显这是一条结果可能为多列的多列数据查询,由于咱们在表创建的时候规定了,sex字段为1的时候为男性,则查询语句如下
mysql> SELECT* FROM student WHEREsex = 1;
+----+--------+-----+
| id | name | sex |
+----+--------+-----+
| 2 | 小明 | 1 |
| 4 | 小张 | 1 |
+----+--------+-----+
2 rows in set(0.00 sec)
查询3:查出id大于2的数据
这也是一个多列数据的查询
mysql> SELECT* FROM student WHEREid > 2;
+----+--------+-----+
| id | name | sex |
+----+--------+-----+
| 3 | 小红 | 2 |
| 4 | 小张 | 1 |
+----+--------+-----+
2 rows in set(0.00 sec)
查询4:查出id范围在0~3的数据
这条语句需要用到BETWEEN AND进行范围查询
mysql> SELECT* FROM student WHEREid BETWEEN 0 AND 3;
+----+--------+-----+
| id | name | sex |
+----+--------+-----+
| 2 | 小明 | 1 |
| 3 | 小红 | 2 |
+----+--------+-----+
2 rows in set(0.00 sec)
写在最后
本节咱们讲了创建数据库,新增,修改,删除,以及简单的查询。接下来几节,咱们会系统地讲解,数据类型、高级查询等等MySQL的一系列知识,敬请期待吧
说明:本文首发于知乎专栏,同步于 简书 以及 CSDN 等平台,转发必须注明出处,违规转载必究