mysql -u db02 -p / 딱 여기까지가 들어가는 명령어
내가사용하고자 하는 db를 명시 하는 명령어
이러면 (none)임 그러면 use db_02 해야함
mysql -u db02 -p db_02
db는 db_01, db_02가 있음 db_02쓰면 됨 패스워드는 mysql
빠져나오는거 quit
DB안에는 여러가지 file들로 구성되어있다
그리고 그 파일들은 여러가지 데이터를 구성되어 있음
DBMS -> db를 효율적으로 관리하기 위한 서비스
종류는 Mysql, MariaDB, Oracle, MSSQl 등..
위에 얘네 거의 대부분을 리눅스에서운영함
사진 사용자 DB생성
localhost -> ai.woosuk.ac.kr.임 이 안에 있는 계정이니까
여러가지 관련 명령아
status;
** 현재 위치에 따라 db를 들어가야함 내가 /hoeme1/student/db02/db에 있다면 /home1/student/db02/db 경로를 이렇게 줘야하고 많약 db02에 있다면 db02까지만 써야함
**
테이블 만들기
OAV / o는 get a는 속성 v는 값
CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
INSERT INTO pet VALUES ('Slim','Benny','snake','m','1996-04-29',NULL);
LOAD DATA LOCAL INFILE './pet.txt' INTO TABLE pet;
cd ->/home/strdeut/db02
mkdir db
cd db
pwd
/home/strdeut/db02/db
vi pet.txt
이사가는 법 mv ./pet.txt ./db
./ 현재 위치
Flutty Harold cat f 1993-02-17 \N
Claws Gwen cat m 1994-03-22 \N
Buffy Harold dog f 1989-05-13 \N
Fang Benny dog m 1990-03-27 \N
Bower Diane dog m 1997-12-07 1995-07-29
Chirpy Gwen bird f 1998-09-11 \N
Whistler Gwen bird \N 1997-12-09 \N
Slim Benny snake m 1996-04-29 \N
지우는 법
delete from pet;
내가 정보를 새로 추가할 수록 LOAD하면 똑같은 정보가 계속 추가하니까 지우고 다시 LOAD하기 (새로운 정보를 넣고)
12-31
name,owner... 각 하나의 필드임
비어있는 곳이 있음 -> NULL 이거는 쿼리문 작성할 때 이렇게 쓰고 (실제로 .txt같은 곳에서는 \N으로 표시함)
테이블 만들때 데이터 타입 잘해놔야함 char,varchar,birth등..
./ -> 현재 디렉토리 / ../ 현재에서 위에 디렉토리
상대 경로 -> http://cyber.woosuk.ac.kr
절대 경로 -> http://cyber.woosuk.ac.kr/var/www/html/.....
show databases;
이 테이블의 구조가 어떻게 생겨먹은지 알기 위한 명령어 -> desc pet;
내가 입력한 거 보여주는(테이블만든거) 명령어
->show create table pet;
데이터 베이스 삭제
./mysqladmin -u root -p drop testdb2 -> 리눅스에서 지우는 법 (mysql에서 말고)
enter password:
mysql > drop database testdb2 -> mysql에서 지우는 법
이렇게 두가지 방법이 있는데 어차피 관리자만 지울수 있음
테이블에 변수 지정하고 그 변수 예를들어 uid (사진 있음) 거기에는 null은 안됨 무조건 다른 수 들어가야 함
필드 영역 제외 데이터부분을 지우는 것은 delete로 필드 영역 즉 전부 제거할려면 drop 명령어 쓰기
db에서 select version();
-> now()
->: (잘못 입력함)
->\c 하면 db에서 빠져나오고 컨트롤+c하면 리눅스로 빠져나옴
참고로 exit();도 ㄱㄴ
select * from pet where sex = 'f';
select name,sex from pet; -> 하면 이 두개 필드만 보여줌
update pet set birth = '1992-03-12' where name = 'bowser';
->특정 값, 필드만 바꾸고 싶을 때 쓰는 명령어
bowser 이름을 찾아서 set birth를 '' 이걸로 바꿔라 라고 명령 ㄴ
만약에 name말고 다른걸로 정의해줘도 됨 (정의 값이 특정값을 명시하고 있어야함 예를들어 성별로 명시하면 헷갈림)
select * from pet where species = 'dog' and sex = 'f';
= 개이면서 f인 성별인 아이 출력
select * from pet where species = 'snake' or species = 'bird';
= 뱀, 새 출력
SELECT * FROM pet WHERE (sex = 'f' AND species = 'dog') OR (species = 'cat' AND sex = 'm');
select distinct owner from pet; -> 중복 빼고 출력
select name, species,birth from pet shere species ='dog' or species ='cat';
내림차순
select name,birth from pet order by birth desc;
오름차순 (태어난 날짜별로)
select name,birth from pet order by birth;
select name,species,birth from pet order by species,birth desc;
= 일단 종별로 모아두고 새는 새들끼리 캣은 캣끼리 하고 birth를 내림차순 하는거임
학수부분변경신청 학과 조교
나이가 가장 많은 동물의 나이와 이름 출력
SELECT name,
(YEAR(CURDATE()) - YEAR(birth))
- (RIGHT(CURDATE(), 5) < RIGHT(birth, 5)) AS age
FROM pet
ORDER BY age DESC
LIMIT 1;
-------이름을 알고 있다고한다면... (그냥 해본거임)
SELECT name,
(YEAR(CURDATE()) - YEAR(birth))
- (RIGHT(CURDATE(), 5) < RIGHT(birth, 5)) AS age
FROM pet
where name = 'Buffy';
나이가 가장 어린 애 출력----
SELECT name,
(YEAR(CURDATE()) - YEAR(birth))
- (RIGHT(CURDATE(), 5) < RIGHT(birth, 5)) AS age
FROM pet
ORDER BY age ASC
LIMIT 1;
3월 이전 이름과 생일 출력----
select name,birth from pet where month(birth)<3;
죽은 얘 출력
SELECT name, birth, death,
(YEAR(death)-YEAR(birth)) - (RIGHT(death,5)
AS age
FROM pet WHERE death IS NOT NULL ORDER BY age;
일반 표현식
특정 문자 출력
SELECT * FROM pet WHERE name LIKE 'b%';
'b%'; 와 '%b'; 는 다른거임 %가 앞에 있으면 --로 끝나는 것 뒤에 있으면 --로 시작하는 것
'%b%'; -> 가운데
이름 다섯 글자인 얘출력 (언더바 5개임)
SELECT * FROM pet WHERE name LIKE '_____;'
레귤러 표현식
pet 테이블에서 name이 소문자 'b'로 시작하는 모든 데이터를 조회
SELECT * FROM pet WHERE name REGEXP '^b';
얘는 대소문자 구분함
SELECT * FROM pet WHERE name REGEXP BINARY '^b';
SELECT * FROM pet WHERE name REGEXP 'fy$';
SELECT * FROM pet WHERE name REGEXP 'w';
레귤러 표현에서 (위에 일반 표현은 언더바 표현으로 하는데)
SELECT * FROM pet WHERE name REGEXP '^.{5}$'; 레귤러는 이거임
레코드는 한 줄(한 행 (row))을 말하는거임
테이블에 저장된 애네 총 몇마리(레코드 개수)인지 출력하는 거임
SELECT COUNT() FROM pet;
그룹별로
SELECT owner, COUNT(*) FROM pet GROUP BY owner;
INSERT INTO testtable(name, email) VALUES ('honggindong', 'hong100@naver.com');
개체 관계 모델 검색.........
SELECT ou.ou_code, ou.ou_note, o.tel
FROM t_office_use ou, t_offices o
WHERE ou.ou_code = o.ou_code
AND o.tel = 2112;
SELECT ou_code, ou_note FROM t_office_use;
select ou_code, ou_note from t_office_use where 'ou2'= ou_note;
테이블 간의 부모-자식 관계를 확인하려면 **외래 키(FK)**를 통해 참조되는 관계를 분석해야 합니다. 테이블 설계를 분석해 보겠습니다.
테이블 관계 분석
건물 테이블
기본 키: 건물코드
참조되는 테이블:
사무실 (건물코드 FK)
유지보수이력 (건물코드 FK)
사무실출입자 (건물코드 FK)
설명:
건물은 다른 모든 테이블에서 참조되는 **최상위 부모(할아버지)**입니다.
2. 사무실 테이블
기본 키: 건물코드(FK), 사무실 호수
참조되는 테이블:
유지보수이력 (건물코드, 사무실호수 FK)
사무실출입자 (건물코드, 사무실호수 FK)
설명:
사무실은 건물에 종속된 자식 테이블입니다.
동시에, 유지보수이력과 사무실출입자의 부모 역할을 합니다.
3. 유지보수이력 테이블
기본 키: 건물코드(FK), 사무실호수(FK), 유지보수시간
참조되는 테이블: 없음 (독립적)
설명:
유지보수이력은 건물과 사무실에 종속된 손자 테이블입니다.
이 테이블 자체는 다른 테이블을 참조하지 않습니다.
4. 사무실용도 테이블
기본 키: 용도코드
참조되는 테이블:
사무실 (용도 FK)
설명:
사무실용도는 독립적인 부모 테이블입니다.
사무실이 이 테이블을 참조하는 관계입니다.
5. 사무실출입자 테이블
기본 키: 건물코드(FK), 사무실호수(FK), 방문일자, 입실시간
참조되는 테이블:
건물 (건물코드 FK)
사무실 (건물코드, 사무실호수 FK)
설명:
사무실출입자는 건물과 사무실에 종속된 손자 테이블입니다.
부모-자식 관계 정리 (계층 구조)
최상위 부모 (할아버지):
건물
중간 부모 (부모/자식 역할):
사무실: 건물의 자식, 유지보수이력과 사무실출입자의 부모.
사무실용도: 독립적인 부모.
손자 (최하위 자식):