MISTERY

Obtaining the value of column that uses AUTO_INCREMENT after an INSERT statement can be achieved in a number of different ways. To obtain the value immediately after an INSERT, use a SELECT query with the LAST_INSERT_ID() function.

For example, using Connector/ODBC you would execute two separate statements, the INSERT statement and the SELECT query to obtain the auto-increment value.

INSERT INTO tbl (auto,text) VALUES(NULL,'text');
SELECT LAST_INSERT_ID();

If you do not require the value within your application, but do require the value as part of another INSERT, the entire process can be handled by executing the following statements:

INSERT INTO tbl (auto,text) VALUES(NULL,'text');
INSERT INTO tbl2 (id,text) VALUES(LAST_INSERT_ID(),'text');

Certain ODBC applications (including Delphi and Access) may have trouble obtaining the auto-increment value using the previous examples. In this case, try the following statement as an alternative:

SELECT * FROM tbl WHERE auto IS NULL;

This alternative method requires that sql_auto_is_null variable is not set to 0. See Server System Variables.

See also How to Get the Unique ID for the Last Inserted Row.








Reference : https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-usagenotes-functionality-last-insert-id.html








저작자 표시
신고

Comment +0

소프트웨어 이름 : Sequel Pro

제  작 : Sequel Pro & CocoaMySQL Teams 

홈페이지 : http://www.sequelpro.com

운영체제 : MacOS X

분  류 : DB GUI 툴

가격 / 라이선스 : 프리웨어 (기부) / MIT License



MS SQL Server를 사용해 본 사람이라면, 기본적으로 설치되는 쿼리 분석기(Query Analyzer)를 많이 사용했을 것입니다. (사실 MS 툴들이 일단 한번 설치하면 토탈 솔루션으로 제공이 되니 이것저것 다른 생각 할 것 없이 쉽게 집중할 수 있는 장점이 있는것 같습니다.)


그러나 MySQL이든, MariaDB든 아쉽게도 MS의 쿼리 분석기와 같은 GUI 툴을 기본적으로 제공하지 않고 있습니다. (사실 Oracle도 마찬가지고요. 요즘은 어떤지 모르겠는데, 예전에 다니던 회사에서 보니 TOAD라는 툴을 많이 쓰는것 같더군요. 오래전 일이지만...)


그렇다고, 터미널에서 콘솔상에서 일일이 텍스트화면을 보면서 작업하기에는 너무 무식한 방법인것 같고요.


phpMyAdmin을 쓰기도 하지만, 아무래도 웹상에서 사용하는 툴이라 한계가 있습니다. 보안상 괜찮을지도 사실 걱정이 되고요.


여튼, 직접 지원이 안되서 아쉽지만 써드 파티들이 만들어준 툴들을 사용하면 어느정도 편리하게 GUI 방식으로 DBMS를 관리 할 수 있습니다.


MySQL을 지원하는 툴들도 여러가지가 있습니다만, 저는 맥을 주로 사용하기 때문에 맥에서 사용할 만한 쓸만한 툴이 없을까 찾아보았습니다.


그래서 Sequel Pro 라는 툴을 찾아 내었는데요, 맥용 네이티브 어플리케이션으로 만들어졌기 때문에 시원시원하게 쓸 수 있을 것 같습니다. (다른 툴도 하나 있던데, Java로 되어 있어서 아무래도 시원스럽지는 못하더군요.)


MySQL GUI 둘이지만, MySQL과 호환되는 MariaDB에서도 사용할 수 있습니다.


Donate(기부) 방식의 오픈소스 툴이라 무료로 사용 가능하며, 원하면 댓가를 기부 할 수도 있습니다. MIT License로 소스가 공개되어 있기 때문에 필요하다면 수정하거나 확장해서 사용해도 되겠군요.


