MySQL-SQL简介、管理逻辑库和数据表-学习笔记04
零. 命令表
这篇文章比较长,出现的命令比较多。在这里先将本文出现的命令总结一下
类 | 命令 | 解释 |
---|---|---|
注释 |
# 这是一段注释 ,/*这也是一段注释*/
|
注释的方法 |
逻辑库 |
CREATE DATABASE demo;
|
创建逻辑库 |
SHOW DATABASES;
|
show所有的逻辑库 | |
DROP DATABASES demo;
|
删除逻辑库 | |
数据表 |
CREATE TABLE 数据表( 列表1 数据类型 [约束] [COMMENT 注释],... )[COMMENT 注释]
|
创建数据表 |
INSERT INTO 数据表 VALUES(数据) ;
|
插入数据 | |
SHOW tables;
|
查看当前逻辑库内的数据表,返回数据表名 | |
DESC 数据表;
|
查看数据表的具体情况 | |
SHOW CREATE TABLE 数据表;
|
查询建表时的语句 | |
DROP TABLE 数据表;
|
删除数据表student | |
修改表结构 都以 ALTER TABLE 表名称 换行开始
|
ADD 列表1 数据类型 [约束] [COMMENT 注释];
|
添加字段(相当于添加一列) |
MODIFY 列表1 数据类型 [约束] [COMMENT 注释];
|
修改字段类型和约束 | |
CHANGE 列1 新列名1 数据类型 [约束] [COMMENT 注释];
|
修改字段名称 | |
DROP 列1;
|
删除字段 | |
字段约束 |
PRIMARY KEY
|
主键约束:字段值唯一,且不能为NULL |
NOT NULL
|
非空约束:字段值不能为NULL | |
UNIQUE
|
唯一约束:字段值唯一,且可以为NULL | |
NOT NULL UNIQUE
|
不是主键约束且要求非空唯一 | |
FOREIGN KEY
|
外键约束:保持关联数据的逻辑性(不推荐使用,防止外键闭环) | |
索引 |
INDEX [索引名称](字段),
|
在创建数据表时,可以用这个添加索引 |
CREATE INDEX 索引名 ON 表名 (字段);
|
添加索引 | |
ALTER TABLE 表名称 ADD INDEX [索引名] (字段);
|
添加索引 | |
SHOW INDEX FROM 表名;
|
看某张数据表的所有索引 | |
DROP INDEX 索引名 ON 表名;
|
删除索引以及对应的二叉树 |
- 数字类型
类型 | 大小(byte) | 说明 |
---|---|---|
TINYINT | 1 | 小整数 |
SMALLINT | 2 | 普通整数 |
MEDIUMINT | 3 | 普通整数 |
INT | 4 | 较大整数 |
BIGINT | 8 | 大整数 |
FLOAT | 4 | 单精度浮点数 |
DOUBLE | 8 | 双精度浮点数 |
DECIMAL | ----- |
精确小数类型,DECIMAL(10, 2) 一共10个字符,2代表保留到小数点后两位,可以自己定 |
CHAR | 1-255 | 固定长度字符串 |
VARCHAR | 1-65535 | 不固定长度字符串 |
TEXT | 1-65535 | 不确定长度字符串 |
MEDIUMTEXT | 1-1千6百万 | 不确定长度字符串 |
LONGTEXT | 1-42亿 | 不确定长度字符串 |
DATE | 3 |
只有日期,没有时间 '2022-05-10'
|
TIME | 3 | 时间 |
YEAR | 1 | 年份 |
DATETIME | 8 | 包括日期和时间 |
TIMESTAMP | 4 | 时间戳,包括日期和时间 |
目录
- 零. 命令表
- 一. SQL语句
- 二. 管理逻辑库
- 2.1 创建逻辑库
- 2.2 数据表
- 2.2.1 创建数据表和插入数据
- 2.2.2 数据表的其他操作
- 三. 数据定义语言:数据类型
- 3.1 数据类型:数字
- 3.2 数据类型:字符串
- 3.3 数据类型:日期类型
- 四. 数据定义语言:修改表结构
- 4.1 添加字段 ADD
- 4.2 修改字段类型和约束 MODIFY
- 4.3 修改字段名称 CHANGE
- 4.4 删除字段 DROP
- 五. 数据定义语言:字段约束
- 5.1 数据库的范式
- 5.1.1 第一范式:原子性
- 5.1.2 第二范式:唯一性
- 5.1.3 第三范式:关联性
- 5.2 字段约束
- 5.2.1 主键约束(PRIMARY KEY)
- 5.2.2 非空约束(NOT NULL)
- 5.2.3 唯一约束(UNIQUE)
- 5.2.4 外键约束(FOREIGN KEY)
- 5.2.4 实操
- 六. 数据库的索引机制
- 6.1 如何创建索引
- 6.2 添加与删除索引
- 6.3 索引的使用原则
一. SQL语句
- SQL是用于访问和处理数据的标准计算机语言
- SQL语言分类:
- DML:添加、修改、删除、查询
- DCL:用户、权限、事物
- DDL:逻辑库、数据表、视图、索引
- SQL语句注意事项
- 不区分大小写,但字符串区分大小写
SELECT "HelloWorld";
- SQL语句必须以分号结尾
- SQL语句中的空白和换行没有限制,但是不能破坏语法
- 不区分大小写,但字符串区分大小写
- SQL语言注释
# 这是一段注释
,/*这也是一段注释*/
二. 管理逻辑库
2.1 创建逻辑库
- 用的是DDL的语句
CREATE DATABASE demo; #名称用英文或英文加数字
SHOW DATABASES; #show所有逻辑库
DROP DATABASES demo; #删除逻辑库
2.2 数据表
2.2.1 创建数据表和插入数据
CREATE TABLE 数据表(列表1 数据类型 [约束] [COMMENT 注释],列表2 数据类型 [约束] [COMMENT 注释],...
)[COMMENT = 注释];
举个例子,在test这个逻辑库内创建数据表student
USE test;
CREATE TABLE student(id INT UNSIGNED PRIMARY KEY, #学号, primary key代表不能保存重复数值name VARCHAR(20) NOT NULL, #VARCHAR(20)代表字符串最大长度为20,not null代表非空sex CHAR(1) NOT NULL, #char(1)固定一个字符(上面的varchar不固定)birthday DATE NOT NULL, #数据类型为datetel CHAR(11) NOT NULL, #固定11位remark VARCHAR(200)
);
往student
中插入一行数据
INSERT INTO student VALUES(1, "小李子", "男","1995-05-15","13712345678",NULL);
2.2.2 数据表的其他操作
SHOW tables; #查看当前逻辑库内的数据表,返回数据表名
DESC stduent; #查看student这个数据表的具体情况
SHOW CREATE TABLE student; #查询建表时的语句
DROP TABLE student; #删除数据表student
三. 数据定义语言:数据类型
3.1 数据类型:数字
类型 | 大小(byte) | 说明 |
---|---|---|
TINYINT | 1 | 小整数 |
SMALLINT | 2 | 普通整数 |
MEDIUMINT | 3 | 普通整数 |
INT | 4 | 较大整数 |
BIGINT | 8 | 大整数 |
FLOAT | 4 | 单精度浮点数 |
DOUBLE | 8 | 双精度浮点数 |
DECIMAL | ----- |
精确小数类型,DECIMAL(10, 2) 一共10个字符,2代表保留到小数点后两位,可以自己定 |
- float 或者 double存数字会有误差
CREATE TABLE temp(id INT UNSIGNED PRIMARY KEY,num FLOAT (20,10) # 位数20,小数点精确十位 );
往表内存入0.2, 但实际保存的数字是有误差的,
但如果用DECIMAL
就可以了CREATE TABLE temp(id INT UNSIGNED PRIMARY KEY,num DECIMAL (20,10) # 位数20,小数点精确十位 );
再存入0.2,就不会就误差了
3.2 数据类型:字符串
- 固定何不固定字符串得小括号确定长度或最大长度,不确定不用字符串
类型 | 大小(字符) | 说明 |
---|---|---|
CHAR | 1-255 | 固定长度字符串 |
VARCHAR | 1-65535 | 不固定长度字符串 |
TEXT | 1-65535 | 不确定长度字符串 |
MEDIUMTEXT | 1-1千6百万 | 不确定长度字符串 |
LONGTEXT | 1-42亿 | 不确定长度字符串 |
3.3 数据类型:日期类型
类型 | 大小(字节) | 说明 |
---|---|---|
DATE | 3 |
只有日期,没有时间 '2022-05-10'
|
TIME | 3 | 时间 |
YEAR | 1 | 年份 |
DATETIME | 8 | 包括日期和时间 |
TIMESTAMP | 4 | 时间戳,包括日期和时间 |
四. 数据定义语言:修改表结构
4.1 添加字段 ADD
ALTER TABLE 表名称
ADD 列表1 数据类型 [约束] [COMMENT 注释],
ADD 列表2 数据类型 [约束] [COMMENT 注释],
...;
还是之前student的例子
ALTER TABLE student
ADD address VARCHAR(200) NOT NULL,
ADD home_tel CHAR(11) NOT NULL;
可以看到最后多了两列address
,home_tel
4.2 修改字段类型和约束 MODIFY
ALTER TABLE 表名称
MODIFY 列表1 数据类型 [约束] [COMMENT 注释],
MODIFY 列表2 数据类型 [约束] [COMMENT 注释],
...;
继续之前的例子
ALTER TABLE student
MODIFY home_tel VARCHAR(20) NOT NULL;DESC student; #显示下student细节
通过return可以看到home_tel
的Type
被改成varchar(20)
4.3 修改字段名称 CHANGE
ALTER TABLE 表名称
CHANGE 列1 新列名1 数据类型 [约束] [COMMENT 注释],
CHANGE 列2 新列名2 数据类型 [约束] [COMMENT 注释],
...;
继续之前的例子
ALTER TABLE student
CHANGE address home_address VARCHAR(200) NOT NULL;
可以看到address
的名字改为home_address
4.4 删除字段 DROP
直接连着数据把几列给删掉了
ALTER TABLE 表名称
DROP 列1,
DROP 列2,
...;
继续之前的例子
ALTER TABLE student
DROP home_tel,
DROP home_address;
五. 数据定义语言:字段约束
5.1 数据库的范式
- 构造数据库必须遵循一定的规则,这种规则就是范式
- 关系数据库有六种范式,一般情况下,只满足第三范式即可
5.1.1 第一范式:原子性
数据库的基本要求,若不满足这一条件就不是关系型数据库了
数据表的每一列都是不可分割的基本数据项,同一列中不能有多个值,也不能存在重复的属性
比如下面两个表,第一个表不符合第一范式,因为班级内的元素可以再被拆分位年级和班级,拆分后数据调用更加灵活学号 姓名 班级 1 小李子 高三年级一班 学号 姓名 年级 班级 1 小李子 高三 一班
5.1.2 第二范式:唯一性
数据表中的每条记录必须是唯一的。为了实现区分,要为表加上一个列来储存唯一标识,这个唯一属性列被称为主键列
在下面这个例子中,这个学生在同一天考了两次,但是从数据表中无法区分区别,所以我们需要加入一个主键列在这里是流水号作区分以保证数据的唯一性
学号 成绩 考试日期 1 60 2022-5-10 1 60 2022-5-10 流水号 学号 成绩 考试日期 20220510001 1 60 2022-5-10 20220510002 1 60 2022-5-10
5.1.3 第三范式:关联性
满足第三范式意味着同时满足第一和第二范式
关联性指每列都与主键有直接关系,不存在传递依赖
比如说如下表把爸爸作为主键儿子和女儿与主键有直接关系而女儿的书和女儿的笔和主键没有直接关系,因此设计有问题
爸爸 儿子 女儿 女儿的书 女儿的笔 老陈 陈儿 陈女 语文课本 圆珠笔 因此我们应该将一张表拆分成两张表,这样才能符合关联性
爸爸 儿子 女儿 老陈 陈儿 陈女 女儿 女儿的书 女儿的笔 陈女 语文课本 圆珠笔 需要满足第三范式的原因:让数据更加紧凑,检索速度更快,因为主键的搜索速度较快。
因此我们需要将不相关的数据需要拆分保存到不同的数据表,表与表之间彼此保持关联
5.2 字段约束
MySQL中的字段约束共有四种:
约束名称 | 关键字 | 描述 |
---|---|---|
主键约束 | PRIMARY KEY | 字段值唯一,且不能为NULL |
非空约束 | NOT NULL | 字段值不能为NULL |
唯一约束 | UNIQUE | 字段值唯一,且可以为NULL |
非空且唯一 | NOT NULL UNIQUE | 字段值不能为NULL且唯一 |
外键约束 | FOREIGN KEY | 保持关联数据的逻辑性(不推荐使用) |
5.2.1 主键约束(PRIMARY KEY)
- 要求字段的值在全表必须唯一,而且不能为NULL值
- 主键自带索引功能
- 建议主键使用数字类型,因为数字类型检索速度更快
- 如果主键是数字类型,还可以设置自动增长
AUTO_INCREMENT
CREATE TABLE t_teacher(id INT PRIMARY KEY AUTO_INCREMENT, //用AUTO_INCREMENT(计数器)再插入数据的时候就不需要给主键值,会自动增加... );
5.2.2 非空约束(NOT NULL)
- 字段值不能为NULL
- NULL值是没有值而不是空字符串
CREATE TABLE t_teacher(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(200) NOT NULL,married BOOLEAN NOT NULL DEFAULT FALSE # 为空使默认FALSE
);
5.2.3 唯一约束(UNIQUE)
- 唯一约束要求字段值如果不为NULL,那么在权标必须唯一
CREATE TABLE t_teacher(...tel CHAR(11)NOT NULL UNIQUE # 这里指非空且唯一
);
5.2.4 外键约束(FOREIGN KEY)
- 外键约束用来保证关联数据的逻辑关系,如果父表不存在,那么子表就也不需要存在了。外键约束是这么用来约束程序的关联关系的。
- 举个例子
首先定义父表CREATE TABLE t_dept(deptno INT UNSIGNED PRIMARY KEY,dname VARCHAR (20) NOT NULL UNIQUE,tel CHAR(4) UNIQUE );
然后定义子表
CREATE TABLE t_emp(empno INT UNSIGNED PRIMARY KEY,ename VARCHAR(20) NOT NULL,sex ENUM("male","female") NOT NULL, #ENUM是枚举的数据类型deptno INT UNSIGNED,hiredate DATE NOT NULL,FOREIGN KEY (deptno) REFERENCES t_dept(deptno) #把这个表的deptno与t_dept中的deptno进行外键约束的关联 )
在之后要删除父表中的部分数据时,如果有子表中的数据与之关联,需要先删除子表的数据,再删除父表的数据
- 外键约束的问题:如果一旦形成外键闭环,我们将无法删除任意一张表的记录!,因此不常用
5.2.4 实操
如果表是真实存在的,在表名前最好加一个t_
或者tb_
;如果表是虚拟表则加v_
或vw_
CREATE TABLE t_teacher(id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20) NOT NULL,tel CHAR(11) NOT NULL UNIQUE,married BOOLEAN NOT NULL DEFAULT FALSE
);
六. 数据库的索引机制
6.1 如何创建索引
CREATE TABLE 表名称(...,INDEX [索引名称](字段), #可以规定名字,不规定就默认用字段名字...
);
- 举例
CREATE TABLE t_message(id INT UNSIGNED PRIMARY KEY,content VARCHAR(200) NOT NULL,type ENUM("公告", "通报", "个人通知") NOT NULL,create_time TIMESTAMP NOT NULL,INDEX idx_type (type)
);
6.2 添加与删除索引
CREATE INDEX 索引名 ON 表名 (字段); # 添加索引
ALTER TABLE 表名称 ADD INDEX [索引名] (字段); # 添加索引
SHOW INDEX FROM 表名; # 看某张数据表的所有索引
DROP INDEX 索引名 ON 表名; # 删除索引以及对应的二叉树
6.3 索引的使用原则
- 对记录很多且常被查询的时候要设置索引
- 写入次数大于查询次数的文件不应设置索引,如log
- 索引只添加在经常被用作索引条件的字段上面个
- 不要在大字段上创建索引,如长度超过50的字符串等
MySQL-SQL简介、管理逻辑库和数据表-学习笔记04相关推荐
- 在MySQL中如何用SQL命令创建数据库及数据表
HRELLO 大家好! 上期给大家讲解了,MySQL数据库常用的管理命令.现在,给大家讲解,如何用SQL命令在MySQL中创建一个数据库及数据表. 在学习前,我们首先要了解,SQL命令是什么? SQL ...
- mysql 命令执行drop 命令_(笔记)Mysql命令drop table:删除数据表
drop table命令用于删除数据表. drop table命令格式:drop table ; 例如,删除表名为 MyClass 的表: mysql> drop table MyClass; ...
- SQL语句遍历树结构的数据表
[转自]:肆尾葱的博客<SQL语句遍历树结构的数据表> 一.创建树结构的数据库表 -- 数据库为 SQL Server create table treeTest(id int,paren ...
- MYSQL数据库(九)- 修改数据表名称、列名称
目录 一.修改列定义(modify col_name) 二.修改列类型(modify col_name) 三.修改列名称(change col_name) 三.修改表名称(rename table a ...
- SQL Server管理相关的注册表技巧
SQL Server管理相关的注册表技巧 2010-10-20 17:14 佚名 SQL Server的管理和Windows的管理是息息相关的,通过Windows的注册表可以让SQL Server管理 ...
- MySQL学习笔记04【数据库的查询操作、今日内容、表的约束】
MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...
- 数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一)
数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一) 步骤: 1. 创建SILVERLIGHT应用程序 2. 创建LINQ TO SQL [注意序列化的问题 ...
- React学习:路由定义及传参、数据复用-学习笔记
文章目录 React学习:路由定义及传参.数据复用-学习笔记 在React中使用react-router-dom路由 简单例子 路由定义及传参 React学习:路由定义及传参.数据复用-学习笔记 在R ...
- python气象数据可视化学习笔记6——利用python地图库cnmaps绘制地图填色图并白化
文章目录 1. 效果图 2. cnmaps简介及安装 2.1 写在前面 2.2 cnmaps简介和安装 3. 导入库 4. 定义绘图函数 4.1 使用get_adm_maps返回地图边界 4.2 ax ...
最新文章
- JPPhotoBrowserDemo--微信朋友圈浏览图片
- css3-transform
- 《商务旅行》解题报告
- Java集合源码分析(二)ArrayList
- Framework中的AIDL(原)
- 全国计算机等级考试题库二级C操作题100套(第98套)
- 一个优美的架构需要考虑的几个问题
- php ==gt;,谈谈PHP中的 -gt;、=gt; 和 :: 符号 - 易采站长站
- JS 立即执行的函数表达式(function)写法
- C++笔记------static 和 const 在类中用法
- 【动态规划】LeetCode 1143最长公共子序列
- mysql not in性能分析_SQL 中的 in 与 not in、exists 与 not exists 的区别以及性能分析...
- 做python自动化得时候怎么添加断言_python接口自动化(二十四)--unittest断言——中(详解)...
- vscode任务栏图标突然不显示
- 相见恨晚的5个资源网站 影视音乐资源随你看
- 2017-11-11 白银下跌简要分析
- golang中GDK和UTF8编码转换
- android 应用内部存储空间不足,安卓手机储存空间不足是什么原因 需要如何解决...
- 努比亚 系统升服务器设置,努比亚Nubia x6官方系统升级教程与方法
- 【有利可图网】双十一“亮眼”设计大赏来了!!
热门文章
- 数据中心(IDC)微热通道机柜的应用实践
- 【无人机 学习笔记 3】无人机传感器特性-智能导航的基本概念
- 四旋翼无人机仿真之hector_quadrotor无人机(ROS + Gazebo)(三)传感器数据读取与复现(IMU、GPS)
- 【爱奇艺2018-09-15在线笔试】库特君的面条
- 国产化之虚拟ARM64-CPU安装银河麒麟操作系统
- jffs2文件系统[1]--简介
- 程序员:三行情书|告白不只有我爱你
- 15-微信小程序商城 产品评价页布局(微信小程序商城开发、小程序毕业设计、小程序源代码)(黄菊华-微信小程序开发教程)
- windows免费版切割pdf拆分pdf提取pdf指定页码小工具
- IntelliJ IDEA常用功能介绍