MySQL阶段二——sql语句基础(1)

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

基础学习达到的目标

    01.如何使用MySQL数据库

    02.如何设计数据库

数据库概述

    01.什么是数据库

    02.关系型数据库和非关系型数据库

    03.常见的数据库

Sql分类

数据库操作

    01.创建数据库

    02.查看数据库

    03.查看数据库创建语句

    04.删除数据库

    05.修改数据库信息

    06.修改数据库名称

表操作

    01.创建表

    02.查看数据表

    03.删除数据库

    04.修改表

crud操作

    01.插入数据

    02.获取数据

    03.删除数据

    04.修改数据

索引操作

    01.创建索引

    02.修改索引

    03.删除索引

mysql的数值类型

整数型

小数型

日期时间型

字符串类型

类型选择原则

MySQL的列属性

    01.是否为空

    02.默认值属性

    03.主键|唯一索引

    04.自动增长

补:实体

    05.外键

储存引擎




数据库基础总结

基础学习达到的目标

    01.如何使用MySQL数据库

    02.如何设计数据库

数据库概述

01.什么是数据库

数据库就是用来存储和管理数据的仓库!

数据库存储数据的优先:

02.关系型数据库和非关系型数据库

 

03.常见的数据库

Oracle:甲骨文;

DB2IBM

SQL Server:微软;

Sybase:赛尔斯;

MySQL:甲骨文;

 

Sql分类

DDLData Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;

    create database | drop database

    create table | alter table | rename table | drop table

    create index | drop index

DMLData Manipulation Language):数据操作语言,用来定义数据库记录(数据);

    insert 、update 、delete

DCLData Control Language):数据控制语言,用来定义访问权限和安全级别;

    grant 、remoke

DQLData Query Language):数据查询语言,用来查询记录(数据)。

    select

 

数据库操作

01.创建数据库

Create database db_name;

02.查看数据库

Show databases;

03.查看数据库创建语句

Show create database db_name;

04.删除数据库

Drop database db_name;

05.修改数据库信息

Alter database db_name [修改指令]:修改指令一般是数据库属性的修改(比如字符集)

Alter database db_name character set utf-8;

06.修改数据库名称

将当前数据库进行备份,删除之前的数据库,并创建新的数据库,恢复原来数据库的数据。

 

表操作

01.创建表

CREATE TABLE 表名(

  列名 列类型,

  列名 列类型,

  ......

);

02.查看数据表

Show tables;

Show tables like xxx_%;

Show create table tb_name;

Show create table tb_name\G

Desc tb_name;

03.删除数据库

Drop table if exists tb_name;

04.修改表

01)重命名

Rename table old_tb to new_tb;

02)修改列定义

增加一个新列:alter table tb_name add 列定义(name int);

删除一个列:alter table tb_name drop 列名;

修改一个列定义:alter table tb_name modify 列名 varchar(40);

重命名一个列:alter table tb_name change 旧列名 新列定义;

修改表选项:alter table tb_name character set utf-8;

 

crud操作

01.插入数据

INSERT INTO 表名(列名1,列名2, ) VALUES(1, 2)

 

语法:

INSERT INTO 表名 VALUES(1,2,)

因为没有指定要插入的列,表示按创建表时列的顺序插入所有列的值:

02.获取数据

Select * from 表名 [查询条件];

Select 字段名列表 from 表名 [查询条件];

03.删除数据

语法:

DELETE FROM 表名 [WHERE 条件]

04.修改数据

语法:

UPDATE 表名 SET 列名1=1,  列名n=n [WHERE 条件]

索引操作

01.创建索引

Create unique index Stusno on student(Sno);

Create unique index SCno on Sc(sno ASC,Cno DESC);

 

Unique:表示每个索引值只对应唯一的数据记录

Cluster:表示简历聚簇索引。

02.修改索引

Alter index <old_Index_name> rename to <new_Index_name>;

03.删除索引

Drop index <index_name>;

 

mysql的数值类型


wKioL1l96bnwhUwiAAIWHra8ch0788.png-wh_50

整数型

wKiom1l96buygVLlAAVZSuBk21k821.png-wh_50 

例:tinyint:一个字节(8位)

