2 - 表结构 | MySQL键值

表结构 | 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.mfbz.cn/a/284458.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis7.2.3(Windows版本)

1、解压   2、设置密码 (1) 右击编辑redis.conf文件:  (2) 设置密码。  3、测试密码是否添加成功  如上图所示,即为成功。 4、设置…

Linux学习第49天:Linux块设备驱动实验(一):Linux三大驱动之一

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 本章学习Linux三大驱动之一的块设备驱动,主要应用场景为存储设备。 本章的思维导图如下: 一、什么是块设备 块设备---存储设备 以块为单位…

张量操作与线性回归

一、张量的操作:拼接、切分、索引和变换 (1)张量拼接与切分 1.1 torch.cat() 功能:将张量按维度dim进行拼接 • tensors: 张量序列 • dim : 要拼接的维度 torch.cat(tensors, dim0, outNone)函数用于沿着指定维度dim将多个张量…

数据结构模拟实现LinkedList双向不循环链表

目录 一、双向不循环链表的概念 二、链表的接口 三、链表的方法实现 (1)display方法 (2)size方法 (3)contains方法 (4)addFirst方法 (5)addLast方法 …

Java API 操作Docker浅谈

背景: 使用com.github.docker-java库可以很方便地在Java中操作Docker。下面是一个详细的教程,包括创建镜像、创建容器、启动容器、停止容器和删除容器的步骤以及每一步的说明。 前提: 首先,在你的Java项目中添加com.github.doc…

三、Mysql安全性操作[用户创建、权限分配]

一、用户 1.创建用户 CREATE USER test1localhost identified BY test1;2.删除用户 DROP USER test2localhost;二、权限分配 1.查询用户权限 SHOW GRANTS FOR test1localhost;2.分配权限 # 分配用户所有权限在for_end_test库的test1表 GRANT ALL PRIVILEGES ON for_end_t…

五分钟学完朴素贝叶斯算法

下面再描述一个详细的案例 个人感觉如下链接讲的比较详细 图解机器学习 | 朴素贝叶斯算法详解 - 知乎

2.3物理层下面的传输媒体

目录 2.3物理层下面的传输媒体2.3.1导引型传输媒体1.双绞线2.同轴电缆3.光纤 2.3.2非导引型传输媒体无线电微波通信 2.3物理层下面的传输媒体 传输媒体是数据传输系统中在发送器和接收器之间的物理通路 两大类: 导引型传输媒体:电磁波被导引沿着固体媒体…

新产品推广选品牌外包广州迅腾文化传播多渠道传播能力

在当今激烈的市场竞争中,新产品推广已成为企业发展的关键。选择具备多渠道传播能力的品牌外包服务提供商,有助于快速提升品牌知名度和市场占有率。作为行业领先者,迅腾文化凭借卓越的多渠道传播能力,成为企业新产品推广的理想合作…

国家开放大学形成性考核 统一考试 资料参考

试卷代号:11141 工程经济与管理 参考试题 一、单项选择题(每题2分,共20分) 1.资金的时间价值( )。 A.现在拥有的资金在将来投资时所能获得的利益 B.现在拥有的资金在将来消费时所付出的福利损失 C.…

saas 多租户系统数据隔离方案

关注WX公众号: commindtech77, 获得数据资产相关白皮书下载地址 1. 回复关键字:数据资源入表白皮书 下载 《2023数据资源入表白皮书》 2. 回复关键字:光大银行 下载 光大银行-《商业银行数据资产会计核算研究报告》 3. 回复关键字…

FreeRTOS学习第5篇--任务优先级

目录 FreeRTOS学习第5篇--任务优先级任务优先级设计实验任务一StartDefaultTask任务相关代码片段任务二ColorLED_Test任务相关代码片段任务三IRReceiver_Task相关代码片段实验现象本文中使用的测试工程 FreeRTOS学习第5篇–任务优先级 本文目标:学习与使用FreeRTOS…

关键字:throw关键字

在 Java 中,throw关键字用于抛出异常。当程序执行过程中发生意外情况,如错误的输入、资源不足、错误的逻辑等,导致程序无法正常执行下去时,可以使用throw关键字抛出异常。 以下是使用throw关键字的一些示例: 抛出异常…

C++程序编译

GCC编译器 文章目录 GCC编译器 源文件 为 Main.cpp 注意cpp文件 一定要用g命令 否则没办法执行 预处理(Pre-Processing):首先会经过预处理器将程序中的预编译指令进行处理,然后把源文件中的注释这些没用的东西都给扬了。 g -E Mai…

[线代]不挂科猴博士

行列式的性质 行列式的计算及应用 矩阵的运算上(加减,相乘,取行列式) 矩阵的运算下(转置,逆,秩) 向量组与线性空间 解方程组

打不开的U盘还能恢复吗?U盘打不开恢复方法

U盘打不开是用户在使用过程中经常遇到的问题,通常是由于驱动器问题、文件系统损坏、U盘硬件故障等原因引起的。本文将详细分析这些原因,并提供相应的解决方法,帮助用户快速解决U盘打不开的问题。 当U盘打不开时,想要保留其中的文件…

学习使用wps将ppt的页面保存为图片的方法

学习使用wps将ppt的页面保存为图片的方法 方案 方案 1、打开ppt,点击文件,另存为,选择文件类型为图片格式,jpg或者png,如下图: 2、点击每张幻灯片

Codeforces Round 900 (Div. 3)(A-F)

比赛链接 : Dashboard - Codeforces Round 900 (Div. 3) - Codeforces A. How Much Does Daytona Cost? 题面 : 思路 : 在序列中只要找到k&#xff0c;就返回true ; 代码 : #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)…

将PPT4页并排成1页

将PPT4页并排成1页打印 解决方法: 方法一 在打印时选择&#xff1a; 打开 PPT&#xff0c;点击文件选项点击打印点击整页幻灯片点击4张水平放置的幻灯平页面就会显示4张PPT显示在一张纸上 方法二 另存为PDF&#xff1a; 打开电脑上的目标PPT文件&#xff0c;点击文件点击…

数据结构期末复习(fengkao课堂)

学习数据结构时&#xff0c;以下建议可能对您有所帮助&#xff1a; 理解基本概念&#xff1a;首先&#xff0c;确保您理解数据结构的基本概念&#xff0c;例如数组、链表、栈、队列、树、图等。了解它们的定义、特点和基本操作。 学习时间复杂度和空间复杂度&#xff1a;了解如…