MySQL学习笔记(二)增删改

写在前面:本篇为作者自学总结,学习内容为课堂所学和网络学习笔记汇总,对于内容引用部分在文中和文末注明。

文章仅供参考,如需深入了解,请查阅MySQL参考手册。附上下载链接:

链接:https://pan.baidu.com/s/1FpONA6oyI6O73m_ebN7J_Q 
提取码:7pr8 
复制这段内容后打开百度网盘手机App,操作更方便哦


目录

增(INSERT)、删(DELETE)、改(UPDATE)的操作

1. 对数据库(database)的操作

1.1 创建数据库

1.2 删除数据库

 1.3 查看数据库

2. 对表(table)和表中数据(data)的操作

2.1 创建表

2.2 添加索引

2.3 向actor表中增加数据

2.4 修改表名

2.5 字段管理

2.6 修改数据

2.7 删除数据 

2.8 删除表

参考资料


在之前的MySQL学习笔记(一)中已经总结了MySQL的基础概念,这里将介绍MySQL的语句。在MySQL学习笔记(二)中仅记录增删改的命令,查询语句将在MySQL学习笔记(三)中更新。

MySQL语法:

增(INSERT)、删(DELETE)、改(UPDATE)的操作

对数据库和表来说,MySQL支持创建(定义),复制,删除,字段的修改,查询。

对数据库中的数据来说,MySQL同样支持增删改查。

一般增删改的知识了解即可,大部分实际工作中对数据库查找的要求更高。

1. 对数据库(database)的操作

1.1 创建数据库

CREATE DATABASE test_db;

创建一个名为test_db的数据库。

1.2 删除数据库

DROP DATABASE test_db;

将名为test_db的数据库删除,数据库中的东西都被删除。

 1.3 查看数据库

SHOW DATABASES;

可以查看数据库中有什么表。注意DATABASES为复数。

 

2. 对表(table)和表中数据(data)的操作

以下例子根据现实逻辑进行,可以跟着自己写一遍练习,加深理解。 

2.1 创建表

CREATE TABLE actor(actor_id SMALLINT(5), first_name VARCHAR(45), 
                   last_name VARCHAR(45), last_update TIMESTAMP);

创建名为actor的表,其中有四个字段名字分别为actor_id, first_name, last_name, last_update。四个字段可以理解为表格中的列名,他们的数据存在对应的列数据中。它们分为为SMALLINT,VARCHAR, VARCHAR, TIMESTAMP类型。VARCHAR(45)中的45是对字符最大长度的限定。

基于上面所学,我们可以对字段加限定词,以满足日常需求:

CREATE TABLE actor(
    actor_id SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT, 
		first_name VARCHAR(45) NOT NULL, 
		last_name VARCHAR(45) NOT NULL, 
		last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE 
       CURRENT_TIMESTAMP);

这里还限定了actor_id为无符号的SMALLINT,即范围为0 --- 65535,它还可以自增。

四个字段都有NOT NULL的限定,且last_update有默认值。

在数据库中actor表的视图为:

2.2 添加索引

1. 主键

主键可以帮助我们快速查询表中的记录,要求数值互不相同,即是唯一的,不能为NULL值。每个表只有一个主键。

1)添加主键

继续修改我们上面actor表,定义actor_id为主键:

CREATE TABLE actor(
    actor_id SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT, 
		first_name VARCHAR(45) NOT NULL, 
		last_name VARCHAR(45) NOT NULL, 
		last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE 
        CURRENT_TIMESTAMP,
        PRIMARY KEY (actor_id));

下面这种方法和上面的方法效果一样,选择一种即可:

CREATE TABLE actor(
    actor_id SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
		first_name VARCHAR(45) NOT NULL, 
		last_name VARCHAR(45) NOT NULL, 
		last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE 
        CURRENT_TIMESTAMP);

2)删除主键 

两种方法等同:

法1:

ALTER TABLE actor MODIFY actor_id SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT;

法2:

ALTER TABLE actor DROP PRIMARY KEY;

 2. 唯一索引和普通索引

创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复。唯一索引可以有多个但索引列的值必须唯一,索引列的值允许有空值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该使用关键字UNIQUE。

普通索引和唯一索引在查询能力上没啥差别,主要考虑对更新性能的影响,要尽量选择普通索引。

/*唯一索引*/

-- 添加, u_id为是唯一索引的名字,自己定义
ALTER TABLE actor ADD UNIQUE u_id(acotor_id);
-- 删除
ALTER TABLE actor DROP INDEX u_id;

/*普通索引*/
-- 添加, i_id为是唯一索引的名字,自己定义
ALTER TABLE actor ADD INDEX i_id(acotor_id);
-- 删除
ALTER TABLE actor DROP INDEX i_id;

