MySQL 命令初识 #yyds干货盘点#

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL DuckDB 分析主实例,集群系列 8核16GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL 命令初识 #yyds干货盘点#

MySQL命令初识

image.png

登录MySQL

mysql -u root -p 3306

mysql -u root -p 3306 -h 127.0.0.1

数据类型

  1. 整型
  2. 浮点型
  3. 日期时间型
  4. 字符型

CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、ENUM、SET

操作数据库

USE 命令

  • 打开数据库
  • USE 数据库名称;
  • SELECT DATABASE();

创建数据表

CREATE TABLE [IF NOT EXISTS] table_name(
  Column_name data_type,
  ...)

例如:

CREATE TABLE tb1(
  username VARCHAR(20),
  age TINYINT UNSIGNED,
  salary FLOAT(8,2) UNSIGNED
);

查看数据表

SHOW TABLES [FROM db_name] [LIKE 'pattern' | WHERE expr] ,例如:

SHOW TABLES FROM mysql;

查看数据表结构(列)

SHOW COLUMNS FROM tbl_name

例如: SHOW COLUMNS FROM tb1;

记录的插入与查找(行)

  • 插入记录
INSERT [INTO] tbl_name [(col_name, ...)] VALUES(val,...)

例如:

INSERT tb1 VALUES('Tom', 25, 7777.88)
INSERT tb1 (username, salary) VALUES ('Jerry', 6666.66)

  • 记录查找 SELECT
SELECT expr,... FROM tbl_name

SELECT * FROM tb1;

空值与非空

  • NULL,字段值可以为空
  • NOT NULL,字段值禁止为空
CREATE TABLE tb2(
  username VARCHAR(20) NOT NULL,
  Age TINYINT UNSIGNED NULL);

自动编号与主键约束

AUTO_INCREMENT 自增

  • 自动编号,且必须与主键组合使用
  • 默认情况下,其实值为1,每次的增加为1
CREATE TABLE tb3(
  id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(30) NOT NULL
);

PRIMARY KEY 主键约束

  • 每张表只能存在一个主键,主键的字段允许赋值
  • 主键保证记录的唯一性
  • 主键自动为NOT NULL
  • 不一定需要和自动编号一起使用
INSERT tb3 (username) VALUES('Tome');
INSERT tb3 (username) VALUES('Jack');
INSERT tb3 (username) VALUES('Rose');

唯一约束

  • 可以保证记录的唯一性
  • 字段可以为空值(NULL)
  • 每张数据表可以存在多个唯一约束
CREATE TABLE tb4(
  id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(20) NOT NULL UNIQUE KEY,
  age TINYINT UNSIGNED
);
SELECT COLUMNS FROM tb4;
INSERT tb4(username, age) VALUES('Tom', 22); 

默认约束

DEFAULT 默认值

  • 当插入记录时,如果没有明确为字段赋值,则自动赋予默认值
CREATE TABLE tb6(
  id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(20) NOT NULL UNIQUE KEY,
  sex ENUM('1', '2', '3') DEFAULT '3'
);
SHOW COLUMNS FROM tb6;
INSERT tb6(username) VALUES('Jack');

约束

不同标准划分,结果不同

  1. 约束保证数据的完整性和一致性
  2. 根据参照数目的多少,约束分为表级约束和列级约束(约束的字段的多少,1列为列级)
  3. 根据功能划分,约束类型包括:

      1. NOT NULL 非空约束

  2. PRIMARY KEY 主键约束

  3. UNIQUE KEY 唯一约束

  4. DEFAULT 默认约束

  5. FOREIGN KEY 外键约束

外键约束

FOREIGN KEY

  • 保证数据一致性,完整性。
  • 实现一对一或一对多关系
  1. 父表和子表(具有外键列的表)必须使用相同的存储引擎,而且禁止使用临时表
  2. 数据表的存储引擎只能为InnoDB
  3. 外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同。
  4. 外键列和参照列必须创建索引。如果外键列不存在索引的话,MYSQL将自动创建索引。

MySQL配置文件:Default-storage-engine=INNODB

CREATE TABLE province(
  id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  province VARCHAR(20) NOT NULL
);
SHOW CREATE TABLE province;
CREATE TABLE users(
  id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(10) NOT NULL,
  -- pid BIGINT,
  -- pid SMALLINT,
   pid SMALLINT UNSIGNED,
  FOREIGN KEY (pid) REFERENCES province(id)
);
SHOW INDEXES FROM province\G;
SHOW INDEXES FROM users\G;

