1 INSERT 插入操作
INSERT用来将行插入(或添加)到数据库表。插入有几种方式:
插入完整的行;
插入行的一部分;
插入某些查询的结果。
1.1 插入完整的行
存储到表中每一列的数据在VALUES子句中给出,必须给每一列提供一个值。
如果某列没有值,则应该使 用NULL值(假定表允许对该列指定空值)。
各列必须以它们在表定义中出现的次序填充。
未指定列名:INSERT INTO employees VALUES (1,'李四',30), (2,'王五',28);
提供了列名,VALUES必须以其指定的次序匹配指定的列名,不一定按各列出现在表中的实际次序。其优点是,即使表的结构改变,这 条INSERT语句仍然能正确工作。
指定列名:INSERT INTO employees (name, age) VALUES ('张三', 25);
1.2 插入部分行
使用INSERT的推荐方法是明确给出表的列名。使用这种语法,还可以省略列,这表示可以只给某些列提供值,给其他列不提供值。
如果表的定义允许,则可以在INSERT操作中省略某些列。省略的列必须满足以下某个条件。
该列定义为允许NULL值(无值或空值)。
在表定义中给出默认值。这表示如果不给出值,将使用默认值。
如果对表中不允许NULL值且没有默认值的列不给出值,DBMS将产生错误消息,并且相应的行插入不成功。
1.3 插入检索出的数据
INSERT还存在另一种形式,可以利用它将SELECT语句的结果插入表中,这就是所谓的INSERT SELECT。
顾名思义,它是由一条INSERT语句和一条SELECT语句组成的。
示例
假如想把另一表中的顾客列合并到Customers表中。不需要每次读取一行再将它用INSERT插入,可以如下进行:
INSERT INTO Customers(cust_id,
cust_contact,
cust_email,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
SELECT cust_id,
cust_contact,
cust_email,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country
FROM CustNew;
为简单起见,这个例子在INSERT和SELECT语句中使用了相同的列名。但是,不一定要求列名匹配。
1.4 从一个表复制到另一个表
有一种数据插入不使用INSERT语句。要将一个表的内容复制到一个全 新的表(运行中创建的表),可以使用SELECT INTO语句。
INSERT SELECT与SELECT INTO它们之间的一个重要差别是前者导出数据,而后者导入数据。
/*
创建一个名为CustCopy的新表,并把Customers表的整个内容复制到新表中。
因为这里使用的是SELECT *,所以将在CustCopy表中创建(并填充)与Customers表的每一列相同的列。
要想只复制部分的列,可以明确给出列名,而不是使用*通配符。
*/
SELECT *
INTO CustCopy
FROM Customers;
/* MariaDB、MySQL、Oracle、PostgreSQL和SQLite使用的语法*/
CREATE TABLE CustCopy AS
SELECT * FROM Customers;
2 UPDATE 更新操作
更新(修改)表中的数据,可以使用UPDATE语句。有两种使用UPDATE 的方式:
更新表中的特定行;
更新表中的所有行
‼️ 不要省略WHERE子句,如果没有,将更新所有行
基本的UPDATE语句由三部分组成UPDTATE 表名 SET 新值 WHERE 筛选条件,分别是:
要更新的表;
列名和它们的新值;
确定要更新哪些行的过滤条件。
更新所有行:UPDATE products SET price = price * 1.1;
条件更新:UPDATE orders SET status = 'shipped' WHERE id = 1001;
UPDATE可以采用子查询:使得能用SELECT语句检索出的数据更新列数据。
3 DELETE 删除操作
从一个表中删除(去掉)数据,使用DELETE语句。有两种使用DELETE 的方式:
从表中删除特定的行;
从表中删除所有行。
‼️ 不要省略WHERE子句,如果没有,将删除所有行
删除所有数据:DELETE FROM logs;(慎用!)
条件删除:DELETE FROM users WHERE last_login < '2020-01-01';
注意点:
DELETE不需要列名或通配符。
DELETE删除整行而不是删除列。要删除指定的列,请使用UPDATE语句。
DELETE语句从表中删除行,甚至是删除表中所有行。但是,DELETE不删除表本身。
我是文熠,一个正在找工作的95后算法工程师