{"id":26833359,"url":"https://github.com/mr-won/web_programming_final","last_synced_at":"2025-03-30T15:28:46.965Z","repository":{"id":138423061,"uuid":"565643129","full_name":"mr-won/web_programming_final","owner":"mr-won","description":"web_programming_final","archived":false,"fork":false,"pushed_at":"2022-12-11T12:15:56.000Z","size":39,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-18T02:27:16.201Z","etag":null,"topics":["web-programming"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mr-won.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2022-11-14T02:10:50.000Z","updated_at":"2023-06-14T03:59:10.000Z","dependencies_parsed_at":"2023-08-20T14:07:17.309Z","dependency_job_id":null,"html_url":"https://github.com/mr-won/web_programming_final","commit_stats":null,"previous_names":["wonttan/web_programming_final","wonchihyeon/web_programming_final","chihyunwon/web_programming_final","mr-won/web_programming_final","chihyeonwon/web_programming_final"],"tags_count":null,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mr-won%2Fweb_programming_final","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mr-won%2Fweb_programming_final/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mr-won%2Fweb_programming_final/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mr-won%2Fweb_programming_final/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mr-won","download_url":"https://codeload.github.com/mr-won/web_programming_final/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246337806,"owners_count":20761271,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["web-programming"],"created_at":"2025-03-30T15:28:46.452Z","updated_at":"2025-03-30T15:28:46.950Z","avatar_url":"https://github.com/mr-won.png","language":null,"readme":"# web_programming_final\nweb_programming_final\n```\n테이블의 구조(필드) 변경\n\ncolumn 옵션은 써도되고 안써도됨\n\nalter table 테이블명 add(추가) drop(삭제) modifiy(데이터타입만) change(이름, 데이터타입)\n적용할 필드명 데이터타입\n\n데이터타입 수정modify\nalter table table_name modify name int(10);\n\n이름수정 change // 과거 필드이름 쓰고 데이터타입도 지정 둘다 바꿀려면 change 써야함\nalter table table_name change old_name name int(10);\n\n테이블의 이름 변경 rename table old_table new_table와 같은 기능\n\nalter table 과거 테이블이름 rename 바꿀 이름\n\n날짜형 데이터는 칸수를 지정하지 않습니다. (YYYY-MM-DD)으로 데이터 입력\n\n숫자형 데이터는 0칸이거나 지정안해도 숫자가 그대로 표시(기본값이 있음)\n\n실수형 decimal(값, 소수 자릿수) 가변\n\n필수 데이터인 경우 not null 지정\n\n다른 레코드와 중복값이 없는 필드 \u003c- primary key로 지정 자동으로 not null 지정\n2개이상 지정 -\u003e primary key가 2개가 아니라 2개가 합쳐져서 하나의 primary key 역할\n\ndefault 데이터 \u003c- 데이터가 없을 때 기본값 지정\n\nauto_increment : 자동 증가값 옵션\n반드시 primary key를 같이 지정\n\n데이터 입력\ninsert into 테이블명(필드 나열) values (데이터 나열)\n\n필드명 없이 모든 데이터 입력\ninsert into 테이블명 values(데이터 나열)\n\n일부 필드에만 데이터 입력\ninsert into 테이블명 (필드 나열) values (필드 순에 맞게 나열)\n\nload data infile ‘데이터파일.data’ into table 테이블명 \nfields terminated by ‘,’   \nlines terminated by ‘\\r\\n’;\nselect 연산 as ‘더하기’ // 콜롬명 지정\n\n특정 필드 데이터 검색\nselect 검색하고자 하는 필드명 from 테이블명\n\n필드 이름 변경해서 검색 AS 생략가능\nselect 필드명 AS ‘바꾸고자하는 필드명’, 필드명 AS ‘바꾸고자하는 필드명’ from 테이블명\n\n조건문을 이용한 데이터 검색\nselect 필드명 from 테이블명 where 조건문\n\n함수를 이용한 데이터 검색\nAVG(평균), COUNT(개수)\n\nselect AVG(필드명) FROM 테이블\n\n와일드 카드 LIKE를 이용한 데이터 검색\n% : 0개 이상\n_ : 1개\n\n서울시로 시작하는 필드 데이터 출력\nselect 필드명 from 테이블명 where 필드명 like ‘서울시%’;\n\n그룹 by: 그룹별로 계산\n\nscore_tbl 테이블에서 학번(id)별로 취득 과목수(subject), 평균값 출력\nselect id ‘학번’, count(point) ‘과목 수, avg(point) ’평균‘ from score_tbl group by id;\n\nscore_tbl 테이블에서 과목별(subject)로 점수(point) 취득 학생수 출력\nselect subject ‘과목명’, count(subject) ‘학생수’ from score_tbl group by subject;\n\nhaving : 그룹별로 계산한 결과에서 조건 추가\n\nscore_tbl 테이블에서 학번(id)별로 평균이 90 이상인 학번 출력\nselect id ‘학번’, avg(pooint) ‘평균’ from score_tbl group by id having avg(point) \u003e= 90;\n\nscore_tbl 테이블에서 과목별(subject)로 점수(point) 취득 학생수가 8이상 출력\nselect subject ‘과목명’, count(subject) ‘학생수’ from score_tbl group by subject having count(subject) \u003e=8;\n\norder by : 데이터 정렬\n\n필드명이 적은 순으로 정렬 : 오름차순 order by 필드명 asc\n필드명이 높은 순으로 정렬 : 내림차순 order by 필드명 desc\n\n\n2개 이상의 정렬 기준을 적용 나이 같을 때 최근 학번순으로 정렬\n\nselect name ‘이름’, age ‘나이’, id ‘학번’ from student_tbl order by age asc, id desc;\n\nlimit 출력 개수 지정\n최근 학번 순으로 3개의 레코드 출력 (order by, limit 이용)\nselect * from student_tbl order by id desc limit 3;\n\ninto outfile ; 출력 결과의 저장\nselect 쿼리문의 출력 결과를 파일로 생성할 수 있고 이 파일을 다시 데이터 파일로 사용할 수 있음\n기본으로는 ‘\\r\\n’, ‘\\t’으로 생성되지만 변경할 수 있음\n\nselect id, avg(point) from score_tbl group by id \ninto outfile ‘avg_comma.dat’ fileds terminated by ‘,’;\n\n중복 데이터 하나만 출력\nselect distinct subject from score_tbl;\n과목 데이터 중복은 하나만 출력\n\n테이블 여려개 검색 table명.필드명\n\nselect 테이블명.필드명, 다른테이블명,다른필드명 from 테이블명, 다른테이블명 where 테이블명.필드명 = 테이블명.필드명\n\n데이터 값 수정 update\n\nupdate 테이블명 set 필드명=‘바꿀데이터’ where 조건문\n\nscore_tbl에서 프레임워크 과목의 점수를 5점 감점\n\nupdate score_tbl set point = point-5 where subject=“프레임워크”;\n\n데이터 삭제\n\ndelete from 테이블명 where 조건문;\n\n데이터삭제해도 숫자가 이어지는 문제는 auto_increment =1로 수정\nalter table score_tbl auto increment = 1;\n\n\n\n\n\n\n\n사용자 계정 비밀번호 설정\n\nset password = password(‘1234’);\nflush privileges; // 바로 적용\n\n(1) 1개 DB에 2개 테이블 생성\n\ncreate table 상위테이블 {\n\tid char(6) Primary key\n}\n\ncreate table 하위테이블 {\n\tid char(6) not null,\n\tforeign key(id) reference 상위테이블(id) on delete cascade on update cascade\n}\t\n(2) foreign key 생성\n(3) 2개의 테이블을 이용한 select 검색\nstudent_tbl에는 id, name이 있고 score_tbl에는 id, subject, point가 있습니다. id라는 공통점이 두 테이블에 존재\n\n문제 : student_tbl, score_tbl의 id이 동일한 레코드를 찾아서 student_tbl에서 name을 score_tbl에서 subject, point를 찾아서 출력\n\n\n1. where 사용 select 찾고자하는테이블명.필드 from 두 테이블명 where 조건 \nselect student_tbl.name, score_tbl.subject, score_tbl.point from student_tbl, score_tbl where \nstudent_tbl.id = score_tbl; \n\n\n2. join 사용 select 찾고자하는테이블명.필드 from 테이블명 join 다른테이블명 on 조건\nselect student_tbl.name, score_tbl.subject, score_tbl.point from student_tbl join score_tbl on student_tbl = score_tbl;\n\n1. select score_tbl.id, subject_tbl.SUM(subject) from score_tbl, student_tbl where subject_tbl.subject = score_tbl.subject group by id\n\n2. select score_tbl.id, subject_tbl.SUM(subject) from score_tbl join student_tbl on score_tbl.subject = student_tbl.subject group by id\n\n(4) 데이터 추가 폼파일을 학생이 직접 생성\nform.php, insert.php 활용\n```\n## 생성할 테이블 구조도\n![image](https://user-images.githubusercontent.com/58906858/201564260-1420c2fe-49b8-4342-9727-c272a235f87e.png)\n\n\n## 테이블 생성\n\n```php\ncreate table student_tbl (\nid char(6) PRIMARY KEY,\nname char(4) NOT NULL,\ngender char(1),\nage tinyint(3) unsigned,\ndepart varchar(8) NOT NULL,\nyear tinyint(2) unsigned,\naddress varchar(15)\n);\n```\n\n```php\ncreate table subject_tbl (\nsubject varchar(10),\ncode char(5),\ncredit tinyint(2) unsigned NOT NULL,\nclassify char(4) DEFAULT '일반선택',\nPRIMARY KEY(subject)\n);\n```\n\n```php\ncreate table score_tbl (\nnumber mediumint(6) KEY AUTO_INCREMENT,\nid char(6) NOT NULL,\nsubject varchar(10) NOT NULL,\npoint tinyint(3)  NOT NULL\n);\n```\n\n## 연결 설정(Foreign key 설정한 score_tbl)\n```php\ncreate table score_tbl (\nnumber mediumint(6) KEY AUTO_INCREMENT,\nid char(6) NOT NULL,\nsubject varchar(10) NOT NULL,\npoint tinyint(3)  NOT NULL,\nFOREIGN KEY(id) REFERENCES student_tbl(id) \nON UPDATE CASCADE ON DELETE CASCADE ,\nFOREIGN KEY(subject) REFERENCES subject_tbl(subject) \nON DELETE CASCADE ON UPDATE CASCADE\n);\n```\n## 테이블에 데이터를 파일로 입력\n  \n```php\nload data infile 'student_comma.dat' into table student_tbl\nfields terminated by ','\nlines terminated by '\\r\\n';\n```\n\n```php\nload data infile 'subject_comma.dat' into table suject_tbl\nfields terminated by ','\nlines terminated by '\\r\\n';\n```\n\n```php\nload data infile 'score_comma.dat' into table score_tbl\nfields terminated by ','\nlines terminated by '\\r\\n';\n```\n\n## 필드 데이터 업데이트 (연관성있는 것도 변경) Primary key와 Foreign 키 설정\n\n```php\nupdate subject_tbl set subject = \"중세한국사\" where code = 'C2084';\n```\n\n## 데이터 삭제 \n\n```php\ndelete from table명\n```\n\n## 테이블 삭제\n\n```php\ndrop table table명\n```\n\n## auto_increment 값 조정\n```php\nalter table table명 auto_incremnt=1;\n```\n\n## 규칙\n\n![image](https://user-images.githubusercontent.com/58906858/201563700-01dcfba7-c12a-45fd-bb82-ba3f64c87702.png)\n\n## PHP와 MySQL 연동\n\nMySQLi 확장은 절차지향적, 객체지향적 API를 함께 제공하고 목적에 따라 적절한 방식을 선택하여 사용 가능합니다.\n\n## MySQLi API \u003c- 함수에 접근하는 유형(절차지향, 객체지향) 코딩 스타일\n\n(1) 절차지향 방식\n```PHP\n$host = \"localhost\";\n$user = \"root\";\n$link = mysqli_connect($host, $user);\nmysqli_select_db($link, \"friend\");\n$result = mysqli_query($link, \"SELECT name FROM friend\");\n$number = mysqli_num_rows($result);\nmysqli_close($link);\n?\u003e\n\n(2) 객체주어(중심) 방식\n```PHP\n$host = \"localhost\";\n$user = \"root\";\n$link = new mysqli($host, $user);\n$link-\u003eselect_db(\"friend\"); // link는 데이터베이스 friend를 선택\n$result = $link-\u003equery(\"SELECT name FROM friend\"); // link는 다음의 쿼리를 실행\n$number = $result-\u003enum_rows; // result는 num의 개수를 계산\n$link-\u003eclose();\n?\u003e\n\n(3) 혼합형\n```PHP\n$host = \"localhost\";\n$user = \"root\";\n$link = new mysqli($host, $user);\n$link-\u003eselect_db(\"friend\"); // link는 데이터베이스 friend를 선택\n\n$result = mysqli_query($link, \"SELECT name FROM friend\"); \u003c- 절차지향 방식 혼합\n\n$number = $result-\u003enum_rows; // result는 num의 개수를 계산\n$link-\u003eclose();\n```\n \n두 방식은 큰 차이가 없습니다. 사용자는 개인 취향에 따라 선택할 수 있습니다.\n\n## 사용자 계정의 비밀번호 설정\n\n비밀번호 관련 xampp/mysql/data/mysql 안에 user 테이블에 있음\n\ndesc user\n\n비밀번호 설정 명령어 : set password = password('');\n\n## user 테이블의 password 필드\n![image](https://user-images.githubusercontent.com/58906858/201844354-790fa85e-62f4-4a54-8a33-ea8473092b2a.png)\n\nlocalhost = 127.0.0.1 자기주소\n::1 -\u003e IPv6 주소\n\nselect host, user, password from user; \u003c\u003c 비밀번호 확인\n\n![image](https://user-images.githubusercontent.com/58906858/201845407-287015e9-2725-40c2-8e49-544275aab72f.png)\n\n비밀번호 설정 명령어 : set password = password('설정할 패스워드');\n\nflush privileges : 이 계정과 비밀번호로 접속했을 때모든 권한을 주겠다.\n\n## MySQLi 확장 함수와 상수\n\nhttps://www.php.net/manual/en/mysqli.summary.php\n\n\n```php\n$mysqli::query() =\u003e $mysqli-\u003equery()\n$mysqli_result::affected_rows =\u003e $mysqli_result-\u003eaffected_rows\n```\n\n일반적으로 mysqli 객체 변수명칭을 쓰지만 개발자가 원하는 명칭을 사용해도 됩니다.\n```PHP\n$link = new mysqli($host, $user);\n$link-\u003eselect_db(\"friend);\n$result = $link-\u003equery(\"SELECT name FROM friend);\n$number = $result-\u003efetch_array(MYSQLI_BOTH);\n$link-\u003eclose();\n```\n\n## PHP와 MySQL 연동\n\n1. MySQL 접속\n2. 데이터베이스 선택\n3. 쿼리문 실행\n4. MySQL 종료\n\n*Apache 서버를 실행시켜야 합니다.\n\n1. MySQL 접속\n\n객체 중심 : $link = new mysqli('localhost', 'user', 'password', 'dbname');\n절차 지향 : $link = mysqli_connect('localhost', 'user', 'password', 'dbname');\n\n```php\n\u003c?php\n//$link = new mysqli(\"localhost\", \"root\", \"1234\");\n$host = \"localhost\";\n$user = \"root\";\n$password = \"1234\";\n$link = new mysqli($host, $user, $password);\n//$link = mysqli_connect($host, $user, $password);\n?\u003e\n```\n\n접속 성공하면 DB 접속 성공\n```PHP\n\u003c?php\n$host = \"localhost\"; $user = \"root\"; $password = \"1234\";\n$link = new mysqli($host, $user, $password);\nif (!$link) {\n    die(\"DB 접속 실패\" . $link-\u003econnect_error); // die -\u003e 출력하고 프로그램 종류\n} else echo \"DB 접속 성공\u003cbr\u003e\";\n?\u003e\n```\n\n## 기존 데이터베이스 선택\n```PHP\n\u003c?php\n$host = \"localhost\"; $user = \"root\"; $password = \"1234\";\n$dbname = \"mysql\";\n$link = new mysqli($host, $user, $password, $dbname);\nif (!$link) {\n    die(\"DB 접속 실패\" . $link-\u003econnect_error); // die -\u003e 출력하고 프로그램 종류\n} else echo \"DB 접속 성공\u003cbr\u003e\";\n?\u003e\n```\n\n## 접속 후 데이터 베이스 선택 : select_db()\n```PHP\n\u003c?php\n$host = \"localhost\"; $user = \"root\"; $password = \"1234\";\n$link = new mysqli($host, $user, $password);\n$mydb = $link-\u003eselect_db(\"mysql\"); // return 되는 값 : 0 또는 1\n// db접속이 되었는지 추가 확인\n```\n\n## PHP로 데이터 베이스 생성 (쿼리문 작성)\n```PHP\n\u003c?php\n$host = \"localhost\"; $user = \"root\"; $password = \"1234\";\n$link = new mysqli($host, $user, $password);\n$link-\u003equery(\"create database abc\");\n//mysqli_query($link, \"create database testdb\");\n?\u003e\n```\n\n## DBMS 종료 : close()\n\n객체 중심 : $link-\u003eclose()\n절차 지향 : $mysqli_close($link);\n\n## 기말고사 프로젝트\n\nhttps://www.dothome.co.kr/\n![image](https://user-images.githubusercontent.com/58906858/201856822-e8d36973-36ef-4bbc-8ec9-1e4b06b169b7.png)\n\nid : heungeob1003\npw : h!\n\nhttp://114.71.72.35/grade/\n\n11월 21일 다음 주 월요일까지 제출\n12월 15일까지 기획서(테이블, 용도, 목적 명시) 제출 도메인잡아서 제출\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmr-won%2Fweb_programming_final","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmr-won%2Fweb_programming_final","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmr-won%2Fweb_programming_final/lists"}