Mysql基础篇:必知必会(下)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Mysql基础篇:必知必会(下)

示例表

mysql> DESC one_piece;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | char(10)    | NO   |     | NULL    |       |
| pirates | char(10)    | NO   |     | NULL    |       |
| name    | char(10)    | NO   |     | NULL    |       |
| age     | int(11)     | YES  |     | NULL    |       |
| post    | varchar(10) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
复制代码

接着上篇继续!


一、插入数据


插入完整行

使用 INSERT 插入完整行它要求指定 表名和插入到新行中的值。

mysql> INSERT INTO one_piece
    -> VALUES('1',
    ->        '草帽海贼团',
    ->        '路飞',
    ->        'age',
    ->        '团长',
    ->        '1500000000');
复制代码

注意

  • 必须每列提供一个值,空值使用 NULL
  • 各列必须以它们在表定义中出现的次序填充


插入部分行

INSERT 推荐的插入方法是明确给出表的列名。这样还可以省略列,即只给某些列提供值,其他列不提供值。

省略的列必须满足以下某个条件:

  • 该列定义为允许 NULL 值(无值或空值)。
  • 在表定义中给出默认值(如果不给出值,将使用默认值)。

如果表中不允许有 NULL 值或者默认值,这时却省略了表中的值, DBMS 就会产生错误消息,相应的行不能成功插入。

现在同样在 one_piece 表中插入一行。


mysql> INSERT INTO one_piece(id,
    ->                       pirates,
    ->                       name)
    -> VALUES('1',
    ->        '草帽海贼团',
    ->        '路飞');
复制代码


不管使用哪种INSERT 语法,VALUES 的数目都必须正确。如果不提供列名,则必须给每个表列提供一个值;如果提供列名,则必须给列出的每个列一个值。否则,就会产生一条错误消息,相应的行不能成功插入。


从一个表复制到另一个表

有一种数据插入不使用 INSERT 语句。要将一个表的内容复制到一个全新的表(运行中创建的表)。

mysql> CREATE TABLE one_pieceCopy AS
    -> SELECT * FROM one_piece;
复制代码
  • 任何 SELECT 选项和子句都可以使用,包括 WHEREGROUP BY
  • 可利用联结从多个表插入数据。
  • 不管从多少个表中检索数据,数据都只能插入到一个表中。

主要用途:它是试验新 SQL 语句前进行表复制的很好工具。先进行复制,可在复制的数据上测试 SQL 代码,而不会影响实际的数据。


二、更新数据


使用 UPDATE 语句,更新(修改)表中的数据。

有两种使用 UPDATE 的方式:

  • 更新表中的特定行
  • 更新表中的所有行

使用时要明确是 更新特定行 还是 更新所有行

UPDATE 语句中可以使用子查询,使得能用 SELECT 语句检索出的数据 更新列数据。


更新单行单列

路飞 的赏金更新为 10000000000

mysql> UPDATE one_piece
    -> SET bounty = 10000000000
    -> WHERE name = '路飞';
复制代码


更新单行多列

在更新多个列时,只需要使用一条 SET 命令,每个“列=值”对之间用逗号分隔(最后一列之后不用逗号)。

mysql> UPDATE one_piece
    -> SET bounty = 10000000000,
    ->     age = '19'
    -> WHERE name = '路飞';
复制代码


更新所有行

不使用 WHERE 限制条件,即更新表中所有行。

mysql> UPDATE one_piece
    -> SET bounty = 10000000000,
    ->     age = '19'
复制代码


删除列中的值

假如表定义允许 NULL 值,要删除某个列的值,可设置它为 NULL。(要注意删除列值(保留列结构)和删除列(完全删除)的区别)

mysql> UPDATE one_piece
    -> SET bounty = NULL
    -> WHERE name = '路飞';
复制代码


三、删除数据


使用 DELETE 语句,删除表中的数据。

有两种使用 DELETE 的方式:

  • 删除表中的特定行
  • 删除表中的所有行

使用时要明确是 删除特定行 还是 删除所有行


删除单行

删除 one_piece 表中 name  为 路飞 的行。

mysql> DELETE FROM one_piece
    -> WHERE name = '路飞';
复制代码


删除所有行

删除 Customers 中的所有行。不删除表本身。

mysql> DELETE FROM one_piece;
复制代码


如果想从表中删除所有行,推荐使用 TRUNCATE TABLE 语句,它完成相同的工作,而速度更快(因为不记录数据的变动)。

但要注意: TRUNCATE 属于数据定义语言( DDL ),且 TRUNCATE 命令执行后无法回滚,使用 TRUNCATE 命令之前最好对当前表中的数据做备份。

mysql> TRUNCATE TABLE one_piece;
复制代码


四、约束


约束

DBMS 通过在数据库表上施加约束来实施引用完整性。大多数约束是在表定义中定义的,用 CREATE TABLE 或是 ALTER TABLE 语句。


主键

主键是一种特殊的约束,用来保证一列(或 一组列)中的值是唯一的,而且永不改动。没有主键,要安全地 UPDATEDELETE 特定行而不影响其他行会 非常困难。

主键的条件:

  • 任意两行的主键值都不相同。
  • 每行都具有一个主键值(即列中不允许 NULL 值)。


创建表时定义主键。

