《SQL必知必会》系列 05

有时候读一本书,只要能从书中获得一点启发,就足够了。

自己在看完《持续行动》这本书之后,只记住了作者的一个观点:人们对于自己钱包里有多少money一清二楚,可是对于脑袋里究竟懂多少道理,却过于含糊。在正式展开这个观点前,作者拿出了网上非常流行的一句话“道理我都懂,但就是做不到”,扪心试问,道理真真正正的懂了吗?这可不见得。因为人们对于自己钱包里有多少钱很清楚,但对于哪些道理是自己真正明白的,哪些道理不是真正明白的,不一定有正确的认识。

那些以为懂了的道理,只不过是道听途说,或者听的次数比较多,以为就是自己的了,这本质上是自欺欺人。说出“道理我都懂,但就是做不到”这句话太轻松了,而且很多人都在说的时候,好像这句话就是真的一样。只有那些真正思考过这个问题,对自我有清楚认知的人,才会知道哪些道理是自己真正明白的,哪些道理是自己还不太懂的,能够承认自己的无知,本身就是一种很好的自我认知。但是明明不懂,却还要装懂,这就不是一件很好的事情了。

”知之为知之,不知为不知,是知也。”

古人早已为我们总结出了这些金玉良言,但是我们只有通过不断的行动和思考,才能真正获得属于自己的理解和感悟,而不是人云亦云的说出“道理我都懂,就是做不到”这些话,当做开玩笑的俏皮话可以,但是如果想要获得真的成长和进步,还是要客观真实的面对自己。

路漫漫其修远兮,让我们一起上下而求索吧。

今天分享《SQL必知必会》第16章~第18章。

第16章 更新和删除数据

核心概念:UPDATE关键字, DELETE关键字,使用规则

UPDATE:执行对数据的修改操作时,需要使用UPDATE关键字,可更改特定行,也可更改所有行。具体语法如下:

UPDATE Customers SET cust_contact = ‘Sam Robers’, cust_email = ‘sam@toy.com’ WHERE cust_id =‘1000’;

DELETE: 执行对数据的删除操作时,需要使用DELETE关键字,可删除特定的行,也可删除所有行。具体使用如下:

DELETE FROM Customers WHERE cust_id = ‘10000’;

使用规则:在使用UPDATE 和 DELETE 操作时,一定不能忘记WHERE子句,因为一旦操作,而且没有UNDO 撤销的按钮,那么被更改或删除的数据将无法找回。所以书中建议,在真正执行UPDATE 和DELETE修改之前,最好用SELECT语句进行测试,保证WHERE子句过滤的是正确记录,以防止操作失误。另外SQL中外键的存在,也很好的防止了删除某个关系需要用到的行。

总之,使用UPDATE 和DELETE 可能会存在潜在的危险,一定要在使用过程中按照安全规则操作。

第17章 创建和操作表

核心概念:创建表,使用NULL值,指定默认值,更新表,删除表,重命名表

创建表:不同数据库有不同的建表方式,但是创建表的关键因素大同小异,一般都需要新表名,列名和定义,还有的要求定义表的位置,请看代码:

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

)

使用NULL值: 在创建表过程中,需要指定这行的数据是否可以为NULL, 如果不允许,那么需要注明 NOT NULL.

指定默认值:关键字,DEFAULT。对某一列的数据设置默认值,如:

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,
prod_active INTEGER DEFAULT 1

)

更新表:表建成以后,还可以对表中的列进行增删改的操作,关键字为ALTER TABLE ,当然为了安全起见,修改前最好做足备份数据的准备。

ALTER TABLE Vendors ADD vend_phone CHAR (20);
ALTER TABLE Vendors DROP COLUMN vend_phone;

删除表:DROP关键字

DROP TABLE CustCopy;

重命名表:不同的数据库对重命名表有着不同的规则。DB2, MariaDB, MySQL, Oracle, PostgreSQ可以使用RENAME语句,SQL Server可以使用sp_rename存储过程,SQLite使用ALTER TABLE 语句。

第18章 使用视图

关键概念:视图概念,视图作用,视图规则和限制,创建视图,视图过滤,视图与计算字段

视图的概念:视图是虚拟表,它只包含使用时动态检索数据的查询,并不能直接在视图上对数据进行修改。

视图的作用:将查询出来的结果当做一个虚拟表来使用,具体的作用有以下几条:
重用SQL语句
简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道其基本查询细节。
使用表的一部分而不是整个表
保护数据。可以授予用户访问表的特定部分的权限,而不是整个表的访问权限
更改数据格式和表示。视图可以返回与底层表的表示和格式不同的数据

需要注意的问题是:性能问题。因为视图本身并不包含数据,如果使用多个联结和过滤创建了复杂的视图或嵌套了视图,那么性能可能会下降的很厉害。

视图的规则:常见的视图创建和使用规则有以下几条:
视图必须唯一命名,不可以和其它视图或表重名
对于可创建的视图数目没有限制
创建视图,必须要有足够的访问权限,这些权限通常由数据库管理人员授予
视图可以嵌套,即可以利用从其它视图中检索数据的查询来构造视图。所允许的嵌套层数在不同数据库中规定不同。
许多数据库禁止在视图中使用ORDER BY 子句
有些数据库要求对返回的所有列进行命名,如果列是计算字段,则需要使用别名。
视图不能索引,也不能有关联的触发器或默认值
有些数据库把视图作为只读的查询,表示可以从视图中检索数据,但不能将数据写回视图。

创建视图:使用CREATE VIEW 语句创建,和CREATE TABLE一样,只能创建不存在的视图。删除视图,可以用DROP VIEW viewname;

CREATE VIEW ProductCustomers AS
SELECT cust_name, cust_contact, prod_id
FROM Customers, Orders,OrderItems
WHERE Customers.cust_id = Order.cust_id
AND OrderItems.order_name=Orders.order_name;

视图过滤:可以使用where子句,对查询结果进行过滤, 同时结合计算字段一起使用。

SELECT prod_id,
quantity,
item_price,
quantity*item_price AS expanded_price
FROM OderItems
WHERE order_num =20008;

视图总结:视图为虚拟的表,它们包含的不是数据而是根据需要检索数据的查询。视图提供一种封装SELECT 语句的层次,可用来简化数据处理,重新格式化或保护基础数据。

以上就是今天要分享的内容。

感谢阅读,下次再会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值