* Изпълняване на заявки от текстов файл

Публикувано на 14 февруари 2009 в раздел Бази от Данни.

Често се налага да изпълним серия от заявки към база от данни. Понякога те може да са изключително много на брой и въвеждането им една по една ще бъде изключително неудобно. Поради тази причина е въведена възможност за импортиране на серия от заявки, които са записани в текстов файл.

Това всъщност е доста честа практика, когато например създаваме база данни. Нека разгледаме например следната поредица от заявки:

DROP DATABASE IF EXISTS `university`;

CREATE DATABASE `university`;

CREATE TABLE `university`.`university` (
	`id` TINYINT NOT NULL  AUTO_INCREMENT ,
	`name` VARCHAR( 255 ) NOT NULL ,
	`founded` DATE NULL DEFAULT NULL ,
	PRIMARY KEY ( `id` )
) ENGINE = InnoDB;

CREATE TABLE `university`.`faculties` (
	`id` TINYINT NOT NULL  AUTO_INCREMENT ,
	`name` VARCHAR( 255 ) NOT NULL ,
	`univ_id` TINYINT NOT NULL ,
	`dekan_id` INT NULL DEFAULT NULL ,
	PRIMARY KEY ( `id` ) ,
	FOREIGN KEY ( `univ_id` )
		REFERENCES `university`.`university`( `id` )
		ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB;

CREATE TABLE `university`.`professors` (
	`id` INT NOT NULL AUTO_INCREMENT ,
	`firstname` TINYTEXT NOT NULL ,
	`middlename` TINYTEXT NULL DEFAULT NULL ,
	`lastname` TINYTEXT NOT NULL ,
	`phone` VARCHAR( 32 ) NULL DEFAULT NULL ,
	`address` TEXT NULL DEFAULT NULL ,
	`EGN` BIGINT( 10 ) NOT NULL ,
	`faculty_id` TINYINT NOT NULL,
	PRIMARY KEY ( `id` ),
	FOREIGN KEY ( `faculty_id` )
		REFERENCES `university`.`faculties`( `id` )
		ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB;

CREATE TABLE `university`.`subjects` (
	`id` TINYINT NOT NULL  AUTO_INCREMENT ,
	`name` VARCHAR( 255 ) NOT NULL ,
	`horarium_hr` SMALLINT NOT NULL ,
	`lead_professor_id` INT NOT NULL ,
	PRIMARY KEY ( `id` ) ,
	FOREIGN KEY ( `lead_professor_id` )
		REFERENCES `university`.`professors`( `id` )
		ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB;

CREATE TABLE `university`.`students` (
	`firstname` TINYTEXT NOT NULL ,
	`middlename` TINYTEXT NULL DEFAULT NULL ,
	`lastname` TINYTEXT NOT NULL ,
	`phone` VARCHAR( 32 ) NULL DEFAULT NULL ,
	`address` TEXT NULL DEFAULT NULL ,
	`faknum` BIGINT( 12 ) NOT NULL ,
	PRIMARY KEY ( `faknum` )
) ENGINE = InnoDB;

CREATE TABLE `university`.`zapisani_studenti` (
	`student_fnum` BIGINT( 12 ) NOT NULL ,
	`subject_id` TINYINT NOT NULL ,
	FOREIGN KEY ( `student_fnum` )
		REFERENCES `university`.`students`( `faknum` )
		ON DELETE CASCADE ON UPDATE CASCADE,
	FOREIGN KEY ( `subject_id` )
		REFERENCES `university`.`subjects`( `id` )
		ON DELETE CASCADE ON UPDATE CASCADE,
        PRIMARY KEY( `student_fnum`, `subject_id` )
) ENGINE = InnoDB;

CREATE TABLE `university`.`zadochnici` (
	`student_fnum` BIGINT( 12 ) NOT NULL ,
	`firma` VARCHAR( 255 ) NULL DEFAULT NULL ,
        FOREIGN KEY ( `student_fnum` )
		REFERENCES `university`.`students`( `faknum` )
		ON DELETE CASCADE ON UPDATE CASCADE,
        PRIMARY KEY( `student_fnum` )
) ENGINE = InnoDB;

Обърнете внимание на първата заявка. Тя означава „ако съществува база данни с име university, то я изтрий“. Напомняме, че изпълненията на заявки са необратими – веднъж изтрита всичката информация от базата данни изчезва перманентно.

Сега копирайте текста и го запишете в текстов файл. Нека например той е с име „university.sql“ и е записан в директория “c:\“. За да „вмъкнете“ заявките, то влезте в „MySQL Client“ и изпълнете командата:

source c:/university.sql;

Тук специално отбелязваме, че в пътищата до файловете трябва да използвате обратната наклонена черта „/“ вместо стандартната за Windows „\“. Резултатът след изпълнение на командата ще бъде следния:

mysql source command

Тук ще ви покажем как можете да разглеждате структурата на съществуващи бази данни. Чрез командата „SHOW databases“ можете да видите наличните бази данни на сървъра. Ще видите новосъздадената база данни „university“ в списъка. Сега бихме искали да „прелистим“ тази база данни и да видим какви таблици има. Първо трябва да кажем, че ще „използваме“ тази база данни:

USE university;

След това изпълнете:

SHOW tables;

Ако желаете да видите полетата на дадена таблица (например professors) използвайте командата DESC:

DESC professors;

Резултатът би трябвало да бъде следния:

mysql desc show

Разгледайте системната таблица mysql и се опитайте да отгатнете какво съдържа тя…



Trackback URI | RSS за коментарите

Пусни коментар