다만, 업데이트 주기가 빠르지는 않은것 같습니다. 버그도 존재 하기도 하고요. 하지만 무료 툴로써 이정도면 소규모에서 쓰기에는 괜찮을 것 같습니다.


공식 웹사이트는 http://www.sequelpro.com 입니다.



(출처 : http://www.sequelpro.com )


위 사이트에서 다운로드 받을 수 있고요, 현재 MacOS X 10.9 매버릭스에서 사용하고 있는데, 아직까지는 큰 문제는 안보이는 것 같습니다.


다만, SSH 접속 즐겨찾기 만드는 부분이 약간 문제가 있네요.


새로 즐켜 찾기를 만들기 위해 [+]를 누르고 바로 [SSH] 탭을 누르면?




아랫 부분 입력창이 짤리는 현상이 일어나네요. 이게 MacOS X 산사자 버전에서는 안그랬었던것 같은데... (빨간줄 그어놓은 부분이 늘어나면서 입력 항목이 더 늘어나야 정상입니다.)


그렇지만, 나오게 하는 방법은 있더군요. (이래저래 하다 보니 되더라고요)


어떻게 하면 되냐면요.... 지금 이 상태에서...



[Standard] 탭을 누르고, 위에 빨간 네모 친 부분중에 Name 항목 'New Favorite'라고 기본으로 적혀 있는 내용을 임의의 내용으로 바꿉니다. 그러면 아래 빨간 네모처럼 [Connect], [Add to Favorites]등등 버튼들이 나옵니다.


이 상태에서 [SSH] 탭을 다시 눌러 보면?



이렇게 아까는 나오지 않던 아래 입력 하는 부분들도 나오게 됩니다. 이 무슨 ... --;


여튼, 요즘은 서버에 SSH로 접속들 많이 하지요? 그런 경우 위 항목을 다 채우면 SSH로 서버의 MySQL 또는 MariaDB에 접속 할  있습니다.


참고로 간략하게 항목들을 설명하면,

  • Name : 왼쪽 즐겨찾기에 들어갈 이름입니다. 아무거나 쉽게 알수 있는 이름을 지어주면 됩니다.
  • MySQL Host : MySQL 또는 MariaDB가 있는 서버의 주소 입니다. 만약에 test.com 에 DBMS가 있다면, test.com 으로 입력하면 됩니다. (IP만 있다면, IP 주소로 입력)
  • Username : DB 접속 유저 이름
  • Password : DB 접속 유저의 비밀번호
  • Database : 굳이 입력하지 않아도 접속후에 선택하면 됩니다.
  • Port : 기본 Port번호를 사용하지 않는다면 Port번호 입력
  • SSH Host : SSH 접속 주소 (서버 주소가 test.com이라면, test.com으로 입력)
  • SSH User : 서버 로그인 계정
  • SSH Password : 서버 로그인 계정 호
  • SSH Port : SSH 포트를 다르게 했다면 포트 번호 입력

항목들 모두 입력하고 [Test Connection] 버튼 누르면 정상적으로 접속이 되는지 확인도 해 줍니다.


다 입력 했으면 [Save changes]를 눌러 저장합니다.


이제 [CONNECT] 버튼으로 접속 하면,



이렇게 Sequel Pro의 GUI가 반겨주네요.


Choose Database.. 에서 사용하고 싶은 DB를 선택하거나 추가하거나 삭제 할 수 있습니다.



이런식으로 말이죠.



이렇게 DB 유저를 생성하거나 권한을 조정하거나 하는 유저 관리도 쉽게 되어 있고요,



당연히 쿼리도 쉽게 됩니다. 결과도 테이블 형태로 깔끔하게 볼 수도 있고요.


여기서 세세한 사용법까지 얘기 할 수는 없지만, 한번 써보는것도 괜찮을 것 같습니다.














출처 : http://wingsnote.com/22
















신고

Comment +0

간간히 DB 작업을 위해서 SQLGate를 사용하였다.

회사에서 사용하기위해서 작년부터 프리랜서 버전을 구입하려하였는데..

늘 시기를 놓치곤 하였다.

약 5년 정도 된것 같다.. 너무도 익숙해 져서.. 다른것을 사용하기가..

프리랜서 버전은 앞으로 안판다 하여.. 어쩔수 없이.. 이제 놓아 주려 한다..


새로운 툴을 찾아 보는 중이다..



1.  HeidiSQL

http://www.heidisql.com/download.php

장 : 가볍다. 빠른 업데이트(단점이 될수도). 무설치 버젼존재, gui로 데이터 입력,수정,삭제 가능 
단 : 쿼리 실행 단축키가 하나만 존재(F9), 다수의 실행 결과값을 클립보드로 복사가 불가능함(치명적인 단점), sql 창이 하나만 존재

2.   MySql WorkBench

http://www.mysql.com/downloads/workbench/

장 : HeidiSQL의 단점을 모두 커버함. 무설치 버젼. 쿼리외 다른 db관리 기능 지원, 깔금한 화면,
단 : 실행시 닷넷 프레임웍 4.0 요구. 약간 무거움,gui를 통한 데이터 수정 삭제 불가. 

3. Toad for MySQL

http://www.toadworld.com/DOWNLOADS/Freeware/ToadforMySQLFreeware/tabid/561/Default.aspx

장 : 기존의 오라클용 Toad와 비슷한 UX 지원. 많은 기능 탑재.
단 : 무설치버젼 X, 셋 중 가장 무거운 듯. 다소 복잡해 보이는 ui.





출처 : http://priceless.tistory.com/352











신고

Comment +0

Oracle로 넘어간 후 Oracle DB와 많이 비슷해졌다 했는데..

여전히 Oracle은 못따라 가는 듯 하다.


Sequence를 만들기위해 여러 방법을 알아보다 Funtion을 통해서 만드는 법을 생각하였다.

대충 요런 느낌.. ㅋㅋ



내 글씨는 여기서 처음 공개해서.. 조금 미안하다 ㅋㅋ

메모라 막써서 오타도 있고 수정도 하고

결론적으로 아래와 같은 함수를 만들었다.


DROP FUNCTION IF EXISTS `test`.`get_seq`;

CREATE FUNCTION `test`.`get_seq`(tmp_seq_name VARCHAR(10)) RETURNS int(4)

    READS SQL DATA

BEGIN

DECLARE result_no int default 0;


SET result_no = (SELECT seq_no from test_master_seq where seq_name = tmp_seq_name);

if(result_no > 9998) then

UPDATE test_master_seq SET seq_no = 1 WHERE seq_name = tmp_seq_name;

set result_no = 1;


else

UPDATE test_master_seq SET seq_no = result_no+1 WHERE seq_name = tmp_seq_name;

set result_no = result_no+1;


end if;

 RETURN result_no;

END


테이블은 아래와 같고..


CREATE TABLE `nfv_master_seq` (

  `seq_name` varchar(10) COLLATE utf8_bin NOT NULL,

  `seq_no` int(4) NOT NULL,

  PRIMARY KEY (`seq_name`)

);


대충 9999가 넘으면 1로 초기화 하는 그런 시퀀스이다.

장점은.. 흠.. 파라메터 값에 따른 Sequence를 생성할 수 있어서 하나로 통합관리가 가능하다.

좋은 Sequence인줄은 모르겠다. 성능테스트 이런건 안했고 원하는 포멧에 맞게 가공하기 위해 만든것이기에..



일단.. 초기값 설정 : INSERT INTO master_seq VALUES ('tab01',1)

값을 불러올땐.. 요렇게.. : SELECT get_seq('tab01')



완성이 되었다. 근데.. 권한 문제 오류가 났다..

Reference : https://stackoverflow.com/questions/6434573/mysql-execute-command-denied-to-user-localhost-for-routine-error


암튼 권한 설정을 아래와 같이 해주면 끄읏!!

GRANT EXECUTE ON PROCEDURE TestMediaControl.monthavrage TO 'jeinqa'@'%';

프로시저 말고 Function이면.. 

>>> GRANT EXECUTE ON PROCEDURE `db_name`.`procedure_name` TO 'user_id'@'host' ;

or

>>> GRANT EXECUTE ON PROCEDURE `db_name`.`function_name` TO 'user_id'@'host' ;


>>> flush privileges;



이상!!







신고

Comment +0

MySQL 설치와 초기 설정

먼저 MySQL을 설치 할 수 있는 검색해본다.
yum --enablerepo=remi,remi-test list mysql mysql-server
[root@db2 ~]# yum --enablerepo=remi,remi-test list mysql mysql-server
Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
Excluding mirror: mirror.khlug.org
Excluding mirror: data.nicehosting.co.kr
 * base: www.ftp.ne.jp
Excluding mirror: mirror.khlug.org
Excluding mirror: data.nicehosting.co.kr
 * extras: www.ftp.ne.jp
 * remi: iut-info.univ-reims.fr
 * remi-test: iut-info.univ-reims.fr
Excluding mirror: mirror.khlug.org
Excluding mirror: data.nicehosting.co.kr
 * updates: www.ftp.ne.jp
base                                                     | 3.7 kB     00:00
extras                                                   | 3.5 kB     00:00
remi                                                     | 2.9 kB     00:00
remi/primary_db                                          | 220 kB     00:02
remi-test                                                | 2.9 kB     00:00
remi-test/primary_db                                     |  60 kB     00:01
updates                                                  | 3.5 kB     00:00
Available Packages
mysql.x86_64                           5.5.19-1.el6.remi                    remi
mysql-server.x86_64                    5.5.19-1.el6.remi                    remi
remi Repo를 통해서 5.5.19 최신 버전을 사용할 수 있다. 이제 설치해보도록 한다.
yum --enablerepo=remi,remi-test install mysql mysql-server
[root@db2 ~]# yum --enablerepo=remi,remi-test install mysql mysql-server
Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
Excluding mirror: mirror.khlug.org
Excluding mirror: data.nicehosting.co.kr
 * base: www.ftp.ne.jp
Excluding mirror: mirror.khlug.org
Excluding mirror: data.nicehosting.co.kr
 * extras: www.ftp.ne.jp
 * remi: iut-info.univ-reims.fr
 * remi-test: iut-info.univ-reims.fr
Excluding mirror: mirror.khlug.org
Excluding mirror: data.nicehosting.co.kr
 * updates: www.ftp.ne.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package mysql.x86_64 0:5.5.19-1.el6.remi will be installed

... 중략 ...

warning: rpmts_HdrFromFdno: Header V3 DSA/SHA1 Signature, key ID 00f97f56: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
Importing GPG key 0x00F97F56:
 Userid : Remi Collet <RPMS@FamilleCollet.com>
 Package: remi-release-6-1.el6.remi.noarch (installed)
 From   : /etc/pki/rpm-gpg/RPM-GPG-KEY-remi
Is this ok [y/N]: y
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Warning: RPMDB altered outside of yum.
** Found 1 pre-existing rpmdb problem(s), 'yum check' output follows:
kernel-2.6.32-220.el6.x86_64 has missing requires of kernel-firmware >= ('0', '2.6.32', '220.el6')
  Installing : mysql-libs-5.5.19-1.el6.remi.x86_64                         1/12

WARNING : This MySQL RPM is not an official Fedora/Redhat build and it
overrides the official one. Don't file bugs on Fedora Project nor Redhat.
Use dedicated forums http://forums.famillecollet.com/

  Installing : 1:perl-Pod-Escapes-1.04-119.el6_1.1.x86_64                  2/12
  Installing : 1:perl-Module-Pluggable-3.90-119.el6_1.1.x86_64             3/12
  Installing : 1:perl-Pod-Simple-3.13-119.el6_1.1.x86_64                   4/12
  Installing : 4:perl-libs-5.10.1-119.el6_1.1.x86_64                       5/12
  Installing : 3:perl-version-0.77-119.el6_1.1.x86_64                      6/12
  Installing : 4:perl-5.10.1-119.el6_1.1.x86_64                            7/12
  Installing : perl-DBI-1.609-4.el6.x86_64                                 8/12
  Installing : mysql-5.5.19-1.el6.remi.x86_64                              9/12
  Installing : compat-mysql51-5.1.54-1.el6.remi.x86_64                    10/12
  Installing : perl-DBD-MySQL-4.013-3.el6.x86_64                          11/12
  Installing : mysql-server-5.5.19-1.el6.remi.x86_64                      12/12

Installed:
  mysql.x86_64 0:5.5.19-1.el6.remi    mysql-server.x86_64 0:5.5.19-1.el6.remi

Dependency Installed:
  compat-mysql51.x86_64 0:5.1.54-1.el6.remi
  mysql-libs.x86_64 0:5.5.19-1.el6.remi
  perl.x86_64 4:5.10.1-119.el6_1.1
  perl-DBD-MySQL.x86_64 0:4.013-3.el6
  perl-DBI.x86_64 0:1.609-4.el6
  perl-Module-Pluggable.x86_64 1:3.90-119.el6_1.1
  perl-Pod-Escapes.x86_64 1:1.04-119.el6_1.1
  perl-Pod-Simple.x86_64 1:3.13-119.el6_1.1
  perl-libs.x86_64 4:5.10.1-119.el6_1.1
  perl-version.x86_64 3:0.77-119.el6_1.1

Complete!
설치가 되었지만 몇가지 설정해주어야 할 것이 있다.
  • MySQL 서버의 관리자(root) 암호 설정
  • anonymous 계정 삭제
  • 불필요한 test 데이타베이스 삭제
[root@db2 ~]# /etc/init.d/mysqld start
Initializing MySQL database:  Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h db2.i-pharm.org password 'new-password'

Alternatively you can run:
/usr/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/bin/mysqlbug script!

                                                           [  OK  ]
Starting mysqld:                                           [  OK  ]

[root@db2 ~]#
mysql을 실행하면 별다른 인증과정 없이 접속할 수 있다.
mysql 데이타베이스의 root 계정은 리눅스 운영체제의 root 계정과는 별도의 비밀번호이다.
[root@db2 ~]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.19 MySQL Community Server (GPL) by Remi

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> Bye
암호 입력없이 그냥 접속이 되는 것인 상당히 위험하므로, 반드시 암호를 설정한다.
작은따옴표도 입력해야 한다.
[root@db2 ~]# /usr/bin/mysqladmin -u root password '암호'


[root@db2 ~]# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)


[root@db2 ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.5.19 MySQL Community Server (GPL) by Remi

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> Bye
mysql_secure_installation 명령을 이용하면 더 간단히 설정할 수 도 있다.
[root@db2 ~]# /usr/bin/mysql_secure_installation




NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!


In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] n
 ... skipping.

By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...



All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!

Database 생성 및 사용자 생성

새로운 사용자 생성
CREATE USER wordpress@localhost IDENTIFIED BY "some_good_password_for_wordpress";
새로운 데이타베이스 생성
CREATE DATABASE wordpress_blog;
필요한 권한 설정
GRANT ALL ON wordpress_blog.* TO wordpress@localhost;
권한 설정 적용
FLUSH PRIVILEGES;












출처 : http://sekwonlee.blogspot.kr/2014/12/centos-66-64bit-lamplinux-apache-mysql.html

깔끔하게 잘 정리된 듯하다.

















신고

Comment +1

티스토리 툴바