ALTER TABLE [사용할테이블명] ADD CONSTRAINT FOREIGN KEY([사용할테이블의키]) REFERENCES [대상이될테이블]([대상이될테이블의키]) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE hint_data ADD CONSTRAINT FOREIGN KEY(language_code_idx) REFERENCES language_code(idx) ON DELETE CASCADE On UPDATE CASCADE;

 

 

hint_data 테이블의 language_code_idx 의 키를 참조될 테이블 language_code 테이블의 idx 를 참조하도록 합니다.

 

인덱스가 꺼져있는지 확인할것

 

인덱스 비활성화

ALTER TABLE users DISABLE KEYS;

 

 

인덱스 활성화

ALTER TABLE [테이블명] ENABLE KEYS

 

 

구조만 내보내기

mysqldump -d -uroot -p db > db_structure.sql

 

내용만 내보내기

mysqldump -uroot -p db --no-create-info --quick --no-autocommit=1 --single-transaction=1 --extended-insert=1 > db.sql

 

DB 파일 내보내기 Export

 

데이터가 큰 db 를 export, import 를 하는 경우 많은 시간이 소요되기 때문에

조금이라도 시간을 줄여보자.

 

mysqldump -uroot -p [디비명] > [파일명]
mysqldump -uroot -p db > db.sql

 

평소에 사용하던 db 에 있는 데이터를 sql 파일 형태로 내보기로 보낸다.

하지만 다음과같은 속성을 이용하면 시간을 조금더 줄일수있다.

 

--no-autocommit=1 : 

  autocommit을 끄고 개의 테이블 입력 완료후 commit 수행, 오류 발생시 다시 처음부터 시작함

 

--single-transaction=1 :

  작업 후에 변경 된 데이터의 내역을 다시 적용하지 않는다.

 

--extended-insert=1 : 

  INSERT 구문이 늘어나는 것을 막아준다.

 

--skip-disable-keys

인덱스 비활성화를 막습니다. 덤프의 경우 인덱스를 비활성화 하고 INSERT 를 빠르게 하지만

이미 저장되어있는 데이터가 많은경우 오히려 인덱스를 비활성화 하는데 오랜시간이 소요될수있습니다.

넣으려는 데이터베이스에 이미 데이터값이 많이 존재하는경우에는 인덱스 비활성화를 하지 않는것이

더 빠른 작업에 도움이 됩니다.

 

 

 

다음과 같이 사용할수있다.

 

mysqldump -uroot -p db --no-autocommit=1 --single-transaction=1 --extended-insert=1 > db.sql

 

사용하는 경우 확연히 시간이 줄어드는것을 확인할수있다.

 

 

DB 파일 가져오기 import

 

mysql 에서 가져오는 경우 속성값에 영향을 받으므로 my.conf 에서 속성값을 수정하여준다.

 

sort_buffer_size = 1000M

myisam_sort_buffer_size = 1000M

인덱스 를 정렬하거나 또는 인덱스를 생성할 때 할당되는 버퍼의 크기입니다 .

 

myisam_max_sort_file_size = 10G

MyISAM인덱스 를 재생성하는 동안 MySQL이 사용할 수 있는 임시 파일의 최대 크기 파일 크기가 이 값보다 크면 인덱스가 대신 키 캐시를 사용하여 만들어지므로 속도가 느립니다. 값은 바이트 단위로 제공됩니다.

 

max_allowed_packet = 1000M

bulk_insert_buffer_size = 256M

key_buffer_size = 500M

 

 

mysql -u root -p db < db.sql

 

 

이후 

service mysql restart

 

재시작하여 적용하면 된다.

 

 

 

Got fatal error 1236 from master when reading data from binary log: 'log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master; the first event 'mysql-bin.000091'


 

 저 같은 경우에는 replication 을 사용하는중 마스터 서버를 재부팅할때 발생하였습니다.


 


 이렇게 현재 읽고있는 log 를 다음으로 변경하여 수정하였습니다.

 


https://www.percona.com/blog/2014/10/08/mysql-replication-got-fatal-error-1236-causes-and-cures/



  • NULL . 값은 NULL 값입니다.

  • INTEGER . 값 1에 저장된 정수, 2, 3, 4의 값의 크기에 따라 6, 또는 8 바이트이다.

  • REAL . 값은 8 바이트 IEEE 부동 소수점 숫자로 저장 부동 소수점 값이다.

  • TEXT . 값은 데이터베이스 인코딩 (UTF-8, UTF-16BE 또는 UTF-16LE)를 사용하여 저장된 텍스트 문자열이다.

  • BLOB . 값은 입력 된대로 정확히 저장된 데이터의 블롭이다.




