搞数据分析肯定是要学习下数据库的;
本文数据下载可以后台联系入群
约束条件
规定列的数值类型、长度、列中的值是否可以为空,是否可以重复,值的可选范围等
主键
(非空、唯一)规定行索引,类似pandas中的index,可以是一列或者多列,但是必须不为NULL且不能有重复值
主键在MySQL中的作用至关重要,主要体现在以下几个方面:
- 唯一标识: 主键的值能够唯一地标识表中的每一行记录,确保不会有两行数据拥有相同的主键值。这有助于维护数据的唯一性和区分性。
- 实体完整性: 主键约束强制执行了表的实体完整性,即确保表中没有重复的记录,且主键字段不允许为空(NULL)。这是数据库设计中的一个基本原则。
- 索引功能: 主键自动成为表上的索引,这意味着通过主键查询数据将非常高效,尤其是在大数据量的情况下,能够显著加快查询速度。
- 外键关联: 主键常被用作其他表中外键的参照,以此来建立表与表之间的联系。这种关系可以表示一对多或多对多的关系,是关系型数据库中数据组织和数据间关系表达的基础。
- 数据修改与删除: 主键使得对特定记录的更新(UPDATE)和删除(DELETE)操作更为便捷和精确,因为可以通过直接引用主键值来定位到需要操作的行,而无需扫描全表。
- 自动增长: 在MySQL中,主键还可以被定义为AUTO_INCREMENT,这样每当插入新记录时,主键字段的值会自动递增,简化了数据插入过程,避免了手动指定唯一标识的麻烦。
综上所述,主键在MySQL中不仅是数据组织的核心,也是保证数据一致性和有效管理数据库的关键机制。
唯一建
可以是一列或者多列,可以为NULL,但是不能有重复值唯一键(Unique Key)在MySQL中的作用主要包括以下几点:
- 确保数据唯一性: 唯一键约束确保了表中某一列或多个列的组合值是唯一的,防止插入重复的值。这有助于维护数据的准确性和完整性,避免冗余数据。
- 辅助索引功能: 类似于主键,唯一键也会在数据库中创建一个索引。这个索引可以加速对应列的查询操作,特别是对于等值查询和范围查询,能够显著提高效率。
- 非空限制可选: 与主键不同,唯一键所约束的列可以包含NULL值,除非明确指定列不可为NULL。这意味着,即使值为空,每行在唯一性约束的列上也最多只能有一个NULL值。
- 支持多列组合: 唯一键可以定义在多个列上,用来保证这些列值的组合是唯一的。这对于那些单个列无法唯一标识记录,但几个列组合起来可以的情况非常有用。
- 不一定是主键: 虽然主键本身具有唯一性,但并非所有唯一键都是主键。表可以有多个唯一键,但只能有一个主键。因此,唯一键提供了更灵活的数据完整性控制方式。
- 不自动增长: 与主键的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(4) NOT 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多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。