MySQL基础应用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: MySQL基础应用

屏幕截图 2023-08-28 195743.png

1. mysql内置的功能

1.1 连接数据库

-u

-p

-S

-h

-P

-e

<

例子:

   1. mysql -uroot -p -S /tmp/mysql.sock

   2. mysql -uroot -p -h10.0.0.51 -P3306

   3. -e 免交互执行sql语句

   mysql -uroot -p -e "show databases;"

   4. < 恢复数据

   mysql -uroot -p123 < /root/world.sql

1.2 内置命令

   help                     打印mysql帮助

   \c  ctrl+c                 结束上个命令运行

   \q quit; exit; ctrl+d     退出mysql

   \G                         将数据竖起来显示

   source                     恢复备份文件      

2.     SQL基础应用

2.1 SQL介绍

结构化的查询语言

关系型数据库通用的命令

遵循SQL92的标准(SQL_MODE)

2.2 SQL常用种类 *****

DDL  数据定义语言    create  drop  alter

DCL  数据控制语言    grant  revoke

DML  数据操作语言    insert delete  update

DQL  数据查询语言    select

3. 字符集 (charset)

相当于MySQL的密码本(编码表)

show charset;

utf8          : 3个字节

utf8mb4 (建议): 4个字节,支持emoji

ps:

创建数据库,同时指定字符集:

create database hehe default charset utf8mb4;

修改默认字符集:

alter database hehe default charset utf8mb4;

4. 排序规则: collation

mysql> show collation;

对于英文字符串的,大小写的敏感

utf8mb4_general_ci             大小写不敏感

utf8mb4_bin                  大小写敏感(存拼音,日文)

ps: 针对已有的数据库修改排序规则

alter database hehe collate utf8mb4_bin;

5. 数据类型介绍

5.1 数字

整数

tinyint 0-255

int    -2^32-2^32

浮点数 float

5.2 字符串  *****

char(100)        

   定长字符串类型,不管字符串长度多长,都立即分配100个字符长度的存储空间,未占满的空间使用"空格"填充

varchar(100) ab  

   变长字符串类型,每次存储数据之前,都要先判断一下长度,按需分配此盘空间.

   会单独申请一个字符长度的空间存储字符长度(少于255,如果超过255以上,会占用两个存储空间)

如何选择这两个数据类型?

   少于255个字符串长度,定长的列值,选择char

   多于255字符长度,变长的字符串,可以选择varchar

enum 枚举数据类型,数据不能为数字

address enum('sz','sh','bj'.....)

             1    2    3  

悬念,以上数据类型可能会影响到索引的性能

5.3 时间

datetime

范围为从 1000-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999。

timestamp

范围为从 1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.999999。

6. DDL的应用

6.1 库的定义

创建数据库

CREATE DATABASE zabbix CHARSET utf8mb4 COLLATE  utf8mb4_bin;

查看库情况

SHOW DATABASES;

SHOW CREATE DATABASE zabbix;

删除数据库(不代表生产操作)

DROP DATABASE test;

修改数据库字符集

注意: 一定是从小往大了改,比如utf8--->utf8mb4.

目标字符集一定是源字符集的严格超级.

CREATE DATABASE test;

SHOW CREATE DATABASE test;

ALTER DATABASE test CHARSET utf8mb4 collate utf8mb4_bin;

6.2 关于库定义规范 *****

   库名使用小写字符

   库名不能以数字开头

   不能是数据库内部的关键字

   必须设置字符集和校对集.

6.3 DDL-表定义

建表

   表名,列名,列属性,表属性

列属性

PRIMARY KEY : 主键约束,表中只能有一个,非空且唯一.

NOT NULL    : 非空约束,不允许空值

UNIQUE KEY  : 唯一键约束,不允许重复值

DEFAULT     : 一般配合 NOT NULL 一起使用.

UNSIGNED    : 无符号,一般是配合数字列,非负数

COMMENT     : 注释

AUTO_INCREMENT : 自增长的列

