2 - 表结构 | MySQL键值

news2024/11/25 4:17:50

表结构 | MySQL键值

  • 表管理
    • 1. 库的操作
    • 2. 表的操作
      • 表的创建与删除
      • 表的修改
      • 复制表
    • 3. 管理表记录
  • 数据类型
    • 数值类型
    • 字符类型(汉字或者英文字母)
    • 日期时间类型 表头存储与日期时间格式的数据
    • 枚举类型
  • 数据批量处理

表管理

客户端把数据存储到数据库服务器上的过程

  • 第一步连接数据库
  • 第二步创建存储数据的库(存放表的目录)
  • 第三步创建存储数据的表(表就是存储数据的文件)
  • 第四步插入表记录(向文件里添加行)
  • 第五步断开连接

1. 库的操作

建库的基本命令 create database 库名(必须唯一性!!!)

[root@host50 ~]# mysql -uroot -pxxxx  //数据库管理员登陆
mysql> select user(); # 查看登陆的用户
+----------------+
| user()         |
+----------------+
| root@localhost |  用户@客户端地址 (在本机管理员登录)
+----------------+
1 row in set (0.00 sec)

mysql> show databases; # 查看已有的库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| tarena             |
+--------------------+
5 rows in set (0.00 sec)

mysql> select database(); # 查看当前所在的库
+------------+
| database() |
+------------+
| NULL       |  表示没有在任何一个库,此时所在的位置是/var/lib/mysql 目录
+------------+
1 row in set (0.00 sec)

mysql> create database db1 # 创建新库
Query OK, 1 row affected (0.00 sec)

mysql> show databases;  此时查看已有库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db1                |      刚创建的db1库 , 在数据库目录/var/lib/myql 下会有对应名称的db1目录
| mysql              |
| performance_schema |
| sys                |
| tarena             |
+--------------------+
6 rows in set (0.00 sec)

mysql> system ls -ld /var/lib/mysql/db1; # 使用system 命令 在登录状态下执行系统命令
drwxr-x--- 2 mysql mysql 20 97 13:52 /var/lib/mysql/db1

mysql>  create database if not exists  DB1; 加if not exists语句避免重名报错 
Query OK, 1 row affected, 1 warning (0.01 sec)

// 删除库 如果库里有表会一并被删除
mysql> drop database db1 ; 删除没有的库,会报错
mysql> drop database  if exists db1;  加if  exists 语句 避免报错

2. 表的操作

建表命令格式
create table 库名.表名(
表头名 数据结构 [约束条件],
表头名 数据结构 [约束条件]
);

表的创建与删除

使用建表范式衡量表创建的是否合理

  • 1NF 表头下的数据不能再拆分
  • 2NF 一张表里只存储一种数据信息,不能用一张存储多种数据信息
  • 3NF 表中表头的数据 不能依赖其他表头的数据
mysql> create table DB1.t1(姓名 char(10),班级 char(7)); # 在DB1库里创建t1表

mysql> desc DB1.t1; 查看表头信息
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| 姓名   | char(10) | YES  |     | NULL    |       |
| 班级   | char(7)  | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> drop table DB1.t1;  删除创建的表
Query OK, 0 rows affected (0.11 sec)

为了便于操作通常使用英文定义表头名和表名
mysql> create table DB1.t1 ( name  char(15) , class char(10));
Query OK, 0 rows affected (0.25 sec)
mysql> desc DB1.t1; 查看表头
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name  | char(15) | YES  |     | NULL    |       |
| class | char(10) | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)

表的修改

发现表建的不合理 可以修改表

  • 添加新表头 add
  • 删除表头 drop
  • 修改表头存储数据的数据类型 modify
  • 修改表头名 change
  • 修改表名 rename
    alter table 库名.表名 操作命令
mysql> alter table  DB1.t1 add school  char(20) ; 添加1个新字段school
mysql> desc DB1.t1;  默认新添加的字段追加在已有列的末尾
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| name   | char(15) | YES  |     | NULL    |       |
| class  | char(10) | YES  |     | NULL    |       |
| school | char(20) | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)

