第15课 插入数据
INSERT INTO:插入一行数据
INSERT INTO 表名 Values(值);
#使用这种方法,可省略某些列,省略的列必须满足允许NULL值或在表定义中给出默认值
INSERT INTO 表名(列名) VALUES(值);
INSERT INTO SELECT:插入多行数据
# 可插入多行
INSERT INTO Customers(cust_id, cust_contact)
SELECT cust_id, cust_contact
FROM CustNew;
SELECT INTO:从一个表复制到另一个表:
#创建一个名为CustCopy的新表,并把Customers表的整个内容复制到新表中,要只想复制部分列,可明确给出列名,而不是使用*
SELECT *
INTO CustCopy
FROM Customers;
MySQL语法:
CREATE TABLE CustCopy AS
SELECT * FROM Customers;
使用SELECT INTO注意:
1 任何SELECT选项和子句都可以使用,包括WHERE和GROUP BY
2 可利用联结从多个表插入数据
3 不管从多少个表中检索数据,数据都只能插入到一个表中
第16课 更新和删除数据
更新
UPDATE Customers
SET cust_contact='Sam Roberts',
cust_email='sam@toyland.com'
WHERE cust_id='1000000006';
#删除某个列的值,可设置为NULL
UPDATE Customers
SET cust_email=NULL
WHERE cust_id='1000000005';
空字符串用' '表示,是一个值,而NULL表示没有值
删除数据
从表中删除一行:
DELETE FROM Customers
WHERE cust_id='1000000006';
DELETE从表中删除整行,甚至是删除表中的所有行,而不删除列。
要删除指定的列,请使用UPDATE语句。
DELETE不删除表本身。
要删除表中的所有行,可使用TRUNCATE TABLE语句
更新和删除的指导原则
- 如果不是打算更新和删除每一行,不要使用不带WHERE子句的UPDATE或DELETE
- 保证每个表都有主键,尽可能像WHERE子句那样使用它
- 先用SELECT进行测试,保证过滤的是正确的记录
- 使用强制实施引用完整性的数据库,这样DBMS将不允许删除其数据与其他表相关联的行。
- 有的DBMS允许数据库管理员施加约束,防止执行不带WHERE子句的UPDATE或DELETE语句,DBMS支持这个特性的话应该使用。
第17课 创建和操纵表
创建表
- CREATE TABLE创建表,必须给出下列信息:
- 新表的名字
- 表列的名字和定义,用逗号分隔
- 有的DBMS还要求指定表的位置
CREATE TABLE Products
(
prod_id CHAR(10) NOT NULL,
vend_id CHAR(10) NOT NULL,
prod_name CHAR(254) NOT NULL,
prod_price DECIMAL(8,2) NOT NULL,
prod_desc VARCHAR(1000) NULL
);
对于MySQL,varchar必须替换为text
-
NULL/ NOT NULL:
不指定NOT NULL,多数DBMS认为指定的是NULL
只有不允许NULL值的列可作为主键,允许NULL值的列不能作为唯一标识
空字符串是一个有效的值,不是NULL。 -
DEFAULT:
quantity INTEGER NOT NULL DEFAULT 1;
默认值经常用于日期或时间戳列:
MySQL:DEFAULT CURRENT_DATE()
Oracle:DEFAULT SYSDATE
SQL Server:DEFAULT GETDATE()
更新表
使用ALTER TABLE应在改动前做表结构和数据完整的备份
ALTER TABLE Vendors
ADD vend_phone CHAR(20);
ALTER TABLE Vendors
DROP COLUMN vend_phone;
删除表
DROP TABLE CustCopy;
网友评论