+) 22. 08. 13. day57 π μ μ 리 λ° μΆκ° μλ£!
DDLμ λ°μ΄ν°λ² μ΄μ€ κ°μ²΄(λ°μ΄ν°λ² μ΄μ€, ν
μ΄λΈ)λ₯Ό μμ±ν΄μ€λ€.
λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬μλ λ°μ΄ν°λ² μ΄μ€ μ€κ³μκ° μ¬μ©νλ€.
CREATE TABLE μ¬μ (
μ¬λ² INTEGER NOT NULL;
μ΄λ¦ CHAR(10) NOT NULL;
λΆμ CHAR(10)
PRIMARY KEY(μ¬λ²),
FOREIGN KEY(λΆμ)
REFERENCES λΆμλͺ©λ‘(λΆμμ½λ)
ON DELETE SET NULL
ON UPDATE CASCADE
);
ν μ΄λΈλΏλ§ μλλΌ μ€ν€λ§, λλ©μΈ, λ·°, μΈλ±μ€ λ±μ μμ±ν μ μλ€.
μ μ½λλ₯Ό μ κΉ μ€λͺ νμλ©΄, λΆμλͺ©λ‘μμ μμ λΆκ° μμ (DELETE)λλ€λ©΄ μ¬μ ν μ΄λΈμ μμ λΆλ μ λΆ λΉμΉΈμΌλ‘ λ체(SET NULL)λκ³ , μμ λΆκ° ν맀λΆλ‘ λ³κ²½(UPDATE)λλ€λ©΄ μ¬μ ν μ΄λΈμ μμ λΆλ μ λΆ ν맀λΆλ‘ λ체(CASCADE β μ°κ΄λ κ²λ€λ ν¨κ» μ€ν)λλ€.
DDLμ μμ± μΈμ λ³κ²½(ALTER), μ κ±°(DROP) λ±μ κΈ°λ₯λ μλ€.
DMLμ ν
μ΄λΈμ λ°μ΄ν°λ₯Ό μ‘°ν, μ½μ
, μμ , κ°±μ νλ μμ
μ νλ€.
λ°μ΄ν°λ² μ΄μ€ μ¬μ©μμ λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬ μμ€ν
κ°μ μΈν°νμ΄μ€λ₯Ό μ 곡νλ€.
SELECT μμ± FROM ν
μ΄λΈ WHERE 쑰건
INSERT INTO ν
μ΄λΈ(μμ±) VALUES(κ°)
DELETE FROM ν
μ΄λΈ WHERE 쑰건
UPDATE ν
μ΄λΈ SET μμ±=κ° WHERE 쑰건
CREATE VIEW μμ
λΆμ¬μ(μ¬λ², μ¬μλͺ
)
AS SELECT μ¬λ², μ¬μλͺ
FROM μ¬μ
WHERE λΆμλͺ
='μμ
λΆ';
DCLμ λ°μ΄ν°μ κ΄λ¦¬ λ° λ³΄μ, μ μ΄μ¬ν λ±μ μ μνλ€.
GRANT CONNECT TO ROSE; //κΆν λΆμ¬
REVOKE CONNECT FROM ROSE; //κΆν νμ
//νΉμ κΈ°λ₯(μ‘°ν, μ½μ
, μμ λ±)μ λΆμ¬ν μλ μλ€.
GRANT SELECT ON μ¬μ TO ROSE WITH GRANT OPTION;
REVOKE GRANT OPTION FOR SELECT ON μ¬μ FROM ROSE CASCADE;
GRANT: μ΄λ€ κΆνμ λꡬ(TO)μκ² λΆμ¬ν μ§ μ μνλ€.
WITH GRANT OPTION: λΆμ¬ λ°μ κΆνμ λ€λ₯Έ μ¬λμκ² λΆμ¬ν μ μλ€.
κΆν ROLE
REVOKE: λΆμ¬λ κΆνμ λꡬλ‘λΆν°(FROM) νμν μ§ μ μνλ€.
TCL(Transaction Control Language, νΈλμμ μ μ΄μ΄)
μ°Έκ³ μλ£
ai_researcher.log, βλ°μ΄ν°λ² μ΄μ€(3) SQL - DDL, DML, DCLβ, https://velog.io/@cha-suyeon/λ°μ΄ν°λ² μ΄μ€3-SQL-DDL-DML-DCL
μ£Όκ°μ»΄κ³΅, β47. DDL/DML/DCL 2μ₯. 물리DBμ€κ³ 3κ³Όλͺ©. DBκ΅¬μΆ _ μ 보μ²λ¦¬κΈ°μ¬(2020) νκΈ°β, https://youtu.be/3UygoMorzrw
+) 22. 08. 12. 7μ°¨ PR μΆκ°!
μ¬μ©μμκ² κ°μ μ λ ₯ λ°λ ν΄λμ€
import java.util.*;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
public class Input {
public String input() {
System.out.println("\n1~9 μ¬μ΄μ μ«μ 3κ°λ₯Ό μ
λ ₯ν΄ μ£ΌμΈμ.");
return new Scanner(System.in).nextLine();
}
public List<Integer> toNumbers(String str) {
List<Integer> numbers = Pattern.compile("")
.splitAsStream(str)
.map(Integer::parseInt)
.collect(Collectors.toList());
validateForNumberLength(numbers);
validateForNumberRange(numbers);
validateForDuplication(numbers);
return numbers;
}
public void validateForNumberLength(List<Integer> numbers) {
if(numbers.size() != 3) {
throw new RuntimeException("3μ리 μ«μλ₯Ό μ
λ ₯ν΄ μ£ΌμΈμ.");
}
}
public void validateForNumberRange(List<Integer> numbers) {
if(numbers.contains(0)) {
throw new RuntimeException("1~9 λ²μμ μ«μλ₯Ό μ
λ ₯ν΄ μ£ΌμΈμ.");
}
}
public void validateForDuplication(List<Integer> numbers) {
int count = (int) numbers.stream().distinct().count();
if (count < 3) {
throw new RuntimeException("μ€λ³΅κ°μ΄ μμ΅λλ€.");
}
}
}
input()
μ¬μ©μμκ² κ°μ μ
λ ₯ λ°λλ€.
toNumbers()
μ
λ ₯ λ°μ κ°μ ν κΈμμ© λΆλ¦¬νμ¬ λ¦¬μ€νΈμ λ£κ³ μ μνμΌλ‘ λ°ννλ€.
validateForNumberLength()
3μ리 μκ° λ§λμ§ κ²μ¬νλ€.
validateForNumberRange() (μλ‘ μΆκ°λ λΆλΆ)
1~9 λ²μμ μμΈμ§ κ²μ¬νλ€.
validateForDuplication()
μ€λ³΅κ°μ΄ μλμ§ κ²μ¬νλ€.
λλ€ν μ μλ₯Ό μμ±νλ ν΄λμ€
import lombok.extern.slf4j.Slf4j;
import java.util.*;
@Slf4j
public class RandomNumber {
private final Set<Integer> randomNumber;
public RandomNumber() {
randomNumber = new HashSet<>();
}
public List<Integer> createRandomNumber() {
Random random = new Random(System.currentTimeMillis());
while(randomNumber.size() < 3) {
randomNumber.add(random.nextInt(9) + 1);
}
log.info("λλ€κ° = {}", randomNumber);
return new ArrayList<>(randomNumber);
}
}
μ΄λ²μ Math.random λμ java.utilμ Randomμ μ¬μ©νλ€.
BallμΈμ§ νμΈνλ ν΄λμ€
import java.util.List;
import static java.util.stream.IntStream.range;
public class Ball implements Baseball {
private final int ball;
public Ball() {
this.ball = 0;
}
@Override
public int compare(List<Integer> randomNumber, List<Integer> userNumber) {
return (int) range(0, 3)
.filter(n -> randomNumber.contains(userNumber.get(n)))
.count();
}
}
IntStream.rangeλ₯Ό μμ staticμΌλ‘ λΊ.
κ·Έλ¦¬κ³ κ°μ²΄μ§ν₯ μν체쑰 μμΉ μ€ <ν μ€μ μ μ νλλ§ μ°λλ€.>λ₯Ό μ§ν€κΈ° μν΄ μ λ§λ€ μν° μ°μ... μ΄κ² μμΉμ μ§ν¨ κ±΄μ§ λͺ¨λ₯΄κ² μ.
StrikeμΈμ§ νμΈνλ ν΄λμ€
import java.util.List;
import static java.util.stream.IntStream.range;
public class Strike implements Baseball {
private final int strike;
public Strike() {
this.strike = 0;
}
@Override
public int compare(List<Integer> randomNumber, List<Integer> userNumber) {
return (int) range(0, 3)
.filter(n -> randomNumber.get(n).equals(userNumber.get(n)))
.count();
}
}
λ°λ 건 Ball Classμ κ°μ.
μ€ννλ ν΄λμ€
import java.util.List;
public class Main {
public static void main(String[] args) {
Input input = new Input();
Output output = new Output();
RandomNumber randomNumber = new RandomNumber();
List<Integer> randomNumbers = randomNumber.createRandomNumber();
Ball ball = new Ball();
Strike strike = new Strike();
output.printPlayBaseballGame();
while(true) {
List<Integer> userNumbers = input.toNumbers(input.input());
int totalStrike = strike.compare(randomNumbers, userNumbers);
int totalBall = ball.compare(randomNumbers, userNumbers) - totalStrike;
output.output(totalBall, totalStrike);
if(totalStrike == 3) {
break;
}
}
}
}
λ°λ μ μ λΆνμν int totalStrike = 0
, int totalBall = 0
μ λΉΌκ³ while(totalStrike != 3)μ while(true)λ‘ λ°κΎΈμλ€.
κ·Έλ¦¬κ³ while λ¬Έ μμ if(totalStrike == 3)μ μ£Όμ΄μ λ°λ³΅λ¬Έμ νμΆνλλ‘ ν¨.
μ΄μ κ΄λ ¨ν΄μ λ΄κ° κΆκΈνλ κ²...
μ΄ λ°©λ²μ΄ μ’ λ κ°μ²΄μ§ν₯μ μΈ λ°©λ²μ΄ μλκΉ? μκ°νλ€.
κ·Έλμ μμ κ°μ΄ ꡬννκ³ μΆμλλ° κ·Έκ±΄;; Strike κ°μ μ΄λ»κ² λ°μμ¬μ§μ λν κ΅΄λ κ° μ겨μ... μΌλ¨ ν¬κΈ°ν¨.
getStrikeλ₯Ό μ°λ©΄ getter/setterλ₯Ό μ°μ§ μλλ€λ κ°μ²΄μ§ν₯ μν체쑰 μμΉμ μλ°°λλ κ²μ΄ μλκ° ν΄μ.
μ... μλ¬΄νΌ μ’ λ κ°μ²΄μ§ν₯μ μΈ μ½λλ‘ μ§κ³ μΆμλλ° μ§μμ΄ λΆμ‘±νλ νλ€μλ€. κ·Έλλ κ³μ°κΈ° λλ³΄λ¨ μ’ λ λμμ§ κ² κ°μ... μ...