Skip to content

database mysql

egoing edited this page Aug 27, 2019 · 32 revisions

이곳으로 오는 주소 ⇨ http://bit.ly/-mysql

설치해주세요.

bitnami amp stack

설치시 아이디 비밀번호는 root / 111111 로 해주세요.

vscode

MySQL WorkBench

관계형 데이터 모델링 PPT

정규화 연습장

실행

mac

cd /Applications/mampstack-7.1.14-0/mysql/bin
./mysql -uroot -p 

windows

cd C:\Bitnami\wampstack-7.1.26-0\mysql\bin
mysql -uroot -p

실습코드

sql

create table topic(
    id int not null,
    title varchar(20) not null,
    description text null,
    author_name varchar(30) not null,
    author_profile varchar(100),
    created datetime
);
ALTER TABLE `topic` ADD PRIMARY KEY( `id`);
ALTER TABLE `topic` CHANGE `id` `id` INT(11) NOT NULL AUTO_INCREMENT;
INSERT INTO topic (title, description, created, author_name, author_profile) VALUES('MySQL', 'MySQL is ...', NOW(), 'egoing', 'web developer');
INSERT INTO topic (title, description, created, author_name, author_profile) VALUES('ORACLE', 'ORACLE is ...', NOW(), 'egoing', 'web developer');
INSERT INTO topic (title, description, created, author_name, author_profile) VALUES('SQL Server', 'SQL Server is ...', NOW(), 'duru', 'DBA');
INSERT INTO topic (title, description, created, author_name, author_profile) VALUES('MongoDB', 'MongoDB is ...', NOW(), 'khan', 'DBA');
SELECT id,title,created FROM topic WHERE id > 1 ORDER BY id DESC;
UPDATE topic SET title = 'Oracle' WHERE id = 2;
DELETE FROM topic WHERE id = 4;
CREATE TABLE `author` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) NOT NULL,
  `profile` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ;
INSERT INTO author (id, name, profile) VALUES(1, 'egoing', 'web developer');
INSERT INTO author (id, name, profile) VALUES(2, 'duru', 'DBA');
INSERT INTO author (id, name, profile) VALUES(3, 'khan', 'MongoDB admin');
ALTER TABLE `topic` ADD `author_id` INT NOT NULL AFTER `created`;
ALTER TABLE `topic`
  DROP `author_name`,
  DROP `author_profile`;
UPDATE topic SET author_id = 1 WHERE id = 1;
UPDATE topic SET author_id = 1 WHERE id = 2;
UPDATE topic SET author_id = 2 WHERE id = 3;
SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.id;

php

topic.php?id=글의 아이디 값

<ul>
<?php
$conn = mysqli_connect('127.0.0.1', 'root', '111111');
mysqli_select_db($conn, 'fbin2');
$result = mysqli_query($conn, "SELECT * FROM topic");
while($row = mysqli_fetch_array($result)){
    echo "
            <li><a href=\"topic.php?id={$row['id']}\">{$row['title']}</a></li>";
}
?>
</ul>

<?php
$sql = "SELECT * FROM topic WHERE id = {$_GET['id']}";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_array($result);
echo "<h1>{$row['title']}</h1>";
echo "{$row['description']}";
?>

#JOIN 연습장 https://docs.google.com/spreadsheets/d/1fyO9RdtExVdEgVGFtmsldA-c-rSC_5tauPF5Fnx0GeM/edit?usp=sharing

역정규화 연습장

http://bit.ly/2WLMCko

혼자 공부하는 방법

문제해결

  • php가 데이터베이스와 상호작용을 할 때 느리다면 localhost -> 127.0.0.1로 hostname을 변경해보세요.
  • phpMyAdmin이 느리다면 app/phpmyadmin/htdocs/config.inc.php 의 내용 중 일부를 $cfg['Servers'][$i]['host'] = '127.0.0.1';로 변경해주세요.
  • MySQL WorkBench 로 접속할 때 Host '127.0.0.1' is not allowed to connect to this MySQL server가 나타나면 hostname을 localhost로 접속을 시도해주세요. 동일한 에러가 발생한다면 아래와 같은 명령을 통해서 root가 모든 client의 hostname에서 접속이 가능하게 허용해주시면 해결 될수도 있습니다.
SELECT Host,User,plugin,authentication_string FROM mysql.user;
update mysql.user set Host='%' WHERE User = 'root';
FLUSH PRIVILEGES;
SELECT Host,User,plugin,authentication_string FROM mysql.user;
grant all privileges on *.* to 'root'@'%';

대용량 데이터베이스 샘플

수련합시다

  1. 데이터베이스를 설치합니다.
  2. DB에 접속합니다. => mysql -uroot -p
  3. 스키마를 생성합니다. => CREATE DATABASE dbname;
  4. 스키마를 사용합니다. => USE dbname;
  5. 테이블을 만든다. => CREATE TABLE tablename....;
  6. 행을 추가한다. => INSERT INTO ....
  7. 행을 읽는다. => SELECT * FROM tablename...
  8. 컬럼이나 행을 제한한다. => WEHERE
  9. 행을 수정한다. => UPDATE tablename SET column name = 'new cloumn value' WHERE ...
  10. 행을 삭제한다. => DELETE FROM tablename WHERE ...
  11. 표를 수동으로 분해해본다. https://docs.google.com/spreadsheets/d/1fyO9RdtExVdEgVGFtmsldA-c-rSC_5tauPF5Fnx0GeM/edit?usp=sharing
  12. 표를 SQL로 분해한다.
  13. 표를 수동으로 합성해본다.
  14. 표를 SQL로 합성한다. => SELECT ... LEFT JOIN ...
  15. 업무파악 : 나의 서비스를 간단하게 만들어본다.
  16. 개념적 데이터 모델링 : 내가 만든 서비스의 Entity를 뽑고, Attribute를 붙이고, Relational을 연결해보면서 ERD를 그려봅니다.

Clone this wiki locally