view - 조회용으로 사용
primary key는 무조건 not null 임
DBMS는 내부적으로 table에 저장함 모든 정보를 table에 저장함
desc 는 요약정보를 보여줌
sql 한줄당 명령어가 자동 실행됨
select no, name, class from test1 where working='Y'; <= 이걸 가상의 table 로 만들 수 있음
create view worker
as select no, name, class from test1 where working = 'Y'; <= 이런식으로 가상의 table 만듦 그니까 원래 table 에서 복사해서 저장해두는 게 아니고 내가 worker 를 실행할 때마다 위의 문장을 실행해줌(as select no, name, class from test1 where working = 'Y'; ) 일종의 링크
create view 는 select 의 링크일 뿐임
modify column => 할 거면 타입이랑 다줘야함
값이 null 이면 자동으로 증가된 값이 부여됨 not null 이라도 auto_increment 때문에
varchar에 int 넣으면 문자로 바껴서 들어감
delete/update 할 때는 where 조건을 꼭 줘야함 아니면 데이터가 다 날아가거나 전부 업데이트 돼버림
auto- commit / 수동 커밋이 있음(insert, update, delete 즉시 반영 금지)
primary key는 당겨지면 안됨
auto-commit-false 일 경우(set autocommit=false;)
select 를 요청했을 때 임시 데이터베이스에 보관된 결과 + 실제 테이블에 보관된 결과를 응답한다.
그런데 이제 다른 클라이언트에서는 실제 테이블에 보관된 결과를 응답한다.
이후 commit 을 실행하게 되면 실제 테이블에 적용한다.
rollback 하면 돌아가게 됨
명령어 입력할 때 한줄에 하나의 column 넣으면 좋음
sql 은 대소문자 구분안함 그래서 여러 단어를 표현하는 경우에는 credit_id 이런 식으로 나눠주면 됨
도메인 지식이 밑바탕이 되어야함(회계 관련이면 회계 관련 지식) 근데 우리는 지금 SQL에 대해서만 배웠음
특정 컬럼의 값만 조회할 때 => "프로젝션(projection)"이라 부른다.
select no, concat(name,'(',class,')') from test1; => concat(문자열을 붙이는 함수/ concatenation)
MariaDB [studydb]> select no as ok, concat(name,'(',class,')') as haha from test1; <= as생략가능 찾는 컬럼에게 별명 붙이기
+----+--------------+
| ok | haha |
+----+--------------+
| 1 | aaa(java100) |
| 2 | bbb(java100) |
| 3 | ccc(java100) |
| 4 | ddd(java100) |
| 5 | eee(java100) |
| 6 | kkk(java101) |
| 7 | lll(java101) |
| 8 | mmm(java101) |
| 9 | nnn(java101) |
| 10 | ooo(java101) |
+----+--------------+
컬럼을 선택하는 걸 projection =>select 을 통해서 컬럼을 선택하는 것
데이터를 선택하는 것을 셀렉션(selection)
주의!
아닌 거 선택해라 => not, !=,<>
select no, name, class, working
from test1
where not working = 'Y';
update test1 set
tel = '2222' <= 여기 뒤에다가 쉼표 쓰면 안됨
where (no % 3) = 0;
null 체크할 때는 is not null, is null 사용해야함 != <= 이거 안됨
true는 1로 나옴
%은0자 이상을 의미하고, _는 딱 1자를 의미한다.
between 이랑 비교연산자 사용하면 됨
select *
from test1
where regdt between '2022-11-1' and '2022-12-31';
select *
from test1
where regdt >= '2017-11-1' and regdt <= '2017-12-31';
=----------------같은 거임--------------------------------
----------이거 많이 씀------------
/ 특정 날짜에 시,분,초,일,월,년을 추가하거나 빼기/
date_add(날짜데이터, interval 값 단위);
date_sub(날짜데이터, interval 값 단위);
select date_add(now(), interval 11 day);
일요일이 0임 // select regdt, date_format(regdt, '%W %w %a') from test1; 썼을 때
웹 브라우저에서 날짜 입력받아서 날짜 객체로 저장할 때 str_to_date 사용하면 됨
/ 날짜 값을 저장할 때 기본 형식은 yyyy-MM-dd이다. /
그렇다면 12/31/2022 면 어떻게 저장하는가?
insert into test1 (title, regdt) values('bbbb', str_to_date('12/31/2022', '%m/%d/%Y'));
이렇게 해주면 됨
JDBC는 일종의 프록시 서버임 JDBC를 통해서 DBMS에 접근하게 됨
foreign key = 부모테이블 + 자식 테이블
데이터 중복이 되지않게 테이블 구조를 개선하는 것을 DB모델링이라고 함
여기서 나오는 개념이 제1 정규화라는 개념임
외부테이블의 pk를 가리키는 것을 foreign key 라고 부름
서로 다른 컬럼인데 관련된 컬럼이니까 foreign key 가 필요하다
=> 즉 데이터를 분산저장하게 되면 등장하는 개념이 부모테이블, 자식테이블 개념임
참조하는 쪽이 자식 참조 당하는 쪽이 부모 (여기서 등장하는 것이 foreign key)