datawhale9月组队学习task01环境搭建,初始数据库

Posted 临风而眠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了datawhale9月组队学习task01环境搭建,初始数据库相关的知识,希望对你有一定的参考价值。

Datawhale9月组队学习 task01环境搭建,初始数据库

​ datawhaleSQL教程连接:https://github.com/datawhalechina/wonderful-sql

一.环境搭建

1.mysql 8.0的安装

2. 连接 MySQL 并执行 SQL 查询

心态第一次炸裂

其实已经有navicat了,但是看到教程里推荐的jetbrain公司的datagrip,就想试一试…

其实已经用学生邮箱认证过jetbrain的优惠了,但在jetbrain网站的一个页面发现可以申请GitHub学生开发者包…

然后就这么浪费了一天…

申请那个开发者包

我试了试单独上传学生证,录取通知书,学信网学籍证明,都没通过

最后我想了想,把几张照片并在一起…

还没通过,心态崩了…

安装的是toolbox,在那里面下载的datagrip是最新版…

然后就和网上大部分教程所用的datagrip版本不一样…

还是先去命令行吧

心态第二次炸裂

  • 凭着印象,此电脑->管理->服务和应用程序->服务

  • 然后打开命令行开始瞎操作了😭

    net start mysql
    

    显示:

    发生系统错误5。
    
    拒绝访问。
    

    然后搜到了解决方案

    以管理员方式运行,再输入那个

    发现自己真的傻了…😅…不是已经手动在此电脑那里启动过了吗

  • 下一步

    乱搜一通教程,然后无数次怀疑电脑坏了…

    而且每次自己密码输入的都是对的!

    为了验证自己密码是不是错了,还去navicat连接了一波,能连上啊!

    然后突然发现…少了 -h localhost

    mysql -h localhost -u root -p
    

    😅😅😅…今天脑子真的是😅

  • 试试基本的命令

进入正题

555…前面的还算是连上了

用datagrip连接

先是折腾了很久,然后按照这个教程稀里糊涂的连上了…

忘了记录踩坑记录😓😓😓

二.初识数据库

​ 其实也不算初始数据库,之前学了mongodb非关系型数据库

  • 数据库是将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合。
    • 该数据集合称为数据库(Database,DB)
    • 用来管理数据库的计算机系统称为数据库管理系统(Database Management System,DBMS)
  • 本次要学到的 RDBMS 指关系型数据库管理系统,全称 Relational Database Management System
    • RDBMS 是 SQL 的基础
    • RDBMS 中的数据存储在被称为表的数据库对象中。
    • 表是相关的数据项的集合,它由列和行组成。

1.初识SQL

SQL简介

  • SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统(RDBMS)。 SQL 的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制

SQL基本书写规则

  • SQL语句要以分号结尾

  • SQL大小写不敏感

    • win 系统默认不区分表名及字段名的大小写(linux/mac区分)

2.重要的SQL语句

①创建数据库(CREATE DATABASE)

CREATE DATABASE shop;

②创建表(CREATE TABLE)

语法

  • 创建商品表:

    CREATE TABLE product
    (product_id CHAR(4) NOT NULL,
    product_name VARCHAR(100) NOT NULL,
    product_type VARCHAR(32) NOT NULL,
    sale_price INTEGER,
    purchase_price INTEGER,
    regist_date DATE,
    PRIMARY KEY (product_id));
    

命名规则
  • 只能使用半角英文字母、数字、下划线(_)作为数据库、表和列的名称

  • 名称必须以半角英文字母开头

数据类型
  • 数据库创建的表的每一列都需要指定数据类型 ,每一列不能存储与该列指定数据类型不同的数据
  • 基本数据类型
    • INTERGER
      • 存储整数
    • CHAR
      • 存储定长字符串
        • 列中存储的字符串长度达不到最大长度的时候,使用半角空格进行补足,由于会浪费存储空间,所以一般不使用
    • VCHAR
      • 存储可变长度字符串
    • DATE
      • 存储日期(年月日)
约束设置
  • 对列中存储的数据进行限制或者追加条件的功能
    • NOT NULL 非空约束
      • 该列必须输入数据
    • PRIMARY KEY 主键约束
      • 该列是唯一值,可以通过该列取出特定行的数据

③表的更新与删除

  • 删除表的语法

    DROP TABLE <表名>
    
  • 删除product表

    • 先显示一下

    • 删除

      DROP TABLE product;
      

  • 添加列的 ALTER TABLE 语句

    ALTER TABLE < 表名 > ADD COLUMN < 列的定义 >;
    
    • 添加一列可以存储100位的可变长字符串的 product_name_pinyin 列
    ALTER TABLE product ADD COLUMN product_name_pinyin VARCHAR(100);
    
    • 额,先把刚刚删除的product表恢复回来

  • 删除列的ALTER TABLE 语句

    ALTER TABLE < 表名 > DROP COLUMN < 列名 >;
    
    • 删除product_name_pinyin列
    ALTER TABLE product DROP COLUMN product_name_pinyin;
    

