文章目录
 
 - CHAR和VARCHAR
- 插入单行 INSERT INTO
- 插入多行
- 插入分层行 LAST_INSERT_IN()
- 创建表复制 CREAT TABLE AS
- 更新单行 UPDATE...SET
- 更新多行
- 在UPDATES中使用子查询【需着重复习】
- 删除行 DELETE
- 恢复数据库到原始状态
  
 
CHAR和VARCHAR
 
- CHAR(50):存储文本占5个字符,MySQL会再插入45个空格符填满此列。因此一般最好用VARCHAR来存储字符串或文本值。
- VARCHAR(50):文本占5个字符,就只存储这5个字符,不会浪费空间。
插入单行 INSERT INTO
 
- INSERT INTO 表明(列名) VALUE(每列的值)
- DEFAULT:写入默认值
INSERT INTO customers
VALUES (
        DEFAULT,
        'John',
        'Smith',
        '1990-01-01',
        NULL,
        'address',
        'city',
        'CA',
        DEFAULT)
INSERT INTO customers(
		first_name,
		last_name,
		birth_date,
		address,
		city,
		state)		
VALUES (
        'John',
        'Smith',
        '1990-01-01',
        'address',
        'city',
        'CA')
 
插入多行
 
 
INSERT INTO shippers(name)
VALUES ('Shipper1'),
       ('wuxu'),
       ('songtuo')
 
INSERT INTO products
VALUES (DEFAULT, 'laote', 89, 1.34),
       (DEFAULT, 'laoda', 82, 1.33),
       (DEFAULT, 'laoer', 75, 1.32)
INSERT INTO products(name, 
			quantity_in_stock,
			unit_price)
VALUES ('laote', 89, 1.34),
       ( 'laoda', 82, 1.33),
       ( 'laoer', 75, 1.32)
 
插入分层行 LAST_INSERT_IN()
 
- 获取新加记录的id:LAST_INSERT_IN()
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, 5.63);
 
创建表复制 CREAT TABLE AS
 
- 用CREAT TABLE AS 创建的表复制,复制的表中没有主键,也没有被标记为自动递增的列
- Truncate:右键表,使用这个工具可以清除表中所有的数据,使表变成空表
- 向表中插入数据时,可以使用选择语句(SELECT FROM WHERE)作为插入语句(INSERT INTO)的子查询进行数据的插入
CREATE TABLE orders_archived_wuxu AS
SELECT * FROM orders
INSERT INTO orders_archived_wuxu
SELECT *
FROM orders
WHERE order_date < '2019-01-01'
 
CREATE TABLE invoices_archived_wuxu AS
SELECT invoice_id,
       number,
       c.name,
       invoice_total,
       payment_total,
       invoice_date,
       due_date,
       payment_date
FROM invoices
JOIN clients c USING (client_id)
WHERE payment_date IS NOT NULL;
 
更新单行 UPDATE…SET
 
 
UPDATE  invoices
SET payment_total = 10, payment_date = '2019-03-01'
WHERE invoice_id = 1;
UPDATE  invoices
SET payment_total = DEFAULT, payment_date = NULL
WHERE invoice_id = 1;
UPDATE  invoices
SET payment_total = invoice_total * 0.5,
    payment_date = due_date
WHERE invoice_id = 3;
 
更新多行
 
 
UPDATE invoices
SET payment_total = invoice_total * 0.5,
    payment_date = due_date
WHERE client_id IN (3,4);
 
USE sql_store;
UPDATE customers
SET points = points + 50
WHERE birth_date < '1990-01-01';
 
在UPDATES中使用子查询【需着重复习】
 
USE sql_invoicing;
UPDATE invoices
SET payment_total = invoice_total * 0.5,
    payment_date = due_date
WHERE client_id =
      (SELECT client_id
       FROM clients
       WHERE name = 'Myworks')
UPDATE invoices
SET payment_total = invoice_total * 0.5,
    payment_date = due_date
WHERE client_id IN
      (SELECT client_id
       FROM clients
       WHERE state IN ('CA', 'NY'))
 
UPDATE orders
JOIN customers USING (customer_id)
SET comments = 'GoldenClient'
WHERE shipped_date IS NOT NULL AND points > 3000
UPDATE orders
SET comments = 'GoldenClient'
WHERE shipped_date IS NOT NULL AND
      customer_id IN (
                    SELECT customer_id
                    FROM customers
                    WHERE points > 3000)
 
删除行 DELETE
 
 
DELETE FROM invoices
WHERE client_id = (
    SELECT client_id
    FROM clients
    WHERE name = 'Myworks')
 
恢复数据库到原始状态
 
- 在IDEA中找到Project,选择对应的sql文件,双击后,CtrlA全选后执行,即可恢复数据库到原始状态。
 