Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Создание базы данных и наполнение с помощью скрипта (http://forum.oszone.net/showthread.php?t=330089)

maslinaV 26-09-2017 21:09 2767113

Создание базы данных и наполнение с помощью скрипта
 
Создание базы данных и наполнение с помощью скрипта из консоли mysql

Нужно запустить его из консоли mysql, подскажите если кто-знает.



Код:

   
mysql>

система , но которой установлен portable msql - это Windows

Может в настройках mysql есть запрет на запуск исполняемых файлов, или явно нужно указывать директорию, откуда можно запускать скрипты ???

mysql-5.7.19

Цитата:

You can also use scripts from the mysql prompt by using the source command or \. command:
Код:

mysql> source filename;
mysql> \. filename

Искал информацию о пакетном запуске и все рекомендации больше не работатют ( по крайней мере те, что нашел)

Вот простой пример, который создает базу данных.
Скрытый текст
Код:

create database test;
use test;
create table payments(num INT,paydate datetime not null default current_timestamp,receiver int not null )
desc test; # показать описание структуры таблицы
 
insert into p (num,paydate)
values(2,'2017-10-30 15:00:00');
select * from test;



Какое расширение файла должно быть у сценария?
Можно так ?
'd:\db\myscript.mysql'

Вот что получается

Скрытый текст
Код:

mysql> source  "d:\t.txt"
ERROR:
Failed to open file '"d:\t.txt"', error: 22
mysql>


Iska 27-09-2017 05:24 2767182

Цитата:

Цитата maslinaV
Какое расширение файла должно быть у сценария? »

Расширение тут не при чём. Можете использовать типичное «.sql».

Вы должны использовать полный путь к файлу, который не должен обрамляться кавычками, апострофами и т.п.:
Скрытый текст

С кириллицей в путях не работает (с этим не разбирался, навряд ли сие Вам сейчас понадобится).

Цитата:

Цитата maslinaV
Вот простой пример, который создает базу данных. »

Для начала попробуйте выполнить содержимое Вашего сценария построчно в командной строке MySQL, внимательно следя за ответами сервера.

maslinaV 27-09-2017 17:59 2767301

Вот пример, который нужно было запустить.
Скрытый текст
Код:

create database sale2;    # создание базы данных - продажи
use sale2;                # указываем базу данных , для добавления в нее данных и изменения

# создаем таблицу платежей
/*первое поле `num` - это порядковый номер платежа, оно должно быть уникальным, не должно быть пустым;
  `2`-е поле paydate - дата продажи, не должна быть пустой, обязательна к заполению,
по умолчанию подставляется текущая дата и время, которое берется из системных значений
компьютера, на котором работает данная база данных;
поле receiver - получатель платежа, не должно иметь пустого значения;
поле amount - здесь вводится сумма платежа, поле не должно быть пустым, оно имеет в сумме
`10` разрядов,из них:
`2`-разряда после запятой,
`8`-разрядов цифр перед запятой разрядов"*/

create table payments(num  INT not null,
                      paydate datetime not null default current_timestamp,
                      receiver int not null,
                      amount decimal(10,2) not null,
                      primary key(num),
                      unique(num) ); 
# смотрим описание таблицы
desc payments;

# наполняем таблицу


insert into payments (num,paydate,receiver,amount)
              values(1,'2016-10-30 15:00:00',1,35000.5),
                    (2,'2017-11-30 15:25:00',2,25000.5),
                    (3,'2015-11-30 10:25:00',2,15000.5),
                    (4,'2014-11-30 11:25:00',3,10000.5),
                    (5,'2014-11-30 11:25:00',3,10000.5);

# используем, при заполнении таблицы, значение по умолчанию для поля paydate
# поэтому это поле и значения для него опустим из параметров

insert into payments (num,receiver,amount)
              values(6,4,1000.5),
                    (7,2,500.5),
                    (8,3,17000.5),
                    (9,1,100.5),
                    (10,4,15000.5);

# производим выборку всех данных из таблицы payments
select * from payments;

# создаем таблицу получателей
/*первое поле num - это порядковый номер получателя, оно должно быть уникальным, не должно быть пустым;
  `name` - так как это слово зарезервировано, обозначим его обратными кавычками,
обозначим максимальный размер хранимой строки, Указание правильного размера поля таблицы,
может значительно сэкономить занимаемую ею память.
`VARCHAR` - это тип данных - строковые данные переменной длины,сделаем данное поле индексируемым и уникальным
и назначим данному полю первичный ключ;
 
*/

create table receivers( num INT not null,
                      `name` Varchar(255) not null,
                      PRIMARY KEY(`name`), INDEX (`name`), UNIQUE (name));

# смотрим описание таблицы
desc receivers;
 
# наполняем таблицу receivers

    insert into receivers (num,`name`)
              values(1,'ВЭБ'),
                    (2,'АБСОЛЮТ'),
                    (3,'ФОНД СОРЕСА'),
                    (4,'ВАЛЮТНЫЙ РЕЗЕРВНЫЙ ФОНД');
             

# производим выборку всех данных из таблицы receivers
select * from receivers;



А вот результат

Скрытый текст
Код:

mysql> source d:\DB\tmp\create_db.sql
Query OK, 1 row affected (0.01 sec)

Database changed
Query OK, 0 rows affected (0.06 sec)

+----------+---------------+------+-----+------------------
| Field    | Type          | Null | Key | Default
+----------+---------------+------+-----+------------------
| num      | int(11)      | NO  | PRI | NULL
| paydate  | datetime      | NO  |    | CURRENT_TIMESTAMP
| receiver | int(11)      | NO  |    | NULL
| amount  | decimal(10,2) | NO  |    | NULL
+----------+---------------+------+-----+------------------
4 rows in set (0.00 sec)

Query OK, 5 rows affected (0.02 sec)
Records: 5  Duplicates: 0  Warnings: 0

Query OK, 5 rows affected (0.01 sec)
Records: 5  Duplicates: 0  Warnings: 0

+-----+---------------------+----------+----------+
| num | paydate            | receiver | amount  |
+-----+---------------------+----------+----------+
|  1 | 2016-10-30 15:00:00 |        1 | 35000.50 |
|  2 | 2017-11-30 15:25:00 |        2 | 25000.50 |
|  3 | 2015-11-30 10:25:00 |        2 | 15000.50 |
|  4 | 2014-11-30 11:25:00 |        3 | 10000.50 |
|  5 | 2014-11-30 11:25:00 |        3 | 10000.50 |
|  6 | 2017-09-27 17:55:37 |        4 |  1000.50 |
|  7 | 2017-09-27 17:55:37 |        2 |  500.50 |
|  8 | 2017-09-27 17:55:37 |        3 | 17000.50 |
|  9 | 2017-09-27 17:55:37 |        1 |  100.50 |
|  10 | 2017-09-27 17:55:37 |        4 | 15000.50 |
+-----+---------------------+----------+----------+
10 rows in set (0.00 sec)

Query OK, 0 rows affected (0.06 sec)

+-------+--------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| num  | int(11)      | NO  |    | NULL    |      |
| name  | varchar(255) | NO  | PRI | NULL    |      |
+-------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

+-----+----------------------------------------------+
| num | name                                        |
+-----+----------------------------------------------+
|  2 | АБСОЛЮТ                                      |
|  4 | ВАЛЮТНЫЙ РЕЗЕРВНЫЙ ФОНД                      |
|  1 | ВЭБ                                          |
|  3 | ФОНД СОРЕСА                                  |
+-----+----------------------------------------------+
4 rows in set (0.00 sec)

mysql>



Спасибо. Все работает.

Я так понимаю, если в скрипте хоть одна ошибка, тогда в консоль будет выведено только сообщение

Failed to open file '"d:\t.txt"', error: 22,

то есть так синтаксис (при запуске через скрипт) не может контролироваться и остается только догадываться в чем ошибка???

Iska 27-09-2017 18:53 2767307

Цитата:

Цитата maslinaV
Я так понимаю, если в скрипте хоть одна ошибка, тогда в консоль будет выведено только сообщение
Failed to open file '"d:\t.txt"', error: 22,
то есть так синтаксис (при запуске через скрипт) не может контролироваться и остается только догадываться в чем ошибка??? »

Нет, Вы неправильно понимаете. В данном случае ошибка:
Код:

Failed to open file '"d:\t.txt"', error: 22,
не в скрипте, а в аргументе команды «source». В случае же ошибки в тексте самого скрипта Вы увидите другое сообщение об ошибке.

Например, имеем такой вот скрипт:
C:\My projects\Some Script.sql
SELECT * FROM myschema.sometable;
bla-bla-bla;
SELECT * FROM myschema.sometable;

Исполняем его, и видим:
Скрытый текст

Конечно, что ошибка помечается строкой 1 не есть хорошо и правильно, но тут я не знаю, можно ли как-то изменить такое поведение, я не занимался MySQL.


Время: 12:25.

Время: 12:25.
© OSzone.net 2001-