Datawhale SQL TASK1

摘要:选学了MySQL Workbench进行SQL连接。在创建表格的时候采用的是小括号,使用VARCHAR或者CHAR的时候,后面跟的也是小括号,不要跟C语言搞混了。name在MySQL中颜色不对,不建议使用,不过结果好像没问题。插入列是ALTER TABLE,插入数据是INSERT INTO,INSERT INTO 是VALUES ,复数,删除表格的命令是DROP TABLE。

第0章 环境搭建

1.MySQL环境搭建

  • 如何安装MySQL,http://datawhale.club/t/topic/478

  • 如何连接MySQL,菜单->控制面板->管理工具->服务中查找开启或者关闭MySQL服务

    • 找不到控制面板,在搜索框搜索
    • 控制面板,点击以大图标形式显示
    • 开启以后,MySQL server以后台服务的形式在电脑上运行,如果想要进行查询,需要使用命令行工具或者应用程序

2.连接MySQL并执行SQL查询

2.1命令行方式(知道即可,不采用此种方式)

  1. 是最基本的方式,点击下方工具

    image-20210111151730943

  2. 红框处是版本号

    image-20210111151948132

  3. 缺点:查找与数据导出不方便,语句修改与调试也不方便、

2.2 MySQL workbench

  1. 连接数据库
    1. CTRL+U 或者 点击选项卡:Database—> Connect to Database

image-20210111154207761

  1. 养成好习惯,表名用小写字母。MySQL服务器对大小写敏感,而Windows对大小写不敏感,有点乱,表名用小写字母。

第1章 初识数据库

1.1 初识数据库

  1. 名词解释

    1. 数据库(Database,DB)
    2. 数据库管理系统(Database Management System,DBMS)
  2. DBMS的种类,DBMS主要通过数据的保存格式(数据库的种类)进行分类,主要有5种类型:

    1. 层次数据库(Hierarchical Database,HDB)

    2. 关系数据库(Relational Database,RDB)

      1. Oracle Database:甲骨文公司的RDBMS
      2. SQL Server:微软公司的RDBMS
      3. DB2:IBM公司的RDBMS
      4. PostgreSQL:开源的RDBMS
      5. MySQL:开源的RDBMS
      • 注:以上是具有代表性的RDBMS,其特点是由行和列组成的 二维表来管理数据,这种类型的DBMS称为关系数据库管理系统。
    3. 面向对象数据库(Object Oriented Database,OODB)

    4. XML数据库(XML Database,XMLDB)

    5. 键值存储系统(Key-Value Store,KVS),举例,MongoDB

  3. 本次学习的是关系型数据库RDBMS,RDBMS的常见系统结构是客户端/服务器类型(C/S类型)

    image-20220516142408768

