My_SQL天池训练打卡

SQL_Task_1

DB: Database(数据库)

DBMS: Database Management System(数据库管理系用)

## 1.1 DBMS的种类

  • 层次关系数据库(Hierarchica Database,HDB)

  • 关系数据库(Relational Database,RDB)

    代表的五种关系数据库管理系统(Relational Database Management System,RDBMS)

    • Oracle Database:甲骨文 公司的RDBMS

    • SQL server :微软 公司的RDBMS

    • DB2:IBM的RDBMS

    • PostgreSQL :开源的RDBMS

    • MySQL:开源的RDBMS

1.2 RDBMS系统

  • 客户端/服务器类型(c/s类型)

2.1 数据库指令

  • DDL(Data Definition Language,数据定义语言) 用来创建或者删除存储数据用的数据库以及数据库中的表等对象。DDL 包含以下几种指令

    • create : 创建所有对象

    • drop:删除对象

    • alter:修改对象

  • 常用DML(Data Manipulation Language,数据操纵语言) 用来查询或者变更表中的记录。DML 包含以下几种指令

    • select:查询数据

    • insert:插入行数据表

    • update:更新数据

    • delete:删除数据

  • DCL(Data Control Language,数据控制语言) 用来确认或者取消对数据库中的数据进行的变更。还可以对 RDBMS 的用户是否有权限操作数据库中的对象(数据库表等)进行设定。DCL 包含以下几种指令

    • commit:确认对数据库数据更改

    • rollback:取消对数据库数据更改

    • grant:赋予用户操作权限

    • revoke:取消用户操作权限

2.2 数据库的创建

  • 语句:

  •  create database + 名字

2.3 表的创建

  • 语句:

  •  create table + 名字(列名1 数据类型 约束条件,
                列名2 数据类型 约束条件,
                         .
                         .
                         .
               表的约束1,表的约束2,...);
  •  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)
          );

2.4 命名规则

  • 只能是使用英文、数字、下划线

  • 必须以英文开头

2.5 数据类型

数值类型

  • 类型大小范围(有符号)范围(无符号)用途
    TINYINT1 Bytes(-128,127)(0,255)小整数值
    SMALLINT2 Bytes(-32 768,32 767)(0,65 535)大整数值
    MEDIUMINT3 Bytes(-8 388 608,8 388 607)(0,16 777 215)大整数值
    INT或INTEGER4 Bytes(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
    BIGINT8 Bytes(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值
    FLOAT4 Bytes(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度 浮点数值
    DOUBLE8 Bytes(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度 浮点数值
    DECIMAL对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值

日期和时间类型

类型大小 ( bytes)范围格式用途
DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
TIME3'-838:59:59'/'838:59:59'HH:MM:SS时间值或持续时间
YEAR11901/2155YYYY年份值
DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
TIMESTAMP41970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07YYYYMMDD HHMMSS混合日期和时间值,时间戳

字符串类型

类型大小用途
CHAR0-255 bytes定长字符串
VARCHAR0-65535 bytes变长字符串
TINYBLOB0-255 bytes不超过 255 个字符的二进制字符串
TINYTEXT0-255 bytes短文本字符串
BLOB0-65 535 bytes二进制形式的长文本数据
TEXT0-65 535 bytes长文本数据
MEDIUMBLOB0-16 777 215 bytes二进制形式的中等长度文本数据
MEDIUMTEXT0-16 777 215 bytes中等长度文本数据
LONGBLOB0-4 294 967 295 bytes二进制形式的极大文本数据
LONGTEXT0-4 294 967 295 bytes极大文本数据

2.6 约束设置

  • NOT NULL :非空约束(该列必须输入数据 不能为空)

  • PRIMARY KEY: 主键约束(该列是唯一值 可以通过该列取出特定的行的数据)

2.7 表的删除和更新

  •  /*删除表语法*/
     /*drop table 名字*/
      drop table product
      /*删除product表*/
      /*删除的表是无法恢复的,只能重新插入,请执行删除操作时无比要谨慎*/
  •  /*添加列*/
     /*alter table 名字 add column 列名 数据类型*/
      alter table product add column product_name varchar(50)
      /*添加可以存储50位的可变字长的product_name表*/
  •  /*删除列的alter table语句*/
     /*alter table 名字 drop column 列名*/
      alter table product drop column product_name
  •  /*清空表内容*/
     /*truncate table table_name 列名*/
     truncate table table_name
  •  /*数据更新*/
     /*UPDATE <表名>
       SET <列名> = <表达式> [, <列名2>=<表达式2>...];  
       WHERE <条件>;  -- 可选,非常重要。
       ORDER BY 子句;  --可选
       LIMIT 子句; --可选*/
     #例
     -- 修改所有的注册时间
     UPDATE product
        SET regist_date = '2009-10-10';  
     -- 仅修改部分商品的单价
     UPDATE product
        SET sale_price = sale_price * 10
      WHERE product_type = '厨房用具';  
     /*使用 UPDATE 也可以将列更新为 NULL(该更新俗称为NULL清空)。此时只需要将赋值表达式右边的值直接写为 NULL 即可。*/
     ​
     -- 将商品编号为0008的数据(圆珠笔)的登记日期更新为NULL
     UPDATE product
        SET regist_date = NULL
      WHERE product_id = '0008';
      
     #多列更新
     ​
     #UPDATE 语句的 SET 子句支持同时将多个列作为更新对象。
     ​
     -- 基础写法,一条UPDATE语句只更新一列
     UPDATE product
        SET sale_price = sale_price * 10
      WHERE product_type = '厨房用具';
     UPDATE product
        SET purchase_price = purchase_price / 2
      WHERE product_type = '厨房用具';
     ​
     -- 合并后的写法
     UPDATE product
        SET sale_price = sale_price * 10,
            purchase_price = purchase_price / 2
      WHERE product_type = '厨房用具';  
  •  /*插入数据*/
     /*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 语句会插入一行数据。插入多行时,通常需要循环执行相应次数的 INSERT 语句。其实很多 RDBMS 都支持一次插入多行数据*/
     ​
     -- 通常的INSERT
     INSERT INTO productins VALUES ('0002', '打孔器', 
     '办公用品', 500, 320, '2009-09-11');
     INSERT INTO productins VALUES ('0003', '运动T恤', 
     '衣服', 4000, 2800, NULL);
     INSERT INTO productins VALUES ('0004', '菜刀', 
     '厨房用具', 3000, 2800, '2009-09-20');
     ​
     -- 多行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');  
  •  -- INSERT 语句中想给某一列赋予 NULL 值时,可以直接在 VALUES子句的值清单中写入 NULL。想要插入 NULL 的列一定不能设置 NOT NULL 约束。
     ​
     INSERT INTO productins (product_id, product_name, product_type, 
     sale_price, purchase_price, regist_date) VALUES ('0006', '叉子', 
     '厨房用具', 500, NULL, '2009-09-20');  
     -- 还可以向表中插入默认值(初始值)。可以通过在创建表的CREATE TABLE 语句中设置DEFAULT约束来设定默认值。
     ​
     CREATE TABLE productins
     (product_id CHAR(4) NOT NULL,
     sale_price INTEGER DEFAULT 0, 
      -- 销售单价的默认值设定为0;
     PRIMARY KEY (product_id));  
     ​
     -- 可以使用INSERT … SELECT 语句从其他表复制数据。
     -- 将商品表中的数据复制到商品复制表中
     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;  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值