《MySQL必知必会》[03] 表数据的增删改

时间:2023-03-08 23:40:59
《MySQL必知必会》[03] 表数据的增删改
1、增:插入数据
INSERT关键字可以插入新的行到数据库表中:
  • 插入完整的行
  • 插入行的一部分
  • 插入多行
  • 插入某些查询的结果

基本的INSERT语句是:
INSERT INTO R(A1, A2, ..., An) VALUES (V1, V2, ..., Vn); 
1
1
INSERT INTO R(A1, A2, ..., An) VALUES (V1, V2, ..., Vn); 

1.1 插入完整的行

如下例:
INSERT INTO Customers
VALUES
(
NULL,
'Pep E. LaPew',
'100 Main Street',
'Los Angeles',
'CA',
'90046',
'USA',
NULL,
NULL
)
13
1
INSERT INTO Customers
2
VALUES
3
(
4
NULL,
5
'Pep E. LaPew',
6
'100 Main Street',
7
'Los Angeles',
8
'CA',
9
'90046',
10
'USA',
11
NULL,
12
NULL
13
)
  • 每个列必须提供一个值,没有的话也应该填NULL
  • 插入内容必须以它们在表中定义出现的次序填充

这种语法简单,但是并不安全,而且繁琐,尽量避免使用。

1.2 插入行的一部分

如下例:
INSERT INTO customers
(
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country
)
VALUES
(
'Pep E. LaPew',
'100 Main Street',
'Los Angeles',
'CA',
'90046',
'USA'
);
17
1
INSERT INTO customers
2
(
3
cust_address,
4
cust_city,
5
cust_state,
6
cust_zip,
7
cust_country
8
)
9
VALUES
10
(
11
'Pep E. LaPew',
12
'100 Main Street',
13
'Los Angeles',
14
'CA',
15
'90046',
16
'USA'
17
);
  • 这种方式可以替代之前的整行插入,只需要你把所有的列填完
  • VALUES必须跟SQL中制定的匹配列次序相同
  • VALUES不需要跟表中列的次序相同
  • 省略的列必须满足一定条件,即允许为NULL或表中有默认值设定

1.3 插入多个行

如下例:
INSERT INTO customers
(
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country
)
VALUES
(
'Pep E. LaPew',
'100 Main Street',
'Los Angeles',
'CA',
'90046',
'USA'
),
(
'M Martian',
'42 Galaxy Way',
'New York',
'NY',
'11213',
'USA'
);
25
1
INSERT INTO customers
2
(
3
cust_address,
4
cust_city,
5
cust_state,
6
cust_zip,
7
cust_country
8
)
9
VALUES
10
(
11
'Pep E. LaPew',
12
'100 Main Street',
13
'Los Angeles',
14
'CA',
15
'90046',
16
'USA'
17
),
18
(
19
'M Martian',
20
'42 Galaxy Way',
21
'New York',
22
'NY',
23
'11213',
24
'USA'
25
);

1.4 插入某些查询的结果

这种方式是所谓的INSERT SELECT,顾名思义,即INSERT语句和SELECT语句组成的。如下例:
INSERT INTO
customers
(
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country
)
SELECT
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country
FROM
custnew;
17
1
INSERT INTO 
2
  customers
3
  (
4
  cust_address,
5
  cust_city,
6
  cust_state,
7
  cust_zip,
8
  cust_country
9
  )
10
SELECT
11
  cust_address,
12
  cust_city,
13
  cust_state,
14
  cust_zip,
15
  cust_country
16
FROM
17
  custnew;
  • 例中INSERT和SELECT列名虽然相同,但是并没有强制要求,它仍然是根据次序位置来填充数据的



2、删:删除数据

基本语句:
DELETE FROM R WHERE <选择条件>;
1
1
DELETE FROM R WHERE <选择条件>;



3、改:更新数据

基本语句:
UPDATE R SET A1=E1, A2=E2, ..., An=En WHERE <选择条件>;
1
UPDATE R SET A1=E1, A2=E2, ..., An=En WHERE <选择条件>;