列属性|column attribute
INT : integer value 整数值
VARCHAR(50):variable character ,可变字符,最多50个字符
CHAR(50):固定50个字符
PK:primary key ,标记了每一个顾客
NN:not null,是否可以排除空值,如果选中则该列必须有数值
AI:auto increment,pk会有AI,插入新值后会自动增长
Default/Expression:如果不提供值,默认值为0
插入单行|inserting a single row
INSERT INTO customers
VALUES ( DEFAULT, 'a', 'b', DEFAULT, DEFAULT, 'a', 'b','c', DEFAULT)
INSERT INTO : 插入一行至xx表
VALUES:输入该表的数值,字符和日期要用引号标记,属性为NN的列可以使用DEFAULT,输入默认值或不输入为null。
INSERT INTO customers (first_name, last_name, address, city, state)
VALUES ( 'a', 'b', 'a', 'c', 'a')
在INSERT INTO 表( ),括号中输入列名,VALUES( ),括号中输入上面列的值,效果相同,列名顺序可更改,只要和值一一对应即可。
输入值时务必关注列属性。
插入多行|inserting multiple rows
INSERT INTO shippers (name)
VALUES ('1'),
('2'),
('3')
语句与插入单行相同,VALUES后用括号隔开插入的值即可。
输入值时务必关注列属性。
插入分层行|inserting hierarchial
INSERT INTO orders (customer_id, order_date, status)
VALUES (1, '2019-01-01', 1);
INSERT INTO order_items
VALUES (LAST_INSERT_ID(), 1, 1, 2.95),
(LAST_INSERT_ID(), 2, 1, 2.95)
代码含义:在order表中插入新的一行,在order_items表中,LAST_INSERT_ID的含义是order表中的最后一行的ID,给这个ID赋予了两行数值。
创建表复制|creating a copy of a table
CREATE TABLE order_new AS
SELECT * FROM orders
CREATE TABLE A AS,A是新创建的表
SELECT * FROM B,B是要复制的表
SELECT后面可以使用WHERE限制条件
更新单行|updating a single row
UPDATE invoices
SET payment_total = 10, payment_date = '2019-03-03'
WHERE invoice_id = 3
UPDATE 表
SET 列名和新的值
WHERE 选择pk标记的id
更新多行|updating multiple rows
UPDATE customers
SET points = points + 10
WHERE birth_date < '1990-01-01'
与更新一行逻辑相同,只不过where下设置了条件方便多选。
在update中使用子查询来更新多行|using subquries in updates
SET comments = 'gold customer'
WHERE customer_id IN
(SELECT c.customer_id
FROM
(SELECT c.customer_id
FROM customers c
LEFT JOIN orders o
USING (customer_id)
WHERE points > 3000) AS a)
与更新多行逻辑相同,通过where下设置字子查询来选中多个值,来进行多行更新,详见博文——mySQL报错"You can’t specify target table ‘orders’ for update in FROM clause"的解决方案。
删除行|deleting rows
DELETE FROM invoices
WHERE invoice_id = 1
与更新的逻辑相同,也可以加入子查询。