有符号(-128——127)  无符号(0——255

其他整型类似

 

01.符号问题

可以在定义时,使用unsigned标识没有符号,如果不写,则有符号。

02.定义当前的显示宽度

Alter table tb_name add c tinyint(2):

2表示显示的最小宽度,当宽度不够,需要使用前导0填充,在数据库中叫做zerofill

03.MySQL中没有bool

bool,其实就是tinyint(1)的别名

 

小数型

wKioL1l96b2CLY9JAASXTvnLJUg722.png-wh_50 

浮点数:

小数位可以移动,分为floatdouble

对于123.456,存储的时候存的是1234563(因为0.123456*10^3

 

对于float,默认情况下,有效数位是6-7位,double的默认有效数位是16位左右,比如:同样存储123456789.10283637float表示出来可能就是123456700double表示出来可能就是123456789.102836

 

同样浮点数也支持控制数值范围,Type(M,D):M表示所有数值位数(不包括小数点和符号位),D:表示有效的小数位数。

定点数

不管怎样浮点数肯定有精度丢失的 问题,如果必须要求精度,可以采用定点数DECIMAL,在存储的时候采用小数整数分开,每9位为一组采用4字节存储(同样也做了优化,当不足9位的时候,适当采用合适的字节存储)

 

日期时间型

wKiom1l96b-h3TLiAARxUzoSe9M428.png-wh_50 

注意:

01datetime(年月日时分秒)timestamp(时间戳),这两个表现形式一样,但是存储格式不同(timestamp储存的时候是整型),因为储存的格式不同,所以表示的范围也就不相同。

 

02)支持任意分隔符的日期,但是容易出现歧义。

 

03)支持2位的年份

70-691970-2069

70-991970-1999

0-692000-2069

 

04MySQL支持0值,比如00000000日 000000

2004-04-00:表示4月份整个月

 

05time可以表示一天中的时间,也可以表示时间间隔(两个时间点相差了多少小时)。

 

字符串类型

wKiom1l96cLDD4g5AAUqDBDp5iQ965.png-wh_50 

这里的最大长度是物理最大长度

01.charvarchar

wKioL1l96cLCQKbqAAEoqZrkr38607.png-wh_50wKiom1l96cPC5gHZAADNXWBgl1g720.png-wh_50 

02.字段的长度(655356553365532

wKiom1l96cTAyakbAAFdEWWT5n8613.png-wh_50 

可以看出不一样的编码,字段长度是不一样的(Latin一个字符等于一个字节)

注意:字段的最大长度,除了类型本身限制之外,记录的总长度也有限制

wKioL1l96cXBov8WAAOGArRzqfg329.png-wh_50 

这个图可以看出,65532可以创建成功,65533创建不成功;但是当65533加上not null之后,可以创建成功,如下图:

wKioL1l96cXQYJ8YAABVJc5k324726.png-wh_50 

 

原因是:

wKiom1l96cbC-uOuAAHFfiyg_0g557.png-wh_50 

 

wKioL1l96ceRg0r7AAC_k7pzS8A062.png-wh_50 

这个sql也创建不成功,因为a,b都有可能为nullvarchar不够存储,所以会报错。

 

03.text

wKiom1l96cjCqHLrAAF1SFn4pRs117.png-wh_50 

 

类型选择原则

wKioL1l96cjg-GRmAAHGqaZwR3Q368.png-wh_50 

 

MySQL的列属性

wKiom1l96cmQ7vItAAI3Q2DFh-w331.png-wh_50 

 

01.是否为空

规定一个字段是否为空:null|not null

(空值和空字符串不一样,null的话一定有一个表示空间,在整个记录上某个地方记录null,所有会有一定的储存空间)

 

02.默认值属性

Default value来声明

wKiom1l96cnj7kIIAADKQB3Lf1M503.png-wh_50 

 

03.主键|唯一索引

关系模型的实体完整性在create table中用primary key定义。对单属性构成的码有两种说明方法,一种是定义为表级约束条件,另一种是列级约束条件。对于多个属性构成的码只有一种说明方法,即定义为表级约束条件。

 

实体完整性检查和违约处理

01)检查主码值是否唯一,如果不唯一则拒绝插入或者修改数据。

02)检查主码的各个属性是否为空,只要有一个为空就拒绝插入或者修改。

 

常见的设计:

每个表都应该存在一个可以唯一标识的主键字段,最好与实体没有关系,不是实体属性字段。

wKioL1l96crwTtdqAAETbk-4dfk784.png-wh_50 

04.自动增长

wKiom1l965jydLqOAAJlvZr4Gmc510.png-wh_50 

补:实体

01.一对一

wKiom1l96czS2JyzAALLajZEE5s178.png-wh_50 

 

02.一对多

wKiom1l96c7xkGzPAAUE0L_OoNc992.png-wh_50 

03.多对多

利用一个中间表,表示实体之间的对应关系,即两个一对多

wKioL1l96c7CeOHFAACaGlGdEOU790.png-wh_50wKioL1l96c_jk8ESAAC625V0FXs042.png-wh_50 

05.外键

概念:

如果一个实体(student)的某个字段(studentclass_id),指向(引用)另外一个实体(class)的主键(class:class_id),就称student实体的class_id是外键。

