SQL-操纵表

操纵表的数据(增删改)

1. 插入数据

– 确保自己有插入权限

插入完整的行数据
--插入完整的行数据
INSERT INTO Customers   -- 当不指定哪些列时,需要给出符合所有列的数据,次序与表中一致,没有要用空值,不是很安全的做法,不推荐
VALUES('1000000006','Toy Land','123 Any Street','New York','NY','11111','USA',NULL,NULL);

– 更安全的做法是指定列名的填充,这样顺序可以不一致,不一定按各列在表中的实际次序。即使表的结构改变,该语句仍能正确插入,就是更繁琐了,推荐。

插入行的部分数据

只列出部分列名,给出对应的值,其余未给出的列名系统自动填空,前提是允许为空。
– 即可在插入语句中省略一些列
– 给出的列名与值必须一一对应

插入select的结果,INSERT-SELECT结构

可以用一条INSERT插入多行,普通的插入一次只能插入一行
– INSERT-SELECT结构实现导出数据

– 从CustNew表中读出数据并插入到顾客表。两个表的列名不需要一致,DBMS匹配的是列的位置,将SELECT结果的第n列填充到顾客表中的第n列
– 可以是任意的SELECT语句,只要有结果

-- 把另一表中的顾客列合并到顾客表中
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 INTO
– INSERT是插入到一个已经存在的表,INSERT INTO是复制到一个新表,实现导入数据.

SELECT *          -- 可以不复制全部的列,只复制部分列,给出列名即可
INTO CustCopy --该表本不存在,系统新建了个与顾客表一样结构的表,并把整个内容复制过去
FROM Customers;

– 任何SELECT语句和子句都可以使用,可以连接从多个表插入数据
– 该结构作用:测试自己写的代码,先把表复制一份当实验,不影响实际数据

2. 更新数据 UPDATE

– 确保有更新权限
UPDATE 要更新的表
SET 列名=新值
WHERE 过滤条件 – 更新满足条件的特定行,否则没有WHERE的话会更新全部行,慎重。

-- 更新1000000006号顾客的联系人和电子邮件
UPDATE Customers
SET cust_contact='Sam Roberts',      --更新多个属性时,列值对用逗号分隔
	cust_email='[email protected]'
WHERE cust_id='1000000006';  

–UPDATE语句中可以使用子查询,用SELECT检索出的结果更新列数据

– 删除某个属性的值,可以设置为NULL,NULL表示没有值,不等于空串‘’是一个值。

UPDATE Customers
SET cust_email=NULL
WHERE cust_id='1000000005';

3. 删除行数据 DELETE

– 带WHERE子句是删除满足条件的行,否则删除所有行

DELETE FROM Customers
WHERE cust_id='1000000006';

– 当存在外键时,由于引用完整性的强制约束,DBMS不允许删除与别的表有关联的行
– DELETE删除的是表的内容,不是表本身
– 删除的是整行,不是列。列用UPDATE语句
– 想删除所有行(表还存在)时,用TRUNCATE TABLE更快的删除(因为不记录数据的变动)

– conclude:更新和删除的指导原则:一定要有WHERE条件;在更新删除前先用SELECT语句测试确保过滤的是正确的记录,以免删错;不能撤销,非常小心!

创建和操纵表

1. 创建表 CREATE TABLE

–CREATE TABLE 表名
–(列名 数据类型 列级约束1 列级约束2,列2…,表级约束);
– 各列与约束之间用逗号间隔
– 各列要么允许为空,要么不允许,默认允许
– 指定默认值:DEFAULT,常用于日期或时间戳列,将系统日期用作默认日期,DEFAULT GETDATE(),不同DBMS不一样
– 示例见创建表的query

2. 更新表结构 ALTER TABLE

– 注意:应在表中没有数据的时候更新,建表的时候就充分考虑好,有数据了避免更新表结构
–可以给表增加列,允许重命名列,一般不能删除或更改列

ALTER TABLE Vendors
ADD vend_phone char(20);               -- 增加的这列全是NULL

– 删除列

ALTER TABLE Vendors
DROP COLUMN vend_phone; 

– 复杂的表结构的更改一般不直接更改原表,而是用新的列布局重新创建一个新表,用INSERT SELECT语句复制旧表数据到新表,重命名旧表或删除旧表,用旧表的名字重命名新表,重新创建出发前,存储过程,索引,外键等
– 总之,在ALTER TABLE之前确保进行了完整的备份,更改不能撤销!

3. 删除表 DROP TABLE

DROP TABLE CustCopy;

– 没有确认,不能撤销,一旦操作,永久删除。
– 强制规则不允许删除与其他表有关联的表,除非删除该关系

4. 重命名表

– SQLserver使用re_name存储过程。

发布了24 篇原创文章 · 获赞 6 · 访问量 1185

猜你喜欢

转载自blog.csdn.net/wbing96/article/details/103124734