MySQL

느려도 꾸준히·2023년 11월 13일

MySQL 설치하기

  • MySQL 실행 및 중단

    • System Preferences에 있는 MySQL에 접속

.

  • MySQL 접속 및 데이터베이스 생성

    1. 위치이동 : cd /usr/local/mysql/bin

    2. MySQL 접속 : ./mysql -u root -p

    3. 비밀번호 입력

    4. MySQL 접속 완료

    5. 데이터베이스 생성 : CREATE DATABASE '생성할 데이터베이스 이름';

    6. 데이터베이스 확인 : show databases;

    7. 데이터베이스 이동 (사용) : use '사용할 데이터베이스 이름';

.

Intellij Database 연동

  • Database 탭을 클릭하시고 + 버튼 클릭

  • Data Source > MySQL 를 클릭

  • User, Password, Database 정보를 추가한 후 Ok

  • MySQL Database에 연결이 완료

.

JdbcTemplate 사용방법

  • application.properties에 DB에 접근하기 위한 정보를 작성
spring.datasource.url=jdbc:mysql://localhost:3306/memo
spring.datasource.username=root
spring.datasource.password={비밀번호}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  • build.gradle에 JDBC 라이브러리와 MySQL을 등록
// MySQL
implementation 'mysql:mysql-connector-java:8.0.28'
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
  • DB연결이 필요한 곳에서 JdbcTemplate을 주입받아와 사용
// 생성자의 파라미터를 통해 JdbcTemplate 객체가 자동으로 넘어와 jdbctemplate 변수에 저장된다.

ex)
private final JdbcTemplate jdbctemplate;

public MemoRepository(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
}
  • INSERT
    • INSERT SQL을 작성해 String 변수에 저장.
    • 이때, 넣고자 하는 데이터 부분에 ?를 사용하면 유동적으로 데이터를 넣어줄 수 있다.
    • jdbcTemplate.update() 메서드는 INSERT, UPDATE, DELETE 와 같이 생성, 수정, 삭제에 사용될 수 있는데 첫 번째 파라미터로 SQL을 받고 그 이후에는 ?에 들어갈 값을 받는다.
      String sql = "INSERT INTO memo (username, contents) VALUES (?, ?)";
       jdbcTemplate.update(sql, "Robbie", "오늘 하루도 화이팅!");
  • UPDATE
    • UPDATE SQL을 작성해 String 변수에 저장한 후 update() 메서드 첫 번째 파라미터에 넣어준다.
    • 이때, 넣고자 하는 데이터 부분에 ?를 사용하면 유동적으로 데이터를 넣어줄 수 있다.
      String sql = "UPDATE memo SET username = ? WHERE id = ?";
       jdbcTemplate.update(sql, "Robbert", 1);
  • DELETE
    • DELETE SQL을 작성해 String 변수에 저장한 후 update() 메서드 첫 번째 파라미터에 넣어준다.
    • 이때, 넣고자 하는 데이터 부분에 ?를 사용하면 유동적으로 데이터를 넣어줄 수 있다.
      String sql = "DELETE FROM memo WHERE id = ?";
      jdbcTemplate.update(sql, 1);
  • SELECT
    • SELECT SQL을 작성해 String 변수에 저장한 후 query() 메서드 첫 번째 파라미터에 넣어준다.
    • SELECT의 경우 결과가 여러 줄로 넘어오기 때문에 RowMapper를 사용하여 한 줄씩 처리 할 수 있다.
      • RowMapper는 인터페이스 이기 때문에 익명 클래스를 구현하여 처리한다.
      • 오버라이딩 된 mapRow 메서드는 제네릭스에 선언한 MemoResponseDto 타입으로 데이터 한 줄을 변환하는 작업을 수행한다.
     String sql = "SELECT * FROM memo";
     return jdbcTemplate.query(sql, new RowMapper<MemoResponseDto>() {
     
    @Override
    public MemoResponseDto mapRow(ResultSet rs, int rowNum) throws SQLException {
        // SQL 의 결과로 받아온 Memo 데이터들을 MemoResponseDto 타입으로 변환해줄 메서드
        Long id = rs.getLong("id");
        String username = rs.getString("username");
        String contents = rs.getString("contents");
        return new MemoResponseDto(id, username, contents);
    }
});

.

제약조건

  • AUTO_INCREMENT :
    컬럼의 값이 중복되지 않게 1씩 자동으로 증가하게 해줘 고유번호를 생성해 준다.

    CREATE TABLE 테이블이름
    (
       필드이름 필드타입 AUTO_INCREMENT,
       // id bigint AUTO_INCREMENT,
       ...
    );
  • NOT NULL :
    해당 필드는 NULL 값을 저장할 수 없게 된다.

    CREATE TABLE 테이블이름
    (
       필드이름 필드타입 NOT NULL,
       ...
    );
  • UNIQUE :
    해당 필드는 서로 다른 값을 가져야만 한다.

    CREATE TABLE 테이블이름
    (
       필드이름 필드타입 UNIQUE,
       ...
    );
  • PRIMARY KEY :
    해당 필드가 NOT NULL과 UNIQUE 제약 조건의 특징을 모두 가지게 된다.

    CREATE TABLE 테이블이름
    (
       필드이름 필드타입 PRIMARY KEY,
       ...
    );
  • FOREIGN KEY :
    하나의 테이블을 다른 테이블에 의존하게 만들며 데이터의 무결성을 보장해 준다.

    CREATE TABLE 테이블이름
    (
       필드이름 필드타입,
       ...
    		FOREIGN KEY(필드이름)
       REFERENCES 테이블이름(필드이름)
    );
  • CASCADE :
    FOREIGN KEY 로 연관된 데이터를 삭제,변경할 수 있다.

    CREATE TABLE 테이블이름
    (
       필드이름 필드타입,
       ...
    		FOREIGN KEY(필드이름)
       REFERENCES 테이블이름(필드이름) ON DELETE CASCADE 
    														 //ON UPDATE CASCADE
    );

    <참고> https://spartacodingclub.kr/

0개의 댓글