CREATE TABLE stu (
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '学号',
sname VARCHAR(255) NOT NULL  COMMENT '姓名',
age TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年龄',
gender ENUM('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
intime DATETIME NOT NULL DEFAULT NOW() COMMENT '入学时间'
) ENGINE INNODB CHARSET utf8mb4;

注:默认自增列增量为1,初始值也为1,但可以用下列参数修改。

auto_increment_increment=10   增量为10

auto_increment_offset=10      初始值为10

建表规范 *****

   表名小写字母,不能数字开头,

   不能是保留字符,使用和业务有关的表名

   选择合适的数据类型及长度

   每个列设置 NOT NULL + DEFAULT .对于数据0填充,对于字符使用有效字符串填充

   每个列设置注释

   表必须设置存储引擎和字符集

   主键列尽量是无关列数字列,最好是自增长

   enum类型不要保存数字,只能是字符串类型

查询建表信息

SHOW TABLES;        #显示所有表

SHOW CREATE TABLE stu;  #显示创表语法、存储引擎、字符集

DESC stu;        #显示表的列结构

创建一个表结构一样的表

CREATE TABLE test LIKE stu;

删表(不代表生产操作)

DROP TABLE test;

修改

在stu表中添加qq列 *****

DESC stu;

ALTER TABLE stu ADD qq VARCHAR(20) NOT NULL COMMENT 'qq号';

pt-osc(了解)

MySQL原生的Online DDL还是有很多限制的,还是会遇到data meta lock的问题等诸多不便,通过pt-osc在线执行DDL。

   工作原理:

   创建一个和源表一样表结构的新表

   在新表执行DDL语句(空表嘛,所以。。。)

   在源表创建三个触发器分别对应insert、update、delete操作

   从源表拷贝数据到新表,拷贝过程中源表通过触发器把新的DML操作更新到新表中

   rename源表到old表中,把新表rename为源表,默认最后删除源表

在sname后加微信列 ***

ALTER TABLE stu ADD wechat VARCHAR(64) NOT NULL UNIQUE COMMENT '微信号' AFTER sname;

在id列前加一个新列num ***

ALTER TABLE stu ADD num INT NOT NULL UNIQUE COMMENT '身份证' FIRST ;

DESC  stu;

把刚才添加的列都删掉(危险,不代表生产操作) ***

ALTER TABLE stu DROP num;

ALTER TABLE stu DROP qq;

ALTER TABLE stu DROP wechat;

DESC stu;

修改sname数据类型的属性 ***

DESC stu;

ALTER TABLE stu MODIFY sname VARCHAR(64) NOT NULL COMMENT '姓名';

将gender 改为 sex 数据类型改为 CHAR 类型 ***

ALTER TABLE stu  CHANGE gender sex CHAR(4) NOT NULL COMMENT '性别';

6.4 DCL

创建用户并赋权:

grant all on hehe.* to zhangsan@'%' identified by '123.com';

撤销删除权限:

revoke drop,delete on hehe.* from zhangsan@'%';

查看权限:

show grants for zhangsan@'%';

6.5 DML

insert

DESC stu;

最偷懒

INSERT stu VALUES(1,'zs',18,'m',NOW());

SELECT * FROM stu;

最规范

INSERT INTO stu(id,sname,age,sex,intime) VALUES (2,'ls',19,'f',NOW());

针对性的录入数据

INSERT INTO stu(sname,age,sex)VALUES ('w5',11,'m');

一次性录入多行

INSERT INTO stu(sname,age,sex)
VALUES 
('aa',11,'m'),
('bb',12,'f'),
('cc',13,'m');
update(一定要加where条件)
UPDATE stu SET sname='aaa';
SELECT * FROM stu;
UPDATE stu SET sname='bb' WHERE id=6;
delete (一定要有where条件)
DELETE FROM stu;
DELETE FROM stu WHERE id=6;

trancate和delete:

都是删除表中行记录

但delete不会重置自增列,会生成日志;

truncate不能删除某行,只会删除全部,不做日志,重置自增列。

truncat table stu;

生产中屏蔽delete功能

使用revoke去除用户drop和delete权限。

6.6 作业

create database school default charset utf8mb4 collate utf8mb4_bin;

use school

student :学生表

sno:    学号

sname:学生姓名

sage: 学生年龄

ssex: 学生性别

create table student (
sno int not null primary key auto_increment comment "学号",
sname varchar(20) not null comment "学生姓名",
sage int not null comment "学生年龄",
ssex char(4) not null comment "学生性别");

teacher :教师表

tno:     教师编号

tname:教师名字

create table teacher (

tno int not null,

tname varchar(20)

);

course :课程表

cno:  课程编号

cname:课程名字

tno:  教师编号

create table course (

cno int not null,

cname varchar(20) not null,

tno int not null

);

sc :成绩表

sno:  学号

cno:  课程编号

score:成绩

create table sc (
sno int not null,
cno int not null,
score int not null
);
INSERT INTO student(sno,sname,sage,ssex)
VALUES (1,'zhang3',18,'m');
INSERT INTO student(sno,sname,sage,ssex)
VALUES
(2,'zhang4',18,'m'),
(3,'li4',18,'m'),
(4,'wang5',19,'f');
INSERT INTO student
VALUES
(5,'zh4',18,'m'),
(6,'zhao4',18,'m'),
(7,'ma6',19,'f');
INSERT INTO student(sname,sage,ssex)
VALUES
('maliu',20,'m'),
('zhuqi',20,'f'),
('sunjiu',25,'m');
INSERT INTO teacher(tno,tname) VALUES
(101,'laowu'),
(102,'laoxia'),
(103,'laoli');
DESC course;
INSERT INTO course(cno,cname,tno)
VALUES
(1001,'linux',101),
(1002,'python',102),
(1003,'mysql',103);
DESC sc;
INSERT INTO sc(sno,cno,score)
VALUES
(1,1001,80),
(1,1002,59),
(2,1002,90),
(2,1003,100),
(3,1001,99),
(3,1003,40),
(4,1001,79),
(4,1002,61),
(4,1003,99),
(5,1003,40),
(6,1001,89),
(6,1003,77),
(7,1001,67),
(7,1003,82),
(8,1001,70),
(9,1003,80),
(10,1003,96);
SELECT * FROM student;
SELECT * FROM teacher;
SELECT * FROM course;
SELECT * FROM sc;


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
4月前
|
关系型数据库 MySQL 分布式数据库
安全可靠的PolarDB V2.0 (兼容MySQL)产品能力及应用场景
PolarDB分布式轻量版采用软件输出方式,能够部署在您的自主环境中。PolarDB分布式轻量版保留并承载了云原生数据库PolarDB分布式版技术团队深厚的内核优化成果,在保持高性能的同时,显著降低成本。
579 140
|
2月前
|
SQL 监控 关系型数据库
MySQL事务处理:ACID特性与实战应用
本文深入解析了MySQL事务处理机制及ACID特性,通过银行转账、批量操作等实际案例展示了事务的应用技巧,并提供了性能优化方案。内容涵盖事务操作、一致性保障、并发控制、持久性机制、分布式事务及最佳实践,助力开发者构建高可靠数据库系统。
|
3月前
|
存储 关系型数据库 MySQL
MYSQL数据加密压缩函数应用实战指南。
总的来说,加密和压缩是维护MySQL数据库中数据安全性和效率的有效手段。使用时需权衡性能与安全,合理应用加密和压缩函数。在设计数据库架构时要考虑到加密字段的查询性能,因为加密可能使得一些索引失效。压缩数据能有效减少存储空间的占用,但在服务器负载较高时应避免实时压缩和解压,以免影响总体性能。
153 10
|
存储 关系型数据库 MySQL
MySQL在企业内部应用场景有哪些
【10月更文挑战第17天】MySQL在企业内部应用场景有哪些
529 0
|
存储 关系型数据库 MySQL
介绍一下MySQL的一些应用场景
【10月更文挑战第17天】介绍一下MySQL的一些应用场景
2813 0
|
canal 消息中间件 关系型数据库
Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
【9月更文挑战第1天】Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
1761 4
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
318 2
|
架构师 关系型数据库 MySQL
MySQL最左前缀优化原则:深入解析与实战应用
【10月更文挑战第12天】在数据库架构设计与优化中,索引的使用是提升查询性能的关键手段之一。其中,MySQL的最左前缀优化原则(Leftmost Prefix Principle)是复合索引(Composite Index)应用中的核心策略。作为资深架构师,深入理解并掌握这一原则,对于平衡数据库性能与维护成本至关重要。本文将详细解读最左前缀优化原则的功能特点、业务场景、优缺点、底层原理,并通过Java示例展示其实现方式。
452 1
|
关系型数据库 MySQL 数据库
MySQL数据库:基础概念、应用与最佳实践
一、引言随着互联网技术的快速发展,数据库管理系统在现代信息系统中扮演着核心角色。在众多数据库管理系统中,MySQL以其开源、稳定、可靠以及跨平台的特性受到了广泛的关注和应用。本文将详细介绍MySQL数据库的基本概念、特性、应用领域以及最佳实践,帮助读者更好地理解和应用MySQL数据库。二、MySQL
921 5
|
数据采集 关系型数据库 MySQL
MySQL表约束的种类与应用
在设计数据库时,合理应用各种约束对于创建一个结构化良好且能够有效维护数据完整性的数据库至关重要。每种约束类型都有其特定的应用场景,理解并正确应用这些约束,可以大大提高数据库应用的稳定性和性能。
274 3

推荐镜像

更多