2.3 向actor表中增加数据

INSERT INTO actor(`actor_id`, `first_name`, `last_name`, `last_update`) 
VALUES (1, 'PENELOPE', 'GUINESS', '2006-02-15 04:34:33');

如果列名顺序改变,对应的数据的顺序也应改变。如果数据一一对应,也可以简略为

INSERT INTO actor VALUES (1, 'PENELOPE', 'GUINESS', '2006-02-15 04:34:33');

不再重复输入字段名,这样可以节省时间,更简洁方便。以上两行的意思相同。

因为我们设置了actor_id自增,所以不为它输入值的时候,它也可以自动增加自己的数值,每次增加1。同时last_update在没有输入数据的时候可以自动更新当前时间,在本表格的情景下不需要每次手动输入数据,所以INSERT语句可以改写为:

INSERT INTO actor(first_name,last_name) VALUES ('NICK', 'WAHLBERG');

此条first_name自动填充为2,last_update自动填充为当前时间。

重复类似操作多次,输入不同的数据,可以得到以下表内容(使用SELECT * FROM actor;进行查询)视图:

MySQL学习笔记(二)增删改_第1张图片

每一次输入的INSERT语句对应表格中的一行内容。

2.4 修改表名

RENAME TABLE actor TO myActor;

将名为actor的表名字改成myActor, 表属性没有变。

2.5 字段管理

使用ALTER关键字。

1)添加字段

ALTER TABLE actor ADD age TINYINT UNSIGNED NOT NULL;
ALTER TABLE actor ADD address VARCHAR(50) NOT NULL AFTER last_name;
ALTER TABLE actor ADD telephone VARCHAR(11) NOT NULL FIRST;
SELECT * FROM actor;

使用ADD关键字,如果没有指定,则添加到表格最后一列。使用AFTER添加特定列之后,使用FIRST添加表的第一列。添加完的字段后表的视图如下:

MySQL学习笔记(二)增删改_第2张图片

因为有限定NOT NULL,对于插入的数字类型用0填充,字符类型用‘’填充。 

2)修改字段

-- 修改字段定义
ALTER TABLE actor MODIFY telephone VARCHAR(20) NOT NULL;

-- 重命名且修改字段定义,不更改定义的时候也可以只用来重命名
ALTER TABLE actor CHANGE address new_addr VARCHAR(35) NOT NULL;

-- 修改字段定义
ALTER TABLE actor CHANGE age age INT NOT NULL;
SELECT * FROM actor;

使用MODIFY或CHANGE关键字。二者都可以修改表的定义,但是CHANGE需要写两次字段名,不是很方便。CHANGE的优点是可以对字段名称重命名,第一个字段名是原字段名,第二个字段名是修改完的名字,而MODIFY没有这个功能。修改完的字段后表的视图如下:

MySQL学习笔记(二)增删改_第3张图片

3)删除字段

ALTER TABLE actor DROP telephone;
ALTER TABLE actor DROP new_addr;
ALTER TABLE actor DROP age;
SELECT * FROM actor;

使用DROP关键字,直接删除所选字段以及其全部数据。删除完的字段后表的视图如下: 

MySQL学习笔记(二)增删改_第4张图片

4)查看字段 

DESC actor;

使用DESC关键字,可得以下视图:

MySQL学习笔记(二)增删改_第5张图片

2.6 修改数据

修改前的第一行数据: 

通过以下命令行进行修改,将actor_id为1的上次更新时间更新成当前时间: 

UPDATE actor SET last_update = CURRENT_TIMESTAMP WHERE actor_id = 1;

 修改完之后的第一行数据:

可以用","连接,同时更改两个及以上的字段:

UPDATE actor SET last_update = CURRENT_TIMESTAMP, last_name = 'new last name' WHERE actor_id = 3000;

更改完的第一行如图所示:

2.7 删除数据 

DELETE FROM actor WHERE actor_id = 1;

第一行数据被删除。 

2.8 删除表

DROP TABLE actor;

删除myActor表。

参考资料:

课堂资料:

X. Zhu(2019). Introduction to Database [PowerPoint slides]. Available: https://ice.xjtlu.edu.cn/course/view.php?id=293

Mysql数据库设计与操作 (access time: 2021/6/23)

网络资料:

浅析MySQL中change与modify的区别 (access time: 2021/6/29)

MySQL删除表操作(delete、truncate、drop的区别) (access time: 2021/6/29)

MySQL 普通索引和唯一索引该如何选择? (access time: 2021/6/29)

MYSQL 唯一索引UNIQUE使用方法详解 (access time: 2021/6/29)

你可能感兴趣的:(自学记录,#,数据库,mysql,数据库)