​ ALTER TABLE 语句和 DROP TABLE 语句一样,执行之后无法恢复。误添的列可以通过 ALTER TABLE 语句删除,或者将表全部删除之后重新再创建

  • 清空表的内容

    TRUNCATE TABLE <表名>;
    

    • 相比drop / deletetruncate用来清除数据时,速度最快
  • 数据更新

    • 基本语法

    • 使用 update 时要注意添加 where 条件,否则将会将所有的行按照语句修改

    • 用UPDATE也可以将列更新为NULL

      • 俗称NULL清空
      • 只需要将赋值表达式右边的值直接写为 NULL 即可

      ​ 和 INSERT 语句一样, UPDATE 语句也可以将 NULL 作为一个值来使用。 但是,只有未设置 NOT NULL 约束和主键约束的列才可以清空为NULL。如果将设置了上述约束的列更新为 NULL,就会出错,这点与INSERT 语句相同。

  • 多列更新

    • UPDATE 语句的 SET 子句支持同时将多个列作为更新对象

      • 如果没有像这样合并起来写,就会略显繁琐

④向表中插入数据(INSERT)

  • 先创建一个叫productins的表作为例子

    CREATE TABLE productins
    (product_id    CHAR(4)      NOT NULL,
    product_name   VARCHAR(100) NOT NULL,
    product_type   VARCHAR(32)  NOT NULL,
    sale_price     INTEGER      DEFAULT 0,
    purchase_price INTEGER ,
    regist_date    DATE ,
    PRIMARY KEY (product_id)); 
    

    ​ 这里的DEFAULT是初始默认值

  • 基本语法

    INSERT INTO <表名> (1,2,3, ……) VALUES (1,2,3, ……);  
    
  • 对表进行全列 INSERT 时,可以省略表名后的列清单。这时 VALUES子句的值会默认按照从左到右的顺序赋给每一列

    -- 包含列清单
    INSERT INTO productins (product_id, product_name, product_type, sale_price, purchase_price, regist_date) VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');
    -- 省略列清单
    INSERT INTO productins VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');  
    

    • 注意是INSERT INTO 不是 INFO
    • 注意约束设置PRIMARY KEY 的不能重复
  • 原则上,执行一次 INSERT 语句会插入一行数据。插入多行时,通常需要循环执行相应次数的 INSERT 语句。其实很多 RDBMS 都支持一次插入多行数据

    -- 多行INSERT ( DB2、SQL、SQL Server、 PostgreSQL 和 MySQL多行插入)
    INSERT INTO productins VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11'),
                                  ('0003', '运动T恤', '衣服', 4000, 2800, NULL),
    					          ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');
    

    ​ 等价于:

  • 查看表

    SELECT * FROM 表名;
    

  • INSERT 语句中想给某一列赋予 NULL 值时,可以直接在 VALUES子句的值清单中写入 NULL。想要插入 NULL 的列一定不能设置 NOT NULL 约束

    INSERT INTO productins (product_id, product_name, product_type, sale_price, purchase_price, regist_date) VALUES ('0010', '叉子', '厨房用具', 500, NULL, '2009-09-20');  
    

    • 看看表格

  • 可以从其他表复制数据

    • 比如把productins的数据复制到product里面

      INSERT INTO product (product_id,product_name,product_type,sale_price,regist_date)
      SELECT product_id, product_name,product_type,sale_price,regist_date
      FROM productins;
      

      • 这时product就不是空表了

三.练习题

1.1

CREATE TABLE Addressbook
(regist_no INTEGER  NOT NULL,
name VARCHAR(128) NOT NULL,
address VARCHAR(256) NOT NULL,
tel_no CHAR(10),
mail_address CHAR(20),
PRIMARY KEY (regist_no));

1.2

ALTER TABLE Addressbook ADD COLUMN postal_code CHAR(8) NOT NULL;

  • 可以用DESC查看一个表的结构

1.3

DROP TABLE Addressbook;

1.4

暂时只想了一个最笨的方法…重新添加表


😔😔😔

以上是关于datawhale9月组队学习task01环境搭建,初始数据库的主要内容,如果未能解决你的问题,请参考以下文章

datawhale9月组队学习task03复杂查询

datawhale9月组队学习task04集合运算

datawhale9月组队学习task05SQL高级操作

datawhale9月组队学习task06 SQL秋招题

Datawhale7月组队学习task5模型建立和评估

Datawhale 吃瓜教程组队学习 task01