android에서 SQLite를 사용하게 되면서 이래저래 작업을 하다가 boolean값을 사용할일이 있어서

이래저래 찾다보니..헐..

SQLite에서는 boolean값을 지원을 안해준다네..; 이런



1.1 Boolean Datatype

SQLite does not have a separate Boolean storage class. Instead, Boolean values are stored as integers 0 (false) and 1 (true).




펌 http://www.sqlite.org/datatype3.html


 안녕하세요 생존본능입니다.

 이번에 확인해볼건 현재 DataBase에 있는 모든 테이블을 가져오기입니다.

 우선 테이블의 모든 컬럼 정보를 가지고있는 건 INFORMATION_SCHEMA.COLUMNS 입니다.

 

SELECT * FROM INFORMATION_SCHEMA.COLUMNS




 여기서 필요한것은 " table_name " 이고 행이 모두표시된것이기 때문에 table_name 으로

 group by 를 설정하면됩니다.

SELECT table_name FROM INFORMATION_SCHEMA.COLUMNS group by table_name





 그러면 정상적으로 현재 데이터베이스에서 모든 테이블을 가져오게 됩니다.

 이런 방법을 찾긴했는데 혹시 더 간단한 방법이 있으면 저도 알려주세요.^^

  감사합니다.

'개발 > SQL' 카테고리의 다른 글

Got fatal error 1236 from master when reading data from binary log  (0) 2016.04.24
SQLite 변수의 데이터 유형  (0) 2013.12.26
MS-SQL 문제 9문  (0) 2011.05.18
MS-SQL Veiw  (0) 2011.05.18
MS-SQL 문제 7문  (0) 2011.05.18

begin tran
/** BEGIN TRAN... ROLLBACK TRAN으로 EMP 테이블의 무결성을
유지할 것***/

--1. 30번 부서 사원들의 직위, 이름, 월급을 담는 VIEW를 만들어라.
create view view01
as
select job,ename,sal
from emp
where deptno = 30

select * from view01


--2. 30번 부서 사원들의  직위, 이름, 월급을 담는 VIEW를 만드는데,
-- 각각의 컬럼명을 직위, 사원이름, 월급으로 ALIAS를 주고 월급이
-- 300보다 많은 사원들만 추출하도록 하라.

alter view view02
as
select job  as [직위]
,  ename as [이름]
,  sal  as [월급]
from emp
where sal > 300

--3. 부서별 최대월급, 최소월급, 평균월급을 담는 VIEW를 만들어라.

create view view03 as
select max(sal) as[max]
,  min(sal) as[min]
,  avg(sal) as[avg]
from emp
group by deptno

select * from view02

--4. 부서별 평균월급을 담는 VIEW를 만들되, 평균월급이 2000 이상인
-- 부서만 출력하도록 하라.

alter view view02 as
select avg(sal) as [avgsal]
from emp
where sal > 2000
group by deptno

exec sp_help view03

--5. 직위별 총월급을 담는 VIEW를 만들되, 직위가 MANAGER인
-- 사원들은 제외하고 총월급이 3000이상인 직위만 출력하도록 하라.

alter view view02 as
select sum(sal) as[sal]
from emp
where job != 'manager'
group by deptno
 having sum(sal) > 3000


--6. 30번 부서 사원의 부서번호, 사원번호, 사원이름, 월급을 담는
-- VIEW를 작성하되 다른 부서에서 근무하는 사원들의 레코드는
-- 입력 및 수정하지 못하도록  WITH CHECK OPTION을 사용하라.

create view view06
as
select deptno, empno, ename, sal
from emp
where deptno = 30
with check option;

 

--7. 20번 부서에서 근무하는 사원의 이름, 월급, 커미션, 부서번호를
-- 담는 VIEW를 작성하되, 그 누구도 VIEW의 정의를 보지 못하도록 하라.

create view view07 with encryption
as
select ename, sal, comm, deptno
from emp
where deptno = 20

exec sp_helptext view07

--8. 7번 문제에서 만든 VIEW를 20번 부서에서 근무하는 사원의 이름과
-- 월급만 담는 VIEW가 되도록 수정하고 다시 암호화하여라.
alter view view07 with encryption
as
select ename, sal
from emp
where deptno = 20

-- 9. 위의 VIEW를 삭제하라.
drop view view01,view02,view03,view04,view05,view06,view07


