MySQL(B站CodeWithMosh)——2024.10.4(7)

ZZZZZZ目的
ZZZZZZ代码
ZZZZZZ重点
ZZZZZZ操作(非代码,需要自己手动)

【第四章】1- 列属性 | Column Attributes「插入, 更新和删除数据」_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1UE41147KC/?p=31&spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=eaeec77dfceb13d96cce76cc299fdd08

  1. 第一列是表的列名称;
    第二列是数据类型,INT是整数类型,VARCHAR是可变字符的缩写,括号里的数字表示这列最多可以有多少个字符,比如有5个字符,那么VARCHAR只会占用5个字符的位置,但是CHAR会用这5个字符和另外45个空格将50个位置都占满,会浪费空间,所以一般都用VARCHAR;
    第三列PK是主键的缩写,哪列被标记为主键,哪列的前面就会有⚡;
    第四列NN是指非空值,决定了该列是否可以写空值,比如phone这一列就可以存在NULL;
    第九列AI意思是自动递增,通常被用在主键列,一般在MySQL中插入一个值,其实就是在最后一行加入一个顾客id,会在加入新纪录的同时将顾客id增加;
    最后一列表明了每列的默认值,比如phone的默认值是NULL,所以如果没有提供任何值,MySQL会给这些列直接填上NULL

2- 插入单行 | Inserting a Row_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1UE41147KC?p=32&vd_source=eaeec77dfceb13d96cce76cc299fdd08

  1. 在customers表格中插入一行,这位顾客叫John Smith,出生在1990年1月1日,居住在CA州的city城市的address
    INSERT INTO customers
    VALUES (DEFAULT, 'John', 'Smith', '1990-01-01', NULL,
                     'address', 'city', 'CA', DEFAULT)

    要在VALUES后面的括号中填入每一列的取值,首先要填写顾客id,但是可以看到顾客id的AI是勾选上了的,所以如果我们不提供任何值,MySQL就会帮我们生成一个唯一值,这时就可以用DEFAULT让MySQL自己生成一个值,避免我们自己输入的数值和别人的顾客id一样;
    对于birth_date和phonr这两列,可以看到NN没有选中,所以这里既可以填写数据,也可以不填写数据(用DEFAULT可以让MySQL填写空值,或者直接写NULL代表空值,这里的NULL不是字符串,不用加引号)
    可以看出,其实我们就只填了名、姓、出生日期、地址、城市和州,所以还可以这样写:
    INSERT INTO customers (first_name, last_name, birth_date, address, city, state)
    VALUES ('John', 'Smith', '1990-01-01', 'address', 'city', 'CA')

3- 插入多行 | Inserting Multiple Rows_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1UE41147KC?p=33&vd_source=eaeec77dfceb13d96cce76cc299fdd08

  1. 在shippers表格中新生成三个名为Shipper1、Shipper2和Shipper3的送货人
    INSERT INTO shippers (name)
    VALUES ('Shipper1'), ('Shipper2'), ('Shipper3')

【练习题】
在products表格中新生成如图的以下几行

INSERT INTO products (name, quantity_in_stock, unit_price)
VALUES ('Product1', 10, 1.95), ('Product2', 11, 1.95), ('Product3', 12, 1.95)

4- 插入分层行 | Inserting Hierarchical Rows_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1UE41147KC?p=34&vd_source=eaeec77dfceb13d96cce76cc299fdd08

  1. 在orders中加入一笔顾客id为1的订单,订单生成日期为2019年1月2日,订单状态为1;这笔订单一共买了两种产品,第一种产品的id为1,买了1个,单价为2.95,第二种产品的id为2,买了1个,单价为3.95,将这个信息输入到order_items中
    INSERT INTO orders (customer_id, order_date, status)
    VALUES (1, '2019-01-02', 1);
    INSERT INTO order_items
    VALUES (LAST_INSERT_ID(), 1, 1, 2.95), (LAST_INSERT_ID(), 2, 1, 3.95)

    先是在orders中添加一笔订单信息,然后,由于已经添加了一笔订单信息,订单id已经生成了,那么就要将这个刚生成的订单id放在order_items的订单id中,这里就会用到LAST_INSERT_ID这个函数,这个函数会输出上一个刚刚输出的id
    需要注意,这里有两个INSERT INTO,是两段代码,所以需要在第一段代码结束的时候加上分号
    在INSERT INTO的时候,其实只用打开这个表的工具按钮,看看NN里面有哪几列被选上了,再看看AI里有哪几列被选上了,一般注意到这几列就可以了

5- 创建表复制 | Creating a Copy of a Table_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1UE41147KC?p=35&vd_source=eaeec77dfceb13d96cce76cc299fdd08

  1. 将orders表格复制,建立一个新的名为orders_archived的表格
    CREATE TABLE orders_archieved AS
    SELECT * FROM orders

    创建完了之后,需要点击SCHEMAS右上角的刷新按钮,这样创建的表格才会出现
    点击orders_archived的工具按钮,可以发现表格没有主键,也就是order_id没有被标记为主键,这列的AI也没有选中,所以在用这种方法创建新的表格时,MySQL会忽略这些属性
  2. 右键orders_archived表,点击Truncate Table(截断表,也就是删除表中的所有行),然后点击Truncate,再点击表格的刷新按钮,可以发现orders_archived表中没有任何数据了
  3. 将2019年1月1日之前的订单的全部信息复制到orders_archived表中
    INSERT INTO orders_archived
    SELECT *
    FROM orders
    WHERE order_date < '2019-01-01'

【练习题】
将sql_invoicing中的invoices表中支付过的发票复制(可以看是否有支付日期或者),并置于新表invoices_archive中,然而在新表中,我们不想要client_id列,想要client_name列,并将这一列命名为client,而且要求使用CREATE TABLE中的一段子查询

USE sql_invoicing;
CREATE TABLE invoices_archive AS
SELECT i.invoice_id, i.number, c.name AS client, i.invoice_total, 
       i.payment_total, i.invoice_date, i.payment_date, i.due_date
FROM invoices i
JOIN clients c USING (client_id)
WHERE i.payment_date IS NOT NULL

  • 筛选出支付过的发票→查看是否有支付日期或者payment_total中的数字是否大于0
  • 不想要client_id列,想要client_name列→将nvoics表和clients表合并
  • 如果再次运行这段代码,会发现报错,这是因为已经存在invoices_archive这个表格,右键invoices_archive表格,点击Drop Table,再点击Drop Now,删除这个表格后就可以正常运行这段代码了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值