第二课、数据库表的相关操作

一、课程介绍

  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
      • );

  外键约束

    • 外键约束用来保证关联数据的逻辑关系
    • 外键约束的定义是写在子表上的
      • 父表

         
      • 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】第二模块 步骤一 第二课、数据库表的相关操作的更多相关文章

  1. 对mysql数据库表的相关操作

    虫师博客(Python使用MySQL数据库(新)): https://www.cnblogs.com/fnng/p/3565912.html 1.更改表的结构,增加一个字段放置新增的属性 alter ...

  2. MySQL(3) - 数据库表的相关操作

    1.数据库表的创建 逻辑库 1)创建逻辑库:CREATE DATABASE 逻辑库名称; 2)显示逻辑库:SHOW DATABASES; 3)删除逻辑库:DROP DATABASE 逻辑库名称; 数据 ...

  3. 【python】用 sqlacodegen 将存在的数据库表 转化成model.py

    Flask的sqlalchemy对数据库表的模型提供了很多易用的方法.为了使用这些内容,需要将数据库表按照Flask识别的格式创建成Model,但是一般我们都是在已经创建好的数据库环境中开发Pytho ...

  4. Python tkinter模块弹出窗口及传值回到主窗口操作详解

    这篇文章主要介绍了Python tkinter模块弹出窗口及传值回到主窗口操作,结合实例形式分析了Python使用tkinter模块实现的弹出窗口及参数传递相关操作技巧,需要的朋友可以参考下 本文实例 ...

  5. day40数据库之表的相关操作

    数据库之表的相关操作1.表的操作: 1.创建表的语法:        create table 表名(              id   int(10)   primary key auto_inc ...

  6. MySQL(三) 数据库表的查询操作【重要】

    序言 1.MySQL表操作(创建表,查询表结构,更改表字段等), 2.MySQL的数据类型(CHAR.VARCHAR.BLOB,等), 本节比较重要,对数据表数据进行查询操作,其中可能大家不熟悉的就对 ...

  7. Django基础篇之数据库选择及相关操作

    在djanjo框架中我们最常用的框架分别就是mysql和sqlit了,下面我们将分别讲述一下这俩种数据库的基础必备知识 mysql 一.利用命令创建(在终端上执行) 1.首先创建一个project项目 ...

  8. mysql数据库表的查询操作-总结

    转自:https://www.cnblogs.com/whgk/p/6149009.html 序言 1.MySQL表操作(创建表,查询表结构,更改表字段等), 2.MySQL的数据类型(CHAR.VA ...

  9. 最全MySQL数据库表的查询操作

    序言 1.MySQL表操作(创建表,查询表结构,更改表字段等), 2.MySQL的数据类型(CHAR.VARCHAR.BLOB,等), 本节比较重要,对数据表数据进行查询操作,其中可能大家不熟悉的就对 ...

  10. python三大框架之一flask中cookie和session的相关操作

    状态保持 Cookie cookie 是指某些网站为了 辨别  用户身份,进行会话跟踪而储存在用户本地的数据(通常会经过加密),复数形式是 coolies. cookie是由服务器端生成,发送给客户端 ...

随机推荐

  1. [转]idea 试用30天“无限续费”idea破解

    首先打开idea设置 左上角点击file-->setting-->Plugins   https://plugins.zhile.io 然后点击 确定 ("OK") 点 ...

  2. xfce-debian10 英文环境安装配置记录

    Centos还没有用利索(因为我听说debian是更纯正的社区开源项目???可是这对于我这样毫无技术菜鸟来说有什么关系呢???可是耐不住心中的悸动???悸动又从哪里了呢???哎,不管了),突然心血来潮 ...

  3. 自动化:web网页理解

    一.网页成分 网页由以下三部分组成 HTML: HTML 教程 (w3school.com.cn) 1.标记语言,网页的主体,不会变化 2.只会提示,不会报错 CSS: 1.标记语言,用来修饰HTML ...

  4. 读后笔记 -- Python 全栈测试开发 Chapter8:接口测试

    8.1 接口测试 1. 市场分布 UI(web.app)自动化:10% 接口自动化:20% 单元测试:70% -- 测开 2. 接口类型: 1)结构划分:模块间(系统间)的接口称为内部接口:系统与第三 ...

  5. WPF materialDesign 锁屏后界面卡死问题解决

    materialDesign的一个缓存机制问题,在xaml文件中Window属性添加一行: materialDesign:ShadowAssist.CacheMode="{x:Null}&q ...

  6. Java基础__04.GUI编程

    GUI编程常见的组件: 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标操作 键盘事件 GUI简介 GUI的核心技术:Swing AWT,是需要jre环境的. AWT介绍 包含了很多类和接 ...

  7. python学习:窗口程序

    https://www.cnblogs.com/zyg123/p/10385456.html # 导入tkinter模块 import tkinter # 创建画布需要的库 from matplotl ...

  8. facade是如何产生的 in laravel

    据说Facade是为了简化写法, 好记,也有人说要废除这个特性, 据说这个特性有很好的的testability 测试性, 我不清楚, 这个是怎么说出来的理由是什么? 很多Facade 是系统写好的, ...

  9. kill 多个进程的脚本

    杀死多个进程的脚本 #!/bin/bash pids=$(ps -ef | grep warehouse |awk '{print $2}') for pid in $pids do echo $pi ...

  10. Vue3学习笔记

    为什么需要Composition API ? 主要原因:当一个组件的变得逻辑复杂的时候,痛点:多种逻辑代码被分散到组件的各个部分,比如代码的相关逻辑可能会在 data: {...},computed: ...