CREATE TABLE teacher
(
  id INT(11) PRIMARY KEY,
  teacher_name VARCHAR(10)
);
复制代码


使用 ALTER TABLE 添加主键。

ALTER TABLE teacher
ADD CONSTRAINT PRIMARY KEY(id);
复制代码


删除主键约束。

ALTER TABLE teacher DROP PRIMARY KEY;
复制代码


外键

外键是表中的一列,其值必须列在另一表的主键中。外键是保证引用完 整性的极其重要部分。

下面新建 student 表并添加外键 teacher_idteacher 表中的主键 id 进行关联。


在创建表的时定义外键。

CREATE TABLE student
(
  stu_id INT(11) PRIMARY KEY,
  teacher_id INT(11) REFERENCES teacher(id),
  stu_name VARCHAR(10)
);
复制代码


使用 ALTER TABLE 添加外键。

ALTER TABLE student
ADD CONSTRAINT teacher_id_id
FOREIGN KEY (teacher_id) REFERENCES teacher(id);
复制代码


使用外键可以有效地防止意外删除,比如在上面两表中如果删除 teacher 表中的信息,如果该 idstudent 表中也有出现,那么 Mysql 会防止删除操作。当然也可以启用级联删除的特性,那么在删除时就会删除所有相关信息。


删除外键

ALTER TABLE student DROP FOREIGN KEY teacher_id_id;
复制代码


唯一约束

唯一约束用来保证一列(或一组列)中的数据是唯一的。它们类似于主 键,但存在以下重要区别。

  • 表可包含多个唯一约束,但每个表只允许一个主键。
  • 唯一约束列可包含 NULL 值。
  • 与主键不一样,唯一约束不能用来定义外键。


在创建表的时定义唯一约束。

CREATE TABLE student
(
  stu_id INT(11) PRIMARY KEY,
  teacher_id INT(11) REFERENCES teacher(id),
  stu_name VARCHAR(10)
);
复制代码


使用 ALTER TABLE 添加唯一约束。

ALTER TABLE student
ADD CONSTRAINT unique_id UNIQUE(stu_id);
复制代码


删除唯一性约束。

ALTER TABLE student DROP INDEX unique_id;
复制代码


检查约束

检查约束用来保证一列(或一组列)中的数据满足一组指定的条件。

常见用途:

  • 检查最小或最大值。
  • 指定范围。
  • 只允许特定的值。


下面创建一个检查约束来限制性别列只能输入男、女。

在创建表的时定义检查约束。

CREATE TABLE student
(    
    stu_id INT(11) PRIMARY KEY,
  gender VARCHAR(1) CHECK(gender IN('男', '女'))
);
复制代码


使用 ALTER TABLE 添加检查约束。

ALTER TABLE student ADD CONSTRAINT check_gender CHECK(gender in ('男', '女'));
复制代码


删除检查约束。

ALTER TABLE student DROP CHECK check_gender;
复制代码



基础篇到今日就完结了,内容比较基础,进阶篇抽空搞起!


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
Java 关系型数据库 MySQL
MySQL数据库基础
文章主要介绍MySQL数据库中一些常见的操作,为专栏文章,系列介绍
136 0
MySQL数据库基础
|
SQL 存储 关系型数据库
MySQL常用基础 - 小白必看(二)
概念:是一个数据定义语言 该语言部分包括: 1、对数据库的常用操作 2、对表结构的常用操作
96 0
MySQL常用基础 - 小白必看(二)
|
存储 SQL 缓存
MySQL数据库系列(一)------基础
数据不会随程序结束而消失
142 0
MySQL数据库系列(一)------基础
|
关系型数据库 MySQL 数据格式
【0基础学习mysql】之DML-表中数据的操作
【0基础学习mysql】之DML-表中数据的操作
111 0
【0基础学习mysql】之DML-表中数据的操作
|
关系型数据库 MySQL Java
MySQL数据库基础数据入门级[图文详解]
MySQL数据库基础数据入门级[图文详解]
MySQL数据库基础数据入门级[图文详解]
|
SQL 存储 人工智能
华为大佬的“百万级”MySQL笔记,基础+优化+架构一键搞定
前言 MySQL不用多说,大家都知道它是目前最为活跃热门的开源数据库,由于成本低,操作简易的特点,所以在互联网企业中被广泛使用,即使是头部的BATJ。由此可见,想要在互联网行业混得风生水起,或者说想要进入BATJ等一线互联网公司,那么熟练掌握MySQL必定是一块必要的敲门砖。 对于MySQL的使用,可能很多刚开始工作的开发人员还是挺陌生的,但要想学习又不知道从何开始,技术的落后自然会让人感到焦虑。实际上,学习MySQL,找对方法就能轻松搞定。 今天,特将华为大佬整理的“百万级”MySQL笔记分享给你们,从基础到优化再到架构,带你轻松上手,一键搞定。
|
存储 SQL JSON
|
关系型数据库 MySQL
MySQL基础(二)下
MySQL基础(二)下
92 0
MySQL基础(二)下
|
存储 SQL JSON
MySQL基础(二)中
MySQL基础(二)中
83 0
MySQL基础(二)中
|
存储 SQL NoSQL
MySQL基础(二)上
MySQL基础(二)上
154 0
MySQL基础(二)上