数据库是由多张数据表组成的。一个数据库中可以存在多张表,我们每一张数据表就存着具体的数据。
例如我们想象一个场景:
有一家企业A。公司里经常会发生人员流动那么我们就会拿一本小本子记起来。然后每一页纸写着一个人的个人信息。例如:姓名,性别,年龄,身份证号,电话号码,生日,家庭住址,入职时间等等更多的信息。一旦有新员工进来我们就填写一页纸,一旦有人离职我们撕掉一页纸。
这个场景中,我们的小本子就是我们的数据表,姓名。。。等信息就是我们数据的字段。
从我们刚刚到场景中我们我们可以了解到,我们的小本子上记录着都是有着一定的组织结构。然后每一页都往里面去填写相应的信息。
在MySQL中创建数据表的基本语法格式如下:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] 表名
(字段名 字段类型 [字段属性]…) [表选项]
在上述语法中,可选项 TEMPORARY 表示临时表,仅在当前会话中可见,并且在会话关闭时自动删除。可选的“表选项”用于设置表的相关特性,如存储引擎(ENGINE)、字符集(CHARSET)和校对集(COLLATE)。
删除数据表操作指的是删除指定数据库中已经存在的表。另外,在删除数据表的同时,存储在数据表中的数据都将被删除,基本语法格式如下。
1
|
DROP [TEMPORARY] TABLE [IF EXISTS] 数据表 1 [, 数据表 2] …;
|
从上述语法可知,删除数据表时,可同时删除多个数据表,多个数据表之间使用逗号分隔。可选项IF EXISTS用于在删除一个不存在的数据表时,防止产生错误。
通常情况下,要想操作数据表中的数据,首先要保证数据表中存在数据。MySQL 中使用 INSERT 语句向数据表中添加数据。根据操作的不同目的一般可以分为两种,一种是为所有字段添加数据,另外一种是为部分字段添加数据。下面将对这两种操作进行详细地讲解。
在MySQL中,为所有字段插入记录时,可以省略字段名称,严格按照数据表结构(字段的位置)插入对应的值,基本语法格式如下。
1
|
INSERT [INTO] 数据表名 {VALUES|VALUE}(值 1[, 值 2] …);
|
从上述语法可知,关键字INTO是可选项,VALUES和VALUE可以任选一种,通常情况下使用VALUE。值列表值 1 [,值 2] …中多个值之间使用逗号分隔
修改数据是数据库中常见的操作,通常用于对表中的部分记录进行修改。例如,商品在做活动时,需要在原价的基础上打折,此时就需要对商品价格的数据进行修改。MySQL提供了UPDATE语句修改数据。基本语法格式如下。
1
2
3
4
5
|
UPDATE 数据表名
SET 字段名 1 = 值 1 [, 字段名 2 = 值 2, …]
[WHERE 条件表达式]
|
删除数据是指对表中存在的记录进行删除。例如,商品停产后,可以删除商品表中的相关数据。MySQL 中使用DELETE语句删除表中的记录,基本语法格式如下。
1
|
DELETE FROM 数据表名 [WHERE 条件表达式];
|
在上述语法中,数据表名指定要执行删除操作的表,WHERE条件为可选参数,用于设置删除的条件,满足条件的记录会被删除。
查询数据表中所有字段的数据,可以使用星号*通配符代替数据表中的所有字段名,基本语法格式如下。
1
2
3
4
5
6
7
|
SELECT 字段名, 字段名
FROM 数据表名
[WHERE 条件表达式]
[LIMIT N][ OFFSET M]
|
我们进行创建员工信息表。
首先我们先创建一个数据库;
1
2
3
|
mysql> create database p03;
Query OK, 1 row affected (0.01 sec)
|
1
2
3
|
mysql> use p03;
Database changed
|
需要注意的是,在操作数据表之前,应该使用USE 数据库名指定操作是在哪个数据库中进行,否则会抛出No database selected错误。
我们假定所需要的基本信息为: 员工编号,员工姓名,员工性别,员工联系方式。
1
2
3
4
5
6
7
|
CREATE TABLE IF NOT EXISTS `employee`(
`id` INT(11),
`name` VARCHAR(255),
`sex` VARCHAR(255),
`mobile` VARCHAR(255),
PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
到目前我们已经成功创建了数据表,可以通过show tables查看当前数据库的所有表进行验证我们的操作步骤:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
mysql> show tables;
+---------------+
| Tables_in_p03 |
+---------------+
| employee |
+---------------+
1 row in set (0.00 sec)
|
回顾我们刚刚创建数据表的语法中
id INT(11) => 字段名为id, 字段类型为INT,他的长度是11.未填写其它的字段属性
name VARCHAR(255) => 字段名为name, 字段类型为VARCHAR,他的长度是255.未填写其它的字段属性
我们将在下一个章节中详细了解数据类型
在我们之前的数据表创建格式中相互对应。
到目前为止我们已经做的很好了,但是突然发现缺乏了入职时间,无法对员工们对工龄去计算。所以在我们原有的表结构中添加。
我们添加employee_date字段,并且我们该字段为date。
我们可以通过语法ALTER TABLE进行修改,通过DESC完整数据表结构
1
2
3
4
5
|
mysql> alter table employee add employee_date date;
Query OK, 0 rows affected (0.08 sec)
Records: 0 Duplicates: 0 Warnings: 0
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
mysql> DESC employee;# 下面是我们的完整输出表结构
+---------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(255) | YES | | NULL | |
| sex | varchar(255) | YES | | NULL | |
| mobile | varchar(255) | YES | | NULL | |
| employee_date | date | YES | | NULL | |
+---------------+--------------+------+-----+---------+-------+
5 rows in set (0.01 sec)
|
我们已经创建好了数据表结构接着我们对表内数据进行增加
公司内部新来了一批雇员,他们的信息如下:
用户编号 姓名 性别 手机号 入职时间
1 张三 男 18000000000 2018-05-14
2 李四 男 18111111111 2020-01-20
3 王五 女 18222222222 2019-08-23
4 林六 男 18333333333 2020-06-06
5 陈七 女 18444444444 2018-04-19
我们开始进行单次数据添加:
1
2
3
|
mysql> INSERT INTO employee VALUES(1, '张三', '男', '18000000000', "2018-05-14");
Query OK, 1 row affected (0.01 sec)
|
或者指定列进行数据插入:
1
2
3
|
mysql> INSERT INTO employee(id, name, sex, mobile, employee_date) VALUES(2, '李四', '男', '18111111111', "2020-01-20");
Query OK, 1 row affected (0.01 sec)
|
也可以使用批量插入数据:
1
2
3
4
5
|
mysql> INSERT INTO employee(id, name, sex, mobile, employee_date) VALUES(3, '王五', '女', '18222222222', "2019-08-23"),(4, '林六', '男', '18333333333', "2020-06-06"), (5, '陈七', '女', '18444444444', "2018-04-19");
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
|
我们可以查看当前所有员工的信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
mysql> select * from employee;
+----+--------+------+-------------+---------------+
| id | name | sex | mobile | employee_date |
+----+--------+------+-------------+---------------+
| 1 | 张三 | 男 | 18000000000 | 2018-05-14 |
| 2 | 李四 | 男 | 18111111111 | 2020-01-20 |
| 3 | 王五 | 女 | 18222222222 | 2019-08-23 |
| 4 | 林六 | 男 | 18333333333 | 2020-06-06 |
| 5 | 陈七 | 女 | 18444444444 | 2018-04-19 |
+----+--------+------+-------------+---------------+
5 rows in set (0.00 sec)
|
张三在公司里待的资历最久,但是隔壁企业看中了张三的工作能力高薪挖走了人才,现在公司紧急招聘了一个新员工,来暂时顶替张三的位置。所以我们将张三的内容替换成新员工的信息。
员工信息: 赵九 女 1855555555 2020-10-01
根据员工信息我们得出SQL语句:
1
2
3
4
5
|
mysql> update employee set name='赵九',sex='女',mobile='1855555555',employee_date='2020-10-01' where name='张三';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
mysql> select * from employee;
+----+--------+------+-------------+---------------+
| id | name | sex | mobile | employee_date |
+----+--------+------+-------------+---------------+
| 1 | 赵九 | 女 | 1855555555 | 2020-10-01 |
| 2 | 李四 | 男 | 18111111111 | 2020-01-20 |
| 3 | 王五 | 女 | 18222222222 | 2019-08-23 |
| 4 | 林六 | 男 | 18333333333 | 2020-06-06 |
| 5 | 陈七 | 女 | 18444444444 | 2018-04-19 |
+----+--------+------+-------------+---------------+
5 rows in set (0.00 sec)
|
可以看到赵九成功暂顶了张三的位置。