반응형

-- 1. ALTER TABLE > 컬럼 삭제
-- ALTER TABLE [테이블명] DROP COLUMN [컬럼명]
ALTER TABLE PRODUCT DROP COLUMN product_info


-- 2. ALTER TABLE > 컬럼 추가
-- ALTER TABLE [테이블명] ADD [추가할 컬럼명] [데이터 타입] [NOT NULL / NULL 설정]
ALTER TABLE PRODUCT ADD product_info varchar(max) not null


-- 3. ALTER TABLE > 컬럼 형식 변경
-- ALTER TABLE [테이블명] ALTER COLUMN [컬럼명] [변결할 데이터 타입] [NOT NULL / NULL 설정]
ALTER TABLE PRODUCT ALTER COLUMN price varchar(100)

반응형

'DB > MSSQL' 카테고리의 다른 글

UNPIVOT  (0) 2020.10.20
OFFSET ROWS FETCH 페이징 처리  (0) 2020.10.19
무결성 제약조건 CHECK  (0) 2020.07.12
문자열 char / varchar / nchar / nvarchar  (0) 2020.07.12
날짜 형식 변환  (0) 2020.04.17
반응형

아래와 같은 script src 경로로 vue 호출

    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

 

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>좋아요</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  </head>
  <body>
    <div id="root">
      <div>{{first}}곱하기 {{second}}는?</div>
      <form v-on:submit="onSubmitForm">
        <input type="number" ref="answer" v-model="value"/>
        <button type="submit">입력</button>
      </form>
      <div id="result">{{result}}</div>
    </div>
  </body>

  <script type="text/javascript">
      const app = new Vue({
        el: '#root',
        data: {
          first: Math.ceil(Math.random() * 9),
          second: Math.ceil(Math.random() * 9),
          value: '',
          result: '',
        },
        methods: {
          onSubmitForm(e) {
            e.preventDefault();
            if(this.first * this.second === parseInt(this.value)) {
              this.result = '정답';
              this.first = Math.ceil(Math.random() * 9),
              this.second = Math.ceil(Math.random() * 9),
              this.value = '';
              this.$refs.answer.focus();
            } else{
              this.result = '땡';
              this.value = '';
              this.$refs.answer.focus();
            }
          },
        },
      });
  </script>
</html>

 

정답이 맞을 경우 first / second 값을 랜덤 처리로 호출하며 구구단 처리 소스

[참조]

https://www.youtube.com/watch?v=TIHluPn05VY&list=PLcqDmjxt30RsdnPeU0ogHFMoggSQ_d7ao

 

반응형

'프로그래밍 > Vue' 카테고리의 다른 글

[Vue3] onMounted  (0) 2024.05.14
[Vue3] Computed  (0) 2024.04.26
Vue.js 2.0 라이프 사이클  (0) 2024.02.21
[Vue.js] Props 란  (0) 2022.06.30
반응형

무결성 제약조건: 데이터 베이스에 저장된 데이터의 정확성 (일관성)

 

[ CHECK ]

형식: constarints 제약명 CHECK(조건)

- check 소괄호 안의 조건에 맞는 데이터만 삽입 가능한 제약조건,

- 조건에는 기본 연산자, 비교 연산자, in, not in 등등을 사용

 

Ex) PRODUCT TABLE 중, 가격이 50보다 큰 price 값만 가능

create table product(
	product_no int not null,
	product_name varchar(10),
	make_day datetime,
	price float,
	product_info varchar(max),
	primary key(product_no),
	constraint chk_price check (price > 50) -- 50보다 큰 price 값만 가능
)

 

해당 테이블에, price 값이 50 이하의 데이터를 INSERT 시 아래와 같은 오류가 발생한다.

Ex) PRODUCT TABLE 중, 가격이 5,6,7,8,9,10 에 속한 price 값만 가능

create table product(
	product_no int not null,
	product_name varchar(10),
	make_day datetime,
	price float,
	product_info varchar(max),
	primary key(product_no),
	constraint chk_price check (price in (5,6,7,8,9,10)) -- price 값이 5,6,7,8,9,10 인 경우에만 가능
)

 

반응형

'DB > MSSQL' 카테고리의 다른 글

OFFSET ROWS FETCH 페이징 처리  (0) 2020.10.19
ALTER 문  (0) 2020.07.22
문자열 char / varchar / nchar / nvarchar  (0) 2020.07.12
날짜 형식 변환  (0) 2020.04.17
트랜잭션 격리수준  (0) 2018.03.21
반응형

MSSQL 문자열 타입 중 char 와 varchar의 차이는 아래와 같다.

 

- char : 고정된 길이의 문자열을 저장

ex) char(40) 컬럼 데이터 내 'aaa' 만 저장하면 나머지 공간은 공백으로 처리된다. (40 바이트)

- varchar : 가변 문자열을 저장

