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

一、课程介绍

  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 课程介绍

最新文章

  1. 【hive】——metastore的三种模式
  2. Android Studio增加NDK代码编译支持--Mac环境
  3. 如何让textarea不可拖拽
  4. sizeof和指针
  5. 【python】正则中的group()
  6. python 脚本
  7. (hdu)1285 确定比赛名次
  8. ThinkPHP 3.1.2 模板中的变量
  9. SQL Server 2005中设置Reporting Services发布web报表的匿名访问
  10. javaMail邮件发送的简单实现
  11. Shiro的认识
  12. python模块——PrettyTable
  13. JavaScript数组去重方法总结
  14. 每天进步一点点-序列化和反序列(将对象写入硬盘文件and从硬盘文件读出对象)
  15. [hihoCoder] 第五十周: 欧拉路·二
  16. 低配NOSQL
  17. maven 插件jetty/tomcat启动 web 应用
  18. vue之双绑实现
  19. HIVE基本语法以及HIVE分区
  20. MySQL入门篇(五)之高可用架构MHA

热门文章

  1. [转]c#特性(Attribute)学习总结1
  2. github 设置代理
  3. Linux系统时间的设定以及自带的timesync时间同步
  4. Yocto Project Mega-Manual 英文版 (2020官方最新合并版575页),Yocto官方文档中文版,Yocto官方文档英文版
  5. centos8.5安装kvm及kvm虚拟机的端口映射问题
  6. 斐波那契数python实现迭代循环两种方法
  7. Centos+django+uwsgi+python 环境搭建
  8. 理解函数调用_使用arguments参数对所有函数参数执行操作
  9. 爬取白鲸nft排名前25项目,持有nft大户地址数据。
  10. LeetCode 29. 两数相除 时间击败【100.00%】 内存击败【76.25%】