#bash
#bash
Вопрос:
#!/bin/bash
MYSQL="/usr/bin/mysql -uroot "
function create_db()
{
local db_name=${1}
$MYSQL<<!
create database IF NOT EXISTS ${db_name};
!
}
###-------------------------tb_bind_userid_xxx-------------------------------------
function create_table_userid
{
$MYSQL << !
create table if NOT EXISTS bind_pay.tb_bind_userid_${1}(
b_userid bigint not null,
b_membercode bigint not null ,
PRIMARY KEY (b_userid)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
!
}
$MYSQL
Будет постоянным при вызовах функций или каждый раз будет повторно подключаться?
Я не думаю, что create_table_userid
если он каждый раз повторно подключается, он будет работать так, как ожидалось, потому что в нем еще не указано имя базы данных.
Ответ №1:
Ну, поскольку вы будете вызывать функцию каждый раз, когда захотите создать таблицу, вы будете вызывать mysql
для подключения к базе данных каждый раз. Если вам нужно постоянное соединение, один из способов — использовать библиотеку mysql, которая поддерживается большинством основных языков программирования в наши дни, Perl / Python / Ruby / PHP и т.д. Вы можете установить соединение с базой данных, затем делать все, что захотите, а затем, наконец, закрыть соединение. например, в документации Python/Mysql
import MySQLdb
conn = MySQLdb.connect (host = "localhost",
user = "testuser",
passwd = "testpass",
db = "test")
cursor = conn.cursor ()
cursor.execute ("SELECT VERSION()")
row = cursor.fetchone ()
print "server version:", row[0]
cursor.close ()
conn.close ()
Как вы можете видеть, для подключения к базе данных открыто соединение conn
. Затем, используя дескриптор соединения (или, скорее, дескриптор базы данных), все выполняется, и затем, наконец, соединение закрывается.
Комментарии:
1. @wireshark, как написано в вопросе, для каждого вызова $ MYSQL существует отдельный процесс, поэтому он не может быть постоянным.
Ответ №2:
$MYSQL
это просто переменная, поэтому ваш код запускает mysql каждый раз, когда он вызывает одну из этих функций.
Вы можете достаточно легко создать постоянное соединение с mysql; просто попросите вашу программу записать свой sql для вывода, а затем передать все результаты в mysql:
(
create_table "foo"
create_table "bar"
) | mysql
create_table() {
cat <<!
create table $1 ....
!
}