특정 row에 lock를 걸어서
다른 세션의 'select for update' 혹은 'select lock in share mode' 쿼리를 블락하고
싶은 경우 사용된다.
예)
select * from tableNm where column_name = '1' for update
출처 :
http://blog.daum.net/hazzling/17187062
특정 row에 lock를 걸어서
다른 세션의 'select for update' 혹은 'select lock in share mode' 쿼리를 블락하고
싶은 경우 사용된다.
예)
select * from tableNm where column_name = '1' for update
출처 :
http://blog.daum.net/hazzling/17187062
출처 - http://www.raistudies.com/mybatis/inserting-auto-generated-id-using-mybatis-return-id-to-java/
Tools Used:
First of all, we have to change the schema of table Product to make the id field auto generated. Following is the DDL command to make the Product table with auto generated id:
1 |
CREATE TABLE Product(id BIGINT NOT NULL AUTO_INCREMENT , brand VARCHAR (20), |
2 |
model VARCHAR (20), name VARCHAR (30) , PRIMARY KEY (id)); |
Here, I have used AUTO_INCREMENT to generate unique id in MySQL database.
Now, to use auto generated id in our mapping file ProductServices.xml to modify our <insert/> command to use it:
1 |
<? xml version = "1.0" encoding = "UTF-8" ?> |
2 |
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" |
3 |
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
4 |
5 |
< mapper namespace = "com.raistudies.services.ProductServices" > |
6 |
7 |
< insert id = "save" parameterType = "product" useGeneratedKeys = "true" keyProperty = "id" � keyColumn = "id" > |
8 |
INSERT INTO Product (brand,model,name) |
9 |
VALUE (#{brand}, #{model}, #{name} ) |
10 |
< selectKey keyProperty = "id" resultType = "long" order = "AFTER" > |
11 |
SELECT LAST_INSERT_ID(); |
12 |
</ selectKey > |
13 |
</ insert > |
14 |
15 |
</ mapper > |
To test the functionality, we have made a little modification in our runner class:
1 |
package com.raistudies.runner; |
2 |
3 |
import java.io.IOException; |
4 |
import java.io.Reader; |
5 |
6 |
import org.apache.ibatis.io.Resources; |
7 |
import org.apache.ibatis.session.SqlSession; |
8 |
import org.apache.ibatis.session.SqlSessionFactory; |
9 |
import org.apache.ibatis.session.SqlSessionFactoryBuilder; |
10 |
11 |
import com.raistudies.domain.Product; |
12 |
import com.raistudies.services.ProductServices; |
13 |
14 |
public class AppTester { |
15 |
private static SqlSessionFactory sessionFac = null ; |
16 |
private static Reader reader; |
17 |
private static String CONFIGURATION_FILE = "sqlmap-config.xml" ; |
18 |
19 |
static { |
20 |
try { |
21 |
reader = Resources.getResourceAsReader(CONFIGURATION_FILE); |
22 |
sessionFac = new SqlSessionFactoryBuilder().build(reader); |
23 |
} catch (IOException e) { |
24 |
e.printStackTrace(); |
25 |
} |
26 |
} |
27 |
28 |
public static void main(String[] args) { |
29 |
SqlSession session = sessionFac.openSession(); |
30 |
try { |
31 |
ProductServices productServiceObj = session.getMapper(ProductServices. class ); |
32 |
Product product = new Product(); |
33 |
product.setBrand( "LG" ); |
34 |
product.setModel( "P500" ); |
35 |
product.setName( "Optimus One" ); |
36 |
productServiceObj.save(product); |
37 |
System.out.println( "The new id is : " + product.getId()); |
38 |
session.commit(); |
39 |
40 |
} finally { |
41 |
session.close(); |
42 |
} |
43 |
} |
44 |
45 |
} |
The new code will not specify the value of id field and also print the new generated id in console.
Run the code and you will get output like this:
You can also try the example yourself. Just download the code from bellow links, import the project in Eclipse and create the product table using given DDL command:
Code + lib: Download
Code: Download
oracle에서 사용 했던 방식을 mysql로 적용 할려 하니 비슷하면서도 다른 부분이 많아 정리 하고자 한다.
1.문자열 합치기
Oracle : '%'||A||'%'
Mysql : CONCAT('%', A , '%')
2. null check
Oracle : SELECT NVL('컬럼명', '') FROM DUAL;
MySql : SELECT IFNULL('컬럼명', '') FROM DUAL;
3.현재 날짜시간
Oracle : SYSDATE
Mysql : NOW()
4.날짜 포맷
Oracle : TO_CHAR(sysdate,'MMDDYYYYHH24MISS')
Mysql : DATE_FORMAT(now(),'%Y%m%d%H%i%s')
-> 여기서 대문자Y는 4자리 년도, 소문자 y는 2자리 년도 20150713142107
DATE_FORMAT(now(),'%Y%m%d') -> 20150713
5.날짜 포멧 : 요일
Oracle : 요일이 1~7로 인식함 -> TO_CHAR(SYSDATE - 1, 'D')
Mysql : 요일이 0~6으로 인식 -> DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 DAY), '%w')
9. Sequence(시퀀스)는 둘 다 사용자함수를 만들어서 아래와 같이 사용
Oracle : 시퀀스명.nextval
Mysql : 시퀀스명.currval
10. 문자열 자르기
Oracle: SUBSTR(컬럼명, 1, 10)
Mysql: SUBSTRING(컬럼명, 1,10)
SQL Terms/Concepts | MongoDB Terms/Concepts |
---|---|
database | database |
table | collection |
row | document or BSON document |
column | field |
index | index |
table joins | embedded documents and linking |
primary key Specify any unique column or column combination as primary key. |
In MongoDB, the primary key is automatically set to the _id field. |
aggregation (e.g. group by) |
aggregation pipeline See the SQL to Aggregation Mapping Chart. |
참조 : http://docs.mongodb.org/manual/reference/sql-comparison/
출처 :http://cmsyko.egloos.com/5305796
첫 번째, mysql 접속
- [root@localhost ~]#mysql -u root -p
두번째, 사용할 데이터베이스를 선택합니다.
- show databases;
-use stdent;
세번째, 테이블 생성
create table student(
bbs_id int auto_increment primary key,
student_id int(11) not null,
name varchar(20) not null
);
네번째, 데이터 입력
INSERT INTO student(
bbs_id,student_id, name
) VALUES (
0,20120405,"홍길동");
0. JDBC를 이용한 Java와 mysql 연동하기 전에 수행되어야 할 것
0.1 JDK가 설치되어 있어야 함.
- http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u3-download-1501626.html
0.2. Eclipse가 설치되어 있어야 함.
- http://www.eclipse.org/downloads/
0.3. MySQL이 설치되어 있어야 함.
- http://dev.mysql.com/downloads/installer/
1. MySQL을 위한 JDBC Driver를 다운로드
- http://dev.mysql.com/downloads/connector/j
2. 받은 파일을 압축풀고, mysql-connector-java-5.1.19-bin.jar 파일을
[java]-[jdk1.7.0_02] - [jre] - [lib] - [ext] 폴더에 복사
3. Eclipse에 본인이 만든 프로젝트의 설정을 변경
4. [Java Build Path]에서 해당폴더에 복사한 jar 파일을 추가함
- jar 파일을 추가하면 다음과 같이 추가된 library를 확인할 수 있음
5. 다음 그림과 같이 [test] DB안에 있는 [student] 테이블 항목들을 JDBC를 이용해 출력하고자 함
6. 다음과 같은 코드를 이용해서 테이블에 있는 항목들을 출력하고자 함
7. 실행하면 다음과 같이 MySQL과 연동성공!!
mysql> INSERT INTO test VALUES('테스트', 100);
ERROR 1366 (HY000): Incorrect string value: '\xC5\xD7\xBD\xC6\xAE' for column 'item' at row 1
DB에 테이블 내용을 입력하는데 이러한 오류가...
테이블 내용에 한글을 넣으니 오류가 생기는 것 같은데...
1.증상
mysql 을 utf-8 로 설정하고 설치했는데도 불구하고 데이터를 insert 할 때 한글깨지는 증상이란다.
2. 해결방법
mysql> SET character set euckr; Query OK, 0 rows affected (0.01 sec) mysql> INSERT INTO test VALUES('테스트', 100); Query OK, 1 rows affected (0.06 sec) |
User / Password를 system/manager이나 sys/sysdba로 접속후
sql>select username,account_status from dba_users username='SCOTT'
결과가 EXPIRED & LOCKED 일것이다 락을 풀어준다
sql>alter scott account unlock;
sql>alter SCOTT identified by TIGER;
sql>select username,account_status from dba_users username='SCOTT'
결과가 OPEN이 되어 있을것이다 OPEN상태에서 로그인이 가능
ORA-01045 error는 user를 생성하고 권한을 부여하지 않아서 그렇다.
로그인을 하기 위해서 세션을 생성해야 하는데 하지 않아서 생기는 error
따라서 다음과 같이 권한을 부여하면 된다,.
grant create session to user_name;