外键约束的参照操作

  1. CASCADE:从父表删除或更新且自动删除或更新子表中的行
  2. SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表没有指定NOT NULL
  3. RESTRICT:拒绝对父表的删除或更新操作
  4. NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同

物理外键,一般实现逻辑外键

表级约束与列级约束

  • 对一个数据列建立的约束,称为列级约束(用的更多)
  • 对多个数据列建立的约束,称为表级约束
  • 列级约束既可以在列定义时声明,也可以在列定义后声明
  • 表级约束只能在列定义后声明
  • 其中NOT NULL、DEFAULT不存在表级约束

check 约束,不起作用

修改数据表

添加单列

ALTER TABLE tbl_name ADD[COLUMN] col_name column_definition[FIRST | AFTER col_name]

例如:

ALTER TABLE users1 ADD age TINYINT UNSIGNED NOT NULL DEFAULT 10;
ALTER TABLE users1 ADD password VARCHAR(32) NOT NULL AFTER username;
ALTER TABLE user1 ADD truename VARCHAR(20) NOT NULL FIRST;

添加多列

ALTER TABLE tbl_name ADD[COLUMN] (col_name column_definition,...)

删除列

ALTER TABLE tbl_name DROP [COLUMN] col_name

例如:

ALTER TABLE user1 DROP truname;
ALTER TABLE user1 DROP password, DROP age;

修改数据表--添加约束

  1. 添加主键约束
ALTER TABLE tbl_name ADD [CONSTRAINT] [symbol] PRIMARY KEY [index_type] (index_col_name,...)
CREATE TABLE users2(
  username VARCHAR(10) NOT NULL,
  pid SMALLINT(5) UNSIGNED
);
ALTER TABLE user2 ADD id SMALLINT UNSIGNED;
SHOW COLUMNS FROM users2;
ALTER TABLE users2 ADD CONSTRAINT PK_users2_id PRIMARY KEY(id);
SHOW COLUMNS FROM users2;
  1. 添加唯一约束,可以由多个,而主键约束只能有一个
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type](index_col_name, ...)
ALTER TABLE users2 ADD UNIQUE (username);

  1. 添加外键约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name, ...) reference definition
ALTER TABLE users2 ADD FOREIGN KEY (pid) REFERENCE province(id);

  1. 添加/删除默认约束
ALTER TABLE tbl_name ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}

例如:

ALTER TABLE user2 ADD age TINYINT UNSIGNED NOT NULL;
ALTER TABLE user2 ALTER age SET DEFAULT 15;
ALTER TABLE user2 ALTER age DROP DEFAULT;

删除约束

删除主键约束 ALTER TABLE tbl_name DROP PRIMARY KEY

删除唯一约束 ALTER TABLE tbl_name DROP {INDEX|KEY} index_name

删除外键约束 ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol

修改列定义

ALTER TABLE tbl_name MODIFTY[COLUMN] col_name column_definition [FIRST|AFTER col_name]

修改列名称

ALTER TABLE tbl_name CHANGE[COLUMN] old_col_name new_col_name_definition [FIRST|ALTER col_name]

例如:ALTER TABLE user2 CHANGE pid p_id TINYINT UNSIGNED NOT NULL;

数据表更名

-- 方法一:
 ALTER TABLE tbl_name RENAME [TO|AS] new_tbl_name
-- 方法二:
 RENAME TABLE tbl_name TO new_tbl_name[, tbl_name2 TO new_tbl_name2]...

ALTER TABLE users2 RENAME users3; RENAME TABLE users3 TO users2;

总结:

  • 约束
  • 功能分:NOT NULL,PRIMARY KEY, UNIQUE KEY, DEFAULT,FOREIGN KEY
  • 数据列的数目分:表级约束,列级约束
  • 修改数据表
  • 针对字段的操作:添加/删除字段,修改列定义,修改列名称
  • 针对约束的操作;添加/删除各种约束
  • 针对数据表的操作:数据表更名(量种方式)

插入记录

INSERT语句

第一种方法:

INSERT [INTO] tbl_name [(col_name, ...)] {VALUES|VALUE} ({expr|DEFAULT},...,(...),...

先创建一个users表:

CREATE TABLE users(
  id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(20) NOT NULL,
  password VARCHAR(32) NOT NULL,
  age TINYINT UNSIGNED NOT NULL DEFAULT 10,
  sex BOOLEAN
);

然后依次插入记录:

INSERT users VALUEs(NULL, 'Tom', '123', 25, 1)

INSERT users VALUEs(DEFAULT, 'Jerry', '123', 18, 1)

expr可以赋予表达式、函数

INSERT users VALUES(NULL, 'Tom', '123', 25), (DEFAULT, 'Jerry', md5('123'), 18, 1);

第二种方法:

INSERT [INTO] tbl_name SET col_name={expr|DEFAULT},...

说明:与第一种方式的区别在于,此方法可以使用子查询(SubQuery),而且每次只能插入一条记录

第三种方法:

INSERT [INTO] tbl_name [(col_name,...)] SELECT ...查询结果写入指定的数据表

UPDATE

单表更新

UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr|DEFAULT} [, col_name2={expr2|[DEFAULT]}]...[WHERE where_condition]

UPDATE users set age = age + 5;

DELETE

单表删除DELETE FROM tbl_name [WHERE where_condition]

SELECT

查找记录

SELECT select_expr[,select_expr ...]
[
  FROM table_references
  [WHERE where_condition]
  [GROUP BY {col_name|position} [ASC|DESC],...]
  [HAVING where_condition]
  [ORDER BY {col_name|expr|positon}[ASC|DESC],...]
  [LIMIT {[offset,] row_count|row_count OFFSET offset}]
]

例如:SELECT VERSION(); SELECT NOW(); SELECT 3+5; 查询表达式:

  • 每个表达式表示想要的一列,必须有至少一个
  • 多个列之间以英文逗号隔开
  • 星号(*)表示所有列。table_name.*可以表示命名表的所有列。
  • 查询表达式可以使用[AS] alias_name为其赋予别名
  • 别名可以用于GROUP BY,ORDER BY或HAVING子句。

总结

这里只是将部分常用的MySQL 命令做了一些小的罗列,方便后续开发的时候做一些备忘和查阅。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 关系型数据库 MySQL
初步了解MySQL数据库的基本命令
初步了解MySQL数据库的基本命令
140 0
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
tengine 关系型数据库 MySQL
Tengine、Nginx安装MySQL数据库命令教程
本指南详细介绍了在Linux系统上安装与配置MySQL数据库的步骤。首先通过下载并安装MySQL社区版本,接着启动MySQL服务,使用`systemctl start mysqld.service`命令。若启动失败,可尝试使用`sudo /etc/init.d/mysqld start`。利用`systemctl status mysqld.service`检查MySQL的服务状态,确保其处于运行中。通过日志文件获取初始密码,使用该密码登录数据库,并按要求更改初始密码以增强安全性。随后创建一个名为`tengine`的数据库,最后验证数据库创建是否成功以及完成整个设置流程。
|
存储 关系型数据库 MySQL
MySQL基础命令及使用示例
这些基础命令构成了与MySQL数据库交互的核心,理解并掌握它们对于进行有效的数据库操作至关重要。在实际使用中,建议结合实际案例和需求来练习这些命令,以加深理解和提高效率。
223 5
|
存储 关系型数据库 MySQL
MySQL基础命令及使用示例
这些基础命令构成了与MySQL数据库交互的核心,理解并掌握它们对于进行有效的数据库操作至关重要。在实际使用中,建议结合实际案例和需求来练习这些命令,以加深理解和提高效率。
314 3
|
存储 关系型数据库 MySQL
(十五)MySQL命令大全:以后再也不用担心忘记SQL该怎么写啦~
相信大家在编写SQL时一定有一个困扰,就是明明记得数据库中有个命令/函数,可以实现自己需要的功能,但偏偏不记得哪个命令该怎么写了,这时只能靠盲目的去百度,以此来寻找自己需要的命令。
535 28
|
关系型数据库 MySQL 数据库
Mysql 常用命令
Mysql 常用命令
118 0
|
SQL 关系型数据库 MySQL
MySQL删除表数据、清空表命令(truncate、drop、delete 区别)
MySQL删除表数据、清空表命令(truncate、drop、delete区别) 使用原则总结如下: 当你不需要该表时(删除数据和结构),用drop; 当你仍要保留该表、仅删除所有数据表内容时,用truncate; 当你要删除部分记录、且希望能回滚的话,用delete;
|
SQL 关系型数据库 MySQL
mysql性能调优:EXPLAIN命令21
【7月更文挑战第21天】掌握SQL性能调优:深入解析EXPLAIN命令的神奇用法!
233 1
|
关系型数据库 MySQL 分布式数据库
PolarDB产品使用问题之 MySQL数据库中,执行delete命令删除数据后,存储空间通常不会立即释放,该如何优化
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
422 2

推荐镜像

更多