初学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 外键名;

相关推荐
惊起白鸽45022 分钟前
MySQL全量,增量备份与恢复
数据库·mysql
暮雨疏桐1 小时前
MySQL SQL Mode及其说明
数据库·sql·mysql·sql mode
Tangcan-2 小时前
【MySQL】数据库基础
数据库·mysql
蔡蓝2 小时前
Mysql的索引,慢查询和数据库表的设计以及乐观锁和悲观锁
数据库·mysql
jstart千语2 小时前
【Redis】分布式锁的实现
数据库·redis·分布式
菜菜why3 小时前
AutoDL租用服务器教程
服务器
IT专业服务商3 小时前
联想 SR550 服务器,配置 RAID 5教程!
运维·服务器·windows·microsoft·硬件架构
一把年纪学编程3 小时前
【牛马技巧】word统计每一段的字数接近“字数统计”
前端·数据库·word
极小狐3 小时前
极狐GitLab 通用软件包存储库功能介绍
java·数据库·c#·gitlab·maven
钢铁男儿3 小时前
C# 方法(可选参数)
数据库·mysql·c#