一起添加2个字段 分别是 mail 和  address 
mysql> alter table  DB1.t1 add mail char(50) , add address  char(80) ;
Query OK, 0 rows affected (0.37 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc DB1.t1;  查看新添加的表头,都在追加在末尾
+---------+----------+------+-----+---------+-------+
| Field   | Type     | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+-------+
| name    | char(15) | YES  |     | NULL    |       |
| class   | char(10) | YES  |     | NULL    |       |
| school  | char(20) | YES  |     | NULL    |       |
| mail    | char(50) | YES  |     | NULL    |       |
| address | char(80) | YES  |     | NULL    |       |
+---------+----------+------+-----+---------+-------+
5 rows in set (0.00 sec)

添加新表头number 在第1列的位置
mysql> alter table  DB1.t1 add number int first ;
Query OK, 0 rows affected (0.32 sec)
Records: 0  Duplicates: 0  Warnings: 0
添加新表头在city 放在name的后边
mysql> alter table DB1.t1 add  city  char(10) after name;
Query OK, 0 rows affected (0.42 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc DB1.t1;
+---------+----------+------+-----+---------+-------+
| Field   | Type     | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+-------+
| number  | int(11)  | YES  |     | NULL    |       |
| name    | char(15) | YES  |     | NULL    |       |
| city    | char(10) | YES  |     | NULL    |       |
| class   | char(10) | YES  |     | NULL    |       |
| school  | char(20) | YES  |     | NULL    |       |
| mail    | char(50) | YES  |     | NULL    |       |
| address | char(80) | YES  |     | NULL    |       |
+---------+----------+------+-----+---------+-------+
7 rows in set (0.00 sec)

mysql> alter table DB1.t1 drop city;  一次删除一个表头
Query OK, 0 rows affected (0.31 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table DB1.t1 drop class , drop school; 一起删除多个表头
Query OK, 0 rows affected (0.32 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc DB1.t1;  查看表头
+---------+----------+------+-----+---------+-------+
| Field   | Type     | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+-------+
| number  | int(11)  | YES  |     | NULL    |       |
| name    | char(15) | YES  |     | NULL    |       |
| mail    | char(50) | YES  |     | NULL    |       |
| address | char(80) | YES  |     | NULL    |       |
+---------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)

// 修改表头信息
mysql> alter table DB1.t1 modify number tinyint after name; 修改类型和位置
mysql> desc DB1.t1;  查看修改,把类型修改为tinyint  并移动name表头的后边
+---------+------------+------+-----+---------+-------+
| Field   | Type       | Null | Key | Default | Extra |
+---------+------------+------+-----+---------+-------+
| name    | char(15)   | YES  |     | NULL    |       |
| number  | tinyint(4) | YES  |     | NULL    |       |
| mail    | char(50)   | YES  |     | NULL    |       |
| address | char(80)   | YES  |     | NULL    |       |
+---------+------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> alter table DB1.t1 change address homedir char(80); 只修改表头名,类型原样抄下来
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc DB1.t1;查看修改,address 修改为了 homedir
+---------+------------+------+-----+---------+-------+
| Field   | Type       | Null | Key | Default | Extra |
+---------+------------+------+-----+---------+-------+
| name    | char(15)   | YES  |     | NULL    |       |
| number  | tinyint(4) | YES  |     | NULL    |       |
| mail    | char(50)   | YES  |     | NULL    |       |
| homedir | char(80)   | YES  |     | NULL    |       |
+---------+------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> alter table DB1.t1 change email vachar(60); 表头名和类型一起修改
Query OK, 0 rows affected (0.44 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> desc DB1.t1;查看修改表头名类型都变了
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name    | char(15)    | YES  |     | NULL    |       |
| number  | tinyint(4)  | YES  |     | NULL    |       |
| email   | varchar(60) | YES  |     | NULL    |       |
| homedir | char(80)    | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> alter table DB1.t1 rename stuinfo; 修改表名为 stuinfo
mysql> show tables; 查看表名 已经改变
+---------------+
| Tables_in_DB1 |
+---------------+
| stuinfo       |
+---------------+

复制表

  • 仅复制表结构
mysql> create table DB1.t2 select * from tarena.user where 1=2 ; 复制表结构及数据
  • 复制表结构和数据
mysql> create table DB1.t3 select * from tarena.user 
  • 仅复制表结构
create table 库.表名 like 库.表名
# 原来的key也会复制给新表 复制不了数据

3. 管理表记录

对表中存储的行做管理 操作 包括

  • 查询 : 查看表中的行 select
  • 插入 : 向表中添新的行 insert into
添加1行给所有表头赋值
mysql> insert into DB1.stuinfo  values ("yaya",1,"yaya@tedu.cn","beijing");
Query OK, 1 row affected (0.03 sec)

添加1行 ,给指定的表头赋值,
mysql> insert into DB1.stuinfo (name,homedir)values("nb","nb@tedu.cn");
Query OK, 1 row affected (0.04 sec)

没有赋值的表头number和email 没有数据 ,值是 null (空)
mysql> select  * from DB1.stuinfo;
+------+--------+--------------+-------------+
| name | number | email        | homedir     |
+------+--------+--------------+-------------+
| yaya |      1 | yaya@tedu.cn | beijing     |
| plj  |      8 | plj@163.com  | shanghai    |
| jing |      9 | jing@163.com | beijing     |
| nb   |   NULL | NULL         | nb@tedu.cn  |
| nb2  |   NULL | NULL         | nb2@tedu.cn |
| nb3  |   NULL | NULL         | nb3@tedu.cn |
+------+--------+--------------+-------------+
6 rows in set (0.00 sec)

使用set语句插入记录 
mysql> insert into  DB1.stuinfo set name="plj" , number=10;
  • 更新 : 修改行中列的数据 update
mysql> update DB1.stuniof set email="stu@163.com" where email is null;

不加条件批量修改
mysql> update DB1.stuinfo set homedir="beijing";
  • 删除 : 删除表中的行 delete
// 只删除与条件符合的行 
delete from DB1.stuinfo where name regexp '^nb';

//删除表里的所有行
delete from 库.表

也可用truncate table 库.表;
自增长列 truncate后从1开始 delete继续编号
truncate不能回滚 delete可以
效率略高于delete 

数据类型

包括 数值类型、字符类型、日期时间类型、枚举类型

数值类型

  • 整数类型
    在这里插入图片描述
  • 浮点类型
    在这里插入图片描述

字符类型(汉字或者英文字母)

  • char 定长 (固定长度) 1-255字节
  • varchar 变长 (长度不固定) 1-65535
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    默认不允许给表头存储中文 要存储中文 要指定使用的字符集
mysql> show create table db1.t3  # 查看字符集
ENGINE=InnoDB # 定义存储引擎
DEFAULT CHARSET =latin1 # 定义字符集

# 建表的时候指定使用的字符集
create table db1.t4(姓名 char(3),地址 varchar(10)) DEFAULT CHARSET utf8;

日期时间类型 表头存储与日期时间格式的数据

在这里插入图片描述

mysql> create table db1.t6(
姓名 char(4),
生日 date,
上课时间 time,
家庭聚会 datetime,
聚会地点 varchar(10)
) DEFAULT CHARSET utf8;

mysql> alter table db1.t6 add 出生年份 year after 姓名;

在这里插入图片描述
datetime 与 datestamp的区别

  • 第一个存储范围不一样(datetime存储范围大 timestamp范围小)
  • 存储数据的方式不一样 当未给timestamp字段值 自动以当前系统时间赋值,而datetime值为NULL

枚举类型

给表头赋值时,值必须在类型规定的范围内选择

  • 单选 enum (值1,值2,值3…)
  • 多选 set (值1,值2,值3…)
create table db1.t8(姓名 char(10) , 性别  enum("男","女","保密") ,
爱好 set("帅哥","金钱");

数据批量处理

一次性向表里存储很多数据 或 一次性把表里的数据都取出来
注意:数据导入或导出 存放数据的文件必须在mysql服务要求的目录下 叫检索目录

要知道数据库默认的检索目录
会修改数据库默认的检索目录
查看默认的检索目录

mysql > show variables like "secure_file_priv"

在这里插入图片描述
修改默认的检索目录

vim /etc/my.cnf
[mysql]
secure_file_priv=/myload # 手动添加
mkdir /myload
chown mysql /myload/ # 给权限
  • 数据导入(文件的内容一定要有规律)
    • 将/etc/passwd文件导入db1库的t3表里
    • 文件导入格式
    • mysql> load data infile “/检索目录/文件名” into table 库名.表名 fileds terminated by "文件中列的间隔符号 " lines terminated by “/n”
    • 数据导入的操作步骤:
        1. 创建存储数据的库
        1. 根据导入文件的内容 建表
        1. 把系统文件拷贝到检索目录
        1. 数据库管理执行导入数据的命令
        1. 查看数据
  • 数据导出 导出的不包括表头名 只有表里的行 导出的文件名 不需要事先创建 且具有唯一性
      1. select 字段名列表 from 库.表 where 条件 into outfile “/检索目录名/文件名”
      1. select 字段名列表 from 库.表 where 条件 into outfile “/检索目录名/文件名” fields terminated by “符号”
      • fields terminated by 指定导出的列在文件中的间隔符号。不止定 默认时一个tab的宽度
      1. select 字段名列表 from 库.表 where 条件 into outfile “/检索目录名/文件名” fields terminated by “符号” lines terminated by “符号”
      • lines terminated by 指定导出的行在文件中的间隔符号。不止定 默认一条记录就是一行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1350204.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java项目:104SpringBoot就业管理系统

博主主页:Java旅途 简介:分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 就业管理系统基于SpringBootMybatis开发,系统分为两种角色,分别是管理员和普通用户。 管理员功能如下: 就业信息管理…

一、医学影像云平台(AI赋能基层的最佳实践)

医学影像云平台,是一个目前影像业务中,各省市级领导比较重视的业务板块。因为,影像平台不但可以直接给原来没有PACS系统的1,2级医院提供PACS服务,还可以提供院间之间的业务,例如发送远程诊断,远程会诊业务&…

银行业绩数据监控大屏:驾驭金融海洋的航标

在金融领域,数据就是生命线。如何有效地监控和管理这些数据,确保银行业绩的稳健发展,已成为银行业内亟待解决的问题。而银行业绩数据监控大屏,正是解决这一问题的有力工具。 一、实时监控,把握业绩动态 银行业绩数据监…

前端八股文(CSS篇)二

目录 1.css中可继承与不可继承属性有哪些 2.link和import的区别 3.transition和animation的区别 4.margin和padding的使用场景 5.::before和:after的双冒号和单冒号有什么区别? 6.display:inline-block什么时候会显示间隙 7…

2024年【建筑焊工(建筑特殊工种)】考试试卷及建筑焊工(建筑特殊工种)考试总结

题库来源:安全生产模拟考试一点通公众号小程序 建筑焊工(建筑特殊工种)考试试卷根据新建筑焊工(建筑特殊工种)考试大纲要求,安全生产模拟考试一点通将建筑焊工(建筑特殊工种)模拟考试试题进行汇编,组成一套建筑焊工(建筑特殊工种)全真模拟考…

TinyEngine 服务端正式开源啦!!!

背景介绍 TinyEngine 低代码引擎介绍 随着企业对于低代码开发平台的需求日益增长,急需一个通用的解决方案来满足各种低代码平台的开发需求。正是在这种情况下,低代码引擎应运而生。它是一种通用的开发框架,通过对低代码平台系统常用的功能进…

JavaWeb——前端之AjaxVue

6. 前后端交互 6.1 Ajax(原生的) 概念: Asynchronous JavaScript And XML(异步的JavaScript和XML) 作用: 数据交互:通过Ajax可以给服务器发送请求,并获取服务器响应的数据异步交…

大数据时代快速获取数据方法,爬虫技术理论剖析与实战演练

一、教程描述 人工智能和机器学习,都离不开数据,若是没有数据,再好的算法,再好的模型,都没有用武之地。数据不仅是指现成的数据库,更加是指每天增加的海量互联网数据。本套教程将通过多个实战项目&#xf…

Spring Boot 3 集成 Jasypt详解

随着信息安全的日益受到重视,加密敏感数据在应用程序中变得越来越重要。Jasypt(Java Simplified Encryption)作为一个简化Java应用程序中数据加密的工具,为开发者提供了一种便捷而灵活的加密解决方案。本文将深入解析Jasypt的工作…

docker 部署教学版本

文章目录 一、docker使用场景及常用命令1)docker使用场景2)rocky8(centos8)安装 docker3)docker 常用命令补充常用命令 二、 单独部署每个镜像,部署spring 应用镜像推荐(2023-12-18)1、 安装使用 mysql1.1 …

STM32的HAL环境搭建

下载 https://www.st.com/en/development-tools/stm32cubemx.html 根据不同平台下载,windows下载window是即可。 安装 解压 下载的是zip文件,进行解压,得到一个exe文件。 安装 得到的exe文件,必须放到一个没有空格&#xff0…

[每周一更]-(第43期):Golang版本的升级历程

从1.13接触go语言开始更新我们公司内第一个Go项目,直至现在go版本已经发展到1.20(20230428),我们从go发版开始认识go语言,有利于我们更深入 了解这门语言,洞悉一些深层方式,加深我们学习的动力&…

nginx源码分析-4

这一章内容讲述nginx的模块化。 ngx_module_t:一个结构体,用于描述nginx中的各个模块,其中包括核心模块、HTTP模块、事件模块等。这个结构体包含了一些模块的关键信息和回调函数,以便nginx在运行时能够正确地加载和管理这些模块。…

3个值得推荐的WPF UI组件库

WPF介绍 WPF 是一个强大的桌面应用程序框架,用于构建具有丰富用户界面的 Windows 应用。它提供了灵活的布局、数据绑定、样式和模板、动画效果等功能,让开发者可以创建出吸引人且交互性强的应用程序。 HandyControl HandyControl是一套WPF控件库&…

c# 捕获全部线程的异常 试验

1.概要 捕获全部线程的异常 试验,最终结果task的异常没有找到捕获方法 2.代码 2.1.试验1 2.1.1 试验结果 2.2 代码 2.2.1主程序代码 using NLog; using System; using System.Threading; using System.Windows.Forms;namespace 异常监控 {static class Program…

es简单入门

星光下的赶路人star的个人主页 努力努力再努力 文章目录 1、简介2、使用场景3、基本知识4、中文文档和官网链接5、增删改查(php代码)6、基本查询7、HTTP操作7.1 索引操作7.1.1 创建索引 7.2 文档操作7.2.1 创建文档7.2.2 查看文档7.2.3 修改文档7.2.4 修…

机器学习(二) -- 数据预处理(1)

系列文章目录 机器学习(一) -- 概述 机器学习(二) -- 数据预处理(1-3) 未完待续…… 目录 系列文章目录 前言 一、概述 二、数据获取 三、数据分布与趋势探查 1、散点图 2、折线图 3、频率分布直…

Weblogic安全漫谈(一)

前言 frohoff在2015年初发现commons-collections的反序列化利用链并发布了ysoserial工具[1]。9个月后,breenmachine对众多知名Java中间件的利用文章[2]使Java反序列化漏洞变得广为人知,Weblogic中首当其冲的就是大家多少都有点耳熟的T3协议反序列化。本…

算法训练营Day34(贪心算法)

1005.K次取反后最大化的数组和 1005. K 次取反后最大化的数组和 - 力扣&#xff08;LeetCode&#xff09; 秒了 class Solution {public int largestSumAfterKNegations(int[] nums, int k) {Arrays.sort(nums);// -4 -3 -2 -1 5//-2 -2 0 2 5int last -1;for(int i 0;i<…

VS Code 远程连接云机器训练配置

VS Code 远程连接云机器 Visual Studio Code&#xff08;以下简称 VS Code&#xff09;是一个由微软开发的代码编辑器。VS Code 支持代码补全、代码片段、代码重构、Git 版本控制等功能。 安装 VSCode步骤简单且网上有很多教程&#xff0c;这里不过多重复了。 VS Code 现已支…