1.2 初识SQL

  1. 在数据库中,行称为记录列称为字段,行列交汇的地方称为单元格

    image-20220516142539877

  2. SQL语句可以分为以下3类(实际操作中90%属于DML)

    1. DDL(Data Definition Language)数据定义语言,用来创建,修改,删除
      1. CREATE:创建数据库和表等对象
      2. DROP:删除数据库和表等对象
      3. ALTER:修改数据库和表等对象
    2. DML(Data Manipulation Language)数据操控语言,查询,修改,删除
      1. SELECT:查询数据
      2. INSERT:插入数据
      3. UPDATE:更新数据
      4. DELETE:删除数据
    3. DCL(Data Control Language)数据控制语言,用来确认或者取消对于数据库中的数据进行的变更。还可以对用户权限进行设定。
      1. COMMIT:确认变更
      2. ROLLBACK:取消变更
      3. GRANT:赋予用户操作权限
      4. REVOKE:取消用户操作权限
  3. SQL的基本书写规则

    1. 以分号(;)结尾,跟C语言类似
    2. SQL不区分关键字的大小写,但是插入到表中的数据是区分大小写的
    3. win不区分大小写,Linux和mac系统区分大小写
    4. 常数的书写方式是固定的
      1. “abc”
      2. “1234”
      3. “2010-01-26”,日期采用短横线连接
      4. “10/01/26"
      5. “26 Jan 2010”
      6. 单词需要用半角空格或者换行来分隔
        1. 不能使用全角空格来分隔
  4. 建立数据库

    1. 数据库的建立

      1. CREATE DATABASE shop;
        
    2. 表的建立,注释采用“#”、 / ∗ ∗ / /**/ //、–空格

      CREATE TABLE product					/*表开头不用分号*/
      (
      product_id CHAR(4) NOT NULL, 			#列名1 数据类型 约束,
      product_name VARCHAR(100) NOT NULL,		/*列名2 数据类型 约束,*/
      PRIMARY KEY(product_id) 				/*表的约束1,表的约束2,表的约束3);   
          									PRIMARY KEY表示主键约束,该列数值唯一*/
      );										/*表格结束后圆括号后要有分号*/
      
  5. 命名规则
    ​ 数字,字母,下划线作为数据库 表和列的名称;只能是字母开头

  6. 数据类型

    1. INTEGER,整数型
    2. CHAR,定长字符串,没达到最大的时候,会采用半角空格进行补足,由于会浪费存储空间,所以一般不用
    3. VARCHAR,存储可变长度字符串,即使达不到长度,也不会使用半角空格填补
    4. DATE,日期型
  7. 约束的设置

    1. NOT NULL,非空约束,必须填入数值
    2. PRIMARY KEY,主键约束,代表该列是唯一值,可以用来定位数据
  8. 表的删除和更新(ALTER与DROP操作不可恢复)

    1. 删除表的语法(无法恢复)

      1. DROP TABLE 表名,DROP TABLE product;
      2. 删除的表无法恢复,只能重新插入
    2. 添加列的语句

      1. ALTER TABLE 表名 ADD COLUMN 列定义
      2. ALTER TABLE product ADD COLUMN product_name_pinyin VARCHAR(100);
    3. 删除列的语句(无法恢复)

      1. ALTER TABLE 表名 DROP COLUMN 列名;
      2. ALTER TABLE product DROP COLUMN product_name_pinyin ;
    4. 删除表中特定行

      1. DELETE FROM product WHERE COLUNMN_NAME="XXX";
        -- 一定要有WHERE,否则整张表都删除了
        
  9. 清空表内容与更新

    1. 清空表格

      1. TRUNCATE TABLE TABLE_NAME;
        1. TRUNCATE比DELETE、DROP更快
    2. 更新

      1. UPDATE table_name
        	SET column_name1=表达式1,
        		column_name2=表达式2;  	-- 这个分号只有没有WHERE的情况下是加的,有WHERE没分号
        	WHERE 条件;				 	--可选参数非常重要,如果没有就是对所有进行更新
        	ORDER BY子句;					--可选
        	LIMIT 子句;					--可选
        -- UPDATE 一定要配合WHERE,否则就是操作所有的语句	
        -- 修改所有的注册时间
        UPDATE product
        	SET regist_date="2020-10-10";
        	
        UPDATE product
        	SET regist_date="2020-10-10"	
        	WHERE product_type="厨房用具";
        	-- 有where 的情况下,在where后面加分号即可,不要在SET后面加分号,分号是句尾
        	
        -- 合并后的写法
        UPDATE product 				-- SET 可以同时写两列(都不带分号,分号在WHERE后面写)
           SET sale_price = sale_price * 10,
               purchase_price = purchase_price / 2
         WHERE product_type = '厨房用具';  
        	
        
      2. image-20220516154110643

      3. NULL清空

        1. UPDATE product -- 只可以清空没有约束为NOT NULL的,以及主键的约束列
          	SET register_date=NULL
          	WHERE product_id="008";
          
  10. 插入数据

    1. INSERT INTO TBALE_NAME (COLUMN1 COLUMN2) VALUES (VALUE1,VALUE2)

    2. 如果插入一行的话,可以省略列名,不可用省略表名,是VALUES,复数

    3. INSERT INTO 是插入数据的,插入一列是ALTER TABLE table_name ADD COLUMN 类型 限制;

    4. 执行一次INSERT会插入一条语句,很多支持一次插入多行

      1. INSERT INTO product VALUES (1,2,3)
        							(4,5,6)
        -- ORACLE
        INSERT ALL INTO productins VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11')
                   INTO productins VALUES ('0003', '运动T恤', '衣服', 4000, 2800, NULL)
                   INTO productins VALUES ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20')
        
      2. INSERT INTO也可以插入NULL

    5. 创建列的时候,可以写DEFAULT 0作为约束

    6. -- 将商品表中的数据复制到商品复制表中
      INSERT INTO productcopy (product_id, product_name, product_type, sale_price, purchase_price, regist_date)
      SELECT product_id, product_name, product_type, sale_price, 
      purchase_price, regist_date
      FROM Product;  
      
  11. 索引

    1. 创建索引的3种方式

      1. #第一种方式,创建表格的时候创建索引
        CREATE TABLE mytable
        {
        ID INT NOT NULL,
        INDEX(ID)
        };
        
        #第二种方式,使用CREATE INDEX创建索引
        CREATE [UNIQUE] INDEX index_name ON table_name(column_list)
        
        #第三种方式,使用ALTER TABLE 创建索引
        ALTER TABLE table_name ADD INDEX index_name(column_list)
        ALTER TABLE table_name ADD UNIQUE(column_list)
        ALTER TABLE table_name PRIMARY KEY (column_list)
        
        
    2. 索引分类

      1. 主键索引,只能有一个
      2. 唯一索引,UNIQUE字段,可以有多个,允许有多个空值
      3. 普通索引,建立在普通字段上
      4. 前缀索引,字符类的前几个字符,char,vchar,binary,varbinary
      5. 全文索引,建立在char,varchar,text,建完表再创全文索引
      6. 单列索引
      7. 联合索引

练习题

1.1

问题:编写一条 CREATE TABLE 语句,用来创建一个包含表 1-A 中所列各项的表 Addressbook (地址簿),并为 regist_no (注册编号)列设置主键约束

表1-A 表 Addressbook (地址簿)中的列

image-20220516172400662


答案:

CREATE TABLE addressbook
(							#表格这用的是小括号不是C语言的花括号
regist_no INTEGER NOT NULL,
name_ VARCHAR(128) NOT NULL,
address VARCHAR(256) NOT NULL, #VARCHAR以及CHAR后面带的都是小括号
tel_no CHAR(10),
mail_address char(20),
PRIMARY KEY(regist_no)
);

创建完表格记得点击下图中刷新按钮(居然不会自动刷新???😲)

image-20220516175730478

1.2

问题:假设在创建练习1.1中的 Addressbook 表时忘记添加如下一列 postal_code (邮政编码)了,请编写 SQL 把此列添加到 Addressbook 表中。

列名 : postal_code

数据类型 :定长字符串类型(长度为 8)

约束 :不能为 NULL


ALTER TABLE addressbook ADD COLUMN postal_code CHAR(8) NOT NULL

image-20220516182000090



image-20220516182037789

1.3 填空题

请补充如下 SQL 语句来删除 Addressbook 表。

(   DROP ) TABLE Addressbook;-- 删除表格的命令是DROP TABLE 而不是DROP

1.4 判断题

是否可以编写 SQL 语句来恢复删除掉的 Addressbook 表?

答:不可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值