p238 239
๋์ด์ int๋ฅผ ์ฃผ๋ฉด ๋ญ๋น๋ค. int๋ ~21์ต์์ 21์ต์ด๋๊น.
๋ฐ์ดํฐ ์ฌ์ด์ฆ์ ๋ฐ๋ผ ๋ง์ถคํ์ผ๋ก ๋ฐ์ดํฐํ์ ์ ์ฃผ๋ ๊ฒ์ด ์ข๋ค.
๋์คํฌ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋ญ๋น๊ฐ ๋๋ค.
์ค์ ๋ก ๋์คํฌ์ 4๋ฐ์ดํธ๊ฐ ๋ค์ด๊ฐ์๋ค๋ฉด,
๋ฉ๋ชจ๋ฆฌ์๋ ์ซ์ 10์ด๋ผ๋ 4๋ฐ์ดํธ๊ฐ ์ฌ๋ผ๊ฐ๋ค. --> ๋ญ๋น
๋ชจ๋ธ๋ง์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ๋๋ int ๋ง์ด ํ์ง๋ง,
์ฑ๋ฅ๊น์ง ๊ณ ๋ฏผํ๋ ๋ฐ์ดํฐ ์ค๊ณ๋ ๋ฐ์ดํฐํ์ ์ ์ ์ ํ ๊ฒ์ ๊ณ ๋ คํด์ ํด์ผ.
PK์ not null unique์ ์ฐจ์ด๋?
๋ฐฑ๋จ์ ์ธ๋ฑ์ค ๊ตฌ์กฐ๊ฐ ์กฐ๊ธ ๋ค๋ฆ
PK๋ ํ ์ด๋ธ ๋น ๋ณดํต ํ๋ ๋ง๋๋ ํค ์ ์ฝ์กฐ๊ฑด์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋จ
-- --------------------
-- ํ
์ด๋ธ ์์ฑ --
create table userTbl(
uNo int auto_increment primary key, -- ์ ์ฝ ์กฐ๊ฑด์ด ๋ค์ด๊ฐ๋ฉด
uID varchar(10) not null unique,
uName varchar(10) not null,
uAge int not null check(uAge between 0 and 120),
uAddr char(4) default '์',
mob1 char(3) check(mob1 in ('010','011', '019')),
mob2 char(8),
uDate datetime not null default now()
);
๊ทธ๋ผ ํ ์ด๋ธ์ด ์๊ธฐ์์
์ฌ๊ธฐ์ ์ ์ฝ ์กฐ๊ฑด ์ ๋ค์ด๊ฐ๋์ง ํ์ธ!
๊ทธ๋ฐ๋ฐ Name์ด ๋ญ์ง ์ ์ ์๋ค.
๊ทธ๋์
์ด๋ ๊ฒ ์ ํ ์กฐ๊ฑด๋ค์ ๋ค ๋ฐ๋ก ๋นผ์ฃผ์
-- ์ด๋ฆ ๋ง๋ค ์ ์๋ ํ
์ด๋ธ ๋ง๋ค๊ธฐ --
create table userTbl(
uNo int auto_increment , -- ์ ์ฝ ์กฐ๊ฑด์ด ๋ค์ด๊ฐ๋ฉด
uID varchar(10) not null,
uName varchar(10) not null,
uAge int not null ,
uAddr char(4) default '์์ธ',
mob1 char(3) check(mob1 in ('010','011', '019')),
mob2 char(8),
uDate datetime not null default now(),
CONSTRAINT userTb1_uNo_pk primary key(uNo), -- ์ ์ฝ ์กฐ๊ฑด์ ๋ง๋ค์ด๋ผ
CONSTRAINT userTb1_uID_uk UNIQUE KEY (uID),
constraint userTb1_uAge_ck check (uAge between 0 and 120),
CONSTRAINT userTb1_uMob1_ck CHECK (mob1 in ('010', '011', '019'))
);
์ํฐํฐ ๊ด๊ณ๋
ํ ์ด๋ธ ๊ฐ ์ฐ๊ฒฐ๊ณ ๋ฆฌ๋ฅผ ํ์ธํ ์ ์๋ค.
auto increment ๋ฅผ ์ฐ๋ฉด (์๋์ผ๋ก ์ซ์ ์ฆ๊ฐ) ์ฌ๊ธฐ์ ์ณ ํ์ ๋์ด์์
auto increment ์ฐ๊ณ ๋ฐ์ดํฐ ์ฐ์ ํ๋๋ฐ ์๋ฌ๊ฐ ๋๋ค๋ฉด,
์๋ฌ๋ ์นด์ดํ ๋์ด์,
๊ทธ ๋ค์ ๋ฐ์ดํฐ insert ์์ ๋ค์ ๋๋ฒ๋ก ๋์ด๊ฐ๋ค. ์ด ๋๋ ๋ค๋ฅธ ์กฐ์น ๋ฐฉ๋ฒ์ ์จ์ค์ผ ํจ.
-- > ํ ์๊ฐ์๋์ ๋ต๋ณ : mysql ์ด ๋ด๋ถ์์ inno DB ์์ง์ผ๋ auto increment๊ฐ ์ ์์ ์ผ๋ก ์ง๊ณ๋์ง ์์ ๋๊ฐ ๊ฝค ๋ง์์ ๊ทธ๋์ ๋ณดํต auto_increment ๋ฅผ ๊ธฐ์กด ๊ฐ์ผ๋ก ์นํํ๊ฑฐ๋, ๊ธฐ์กด ํ์ delete cascade๋ก ์ญ์ ํฉ๋๋ค. (5v. ๊ธฐ์ค)
on delete cascade๋ ๊ฑฐ์ ์ฐ์ง X
ํ์ ํํดํด๋ ์์ด๋ ์ญ์ ํ์ง ๋ง๊ณ ,๋ด์ญ์ด ๋จ์์ผํ๋๊น,
ON UPDATE cascade
Table01.sql
-- Table01.sql --
-- DDL : ์ ์ --> create, alter, drop --
CREATE TABLE t30(
id int,
age int not null check(age>0) -- ์ปฌ๋ผ ๋ฐ์ดํฐํ์
์ ์ฝ์กฐ๊ฑด
);
INSERT into t30 values(10, 10);
INSERT into t30 values(null, null);
SELECT * from t30;
create table t31(
id int,
age int not null,
check(age>0)
);
INSERT into t31 values(10, 10);
INSERT into t31 values(null, null);
SELECT * from t31;
show table status;
-- --------------------
-- ํ
์ด๋ธ ์์ฑ --
create table userTbl(
uNo int auto_increment primary key, -- ์ ์ฝ ์กฐ๊ฑด์ด ๋ค์ด๊ฐ๋ฉด
uID varchar(10) not null unique,
uName varchar(10) not null,
uAge int not null check(uAge between 0 and 120),
uAddr char(4) default '์',
mob1 char(3) check(mob1 in ('010','011', '019')),
mob2 char(8),
uDate datetime not null default now()
);
drop table userTbl ;
-- --------------------------
-- ์ด๋ฆ ๋ง๋ค ์ ์๋ ํ
์ด๋ธ ๋ง๋ค๊ธฐ --
create table userTbl(
uNo int auto_increment , -- ์ ์ฝ ์กฐ๊ฑด์ด ๋ค์ด๊ฐ๋ฉด
uID varchar(10) not null,
uName varchar(10) not null,
uAge int not null ,
uAddr char(4) default '์์ธ',
mob1 char(3) check(mob1 in ('010','011', '019')),
mob2 char(8),
uDate datetime not null default now(),
CONSTRAINT userTb1_uNo_pk primary key(uNo), -- ์ ์ฝ ์กฐ๊ฑด์ ๋ง๋ค์ด๋ผ
CONSTRAINT userTb1_uID_uk UNIQUE KEY (uID),
constraint userTb1_uAge_ck check (uAge between 0 and 120),
CONSTRAINT userTb1_uMob1_ck CHECK (mob1 in ('010', '011', '019'))
);
-- p331
drop table userTbl ;
drop table buyTb1 ;
-- buy table ๋ง๋ค๊ธฐ
create table buyTb1(
bNo int auto_increment ,
bName varchar(20) not null,
price int not null,
amount int not null,
uNo int not null,
constraint buyTbl_bNo_pk primary key(bNo),
constraint buyTbl_uNo_userTb1_fk foreign key userTbl(uNo)
references userTbl(uNo)
);
-- ---------------------
INSERT into userTbl values ( null, 'uTom', 'Tom', 30, default , '010', '11111111', default);
INSERT into buyTb1 values (null, 'Pen', 100, 3, 1);
SELECT * from buyTb1 bt ;
-- userTbl์ ๋ฐ์ดํฐ ์ฝ์
์ ์๋ฌ ํ์ธ
INSERT into userTbl values ('uJane', 'Jane', 30, default , '010', '11111111', default); -- ๋ฐ์ดํฐ ๊ฐ์ ์๋ง์์ ์๋จ
INSERT into userTbl values (null, 'uTom', 'Jane', 30, default , '010', '11111111', default); -- ์ ์ฝ์กฐ๊ฑด์ ์ด๊ธ๋์ X
INSERT into userTbl values (null, 'uJane', null , 30, default , '010', '11111111', default); -- ์ ์ฝ์กฐ๊ฑด์ ์ด๊ธ๋์ X
INSERT into userTbl values (null, 'uJane', null , 2000, default , '010', '11111111', default); -- ๋์ด ์ ์ฝ์กฐ๊ฑด์ ์ด๊ธ๋์ X
-- buyTbl์ ๋ฐ์ดํฐ ์ฝ์
์ ์๋ฌ ํ์ธ
INSERT into buyTb1 values ( 'Pen', 100, 3, 1); -- Column count doesn't match value count at row 1
INSERT into buyTb1 values (null, 'Pen', 100, 3, 2); -- CONSTRAINT `buyTbl_uNo_userTb1_fk` FOREIGN KEY (`uNo`) REFERENCES `usertbl` (`uNo`))
INSERT into buyTb1 values (null, NULL , 100, 3, 1); -- Column 'bName' cannot be null
INSERT into buyTb1 values (1 , 'Pen', 100, 3, 1); -- Duplicate entry '1' for key 'buytb1.PRIMARY'
------------------------------------------
-- p328
-- ํ
์ด๋ธ ์์ฑ ์ดํ์ ์ ์ฝ ์กฐ๊ฑด์ ์ถํ ์ถ๊ฐํ ์ ์๋ค.
create table uTbl(
uNo int not null,
uID varchar(10) not null,
uName varchar(10) not null,
uAge int not null ,
uAddr char(4) ,
mob1 char(3) ,
mob2 char(8),
uDate datetime not null
);
-- ์ ์ฝ์กฐ๊ฑด ์๋๊ฑธ ๋ง๋๋
ALTER table uTbl
ADD CONSTRAINT uTbl_uNo_pk primary key(uNo);
-- ๋ํดํธ๊ฐ ์ ์ฝ์กฐ๊ฑด ์์
ALTER table uTbl
alter column uAddr set DEFAULT 'SEOUL'; -- ์ปฌ๋ผ ๋ณ๊ฒฝ
ALTER table uTbl
add column height smallint; -- ์ปฌ๋ผ ์ถ๊ฐ p336
ALTER table uTbl
add column weight smallint; -- ์ปฌ๋ผ ์ถ๊ฐ
ALTER table uTbl
add column height; -- ์ปฌ๋ผ ์ ๊ฑฐ
\
SQL๋ ์ปดํ์ผ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์, ๋ณ์ ์ฌ์ฉ ๊ฐ๋ฅ
๋ชฉ์ : ๊ฒฐ๊ณผ ์ฒ๋ฆฌ
--------------- J a v a --------------
๋ณ์
์ฐ์ฐ์(์ฐ์ , ์ฐ๊ฒฐ, ๋ ผ๋ฆฌ, ๋น๊ต,,,)
์กฐ๊ฑด๋ฌธ(if else)
๋ฐ๋ณต๋ฌธ (for ,,)
์์ธ์ฒ๋ฆฌ (try catch)
ํจ์(๋ธ๋ก) --> function
------------------------------------
--> ์ด๋ฐ ๊ฒ๋ค์ ํ ์ ์๋ ๊ฒ์ด Stored Procedure ๋ผ๋ DB ๊ฐ์ฒด
p439
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ๊ธฐ ์ํด์ ๋์ด์ผ ํ ์์: Stored Procedure (๋ง๋ณด๊ธฐ๋ง ํ๋ค)
^์ฑ๋ฅ์ด ์ข์
Variable01.sql
-- Variable01 --
-- JAVA์์๋
int i = 10;
SYSTEM. OUT.println(i);
-- p244
SET @i = 10;
SELECT @i;
SET @j = 20;
SELECT @i + @j;
set @iSal = 3000;
SELECT *
from emp
where sal > @isal;
set @iSal = 2500;
prepare eQuery -- ๊ตฌ๋ฌธ์ ๋ฏธ๋ฆฌ ์ค๋น
from 'select * from emp where sal > ?'; -- ์ด ์ฟผ๋ฆฌ์ ๋ฃ์ด๋ผ
execute eQuery using @iSal; -- ์คํ์ํค๋๋ฐ, ?์ ๋ํ ๊ฐ์ @iSal๋ณ์์์ ๋ฐ์๊ฐ๋ผ
delimiter $$
create procedure usp_emp1()
begin
select * from emp;
end $$;
delimeter;
call usp_emp1();
-----------
-- --------------------------
delimiter $$
create procedure usp_emp2(in iSal int)
begin
select * from emp where sal > iSal;
end $$
-- call usp_emp2();
call usp_emp2(2500);
call usp_emp2(2999);
-- ํ ๋ฒ ๋ฃ๊ณ ํ๋ ค๋ ๋ฉ๋๋ค. ๋์ค์ ๊ณต๋ถํ ๋, ์์๋๋ฉด ์ข์
์ด๊ฒ ์ ์
1. UI?
2. CLIENT?
3. DB?
4. DB ๋ชจ๋ธ๋ง?
5. stored procedure
๊ทผ๋ฐ ์ธ๋ ฅ์ด ๋ธ๋ฆฌ๋๊น 5๋ฒ ๋บ
java sql์ html๋ก ๊ฐ์ผ๋ค --> ์ด๊ฒ JSP
java
์คํ๋ง์ด๋ผ๋ ํ๋ ์์ํฌ
์กฐ๊ธ ๋ ๋์๊ฐ์
5. stored procedure ๋ฑ๋ฑ db์ปดํฌ๋ํธ๋ค์ ๊ฐ๋ฐํ๊ณ ์ถ๋ค?
๊ทธ๋ผ sp , view๋ฅผ ๊ฐ์ง๊ณ ํ๋ฉด ๋๋ค.
1,2,3,4,5 ๋ค ํ ๊ฑฐ๋์ ์ ํ์ ์ธ๋ ฅ์ ๋ฐ๋ผ ์ ํ \
ํ ์ด๋ธ ๊ตฌ์ฑํ๋ ๊ฒ
ํ ์ด๋ธ ๊ตฌ์ฑ๋๋ฅผ ๋ง๋ ๋ค.
erd
๋ชจ๋ธ๋ง ๋๊ตฌ๋ค์ ์ ๋ฝ ๋๊ตฌ๊ฐ ๋ง์
์น:
1. ํ๋ก์ ํธ ์ค๊ณ ๊ธฐ๋ณธ ํ๋ฆ(ํ๋ก์ ํธ ๊ตฌ์ถ)
2. html ๊ตฌ์ฑ์ ๋ณด๋ก ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ฝ์ ์ ์๋์ง ๋ฐ์ดํฐ ๊ทผ์์ง ์ ์ ์์. (ํ๋ก์ ์ ์ฅ, ์ ์ฅ ์์คํ ์ ๋ํ ์ดํด)
3. ํ์ด์ฌ ๋ถ์. (์ค์ ์ ์ฅ๋ ๋ด์ฉ ๋ถ์)
ํ์ด์ฌ ๋ถ์์ ์ ํ๋๋ผ๋, ํ๋ก์ ํธ ๊ธฐ์น์ ๊ฒฐ ์๊ธฐ๊ฐ ํ๋ค์ด์.
1. ๋ชฉ์ ์ด ๋ถ๋ช ํ์ง ์์ ๊ฒฝ์ฐ๊ฐ ์์.
๋ฐฉํฅ ์ก๊ธฐ ๋ฐ์ดํฐ ๋ถ์ ๊ด๋ จ
1. ํ์ด์ฌ + ๋ถ์ ์น๊ธฐ(Code mind, ๋ญ ํด์ผํ ์ง๋ฅผ ๋ชจ๋ฅด๊ฒ ๋จ)
2. ํต๊ณ ๋ถ์ ์ฑ ์ธ๋ฐ ํ์ด์ฌ ์ธ์ด ์์(Business mind, ๋ ํ์ด์ฌ์ ๋ฐฐ์ ๋๋ฐ ์ ๋ชป๋ค๋ฃจ์ง?)
3. ์ตํฉํ๋ ค๋ค๋ณด๋ฉด, ๋ชจ๋ ๊ฑธ ๋ค ๋ด์ผ๋ คํด์ ์ด๋ ค์.
ํ๊ตญ์์๋ DB --> big data๋ก ํ๋ฌ๊ฐ.
์ฒ์ ๋น ๋ฐ์ดํฐ ๊ณผ์ ์ด ๊ทธ๋์ ํ๋ก์ผ๋ก ๋ง๋ค์ด์ง.
์๋ฌธ: ์ ์ฅ๊ธฐ์ ์ ๋ฌด์จ ๋น ๋ฐ์ดํฐ ๋ถ์์ด ๋ค์ด๊ฐ?
๋น ๋ฐ์ดํฐ๋ ์น, ํ์ฌ๋ดdb, ์ผ๋ฐ ํ์ผ, ์์คํ ๋ก๊ทธ ๋ฑ ์์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ผ๋ก ์น์ผ๋ก ์๊ฐํจ. Big Data (volume, variety, velocity) --> ๊ทธ๋์ ์น์ผ ์ ๋ฐ์ ์์.
๋ฐ์ดํฐ์ ๋ชฉ์ ์ด ์ด๋์๋๋?
์๋๋ฆฌ์ค๋ก ๊ธฐ์น์ ๊ฒฐ์ ๋ง๋ค์ด๊ฐ์ผํ๋๋ฐ, ์ด? ํต๊ณ, ์ํ --> ์๊ฐํ ํ์ํ๋ค?
๋น ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ด๋ป๊ฒ ํ๋ ? --> ์์ , ํ๋ธ๋ก (์ ์ฐํ์ง ์์)
-- > ์ธ์ด์ ์ธ ์ฒ๋ฆฌ ํด๋ณด์ (ํ์ด์ฌ)
๋ฐ์ดํฐ ์์ด ๋ง๋ค? ์ ์ฅ๊ธฐ์ ํ์ํ๋ค (ํ๋ก)
์น์ ์ดํดํด๋ณด์ --> ๊ทธ๋ผ ๊ตฌ์ถํด๋ณด์
์น์๋ฒ ๊ตฌ์ถํ๊ธฐ ์ํด์๋? --> ๊ฒ์ํ ๋ง๋ค์ด๋ณด๋. --> 3. db ํ ์ด๋ธ ํ์ํ๋ค, 2. ์ฒ๋ฆฌํ๋ ค๋ฉด ์๋ฐ ํ์ํ๊ณ , 1. ์ด๊ฑธ UI๋ก ๋ง๋ค์ด์ค์ผ์ง
์น ํฌ๋กค๋ง์ ๊ธฐ๋ณธ ๊ธฐ์ ์ html, css, javascript ์ด๋์ ์ฝ์ด์ฌ๋? --> UI๋ฅผ ํด์ผ๊ฒ ๋ค.
๋ฐ์ดํฐ ๋ชจ๋ธ๋ง
- ๊ด๊ณํ DB<
๋ฐ์ดํฐ ๋ชจ๋ธ๋ง ๊ณผ์ :
1. ํ์ค(์ ๋ฌด ํ๋ก์ธ์ค) ์ดํด <-- ๊ณ ๊ฐ ๋์ฆ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฒ์ ์ ํ --> ๋ช ์ธ (๋ฌธ์๋ก ๋จ๊น)
2. ๊ฐ๋ ์ ๋ชจ๋ธ๋ง --> ๊ฐ๋ ์ ๊ตฌ์กฐ
--> ERD(Entity Relationship Diagram)
3. ๋ ผ๋ฆฌ์ ๋ชจ๋ธ๋ง --> ๋ ผ๋ฆฌ์ ๊ตฌ์กฐ(Data ๋ชจ๋ธ)
- ํ๋ฒ / ๊ณผ๋ชฉ ์ฝ๋ : ํค๊ฐ.
--> ์ ๊ทํ
4. ๋ฌผ๋ฆฌ์ ๋ชจ๋ธ๋ง --> ๋ฌผ๋ฆฌ์ ๊ตฌ์กฐ
--> ์ ๊ทํ RDBMS ์ ์ , ํ ์ด๋ธ ํ ํ ์์๋ ๋ฐ์ดํฐ ํ์ , ์ฌ์ด์ฆ ์ ์
---------------------------------------------------------------------------------------------------
--------
๋์ ๋์ฌ์ ์ ์ฃผ ๋ฐ์ดํฐ: ๋์
์๋์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ํ ์ด๋ธ์ ๋ง๋ฌ
์ฝ์ด๋ณด๊ธฐ: https://travislife.tistory.com/13
https://hyonee.tistory.com/117
๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ํ์ค์ธ๊ณ ์ ๋ฌด์์ ๋ฐ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์คํ ํ๊ธฐ ์ํ ๊ณผ์
ํ ์ด๋ธ์ createํ ์๋ ์์ง๋ง ์ํฌ๋ฒค์น์์ ๋ฐ๋ก ๋ฃ์ ์ ์์.
ERD ๋ค ๋ง๋ ์ํ์์ ๊ทธ๋ฆฌ๋ ๊ฒ .
์ด๋ ๊ฒ FK๋ ๋ฐ๋ก ์ค์ ํ ์ ์์!
๊ณผ์ :
1. ์ด์ ์์ฑํ ํ ์ด๋ธ ์ค๊ณ๋๋ฅผ
ํ์ ํ ์ด๋ธ, ๊ฒ์ํ ํ ์ด๋ธ
- ๊ฐ๋ ์ ๋ชจ๋ธ๋ง : ERD ์์ฑ์ ํ๊ณ ,
- ๋ ผ๋ฆฌ์ / ๋ฌผ๋ฆฌ์ ๋ชจ๋ธ๋ง Table ํ
- DDL์์ฑ
2. Shop DB ๋ง๋ค์ด๋ณด๊ธฐ
- Entitiy: [ ํ์ ] - < ๊ตฌ๋งค > - [ ์ํ ]
- ๋ ผ๋ฆฌ์ / ๋ฌผ๋ฆฌ์ ๋ชจ๋ธ๋ง Table ํ
- DDL์์ฑ
'PlayData > MySQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Day 17 | ๊ณผ์ ] DAO, DTO, VO ์ฐจ์ด(~ing) (0) | 2021.12.03 |
---|---|
[Day 18 | MySQL] DAO, VO๋ฑ (์ดํด ing) (2) | 2021.12.02 |
[Day 15 | MySQL] SubQuery, DML, Table and ๊ณผ์ (0) | 2021.11.29 |
[Day14 | MySQL] Join(ANSI Join, inner join, outer join, cross join etc.) (0) | 2021.11.26 |
[Day13 | MySQL] SQL ๊ธฐ๋ณธ RDB, where, groupby, having (0) | 2021.11.25 |