MySQL阶段二——sql语句基础(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.常见的数据库

l Oracle:甲骨文;

l DB2:IBM;

l SQL Server:微软;

l Sybase:赛尔斯;

l MySQL:甲骨文;

 

Sql分类

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

    create database | drop database

    create table | alter table | rename table | drop table

    create index | drop index

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

    insert 、update 、delete

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

    grant 、remoke

l DQL(Data 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 

浮点数:

小数位可以移动,分为float和double

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

 

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

 

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

定点数

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

 

日期时间型

wKiom1l96b-h3TLiAARxUzoSe9M428.png-wh_50 

注意:

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

 

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

 

03)支持2位的年份

70-69(1970-2069)

70-99(1970-1999)

0-69(2000-2069)

 

04)MySQL支持0值,比如0000年00月00日 00:00:00

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

 

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

 

字符串类型

wKiom1l96cLDD4g5AAUqDBDp5iQ965.png-wh_50 

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

01.char和varchar

wKioL1l96cLCQKbqAAEoqZrkr38607.png-wh_50wKiom1l96cPC5gHZAADNXWBgl1g720.png-wh_50 

02.字段的长度(65535,65533,65532)

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都有可能为null,varchar不够存储,所以会报错。

 

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)的某个字段(student:class_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



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1991 152
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
1389 156
|
SQL 监控 关系型数据库
SQL优化技巧:让MySQL查询快人一步
本文深入解析了MySQL查询优化的核心技巧,涵盖索引设计、查询重写、分页优化、批量操作、数据类型优化及性能监控等方面,帮助开发者显著提升数据库性能,解决慢查询问题,适用于高并发与大数据场景。
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
SQL 监控 关系型数据库
查寻MySQL或SQL Server的连接数,并配置超时时间和最大连接量
以上步骤提供了直观、实用且易于理解且执行的指导方针来监管和优化数据库服务器配置。务必记得,在做任何重要变更前备份相关配置文件,并确保理解每个参数对系统性能可能产生影响后再做出调节。
1087 11
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
767 158
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
897 156
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(上)
最终建议:当前系统是完美的读密集型负载模型,优化重点应放在减少行读取量和提高数据定位效率。通过索引优化、分区策略和内存缓存,预期可降低30%的CPU负载,同时保持100%的缓冲池命中率。建议每百万次查询后刷新统计信息以持续优化
928 161
|
存储 运维 关系型数据库
从MySQL到云数据库,数据库迁移真的有必要吗?
本文探讨了企业在业务增长背景下,是否应从 MySQL 迁移至云数据库的决策问题。分析了 MySQL 的优势与瓶颈,对比了云数据库在存储计算分离、自动化运维、多负载支持等方面的优势,并提出判断迁移必要性的五个关键问题及实施路径,帮助企业理性决策并落地迁移方案。

推荐镜像

更多