show databases;
create database hello_world_db; --hello_world_db라는 이름의 데이터베이스를 생성.
USE hello_world_db; --hello_world_db데이터베이스를 사용하겠다 라고 MySQL에 알림.
mysql workbench을 쓴다면
좌측 상단에 schemas에 있는 데이터베이스에서 오른쪽 클릭하고 set as Default schemas로 해두면 connection할때마다 use hello_world_db할 필요없음.
drop database hello_world_db; --hello_world_db라는 이름의 데이터베이스 삭제
use hello_world_db
select database();
mysql> CREATE TABLE hello_world_db (
-> id INT NOT NULL AUTO_INCREMENT,
-> name VARCHAR(20) NOT NULL,
-> age INT UNSIGNED NOT NULL,
-> married TINYINT NOT NULL,
-> comment TEXT NULL,
-> create_at DATETIME NOT NULL DEFAULT now(),
-> PRIMARY KEY(id),
-> UNIQUE INDEX name_UNIQUE (name ASC))
-> COMMENT = '사용자 정보'
-> DEFAULT CHARSET=utf8
-> ENGINE=InnoDB;
Query OK, 0 rows affected (0.03 sec)
레퍼런스:
MYSQL DDL 명령어 사용하는 방법 -
https://kkamikoon.tistory.com/169
mysql utf-8한글 인코딩해결하기 - https://bestcoding.tistory.com/11
charset 과 collation - https://sshkim.tistory.com/128
alter table <ASIS테이블명> rename <TOBE테이블명>
https://mcpaint.tistory.com/194
drop table <테이블명>;
show tables;
어떤 엔진쓰는지, rows개수 등등
show table status;
cats 테이블에 무슨 열(column)있는지 확인
desc cats;
-- 컬럼 추가
ALTER TABLE `테이블이름` ADD `컬럼이름` 데이터타입 NOT NULL DEFAULT 0 COMMENT '코멘트내용' AFTER 컬럼명;
https://wakestand.tistory.com/484
ALTER USER 'service'@'%' IDENTIFIED BY 'MYSQL_ROOT_PASSWORD';
https://serverok.in/you-must-reset-your-password-using-alter-user
GRANT ALL PRIVILEGES ON *.* TO 'service'@'%' WITH GRANT OPTION;
변경내용 메모리에 반영하기
FLUSH PRIVILEGES;
ALTER TABLE `테이블명` MODIFY 컬럼명` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '코멘트' AFTER 컬럼명;
https://wakestand.tistory.com/484
SET SQL_SAFE_UPDATES = 0;
UPDATE `테이블이름`
SET 컬럼이름 = 1
WHERE 컬럼이름 = 1;
SET SQL_SAFE_UPDATES = 1;
-- 기존 컬럼 삭제
ALTER TABLE `테이블이름` DROP `컬럼이름`;
-- mysql 테이블 컬럼 코멘트 조회 방법
SELECT A.TABLE_NAME, A.TABLE_COMMENT, B.COLUMN_NAME, B.COLUMN_COMMENT
, B.COLUMN_TYPE, B.COLUMN_DEFAULT, B.ORDINAL_POSITION
FROM INFORMATION_SCHEMA.TABLES A INNER JOIN INFORMATION_SCHEMA.COLUMNS B
ON A.TABLE_SCHEMA = B.TABLE_SCHEMA
AND A.TABLE_NAME = B.TABLE_NAME
WHERE A.TABLE_SCHEMA = '스키마명' # DB베이스이름 쓰세요.
AND A.TABLE_NAME = '테이블명';
https://wakestand.tistory.com/483
insert into cats(name, age) values ('momo', 7);
insert into cats( name, age)
values ('ya', 5),
values ('mo', 5),
values ('hae', 5);
데이터에 '따옴표 넣고싶으면 escape 문자 이용 \'
cats 테이블의 모든 컬럼을 조회하겠음.
select * from cats;
where절 씁니다.
select *
from city
where Population < 8000000
and population > 7000000;
where절은 다양한 관계연산자를 같이 사용합니다.
select *
from city
where population between 7000000 and 8000000;
한 글자 매치하기 위해서 '_' 사용
ko땡으로 시작하는 국가코드를 가진 도시 조회하기
select *
from city
where countrycode like 'ko_';
문자 뒤에 %를 쓰면 여러 글자를 매치할 수 있음.
tel 로 시작하는 도시 이름 조회하기.
select *
from city
where name like 'tel %';
select *
from city
where countrycode like 'ko_';
테이블 생성할때 넣으면 됩니다.
CREATE TABLE cats3
(
name VARCHAR(20) DEFAULT 'no name provided',
age INT DEFAULT 99
);
초기값에 NOT NULL도 추가
CREATE TABLE cats4
(
name VARCHAR(20) NOT NULL DEFAULT 'unnamed',
age INT NOT NULL DEFAULT 99
);
따라하기
INSERT INTO cats() VALUES();
SELECT * FROM cats;
INSERT INTO cats3() VALUES();
SELECT * FROM cats3;
INSERT INTO cats3(name, age) VALUES('Montana', NULL);
SELECT * FROM cats3;
INSERT INTO cats4(name, age) VALUES('Cali', NULL);
PRIMARY KEY(컬럼명)
CREATE TABLE unique_cats
(
cat_id INT NOT NULL,
name VARCHAR(100),
age INT,
PRIMARY KEY (cat_id)
);
따라하기
mysql> INSERT INTO unique_cats(cat_id, name, age) VALUES(1, 'Fred', 23);
Query OK, 1 row affected (0.01 sec)
mysql>
mysql> INSERT INTO unique_cats(cat_id, name, age) VALUES(2, 'Louise', 3);
Query OK, 1 row affected (0.06 sec)
mysql>
mysql> INSERT INTO unique_cats(cat_id, name, age) VALUES(1, 'James', 3);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
기본키는 유일해야 구분하기 때문에 보통 AUTO_INCREMENT 속성을 사용함.
CREATE TABLE unique_cats2 (
cat_id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(100),
age INT,
PRIMARY KEY (cat_id)
);
INSERT INTO unique_cats2(name, age)
VALUES('Skippy', 4),
VALUES('Jiff', 3),
VALUES('Jiff', 3),
VALUES('Jiff', 3),
VALUES('Skippy', 4);
SELECT * FROM unique_cats2;
CONSTRAINT 제약조건명 FOREIGN KEY (컬럼명) REFERENCES 참고하는테이블 (컬럼명)
ON UPDATE와 ON DELETE는 모두 CASCADE로 설정 : 사용자 정보가 수정되거나 삭제되면 그것과
연결된 댓글 정보도 같이 수정하거나 삭제한다는 뜻입니다. 그래야 데이터가 불일치하는 현상이 일어나지 않습니다.
ALTER TABLE `DB명`.`A테이블명`
ADD CONSTRAINT `제약조건이름(문자열)`
FOREIGN KEY (`A컬럼명`)
REFERENCES `DB명`.`B테이블명` (`B컬럼명`)
ON DELETE RESTRICT
ON UPDATE CASCADE;
http://www.tcpschool.com/mysql/mysql_constraint_foreignKey
mysql> DESC users;
+-----------+------------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+------------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | UNI | NULL | |
| age | int(10) unsigned | NO | | NULL | |
| married | tinyint(4) | NO | | NULL | |
| comment | text | YES | | NULL | |
| create_at | datetime | NO | | CURRENT_TIMESTAMP | |
+-----------+------------------+------+-----+-------------------+----------------+
6 rows in set (0.01 sec)
mysql> DROP TABLE users;
UPDATE cats SET breed='Shorthair' WHERE breed='Tabby';
DELETE FROM cats WHERE age=4;
mysql> SHOW TABLES;
+------------------+
| Tables_in_nodejs |
+------------------+
| comments |
| users |
+------------------+
2 rows in set (0.00 sec)
ALTER TABLE `DB명`.`테이블명`
ADD INDEX `제약조건이름(문자열)` (`컬럼명` ASC) VISIBLE;
ALTER TABLE todos CHANGE completed done TINYINT(1);
alter table [테이블명] add [컬럼명] [타입] [옵션];
https://zetawiki.com/wiki/MySQL_%ED%85%8C%EC%9D%B4%EB%B8%94_%EC%BB%AC%EB%9F%BC_%EC%B6%94%EA%B0%80
mysql> ALTER TABLE todos MODIFY title varchar(400);
Query OK, 0 rows affected (0.13 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> ALTER TABLE todos MODIFY completed TINYINT(1) AFTER UserId;
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
https://extbrain.tistory.com/97
A DB의 table A를 복사해서 B DB에 table A로 붙여넣기
https://mysqldba.tistory.com/278
https://victorydntmd.tistory.com/139
join과 subquery 성능차이: https://stackoverflow.com/questions/2577174/join-vs-sub-query
Generate DB schema in a 10 seconds with MySQL Workbench
https://www.youtube.com/watch?v=RbKEYDtkAJI
mysql workbench를 켭니다.
사용하려는 dbms에 접근합니다.
erd를 보려는 db와 그안에 tables들이 있을 것임.
상단메뉴에서 Database > Reverse Engineer...
단계가 다음과 같은데
select schemas에서 erd로 보려는 db 스키마를 선택해줍니다.
그리고 계속 continue
schema에서 데이터베이스에 set as default Schema 해두면 use db이름 할 필요없음.
컨테이너에서나 가상머신에서 mysql-server를 설치했으면
root 비밀번호부터 설정할게 많은데 한번에 할 수 있음.
https://medium.com/@alienhue/installing-mysql-in-windows-subsystem-for-linux-ubuntu-18-04-5227e27ddf2a
sudo mysql_secure_installation
mysql_secure_installation 설명
:http://blog.servis.co.kr/index.php/2020/05/14/mysql_secure_installation/