begin tran
--view
/*
보다, 실제테이블은 아니며, 실제 테이블의 특정 부분을 보기 위한
구문을 담고있는 객체.
보안 , 편리성
view를수정할경우 기본값도 수정됨
*/

create view view01
as
select empno, ename, sal
from emp

select * from view01

create view view02
as
select empno, emp.deptno, dname
from emp, dept
where emp.deptno = dept.deptno
 and emp.deptno in(10,20)
 
select* from view02

update view01
set sal = 9999
where ename = 'smith'

select * from emp

insert view01 values(8888,'tom',500)

alter view view01 with encryption
as
select empno, ename, sal
from emp


/*
view03
직업별 평균 월급을 담는 뷰 생성.
*/

alter view view01
as
select job , avg(sal) as [avgsal]
from emp
group by job

update view01
set avgsal = 3000
where job = 'clerk'


/*
view04
사원이름, 월급을 담는 뷰 생성 단, 월급이 높은 사람부터 출력(내림차순)
*/

--order by는 바로 view에 담길수없다.
alter view view02
as
select top 50 ename, sal
from emp
order by sal desc

/*
view05
사원번호, 이름, 월급을 담는 뷰, 단 월급이 2000이상
*/

alter view view02
as
select empno,ename,sal
from emp
where sal > 2000

insert view02 values(7777,'tom',2500)
insert view02 values(8888,'kim',1500)
insert view02 values(9999,'lee',500)

select * from emp

select * from view02

delete from emp
where empno in(7777,8888,9999)


--1. 아래와 같은 조건으로 'SQL좌석번호'이름의 데이터베이스를 만들어라.
CONDITION
/*1. FILE_GROUP: PRIMARY ONLY
2. DATA_FILE
 - LOGICAL_NAME: SQL좌석번호_DATA
 - PHYSICAL_NAME:
   C:\Program Files\Microsoft SQL Server\MSSQL\Data\sql좌석번호data.mdf
 - SIZE: 3MB
 - MAXSIZE: 10MB
 - FILE_GROWTH: 10%
3. LOG_FILE
 - LOGICAL_NAME: SQL좌석번호_LOG
 - PHYSICAL_NAME:
   C:\Program Files\Microsoft SQL Server\MSSQL\Data\sql좌석번호log.ldf
 - SIZE: 1MB
 - MAXSIZE: 8MB
 - FILE_GROWTH: 10%
*/
create database SQLNum
on primary
(
 name='SQLNum_DATA'
, filename='d:\test\SQLNumData.mdf'
, size=3mb
, maxsize=10mb
, filegrowth=10%
)
log on
(
 name='SQLNum_LOG'
, filename='d:\test\SQLNumLog.lef'
, size=1mb
, maxsize=8mb
, filegrowth=10%
)

exec sp_help SQLNum

-- 2. SQL좌석번호 데이터베이스에서 아래와 같이 EMP02라는 테이블을 만들고
-- 데이터를 입력하라.

create table EMP02
(
 EMPNO int
, ENAME varchar(12)
, SAL int
, HIREDATE datetime
)

alter table EMP02
add DEPTNO int


/*
COLUMN_NAME EMPNO ENAME  SAL HIREDATE DEPTNO
DATA_TYPE INT VARCHAR(12) MONEY SMALLDATETIME INT
  111 JOHN  3000 2000-06-30 1
  112 HUNTER  2500 2001-08-03 2
  113 SMITH  3500 1999-09-23 3
  114 CARRY  2500 2001-08-02 3
*/

-- 3. EMP02 테이블에 MGR 컬럼(INT)을 추가하라.

alter table emp02
add MGR int

-- 4. EMP02 테이블에서 SAL 컬럼의 데이터형을 INT로 바꾸어라.

alter table emp02
alter column SAL int


exec sp_help emp02

-- 5. EMP02 테이블에서 MGR 컬럼을 삭제하라.

alter table emp02
drop column MGR

-- 6. EMP02 테이블을 삭제하라.

 

-- 7. SQL좌석번호 데이터베이스를 삭제하라.

drop database SQLNum

create table test01
(
 eid int not null
, ename char(10)
)

'개발 > SQL' 카테고리의 다른 글

MS-SQL 문제 9문  (0) 2011.05.18
MS-SQL Veiw  (0) 2011.05.18
MS-SQL 데이터베이스 만들기 [ create table , create database ]  (0) 2011.05.18
MS-SQL 문제 50문  (0) 2011.05.18
MS-SQL 문제 12문  (0) 2011.05.18

+ Recent posts