ex) varchar(40) 컬럼 데이터 내 'pw1234' 저장 시 저장길이가 가변적이다 (6바이트)

 

 

[ USER TABLE ]
[ char(40) 인 user_nickname은 공백도 드래그가 된 것을 볼 수 았다. ]
[ varchar(40) 인 user_pw 컬럼은 pw1234 공백이 아닌 문자열만큼 드래그 ]

nchar / nvarchar 는 유니코드를 지원한다.

char, varchar -> 1 글자당 영문이나 숫자등은 1바이트

nchar, nvarchar -> 모든 문자 1글자당 2바이트

 

 

반응형

'DB > MSSQL' 카테고리의 다른 글

OFFSET ROWS FETCH 페이징 처리  (0) 2020.10.19
ALTER 문  (0) 2020.07.22
무결성 제약조건 CHECK  (0) 2020.07.12
날짜 형식 변환  (0) 2020.04.17
트랜잭션 격리수준  (0) 2018.03.21
반응형

[Baekjoon][https://www.acmicpc.net/problem/3184]

 

각 울타리 안에 있는 늑대와 양의 개수를 구하고 비교하는 문제로

너비 우선 탐색(BFS) 알고리즘 적용

 

미키의 뒷마당에서 울타리가 아니고(map[r][c] != ’#’) && 방문하지 않은(visit[r][c] != 0) 영역 일 때 BFS 알고리즘을 호출한다.

현재 위치를 Queue 값에 넣은 후 Queue 값이 존재 할 경우 상, 하, 좌, 우 방향으로 이동하면서

울타리 안에 있는 영역의 늑대와, 양의 수를 구한다.

 

수직, 수평으로 이동하면서 울타리 안 영역을 모두 BFS로 탐색 시,

늑대와 양의 수를 구한 후 늑대가 존재하면 전체 늑대 수에 남은 늑대 수를 더해주고,

양이 존재하면 전체 야 수에 남은 양 수를 더해준다.

 

이렇게 울타리 안 모든 영역을 BFS로 한 번씩 탐색 후 전체 개수를 출력한다.

 

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

class Location3184{
	int x;
	int y;
	
	public Location3184(int x, int y) {
		// TODO Auto-generated constructor stub
		this.x = x;
		this.y = y;
	}
}

// Queue에 들어갈 기준점이 필요

public class Main {

	static int r;
	static int c;
	static char map[][];
	static int visit[][];
	static Queue<Location3184> location;
	static int total_sheep =0;
	static int total_wolf = 0;
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		
		r = sc.nextInt();
		c = sc.nextInt();
		
		map = new char[r][c];
		visit = new int[r][c];
		location = new LinkedList<>();
		
		for(int i=0;i<r;i++) {
			String str = sc.next();
			for(int j=0;j<c;j++) {
				map[i][j] = str.charAt(j);
			}
		}
		

		for(int i=0;i<r;i++) {
			for(int j=0;j<c;j++) {
				if(map[i][j] != '#' && visit[i][j] == 0) {
					getBFS(i, j);
				}
			}
		}
		
		
		System.out.println(total_sheep+" "+total_wolf); 
	}
	
	public static void getBFS(int i, int j) {
		int[] xx = {-1, 0, 1, 0};
		int[] yy = {0, 1, 0, -1};
		
		int curSheep = 0;
		int curWolf = 0;
		visit[i][j] = 1;
		location.offer(new Location3184(i, j));
		
		if(map[i][j] == 'o') {
			curSheep++;
		} else if(map[i][j] == 'v') {
			curWolf++;
		}
		
		while(!location.isEmpty()) {
			int x = location.peek().x;
			int y = location.poll().y;

			for(int k=0;k<4;k++) {
				int ax = x+xx[k];
				int ay = y+yy[k];
				
				if(ax>=0 && ay>=0 && ax<r && ay<c) {
					if(visit[ax][ay] == 0 && map[ax][ay] == 'o') {
						curSheep++;
					} else if( visit[ax][ay] == 0 && map[ax][ay] == 'v') {
						curWolf++;
					}
					
					if(visit[ax][ay] == 0 && map[ax][ay] != '#') {
						location.offer(new Location3184(ax, ay));
						visit[ax][ay] = 1;
					}
				}
			}
		}

		if(curWolf>=curSheep) {
			total_wolf += curWolf;
		} else if(curSheep > curWolf) {
			total_sheep += curSheep;
		}
	}
}
반응형

'알고리즘 > Baekjoon' 카테고리의 다른 글

[Baekjoon] #2675 문자열 반복  (0) 2022.03.05
[Baekjoon] #2606 바이러스  (0) 2020.09.02
[ Baekjoon ] #2178 미로 탐색  (0) 2020.04.26
[ Baekjoon ] #7576 토마토  (0) 2020.04.22
[ Baekjoon ] #5427 불  (0) 2020.04.20

+ Recent posts