MySQL03: 创建表格与导入表格

搞数据分析肯定是要学习下数据库的;

本文数据下载可以后台联系入群

约束条件

规定列的数值类型、长度、列中的值是否可以为空,是否可以重复,值的可选范围等

主键

(非空、唯一)规定行索引,类似pandas中的index,可以是一列或者多列,但是必须不为NULL且不能有重复值 主键在MySQL中的作用至关重要,主要体现在以下几个方面:

  1. 唯一标识: 主键的值能够唯一地标识表中的每一行记录,确保不会有两行数据拥有相同的主键值。这有助于维护数据的唯一性和区分性。
  2. 实体完整性: 主键约束强制执行了表的实体完整性,即确保表中没有重复的记录,且主键字段不允许为空(NULL)。这是数据库设计中的一个基本原则。
  3. 索引功能: 主键自动成为表上的索引,这意味着通过主键查询数据将非常高效,尤其是在大数据量的情况下,能够显著加快查询速度。
  4. 外键关联: 主键常被用作其他表中外键的参照,以此来建立表与表之间的联系。这种关系可以表示一对多或多对多的关系,是关系型数据库中数据组织和数据间关系表达的基础。
  5. 数据修改与删除: 主键使得对特定记录的更新(UPDATE)和删除(DELETE)操作更为便捷和精确,因为可以通过直接引用主键值来定位到需要操作的行,而无需扫描全表。
  6. 自动增长: 在MySQL中,主键还可以被定义为AUTO_INCREMENT,这样每当插入新记录时,主键字段的值会自动递增,简化了数据插入过程,避免了手动指定唯一标识的麻烦。

综上所述,主键在MySQL中不仅是数据组织的核心,也是保证数据一致性和有效管理数据库的关键机制。

唯一建

可以是一列或者多列,可以为NULL,但是不能有重复值唯一键(Unique Key)在MySQL中的作用主要包括以下几点:

  1. 确保数据唯一性: 唯一键约束确保了表中某一列或多个列的组合值是唯一的,防止插入重复的值。这有助于维护数据的准确性和完整性,避免冗余数据。
  2. 辅助索引功能: 类似于主键,唯一键也会在数据库中创建一个索引。这个索引可以加速对应列的查询操作,特别是对于等值查询和范围查询,能够显著提高效率。
  3. 非空限制可选: 与主键不同,唯一键所约束的列可以包含NULL值,除非明确指定列不可为NULL。这意味着,即使值为空,每行在唯一性约束的列上也最多只能有一个NULL值。
  4. 支持多列组合: 唯一键可以定义在多个列上,用来保证这些列值的组合是唯一的。这对于那些单个列无法唯一标识记录,但几个列组合起来可以的情况非常有用。
  5. 不一定是主键: 虽然主键本身具有唯一性,但并非所有唯一键都是主键。表可以有多个唯一键,但只能有一个主键。因此,唯一键提供了更灵活的数据完整性控制方式。
  6. 不自动增长: 与主键的AUTO_INCREMENT属性不同,唯一键不会自动为新插入的行生成唯一的值。如果需要类似的功能,需要通过应用程序逻辑或其他机制实现。

综上,唯一键在MySQL中扮演着维持数据唯一性、提升查询性能以及提供灵活性的角色,是数据库设计中实现业务规则和优化性能的重要工具。

创建表格

use s50;
create table emp(
    id char(3),
    name varchar(20),
    sex enum("Female","Male"),
    peoplecount int not null-- 非空
    primary key(name,id-- 主键
    );
-- 查看表是否创建成功 
show tables;
-- 删除数据表
drop table emp;
CREATE TABLE example(
  id INT PRIMARY KEY AUTO_INCREMENT, -- 整数型自增主键
  name VARCHAR(4NOT NULL-- 非空字符串字段
  math INT DEFAULT 0-- 默认值为0
  minmax FLOAT UNIQUE -- 唯一
);

手动插入值

Insert into example(name,math,minmax) values ("N1",150,8.8),("N2",149,5.2);
select * from example;

导入表格

由于8.0以上版本安全性提高,如果想要将本地数据导入到MySQL数据库,需要将文件放到安全路径下;

Ubuntu自动设置了安全目录,而且只有root才能把有进入权限;

Mac和Windows需要自己设置安全目录,不需要root就能进去目录;

查看安全路径位置为

show variables like '%secure%';
+--------------------------+-----------------------+
| Variable_name            | Value                 |
+--------------------------+-----------------------+
| require_secure_transport | OFF                   |
| secure_file_priv         | /var/lib/mysql-files/ |
+--------------------------+-----------------------+

把data目录下的文件全部挪到安全目录下

mv ~/data/* /var/lib/mysql-files/

在s50数据库中新建一个sec_buildings空白表格,规定每列的数据类型和名称

注意:列名顺序要与表格顺序一致,不会按照名字自动匹配; 导入sec_buildings文件

use s50;
CREATE TABLE sec_buildings (
    fname VARCHAR(20),
    ftype VARCHAR(10),
    size DECIMAL(10,2),
    region VARCHAR(10),
    floor VARCHAR(20),
    direction VARCHAR(20),
    tot_amt INT,
    built_date VARCHAR(20),
    price_unit INT
);
LOAD DATA INFILE "/var/lib/mysql-files/sec_buildings.txt"
INTO TABLE sec_buildings
FIELDS TERMINATED BY ',' #指定字段之间的分隔符为英文状态下的","
LINES TERMINATED BY '\n' #指定记录航之间的分隔符为换行符"\n"
IGNORE 1 lines# 由于原始数据中第一行为表头,所以数据读取的时候需要忽略第一行

查看导入的数据集

select * from sec_buildings
limit 5

导入monthly_Indicator文件

CREATE TABLE monthly_Indicator(
    city CHAR(4),
    dates DATE,
    AQI SMALLINT,
    ranges VARCHAR(10),
    levels VARCHAR(10),
    PM2_5 DECIMAL(4,1),
    PM10 DECIMAL(4,1),
    SO2 DECIMAL(4,1),
    CO DECIMAL(6,2),
    NO2 DECIMAL(4,1),
    O3 DECIMAL(5,1),
    ranks smallint
);
LOAD DATA INFILE "/var/lib/mysql-files/monthly_Indicator.csv"
INTO TABLE monthly_Indicator
FIELDS TERMINATED BY ',' -- 指定字段之间的分隔符为英文状态下的","
LINES TERMINATED BY '\n' -- 指定记录航之间的分隔符为换行符"\n"
IGNORE 1 lines-- 由于原始数据中第一行为表头,所以数据读取的时候需要忽略第一行

导入monthly_Indicator文件

CREATE TABLE goods_orders(
    Uid int,
    Birthday date,
    Order_Date datetime,
    Order_Id bigint,
    Pay_Type tinyint,
    Pay_Amt double,
    Is_Discount tinyint
);

LOAD DATA INFILE "/var/lib/mysql-files/goods_orders.csv"
INTO TABLE goods_orders
FIELDS TERMINATED BY ',' -- 指定字段之间的分隔符为英文状态下的","
LINES TERMINATED BY '\n' -- 指定记录航之间的分隔符为换行符"\n"
IGNORE 1 lines-- 由于原始数据中第一行为表头,所以数据读取的时候需要忽略第一行

本文由 mdnice 多平台发布

  • 14
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值