发表于: 2018-01-13 21:30:01

5 676


今日完成的事情:

1,完成SQL余下的笔记

17 创建和操纵表

创建表 CREATE TABLE

注意:记得用MYSQL时并没有使用到后面NOT NULL之类,但有些数据库NULL是不能定义为主键的

NULL值就是没有值或缺值。允许NULL值的列也允许在插入行时不给出该列的值。不允许NULL值的列不接受没有列值的行,换句话 说,在插入或更新行时,该列必须有值。

只有不允许NULL值的列可作为主键,允许NULL值的列不能作为唯一标识

 

指定默认值,在插入时如果不给出值,将用DEFAULT指定

 

更新表ALTER TABLE

理想情况下,不要在表中包含数据时对其进行更新。应该在表的设计过程中充分考虑未来可能的需求,避免今后对表的结构做大改动

使用ALTER TABLE要极为小心,应该在进行改动前做完整的备份(模式和数据的备份)。数据库表的更改不能撤销

ALTER TABLE table_name ADD column_name 数据类型;

ALTER TABLE Vendors DROP COLUMN vend_phone;

删除可能涉及到的过程

1. 用新的列布局创建一个新表;

 2. 使用INSERT SELECT语句(关于这条语句的详细介绍,请参阅第15课)从旧表复制数据到新表。有必要的话,可以使用转换函数和计算字 段;

3. 检验包含所需数据的新表;

4. 重命名旧表(如果确定,可以删除它);

5. 用旧表原来的名字重命名新表;

6. 根据需要,重新创建触发器、存储过程、索引和外键。

删除表(而不是其内容)

DROP TABLE table_name;

许多DBMS允许强制实施有关规则,防止删除与其他表相关联的表

 

18 使用视图--VIEW(用法与TABLE类似)

重用SQL语句。 简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道其基本查询细节。

使用表的一部分而不是整个表。

保护数据。可以授予用户访问表的特定部分的权限,而不是整个表的访问权限。

更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。

 

创建视图CREATE VIEW (删除为DROP VIEW viewname

利用视图简化复杂的联结,举例:

CREATE VIEW ProductCustomers AS

SELECT cust_name, cust_contact, prod_id

FROM Customers, Orders, OrderItems

WHERE Customers.cust_id = Orders.cust_id AND OrderItems.order_num = Orders.order_num;

 

用视图重新格式化检索出的数据

CREATE VIEW VendorLocations AS   //将一个拼接字段联结,封装为一个视图,对外隐藏细节,故可以

SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')' //在里面做一些“小动作”,如保护数据

AS vend_title

FROM Vendors;

 

19 存储过程

为以后使用而保存的一条或多条SQL语句。可将其视为批文件,虽然它们的作用不仅限于批处

 

简单(简化复杂的操作)、安全(保证数据的一致性,减少误触)、高性能(常以编译过的形式存储)

 

CREATE PROCEDURE  XXXX  AS

步骤1

步骤2

步骤3

…;

 

20 管理事务处理

使用事务处理(transaction processing),通过确保成批的SQL操作要么完全执行,要么完全不执行,来维护数据库的完整性。

 

执行:

START TRANSACTION

 

回退ROLLBACK

 

COMMIT 显式提交

 

保留点(占位符) SAVEPOINT

SAVEPOINT delete1;

保留点越多越好

 

 

21 游标

游标(cursor)是一个存储在DBMS服务器上的数据库查询, 它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据

 

在使用游标前,必须声明(定义)它。这个过程实际上没有检索数据,它只是定义要使用的SELECT语句和游标选项。

一旦声明,就必须打开游标以供使用。这个过程用前面定义的SELECT语句把数据实际检索出来。

对于填有数据的游标,根据需要取出(检索)各行。

在结束游标使用时,必须关闭游标,可能的话,释放游标(有赖于具体的DBMS

 

 

22 约束--管理如何插入或处理数据库数据的规则

主键;

外键;

外键是表中的一列,其值必须列在另一表的主键中

唯一约束;

唯一约束既可以用UNIQUE关键字在表定义中定义,也可以用单独的CONSTRAINT定义

表可包含多个唯一约束,但每个表只允许一个主键。

唯一约束列可包含NULL值。

唯一约束列可修改或更新。

唯一约束列的值可重复使用。

与主键不一样,唯一约束不能用来定义外键

 

检查约束-CHECK

 

索引:索引用来排序数据以加快搜索和排序操作的速度

按主键检索特定行总是一种快速有效的操作

索引必须唯一命名

 

CREATE INDEX prod_name_ind ON PRODUCTS (prod_name);

 

触发器--TRIGGER

触发器是特殊的存储过程,它在特定的数据库活动发生时自动执行

一般来说,约束的处理比触发器快,因此在可能的时候,应该尽量使用约束。



2,完成 task14.下载Eclipse或者是IDEA,配置好Maven。IDEA不用配置Maven,Eclipse也分自带或者外部,推荐使用外部Maven。 

3,完成  task15.创建一个新的maven项目 

4,学习了多线程同步问题,同步代码块与同步函数;

      原因:多个线程在操纵共享数据,有多条语句对共享数据进行运算,CPU运行时顺序的不确定性

      解决办法:某时段只有一个线程进入临界区

      同步代码块格式

synchronized(对象) {  // 任意对象都可以。这个对象就是锁。

    需要被同步的代码;

}//同步前提多线程用同一个锁(对象)

     同步函数:将同步关键字定义在函数上,让函数(需要用到共享数据的方法)具备了同步性

      格式:在函数前加关键字 synchronized;同步用的锁其实是该类的字节码文件对象  类名.class

5,同步死锁的原理:多个任务的线程相互争夺对方的锁而不放弃自己以有的锁

6,线程间的通信,将资源封装成对象,线程的任务封装成对象,通过资源通信

7,等待唤醒机制

wait:将同步中的线程处于冻结状态。释放了执行权,释放了资格。同时将线程对象存储到线程池中。notify唤醒线程池中某一个等待线程。

notifyAll:唤醒的是线程池中的所有线程

用while(true)而不用if(turn)的原因:休眠后再唤醒,用while可以再次判断锁的情况

8,单设计模式,懒汉式与饿汉式再多线程的不同,饿汉式更加安全

9,消费者问题

明日计划的事情:

1,解决,Maven出现的问题

2,了解JDBC Mybatis Junit

3继续JAVA基础学习

遇到的问题:

1,在安装配置好Maven后,创建了一个project,使用CLEAN与INSTALL没有头绪,胡乱在CMD

中使用mvn clean 后出现下载错误,然后重新创建project是报错:

 Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.6 or one of its dependencies could not be resolved

收获:

1,对maven有了新的了解

2,对JAVA线程更了解一步

3,安装软件前,一定要查好整个攻略,安装和攻略同版本的软件



返回列表 返回列表
评论

    分享到