【python】第二模块 步骤一 第二课、数据库表的相关操作
第二课、数据库表的相关操作
一、课程介绍
1.1 课程介绍
学习目标
- 管理逻辑库和数据表
- 创建、删除、修改逻辑库和数据表
- 了解常用的数据类型和约束
- 字符串、整数、浮点数、精确数字、日期、枚举。主要约束、非空约束、唯一约束、外键约束等
- 掌握索引运行机制和使用原则
- 排序为什么可以提高数据检索速度?怎么创建和删除索引?什么条件下使用索引?
二、数据库表的创建
2.1 什么是SQL语言
数据定义语言:定义逻辑库、数据表
什么是SQL语言?
- SQL是用于访问和处理数据的标准的计算机语言
SQL语言分类
- DML(数据操作语言)
- 添加
- 修改
- 删除
- 查询
- DCL(数据控制语言)
- 用户
- 权限
- 事务
- DDL(数据定义语言)
- 逻辑库
- 数据表
- 视图
- 索引
SQL语句注意事项
- SQL语句不区分大小写,但是字符串区分大小写
- SELECT “HelloWorld”;
- SQL语句必须以分号结尾
- SQL语句中的空白和换行没有限制,但是不能破坏语法
SQL语句的注释
- SQL语句的注释有两种,分别如下:
- #这是一点注释文字
- /*这是另一段注释文字*/
创建逻辑库
1 mysql>CREATE DATABASE 逻辑库名称;# 创建一个逻辑空间
2 mysql>SHOW DATABASES;# 显示逻辑空间
3 mysql>DROP DATABASE 逻辑库名称;# 删除某个逻辑空间
创建数据表
CREATE TABLE 数据表(
列名1 数据类型[约束] [COMMENT 注释],
列名2 数据类型[约束] [COMMENT 注释],
......
)[COMMENT=注释];
例子:
1 use test;
2 CREATE TABLE student(
3 id int UNSIGNED PRIMARY key,
4 name VARCHAR(20) not null,
5 sex CHAR(1) NOT NULL,
6 birthday date NOT NULL,
7 tel char(11) NOT NULL,
8 remark VARCHAR(200)
9 );
1 INSERT INTO student VALUES(1,"李强","男","1995-05-15","13312345678",NULL)
数据表的其他操作
1 SHOW tables;
2 DESC student;
3 SHOW CREATE TABLE student;
4 DROP TABLE student;
2.2 不同的数据类型
数据定义语言:数据类型
数据类型:数字
| 类型 | 大小 | 说明 |
| TINYINT | 1字节 | 小整数 |
| SMALLINT | 2字节 | 普通整数 |
| MEDIUMINT | 3字节 | 普通整数 |
| INT | 4字节 | 较大整数 |
| BIGINT | 8字节 | 大整数 |
| FLOAT | 4字节 | 单精度浮点数 |
| DOUBLE | 8字节 | 双精度浮点数 |
| DECIMAL | ------ | DECIMAL(10,2) |
- 不精确的浮点数
十进制的浮点数无法在计算机中用二进制精确表达
1 create table temp(
2 id int UNSIGNED PRIMARY KEY,
3 num FLOAT(20,10)
4 );
5
6 create table temp(
7 id int UNSIGNED PRIMARY KEY,
8 num DECIMAL(20,10)
9 );
数据类型:字符串
| 类型 | 大小 | 说明 |
| CHAR | 1-255字符 | 固定长度字符串 |
| VARCHAR | 1-65535字符 | 不固定长度字符串 |
| TEXT | 1-65535字符 | 不确定长度字符串 |
| MEDIUMTEXT | 1-1千6百万字符 | 不确定长度字符串 |
| LONGTEXT | 1-42亿字符 | 不确定长度字符串 |
数据类型:日期类型
| 类型 | 大小 | 说明 |
| DATE | 3字节 | 日期 |
| TIME | 3字节 | 时间 |
| YEAR | 1字节 | 年份 |
| DATETIME | 8字节 | 日期时间 |
| TIMESTAMP | 4字节 | 时间戳 |
2.3 修改数据表结构
数据定义语言:修改表结构
添加字段
ALTER TABLE 表名称
ADD 列1 数据类型[约束][COMMENT 注释],
ADD 列2 数据类型[约束][COMMENT 注释],
......;
修改字段类型和约束
ALTER TABLE 表名称
MODIFY 列1 数据类型[约束][COMMENT 注释],
MODIFY 列2 数据类型[约束][COMMENT 注释],
......;
修改字段名字
ALTER TABLE 表名称
CHANGE 列1 新列名1 数据类型[约束][COMMENT 注释],
CHANGE 列2 新列名2 数据类型[约束][COMMENT 注释],
......;
删除字段
ALTER TABLE 表名称
DROP 列1 ,
DROP 列2 ,
......;
例子:
1 ALTER TABLE student
2 ADD address VARCHAR(200) not null,
3 ADD home_tel CHAR(11) not null;
4
5 ALTER TABLE student
6 MODIFY home_tel VARCHAR(20) not null;
7
8 ALTER TABLE student
9 CHANGE address home_address VARCHAR(200) not null;
10
11 ALTER TABLE student
12 DROP home_address,
13 DROP home_tel;
14
15 DESC student;
三、数据库表字段约束
3.1 数据库表字段约束
数据定义语言:字段约束
数据库的范式
- 构造数据库必须遵循一定的规则,这种规则就是范式
- 目前关系数据库有6种范式,一般情况下,只要满足第三范式即可
第一范式:原子性
- 第一范式是数据库的基本要求,不满足这一点就不是关系型数据库
- 数据表的每一列都是不可分割的基本数据项,同一列中不能有多个值,也不能存在重复的属性。
第二范式:唯一性
- 数据表中的每条记录必须是唯一的。为了实现区分,通常要为表上加上一个列用来储存唯一标识,这个唯一属性列被称作主键列
第三范式:关联性
- 每列都与主键有直接关系,不存在依赖关系
- 依照第三范式,数据可以拆分保存到不同的数据表,彼此保持关联
字段约束
- MySQL中的字段约束共有四种:
| 约束名称 | 关键字 | 描述 |
| 主键约束 | PRIMARY KEY | 字段值唯一,且不能为NULL |
| 非空约束 | NOT NULL | 字段值不能为NULL |
| 唯一约束 | UNIQUE | 字段置唯一,且可以为NULL |
| 外键约束 | FOREIGN KEY | 保持关联数据的逻辑性 |
主键约束
- 主键约束要求字段的值在全表必须唯一,而且不能为NULL值
- 建议主键一定要使用数字类型,因为数字的检索速度会非常快
- 如果主键是数字类型,还可以设置自动增长
- CREATE TABLE t_teacheer(
- id INT PRIMARY KEY AUTO_INCREMENT,
- ......
- );
非空约束
- 非空约束要求字段的值不能为NULL值
- NULL值以为没有值,而不是“” 空字符串
- CREATE TABLE t_teacher(
- id INT PRIMARY KEY AUTO_INCREMENT,
- name VARCHAR(200) NOT NULL,
- married BOOLEAN NOT NULL DEFAULT FALSE
- );
唯一约束
- 唯一约束要求字段值如果不为NULL,那么在全表必须唯一
- CREATE TABLE t_teacher(
- ......
- tel CHAR(11) NOT NULL UNIQUE
- );
- 唯一约束要求字段值如果不为NULL,那么在全表必须唯一
外键约束
- 外键约束用来保证关联数据的逻辑关系
- 外键约束的定义是写在子表上的
- 父表
- 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("男","女") NOT NULL,
- deptno INT UNSIGNED,
- hiredate DATE NOT NULL,
- FOREIGN KEY (deptno) REFERENCES t_dept(deptno)
- );
- 父表
外键约束的闭环问题
- 如果形成外键闭环,我们将无法删除任何一张表的记录
3.2 数据库的索引机制
数据定义语言:索引
数据排列的好处
- 一旦数据排序之后,查找的速度就会翻倍,现实世界跟程序世界都是如此
如何创建索引
CREATE TABLE 表名称(
......,
INDEX [索引名称](字段),
......
);
例子:
1 CREATE TABLE t_message(
2 id INT UNSIGNED PRIMARY KEY,
3 content VARCHAR(200) NOT NULL,
4 type ENUM("公告","通报","个人通知") NOT NULL,
5 create_time TIMESTAMP NOT NULL,
6 INDEX idx_type (type)
7 );
如何添加与删除索引
CREATE INDEX 索引名称 ON 表名(字段); ALTER TABLE 表名称 ADD INDEX [索引名](字段); SHOW INDEX FROM 表名; DROP INDEX 索引名称 ON 表名;
例子:
1 CREATE INDEX idx_type ON t_message(type);
2
3 ALTER TABLE t_message ADD INDEX idx_type(type);
4
5 SHOW INDEX FROM t_message;
6
7 DROP INDEX idx_type ON t_message;
索引的使用原则
- 数据量很大,而且经常被查询的数据表可以设置索引
- 索引只添加在经常被用作检索条件的字段上面
- 不要在大字段上创建索引
四、课程总结
4.1 课程总结
技能清单
- 掌握了逻辑库和数据表的管理
- 了解MySQL常用数据类型
- 掌握MySQL的字段约束
- 掌握索引机制,懂得什么时候使用索引
第二课、数据库表的相关操作
一、课程介绍
1.1 课程介绍
【python】第二模块 步骤一 第二课、数据库表的相关操作的更多相关文章
- 对mysql数据库表的相关操作
虫师博客(Python使用MySQL数据库(新)): https://www.cnblogs.com/fnng/p/3565912.html 1.更改表的结构,增加一个字段放置新增的属性 alter ...
- MySQL(3) - 数据库表的相关操作
1.数据库表的创建 逻辑库 1)创建逻辑库:CREATE DATABASE 逻辑库名称; 2)显示逻辑库:SHOW DATABASES; 3)删除逻辑库:DROP DATABASE 逻辑库名称; 数据 ...
- 【python】用 sqlacodegen 将存在的数据库表 转化成model.py
Flask的sqlalchemy对数据库表的模型提供了很多易用的方法.为了使用这些内容,需要将数据库表按照Flask识别的格式创建成Model,但是一般我们都是在已经创建好的数据库环境中开发Pytho ...
- Python tkinter模块弹出窗口及传值回到主窗口操作详解
这篇文章主要介绍了Python tkinter模块弹出窗口及传值回到主窗口操作,结合实例形式分析了Python使用tkinter模块实现的弹出窗口及参数传递相关操作技巧,需要的朋友可以参考下 本文实例 ...
- day40数据库之表的相关操作
数据库之表的相关操作1.表的操作: 1.创建表的语法: create table 表名( id int(10) primary key auto_inc ...
- MySQL(三) 数据库表的查询操作【重要】
序言 1.MySQL表操作(创建表,查询表结构,更改表字段等), 2.MySQL的数据类型(CHAR.VARCHAR.BLOB,等), 本节比较重要,对数据表数据进行查询操作,其中可能大家不熟悉的就对 ...
- Django基础篇之数据库选择及相关操作
在djanjo框架中我们最常用的框架分别就是mysql和sqlit了,下面我们将分别讲述一下这俩种数据库的基础必备知识 mysql 一.利用命令创建(在终端上执行) 1.首先创建一个project项目 ...
- mysql数据库表的查询操作-总结
转自:https://www.cnblogs.com/whgk/p/6149009.html 序言 1.MySQL表操作(创建表,查询表结构,更改表字段等), 2.MySQL的数据类型(CHAR.VA ...
- 最全MySQL数据库表的查询操作
序言 1.MySQL表操作(创建表,查询表结构,更改表字段等), 2.MySQL的数据类型(CHAR.VARCHAR.BLOB,等), 本节比较重要,对数据表数据进行查询操作,其中可能大家不熟悉的就对 ...
- python三大框架之一flask中cookie和session的相关操作
状态保持 Cookie cookie 是指某些网站为了 辨别 用户身份,进行会话跟踪而储存在用户本地的数据(通常会经过加密),复数形式是 coolies. cookie是由服务器端生成,发送给客户端 ...
随机推荐
- git submodule .gitmodules 子模块
初始化 git submodule init 添加子项目 git submodule add -b xxxx {path} -b 指定分支 path 可为空 (不知为何, 直接写在 .gitmodul ...
- win10系统解决启动虚拟机蓝屏问题
1.查看电脑是否开启了虚拟化,如果没起开开启 CTR+SHIFT+Esc 2.是否开启了虚拟化选项 win+r 输入 OptionalFeatures
- Influxdb客户端使用
Influxdb客户端使用 1. 简介 Influxdb在网络上可以搜索到一个叫InfluxdbStudio的工具,但只能在window下使用,有时在其他系统下做简单数据查询时就比较麻烦,下面以Inf ...
- oracle ebs 账户组合验证
DECLARE l_segment1 GL_CODE_COMBINATIONS.SEGMENT1%TYPE; l_segment2 GL_CODE_COMBINATIONS.SEGMENT2%TYPE ...
- 读后笔记 -- Python 全栈测试开发 Chapter8:接口测试
8.1 接口测试 1. 市场分布 UI(web.app)自动化:10% 接口自动化:20% 单元测试:70% -- 测开 2. 接口类型: 1)结构划分:模块间(系统间)的接口称为内部接口:系统与第三 ...
- 模型admin 外键的相关操作
....@admin.register(MyModel)class MyModelAdmin(admin.ModelAdmin): def method(self, request, queryset ...
- jenkins 2.282+Publish over ssh 1.22版本发布日志不能实时显示
问题解决了.作个记录,最新的 [Publish Over SSH]插件1.22版本,jenkins 282版本.1. ssh server 的Verbose output in console要开启2 ...
- 【git】git子模块操作-添加子模块与克隆子模块
https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%AD%90%E6%A8%A1%E5%9D%97 git submodule upda ...
- 从零搭建hadoop集群之系统管理操作
1. 配置主机名 [root@hadoop01 ~]# hostname #显示当前主机名 方法一:通过配置文件/etc/hostname (重启后生效) [root@hadoop01 ~]# vim ...
- abap sql中进行除法操作
在abap 得sql中进行除法操作要用division,不能用 " / "这个符号 SELECT vbeln, 100 * CAST( 10 + DIVISION( ZMENG, ...