定义外键:

关系模型的参照完整性在create table中用foreign key短语定义哪些列为外键,用references短语指明这些外码参照哪些表的主码。

例:

Create table SC(

Sno char(9) not null,

Cno char(4) not null,

Grade smallint,

Primary key(Sno,Cno),

Foreign key(Sno) references Student(Sno),

Foreign key(Cno) references Course(Cno)

);

当发生参照完整性不一致时,系统可以采用以下策略加以处理:

01)拒绝(NO ACTION)执行restrict

默认策略

02)级联(CASCADE)操作

03)设为空值,set null

 

对于参照完整性,除了应该定义外码,还应该定义外码列是否允许空值。

一般的,当对参照完整性和被参照表的操作违反了参照完整性时,系统允许选用默认策略,即拒绝执行。如果让系统采用其他策略则必须在创建参照表时显示的加以说明。

例:

Create table SC(

Sno char(9) not null,

Cno char(4) not null,

Grade smallint,

Primary key(Sno,Cno),

Foreign key(Sno) references Student(Sno)

On delete acscade

On update cascade,

Foreign key(Cno) references Course(Cno)

On delete no action/*当删除Course表中的元组造成与sc不一致时,拒绝删除*/

On uodate cascade/*当更新course表中的cno时,级联更新sc表中的元组*/

);

修改外键:

先删除,再新建,通过修改表完成。

Alter table tb_name drop foreign key (class_id);

删除外键需要通过指定外键名称达到目的:

可以通过在创建外键时,制定名称,或者使用MySQL默认生成的名称

Alter table tb_name add foreign key (class_id) references it_class

On delete set null;

 

储存引擎

wKioL1mDCPbSKmd4AAFaUhNFVI8464.png-wh_50

wKiom1mDCPWQS9SdAABWkWVzx5k696.png-wh_50


 

 

 

本文转自 叫我北北 51CTO博客,原文链接:http://blog.51cto.com/qinbin/1952168



相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9天前
|
SQL 存储 关系型数据库
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
本文详细介绍了MySQL中的SQL语法,包括数据定义(DDL)、数据操作(DML)、数据查询(DQL)和数据控制(DCL)四个主要部分。内容涵盖了创建、修改和删除数据库、表以及表字段的操作,以及通过图形化工具DataGrip进行数据库管理和查询。此外,还讲解了数据的增、删、改、查操作,以及查询语句的条件、聚合函数、分组、排序和分页等知识点。
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
|
27天前
|
SQL 存储 缓存
MySQL进阶突击系列(02)一条更新SQL执行过程 | 讲透undoLog、redoLog、binLog日志三宝
本文详细介绍了MySQL中update SQL执行过程涉及的undoLog、redoLog和binLog三种日志的作用及其工作原理,包括它们如何确保数据的一致性和完整性,以及在事务提交过程中各自的角色。同时,文章还探讨了这些日志在故障恢复中的重要性,强调了合理配置相关参数对于提高系统稳定性的必要性。
|
25天前
|
SQL 关系型数据库 MySQL
MySQL 高级(进阶) SQL 语句
MySQL 提供了丰富的高级 SQL 语句功能,能够处理复杂的数据查询和管理需求。通过掌握窗口函数、子查询、联合查询、复杂连接操作和事务处理等高级技术,能够大幅提升数据库操作的效率和灵活性。在实际应用中,合理使用这些高级功能,可以更高效地管理和查询数据,满足多样化的业务需求。
97 3
|
28天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
30天前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
1月前
|
SQL Oracle 关系型数据库
SQL(MySQL)
SQL语言是指结构化查询语言,是一门ANSI的标准计算机语言,用来访问和操作数据库。 数据库包括SQL server,MySQL和Oracle。(语法大致相同) 创建数据库指令:CRATE DATABASE websecurity; 查看数据库:show datebase; 切换数据库:USE websecurity; 删除数据库:DROP DATABASE websecurity;
|
2月前
|
SQL 关系型数据库 MySQL
MySql5.6版本开启慢SQL功能-本次采用永久生效方式
MySql5.6版本开启慢SQL功能-本次采用永久生效方式
46 0
|
SQL 存储 关系型数据库
MySQL下使用SQL命令进行表结构与数据复制实践
MySQL下使用SQL命令进行表结构与数据复制实践
164 0
|
SQL 关系型数据库 MySQL
MySQl数据库第八课-------SQL命令查询-------主要命脉2
MySQl数据库第八课-------SQL命令查询-------主要命脉
|
SQL 关系型数据库 MySQL
MySQl数据库第八课-------SQL命令查询-------主要命脉 1
MySQl数据库第八课-------SQL命令查询-------主要命脉
122 0