发表于: 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是报错:
收获:
1,对maven有了新的了解
2,对JAVA线程更了解一步
3,安装软件前,一定要查好整个攻略,安装和攻略同版本的软件
评论