初学MySQl简单sql语句(1)

目录

SQL语句介绍:

DDL创建数据库:

char和varchar比较

数值类型

数据库存储引擎

数据库存储引擎------InnoDB

数据库存储引擎------MyISAM

[数据库存储引擎-MyISAM 和InnoDB区别](#数据库存储引擎-MyISAM 和InnoDB区别)

修改和删除数据库表

数据库设计三大范式

一、什么是范式

二、约束作用

三、三范式

约束?

作用?

约束种类?

[非空约束(not null)](#非空约束(not null))

唯一性约束(unique)

[主键约束(primary key)PK](#主键约束(primary key)PK)

[外键约束(foreign key)FK](#外键约束(foreign key)FK)

约束的添加:

添加非空约束

添加唯一约束

添加主键约束

添加外键约束

约束的删除:

[删除not null约束](#删除not null约束)

删除unique约束

[删除primary key约束](#删除primary key约束)

[删除foreign key约束](#删除foreign key约束)


SQL语句介绍:

SQL语句,即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名。

|-------------|-------------------------|-----------------------|
| 名词 | 解释 | 命令 |
| DDL(数据定义语言) | 定义和管理数据对象,如数据库,数据表等 | CREATE、DROP、ALTER |
| DML(数据操作语言) | 用于操作数据库对象中所包含的数据 | INSERT、UPDATE、DELETE |
| DQL(数据查询语言) | 用于查询数据库数据 | SELECT |
| DCL(数据控制语言) | 用来管理数据库的语言,包括管理权 限及数据更改 | GRANT、COMMIT、ROLLBACK |

DDL创建数据库:

语法:

CREATE TABLE[IF NOT EXISTS] `表名`(

`字段名1` 字段类型[属性][索引][注释],

`字段名2` 字段类型[属性][索引][注释],

......

`字段名n` 字段类型[属性][索引][注释],

)[表类型][表字符集]

其中'[]'包含的内容可以省略

|----------------|----------------------------------|-------------------|----------------|
| 类型 | 说明 | 取值范围 | 存储需求 |
| char[(M)] | 固定长字符串,检索快但费空 间, 0 <= M <= 255 | M字符 | char[(M)] |
| varchar[(M)] | 可变字符串 0 <= M <= 65535 | 变长度 | varchar[(M)] |
| tinytext | 微型文本串 | 16777215长度+3个字节 | tinytext |
| text | 文本串(4个G左右大小) | 4294967295长度+4个字节 | text |

char和varchar比较

数值类型

|---------------------|-----------|-----------------------------------------|------|
| 类型 | 说明 | 取值范围 | 存储需求 |
| tinyint【taɪni】 | 非常小的数据 | 有符值:-2 ^7 ~ 2^7-1,无符号值: 0 ~ 28-1 | 1字节 |
| smallint | 较小的数据 | 有符值:-2 15 ~ 215 -1 ,无符号值: 0 ~ 216 -1 | 2字节 |
| mediumint 【miːdiəm】 | 中等大小的数据 | 有符值:-2 23 ~ 223 -1 ,无符号值: 0 ~ 224 -1 | 3字节 |
| int | 标准整数 | 有符值:-2^31 ~ 2^31-1,无符号值:0 ~ 2^32-1 | 4字节 |
| bigint | 较大的整数 | 有符值:-2^63 ~2^63-1,无符号值:0 ~2^64-1 | 8字节 |
| float | 单精度浮点数 | ±1.1754351e -38 | 4字节 |
| double | 双精度浮点数 | +-2.2250738585072014e -308 | 8字节 |
| Decimal(钱) 【desɪml】 | 字符串形式的浮点数 | decimal(m, d) | m个字节 |

数据库存储引擎

查看当前数据库支持的存储引擎:show engines;

数据库存储引擎------InnoDB

MySQL从3.23.34a开始就包含InnoDB存储引擎。大于等于5.5之后,默认采用InnoDB引擎。

• InnoDB是MysQL的默认事务型引擎,它被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(Commit)和回滚(Rollback)。

• 除了增加和查询外,还需要更新、删除操作,那么,应优先选择InnoDB存储引擎。

• 除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。

• 数据文件结构:

• 表名.frm存储表结构(MySQL8.0时,合并在表名.ibd中)。

• 表名.ibd存储数据和索引

• InnoDB是为处理巨大数据量的最大性能设计。

• 在以前的版本中,字典数据以元数据文件、非事务表等来存储。现在这些元数据文件被删除了。比如: .frm,.par , .trn ,.isl, .db.opt等都在MySQL8.0中不存在了。

• 对比MylISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保存数据和索引。

• MyISAM只缓存索引,不缓存真实数据;InnoDB不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响。

数据库存储引擎------MyISAM

MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务、行级锁、外键,有一个毫无疑问的缺陷就是崩溃后无法安全恢复。

• 5.5之前默认的存储引擎

• 优势是访问的速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用

• 针对数据统计有额外的常数存储。故而count(*)的查询效率很高

• 数据文件结构:

• 表名.frm存储表结构。

• 表名.MYD存储数据(MYData)。

• 表名.MYI存储索引 (MYIndex)

• 应用场景:只读应用或者以读为主的业务

数据库存储引擎-MyISAM 和InnoDB区别

|------|------------------------------|------------------------------------------|
| 对比项 | MyISAM | InnoDB |
| 外键 | 不支持 | 支持 |
| 事务 | 不支持 | 支持 |
| 行表锁 | 表锁,即使操作一条记录也会锁住整 个表,不适合高并发操作 | 行锁,操作时只锁某一行,不对其它行有影响,适合高并发操作 |
| 缓存 | 只缓存索引,不缓存真实数据 | 不仅缓存索引还要缓存真实数据,对内存 要求较高,而且内存大小对性能有决定性的影响 |
| 默认安装 | Y | Y |
| 默认使用 | N | Y |
| 关注点 | 性能:节省资源、消耗少、简单业务 | 事务:并发写,事务、更大资源 |

修改和删除数据库表

修改表名:AITER TABLE 旧表名 RENAME AS 新表名

修改字段:ALTER TABLE 表名 MODIFY 字段名 列类型[属性] ALTER TABLE 表名 CHANGE 旧段名 列类型[属性]

删除字段:ALTER TABLE 表名 DROP 字段名

添加字段:ALTER TABLE 表名 ADD 字段名 列类型[属性]

删除表:DROP TABLE [IF EXISTS] 表名

数据库设计三大范式
一、什么是范式

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就叫做范式。

二、约束作用

数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。

三、三范式

第一范式:确保每列保持原子性

第二范式:确保表中的每列都和主键相关

第三范式:确保每列都和主键列直接相关,而不是间接相关

第一范式(1NF)确保每列保持原子性

第二范式(2NF)属性完全依赖于主键

第三范式(3NF)属性不依赖于其他非主属性 属性直接依赖于主键

注:数据不能存在传递关系,即每个属性都跟主键右直接关系而不是间接关系

约束?

实际上就是表中数据的限制条件

作用?

表在设计时加入约束就是为了保证表中的记录完整和有效

约束种类?
非空约束(not null)

用not null约束的字段不能为null值,必须给定具体的数据

create table test1(

name varchar(20) not null,

age int

);

Insert into test1(age) values(16) //这里只给age字段名存值,并没有给不

//为空的name存值,mysql会报错

唯一性约束(unique)

unique约束的字段,具有唯一性,不可重复,但可以为null

表级约束:

  1. 在建表时,单独用unique(字段)来设置字段的约束
  2. 使用表级约束,给多个字段联合约束
  3. 表级约束可以给约束起名字

create table test1(

id int(10),

name varchar(20) not null,

email varchar(128),

unique(name,email)

);

主键约束(primary key)PK

主键(primary key)是表中的一个或多个字段,它的值用于唯一的标识表中的某一条记录

表中的某个字段添加主键约束后,该字段为主键字段,主键字段中出现的每一个数据都称为主键值

复合主键(表级定义)

create table test1(

id int(10),

name varchar(20) not null,

email varchar(128),

primary key(id,name)

);

外键约束(foreign key)FK

外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。

若有两个表A、B,id是A的主键,而B中也有id字段,则id就是表B的外键

A为基本表或父标,主表,B为信息表,子表,副表

创建外键:

foreign key(表的字段名) references 父表表名(父表的字段名)

按外键约束的字段数量分类

单一外键:给一个字段添加外键约束

复合外键:给多个字段联合添加一个外键约束

注意:

一张表可以有多个外键字段(与主键不同)

外键值可以为null

外键字段去引用一张表的某个字段的时候,被引用的字段必须具有unique约束

有了外键引用之后,表分为父表和子表

班级表:父表

学生表:子表

创建先创建父表

删除先删除子表数据

插入先插入父表数据

检查约束(目前MySQL不支持,Oracle支持)

约束的添加:

添加非空约束

alter table 表名 modify test_student char(10) not null;

添加唯一约束

alter table 表名 add unique(表字段名,字段,字段,字段);

添加主键约束

alter table 表名 add primary key(表的字段名,字段,字段);

添加外键约束

alter table 表名 add constraint N1 foreign key (表字段名) references 父表(父表字段名);

约束的删除:

删除not null约束

alter table 表名 modify 列名 类型;

删除unique约束

alter table 表名 drop index 唯一约束名;

删除primary key约束

alter table 表名 drop primary key;

删除foreign key约束

alter table 表名 drop foreign key 外键名;

相关推荐
恒辉信达5 分钟前
hhdb客户端介绍(53)
数据库·mysql·hhdb·数据库可视化界面客户端
sone121385 分钟前
计算机网络(第8版)第四章 网络层(4.7.1~4.7.3)
服务器·网络·计算机网络
DO_Community18 分钟前
DigitalOcean Droplet 云服务器:新增自动扩展池功能
服务器
安科瑞刘鸿鹏22 分钟前
老旧小区用电安全保护装置#限流式防火保护器参数介绍#
运维·服务器·物联网·能源
Rain_Rong41 分钟前
linux检测硬盘
linux·运维·服务器
我曾经是个程序员1 小时前
鸿蒙学习记录之http网络请求
服务器·学习·http
Hello.Reader1 小时前
Redis热点数据管理全解析:从MySQL同步到高效缓存的完整解决方案
redis·mysql·缓存
真真-真真2 小时前
WebXR
linux·运维·服务器
是程序喵呀2 小时前
MySQL备份
android·mysql·adb
指尖上跳动的旋律2 小时前
shell脚本定义特殊字符导致执行mysql文件错误的问题
数据库·mysql