1、MySQL数据库管理系统,1,提纲,2019/5/17,Database Technology, GUCAS,2,MySQL数据库简介 MySQL的安装与配置 MySQL基本工具 MySQL数据库操作 建库 建表 存储过程 触发器 备份与恢复,MySQL数据库简介,MySQL数据库的特点主要有以下几个方面: 使用核心线程的完全多线程服务,这意味着可以采用多CPU体系结构。 可运行在不同平台。 使用C和C+语言编写,并使用多种编译器进行测试,保证了源代码的可移植性。 支持AIX、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2 Wrap
2、、Solaris、Windows等多种操作系统。 为多种编程语言提供了API。这些编程语言包括C、C+、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。 支持多线程,充分利用CPU资源。 优化的SQL查询算法,可有效地提高查询速度。 既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库嵌入其他的软件中。提供多语言支持,常见的编码如中文的GB2312、BIG5,日文的Shift_JIS等,都可以用做数据表名和数据列名。 提供TCP/IP、ODBC和JDBC等多种数据库连接途径。 提供可用于管理、检查、优化数据库操作的管理工具。 可以处理拥有上千万
3、条记录的大型数据库。,2019/5/17,Database Technology, GUCAS,3,MySQL的安装与配置,下载地址:http:/ Technology, GUCAS,4,运行下载的“mysql-5.1.31-win32”, 出现如下界面 :,MySQL的安装与配置(续),Mysql安装向导启动,按Next继续。,MySQL的安装与配置(续),选择安装类型,有 “Typical(默认)” “Complete(完全)” “Custom(用户自定义)” 三个选项,我们选择“Custom” ,有更多的选项, 也方便熟悉安装过程,MySQL的安装与配置(续),确保 Developer
4、Components 全部选上,点选“Change.” 手动指定安装目录。,MySQL的安装与配置(续),填上安装目录, 我的是“d:Program FilesMySQLMySQL Server 5.1”,也建议不要放在与操作系统同一分区,这样可以防止系统备份还原的时候,数据被清空。 按“OK”继续。,MySQL的安装与配置(续),返回刚才的界面, 按“Next”继续。,MySQL的安装与配置(续),确认先前的设置,如果有误,按“Back”返回重做。按“Install”开始安装。,MySQL的安装与配置(续),正在安装中,安装过程中会出现MySQL 企业版的信息提示,点Next继续安装,MyS
5、QL的安装与配置(续),MySQL的安装与配置(续),至此,软件安装完成,出现mysql配置向导,将 “Configure the Mysql Server now”前面的勾打上,点“Finish”结束软件的安装并启动mysql配置向导。,MySQL的安装与配置(续),mysql配置向导启动界面,按“Next”继续。,MySQL的安装与配置(续),选择配置方式, “Detailed Configuration(手动精确配置)” “Standard Configuration(标准配置)”,我们选择“Detailed Configuration”,方便熟悉配置过程。,MySQL的安装与配置(续)
6、,选择服务器类型, “Developer Machine(开发测试类,mysql占用很少资源)” “Server Machine(服务器类型,mysql占用较多资源)” “Dedicated MySQL Server Machine(专门的数据库服务器,mysql占用所有可用资源)”一般选“Server Machine”,不会太少,也不会占满。,MySQL的安装与配置(续),选择mysql数据库的大致用途,“Multifunctional Database(通用多功能型,好)”、 “Transactional Database Only(服务器类型,专注于事务处理,一般)” “Non-Tran
7、sactional Database Only(非事务处理型,较简单,主要做一些监控、记数用,对MyISAM数据类型的支持仅限于non-transactional), 随自己的用途而选择,我这里选择“Transactional Database Only”,按“Next”继续。,MySQL的安装与配置(续),对InnoDB Tablespace进行配置,就是为InnoDB 数据库文件选择一个存储空间。这里没有修改,使用用默认位置,直接按“Next”继续,MySQL的安装与配置(续),选择您的应用的一般mysql访问量,同时连接的数目 “Decision Support(DSS)/OLAP(20
8、个左右)”、 “Online Transaction Processing(OLTP)(500个左右)”、 “Manual Setting(手动设置,自己输一个数)”, 这里选“Online Transaction Processing(OLTP)”,一般够用了,按“Next”继续,MySQL的安装与配置(续),是否启用TCP/IP连接,设定端口,如果不启用,就只能在自己的机器上访问mysql数据库了,这里启用,把前面的勾打上,Port Number:3306。 按“Next”继续,MySQL的安装与配置(续),对mysql默认数据库语言编码进行设置,第一个是西文编码,第二个是多字节的通用ut
9、f8编码,都不是我们通用的编码,这里选择第三个,然后在Character Set那里选择或填入“gbk”,当然也可以用“gb2312”, 按 “Next”继续。,MySQL的安装与配置(续),选择是否将mysql安装为windows服务,还可以指定Service Name(服务标识名称),是否将mysql的bin目录加入到Windows PATH,我们这里全选,Service Name不变。 按“Next”继续。,询问是否要修改默认root用户(超级管理)的密码(默认为空最后)Create An Anonymous Account(新建一个匿名用户,匿名用户可以连接数据库,不能操作数据,包括查
10、询)”,一般就不用选了,设置完毕,按“Next”继续。,MySQL的安装与配置(续),确认设置无误,如果有误,按“Back”返回检查。按“Execute”使设置生效。,MySQL的安装与配置(续),设置完毕,按“Finish”结束mysql的安装与配置,MySQL的安装与配置(续),MySQL的安装与配置(续),检验MySQL是否安装成功的方法:进入cmd输入:mysql u root p 命令,并在随后的提示中输入密码 如果出现以下提示则表示MySQL安装成功。,MySQL工具,MySQL命令行实用程序 MySQL管理器MySQL查询浏览器,MySQL命令行实用程序,进入方法: mysql
11、u root p退出方法:quit命令以;或g结束,即仅按enter不执行命令mysql命令不区分大小写一条命令可以分为多行输入,直到遇到分号为止一行可以输入多条命令,命令之间用分号隔开,MySQL管理器,下载地址:http:/ 创建数据库可以使用CREATE DATABASE语句,该语句的基本格式如下: CREATE DATABASE | SCHEMA IF NOT EXISTS db_name 说明:“ ”中内容为可选项,DATABASE与SCHEMA同义。 db_name。要创建的数据库的名称,在文件系统中,MySQL的数据存储区将以目录方式表示MySQL数据库。因此,命令中的数据库名字
12、必须符合操作系统文件夹命名规则。值得注意的是,在MySQL中是不区分大小写的。 IF NOT EXISTS。在创建数据库前进行判断,只有该数据库目前尚不存在时才执行CREATE DATABASE操作。用此选项可以避免出现数据库已经存在而再新建的错误。,创建数据库,例子:创建学生管理系统的数据库,名为PXSCJ。 打开“开始”“程序”“MySQL”“MySQL Server 5.1”“MySQL Command Line Client”菜单项,进入MySQL客户端,在客户端窗口输入密码,在命令提示行输入以下语句: CREATE DATABASE PXSCJ; 创建了数据库之后使用USE命令可指定
13、当前数据库。语法格式如下: USE db_name;,创建数据库,已经创建的数据库如要删除,使用DROP DATABASE命令。语法格式如下: DROP DATABASE IF EXISTS db_name 其中,db_name是要删除的数据库名。可以使用IF EXISTS子句以避免删除不存在的数据库时出现的MySQL错误信息。示例如下:,删除数据库,创建表使用CREATE TABLE语句,基本格式如下: CREATE TEMPORARY TABLE IF NOT EXISTS tbl_name (,) TEMPORARY。该关键字表示用CREATE命令新建的表为临时表。不加该关键字创建的表通
14、常称为持久表,在数据库中持久表一旦创建将一直存在,多个用户或者多个应用程序可以同时使用持久表。有时需要临时存放数据,例如,临时存储复杂的SELECT语句的结果。此后,可能要重复地使用这个结果,但这个结果又不需要永久保存。这时,可以使用临时表。用户可以像操作持久表一样操作临时表。只不过临时表的生命周期较短,而且只能对创建它的用户可见,当断开与该数据库的连接时,MySQL会自动删除它们。,创建表,IF NOT EXISTS。建表前加上一个判断,只有该表目前尚不存在时才执行CREATE TABLE操作。用此选项可以避免出现表已经存在无法再新建的错误。 列选项。列选项主要有以下几种: NULL或NOT
15、 NULL:表示一列是否允许为空,NULL表示可以为空,NOT NULL表示不可以为空,如果不指定,则默认为NULL。 DEFAULT default_value:为列指定默认值,默认值default_value必须为一个常量。 AUTO_INCREMENT:设置自增属性,只有整型列才能设置此属性。当插入NULL值或0到一个AUTO_INCREMENT列中时,列被设置为value+1,value是此前表中该列的最大值。AUTO_INCREMENT顺序从1开始。每个表只能有一个AUTO_INCREMENT列,并且它必须被索引。 UNIQUE KEY | PRIMARY KEY:UNIQUE KE
16、Y和PRIMARY KEY都表示字段中的值是唯一的。PRIMARY KEY表示设置为主键,一个表只能定义一个主键,主键必须为NOT NULL。 COMMENT string:对于列的描述,string是描述的内容。,创建表,表选项。在定义列选项的时候,可以将某列定义为PRIMARY KEY,但是当主键是由多个列组成的多列索引时,定义列时无法定义此主键,这时就必须在语句最后加上一个PRIMARY KEY(col_name,)子句定义的表选项。另外,表选项中还可以定义索引和外键。 例:使用命令行方式在PXSCJ数据库中创建学生管理系统中的三个表XSB、KCB和CJB。 创建XSB表使用如下语句:
17、USE PXSCJ; CREATE TABLE XSB (学号 CHAR(6) NOT NULL PRIMARY KEY,姓名 CHAR(8) NOT NULL,性别 TINYINT(1) NULL DEFAULT 1,出生时间DATE NULL,专业 CHAR(12) NULL,总学分 INT(4) NULL DEFAULT 0,备注 TEXT NULL );,创建表,创建KCB表使用如下语句: USE PXSCJ; CREATE TABLE KCB (课程号 CHAR(3) NOT NULL PRIMARY KEY,课程名 CHAR(16) NOT NULL,开课学期 TINYINT(1)
18、 NULL DEFAULT 1,学时 TINYINT(1) NULL,学分 TINYINT(1) NOT NULL ); 创建CJB表使用如下语句: USE PXSCJ; CREATE TABLE CJB (学号 CHAR(6) NOT NULL,课程号 CHAR(3) NOT NULL,成绩 INT(4) NULL,PRIMARY KEY(学号,课程号) );,创建表,ALTER TABLE用于更改原有的表结构。例如,可以增加或删减列,创建或取消索引,更改原有列的类型,重新命名列或表,还可以更改表的描述和表的类型。 ALTER TABLE语句的基本格式如下: ALTER TABLE tabl
19、e_nameADD /*添加列*/| ALTER SET DEFAULT default_value | DROP DEFAULT /*修改默认值*/| CHANGE /*对列重命名*/| MODIFY /*修改列类型*/| DROP /*删除列*/| RENAME /*重命名该表*/| 其他,修改表,其中,table_name为要修改表的表名。 ALTER TABLE语句中的修改子句可以包含以下几类: ADD子句。向表中增加新列。例如,在表t1中增加新的一列a: ALTER TABLE t1 ADD COLUMN a TINYINT NULL ; ALTER子句。修改表中指定列的默认值。 C
20、HANGE子句。修改列的名称。重命名时,需给定旧列名、新列名和列当前的类型,例如,要把一个INTEGER列的名称从a变更到b: ALTER TABLE t1 CHANGE a b INTEGER; MODIFY子句:修改指定列的类型。例如,把一个列的数据类型改为BIGINT: ALTER TABLE t1 MODIFY b BIGINT NOT NULL; 注意:若表中该列所存数据的数据类型与将要修改的列的类型冲突,则发生错误。例如,原来CHAR类型的列要修改成INT类型,而原来列值中有字符型数据“a”,则无法修改。 DROP子句:从表中删除列或约束。 RENAME子句:修改该表的表名。例如,
21、将表a改名为b: ALTER TABLE a RENAME b ;,修改表,删除一个表可以使用DROP TABLE语句。语法格式如下: DROP TEMPORARY TABLE IF EXISTS tbl_name , tbl_name . 例如,删除XSB表可以使用如下语句: USE PXSCJ; DROP TABLE XSB;,删除表,SELECT语句可以从一个或多个表中选取特定的行和列,结果通常是生成一个临时表。在执行过程中系统根据用户的要求从数据库中选出匹配的行和列,并将结果存放到临时的表中,SELECT语句的语法格式如下: SELECTALL | DISTINCT select_ex
22、pr, .FROM table1 , table2 /*FROM子句*/WHERE where_definition /*WHERE子句*/GROUP BY col_name | expr | position ASC | DESC, . /*GROUP BY子句*/HAVING where_definition /*HAVING子句*/ORDER BY col_name | expr | positionASC | DESC , . /*ORDER BY子句*/LIMIT offset, row_count /*LIMIT子句*/,查询表数据,创建存储过程 存储过程可以由声明式SQL语句(如
23、CREATE、UPDATE和SELECT等语句)和过程式SQL语句(如IF-THEN-ELSE语句)组成。创建存储过程使用CREATE PROCEDURE语句,语法格式如下: CREATE PROCEDURE sp_name ( IN | OUT | INOUT param_name type ,.),存储过程,是存储过程的主体部分,也叫做存储过程体。它包含了在过程调用的时候必须执行的语句,这个部分总是以BEGIN开始,以END结束。当然,当存储过程体中只有一个SQL语句时可以省略BEGIN-END标志。另外,BEGIN-END复合语句还可以嵌套使用。 在开始创建存储过程之前,先介绍一个很实用
24、的命令:DELIMITER命令。在MySQL中,服务器处理语句的时候是以分号为结束标志的。但是在创建存储过程的时候,存储过程体中可能包含多个SQL语句,每个SQL语句都是以分号为结尾的,这时服务器处理程序遇到第一个分号的时候就会认为程序结束,这肯定是不行的。所以这里使用DELIMITER命令将MySQL语句的结束标志修改为其他符号。例如: DELIMITER $ 执行完这条命令后,程序结束的标志就换成两个美元符“$”了。 要想恢复使用分号“;”作为结束符,运行下面命令即可: DELIMITER ;,存储过程,存储过程体中可以包含所有类型的SQL语句,另外还可以包含以下内容。 (1)局部变量 使
25、用DECLARE语句声明局部变量,例如,声明一个整型变量和两个字符变量: DECLARE num INT(4); DECLARE str1, str2 VARCHAR(6); 说明:局部变量只能在BEGIN_END语句块中声明。 (2)使用SET语句赋值 要给局部变量赋值,可以使用SET语句,例如: SET num=1, str1= hello; 说明:这条语句无法单独执行,只能在存储过程和存储函数中使用。 (3)SELECT.INTO语句 使用SELECTINTO语句可以把选定的列值直接存储到变量中。因此,返回的结果只能有一行。例如: SELECT 姓名,专业 INTO name, proj
26、ectFROM XSBWHERE 学号= 081101;,存储过程,(4)流程控制语句 在MySQL中,常见的过程式SQL语句可以用在一个存储过程体中。例如,IF语句、CASE语句、WHILE语句等。 IF语句。IF-THEN-ELSE语句可根据不同的条件执行不同的操作。语法格式为: IF search_condition THEN statement_list ELSEIF search_condition THEN statement_list . ELSE statement_list END IF 说明:search_condition是判断的条件,statement_list中包含一
27、个或多个SQL语句。当search_condition的条件为真时,就执行相应的SQL语句。 CASE语句。语法格式为: CASE case_valueWHEN when_value THEN statement_listWHEN when_value THEN statement_list .ELSE statement_list END CASE,存储过程,或者: CASEWHEN search_condition THEN statement_listWHEN search_condition THEN statement_list .ELSE statement_list END CA
28、SE 第一种格式中case_value是要被判断的值或表达式,接下来是一系列的WHEN-THEN块,每一块的when_value参数指定要与case_value比较的值,如果为真,就执行statement_list中的SQL语句。如果前面的每一块都不匹配就执行ELSE块指定的语句。CASE语句最后以END CASE结束。 第二种格式中CASE关键字后面没有参数,在WHEN-THEN块中,search_condition指定了一个比较表达式,表达式为真时执行THEN后面的语句。与第一种格式相比,这种格式能够实现更为复杂的条件判断,使用起来更方便。,存储过程,WHILE语句。语法格式为: WHIL
29、E search_condition DOstatement_list END WHILE 说明:语句首先判断search_condition是否为真,为真则执行statement_list中的语句,然后再次进行判断,为真则继续循环,不为真则结束循环。 【例】 创建一个存储过程,实现的功能是删除一个特定学生的信息。 DELIMITER $ CREATE PROCEDURE DELETE_STUDENT(IN XH CHAR(6) BEGINDELETE FROM XSB WHERE 学号=XH; END $ DELIMITER ;,存储过程,【例】 创建一个存储过程,有两个输入参数XH和KCM
30、,要求当某学生某门课程的成绩小于60分时将备注修改为“有课程没过”,大于等于60分时将该成绩修改为60分。 DELIMITER $ CREATE PROCEDURE DO_UPDATE(IN XH CHAR(6), IN KCM CHAR(16) BEGINDECLARE KCH CHAR(3);DECLARE CJ TINYINT;SELECT 课程号 INTO KCH FROM KCB WHERE 课程名=KCM;SELECT 成绩 INTO CJ FROM CJB WHERE 学号=XH AND 课程号=KCH;IF CJ60 THENUPDATE XSB SET 备注=有课程没过 WH
31、ERE 学号=XH;ELSEUPDATE CJB SET 成绩=60 WHERE 学号=XH AND 课程号=KCH;END IF; END$ DELIMITER ;,存储过程,2. 调用存储过程 存储过程创建完后,可以使用CALL语句来调用。语法格式如下: CALL sp_name(参数,.) 例:创建存储过程,实现查询XSB表中学生人数的功能,该存储过程不带参数。 CREATE PROCEDURE DO_QUERY()SELECT COUNT(*) FROM XSB ORDER BY 学号; 调用该存储过程: CALL DO_QUERY();,存储过程,3. 删除存储过程 存储过程创建后需
32、要删除时使用DROP PROCEDURE语句。例如,删除存储过程DELETE_STUDENT可以使用如下语句: DROP PROCEDURE IF EXISTS DELETE_STUDENT;,创建触发器使用CREATE TRIGGER语句,语法格式如下: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt trigger_name。触发器的名称。 trigger_time。触发器触发的时刻,有两个选项AFTER和BEFORE,以表示触发器是在激活它的语句之前还
33、是之后触发。 trigger_event。触发事件,指明激活触发程序的语句的类型。trigger_event可以是INSERT、UPDATE和DELETE,分别表示插入、修改、删除数据时激活触发器。 tbl_name。与触发器相关的表名,在该表上发生触发事件才会激活触发器。同一个表不能拥有两个具有相同触发时刻和事件的触发器。 trigger_stmt。触发器动作,包含触发器激活时将要执行的语句。如果要执行多个语句,可使用BEGIN . END复合语句结构,这样就能使用存储过程中允许的相同语句。,触发器,例:创建一个触发器,当删除表XSB中某个学生的信息时,同时将CJB表中与该学生有关的数据全部
34、删除。 DELIMITER $ CREATE TRIGGER XS_DELETE AFTER DELETEON XSB FOR EACH ROW BEGINDELETE FROM CJB WHERE 学号=OLD.学号; END$ DELIMITER ; 现在验证一下触发器的功能: DELETE FROM XSB WHERE 学号=081101; 使用SELECT语句查看CJB表中的情况: SELECT * FROM CJB; 删除触发器也是使用DROP语句,例如: DROP TRIGGER XS_DELETE;,触发器,创建数据库和表 1. 创建数据库 以创建PXSCJ2数据库为例,创建数据
35、库的方法如下: (1)打开“开始”“程序”“MySQL”“MySQL Administrator”菜单项,Server Host为“localhost”,Username为“root”,输入密码,单击【OK】按钮。,使用界面工具操作MySQL,(2)在MySQL Administrator窗口中展开Catalogs选项栏,出现如图所示的数据库列表,在任意一个数据库名上右击鼠标,选择“Create New Schema”子选项。,使用界面工具操作MySQL,(3)出现如图所示的界面,输入需要创建的数据库名PXSCJ2,单击【OK】按钮。这样数据库PXSCJ2就创建成功了。,使用界面工具操作MyS
36、QL,2. 创建表 若要在数据库PXSCJ2中创建XSB表,步骤如下: (1)在MySQL Administrator窗口中展开Catalogs选项栏,在数据库PXSCJ2上右击鼠标,在弹出的快捷单上选择“Create New Table”选项,或者直接单击【Create Table】按钮。 (2)在弹出的“MySQL Table Editor”窗口中输入表名XSB,在“Columns and Indices”子选框中输入表的各列及数据类型,如图所示,单击【Apply Changes】按钮。在弹出的“Confirm Table Editor”对话框中单击【Execute】按钮,即可成功创建表X
37、SB。,使用界面工具操作MySQL,如果要在数据库中删除表,步骤如下: (1)在MySQL Administrator窗口中展开Catalogs选项栏,选择数据库(如PXSCJ2),在快捷选单上右击要删除的表,选择“Drop Table”选项。 (2)在弹出对话框中单击【Drop Table】按钮,即删除了表。 如果要修改表,可以在步骤(1)中选择“Edit Table”选项,在弹出的窗口中进行修改,修改后单击【Apply Changes】按钮即可完成。,使用界面工具操作MySQL,启动MySQL Administrator,在Catalogs选项栏中选中数据库PXSCJ2,再选中需要操作的表
38、(XSB),右击,在弹出的快捷选单中选择“Edit Table Data”选项,进入操作所选择的表数据窗口,如图所示。 添加记录的方法是:单击图中下方工具栏的“Edit”选项,双击需要输入的地方,将数据写入,每输入一个值,按回车键。每输入完一行值,将光标移到下一行中,如图所示。数据输入完毕后单击【Apply Changes】按钮保存结果。,操作表数据,双击右侧Schemata栏内数据库PXSCJ2中的XSB表,单击【Execute】按钮可查看插入数据后的XSB表。 修改记录的方法和添加数据基本相同。进入上页图所示的窗口后单击“Edit”选项,双击需要修改的地方,输入新记录,修改完后单击【App
39、ly Changes】按钮即可。 删除记录的方法是:在操作数据的窗口,将当前光标移动到要删除的行,单击鼠标右键,在弹出的快捷选单上选择“delete row(s)”选项,再单击【Apply Changes】按钮即删除了该行记录。,图7.14 添加数据,操作表数据,除了用命令行进行查询外,还可以用MySQL的查询工具MySQL Query Browser进行数据查询。 查询方法如下:启动MySQL Query Browser,输入服务器名、用户名和密码(与MySQL Administrator工具一样),在Default Schema栏后的文本框中输入要设定的当前数据库名。连接后进入MySQL
40、Query Browser主窗口,如图所示。,操作表数据,1. 备份数据库 (1)登录MySQL Administrator,在MySQL Administrator管理器窗口选中“Backup”选项栏,在出现的“Backup Project”栏上单击【New Project】按钮,如图所示。,数据库备份和恢复,(2)在Project name栏上输入要创建备份的名称,在Schemata选项框中选择需要创建的数据库名称(以PXSCJ数据库为例),单击【】按钮,在MySQL Administrator中出现如图所示的备份选项。要取消,单击【】按钮。 (3)选择要备份的数据库中的表,单击【Exec
41、ute Backup Now】按钮,出现保存数据对话框,选择要备份的路径,并单击【保存】按钮。备份完成后可以在指定的目录中找到一个.sql格式的文件,里面保存了与数据库相关的一系列SQL语句。,数据库备份和恢复,2. 恢复数据库 (1)登录MySQL Administrator,在MySQL Administrator管理器窗口选中Restore选项栏,在弹出的菜单上选择“Open Backup File”选项。在弹出的对话框中选择需要恢复的备份,单击【打开】按钮,如图所示。,数据库备份和恢复,(2)在随后的恢复选项中,如图所示,选择要恢复的类型,然后单击【Start Restore】按钮即可。 (3)如果提示数据库恢复成功,在Catalogs目录下就能查看数据库恢复的具体情况。,数据库备份和恢复,总结,MySQL数据库简介 MySQL的安装与配置 MySQL基本工具 MySQL数据库操作 建库 建表 存储过程 触发器 备份与恢复,2019/5/17,Database Technology, GUCAS,67,