写在前面:本篇为作者自学总结,学习内容为课堂所学和网络学习笔记汇总,对于内容引用部分在文中和文末注明。
文章仅供参考,如需深入了解,请查阅MySQL参考手册。附上下载链接:
链接:https://pan.baidu.com/s/1FpONA6oyI6O73m_ebN7J_Q
提取码:7pr8
复制这段内容后打开百度网盘手机App,操作更方便哦
目录
增(INSERT)、删(DELETE)、改(UPDATE)的操作
在之前的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;进行查询)视图:
每一次输入的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添加表的第一列。添加完的字段后表的视图如下:
因为有限定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没有这个功能。修改完的字段后表的视图如下:
3)删除字段
ALTER TABLE actor DROP telephone;
ALTER TABLE actor DROP new_addr;
ALTER TABLE actor DROP age;
SELECT * FROM actor;
使用DROP关键字,直接删除所选字段以及其全部数据。删除完的字段后表的视图如下:
4)查看字段
DESC actor;
使用DESC关键字,可得以下视图:
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)