#7 MySQL

#7.0 Introduction

MySQL MySQL์€ ์„ธ๊ณ„์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ์˜คํ”ˆ ์†Œ์Šค์˜ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ. ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ, ๋‹ค์ค‘ ์‚ฌ์šฉ์ž, ๊ตฌ์กฐ์งˆ์˜์–ด ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์œผ๋กœ ์˜ค๋ผํด์ด ๊ด€๋ฆฌ ๋ฐ ์ง€์›ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, Qt์ฒ˜๋Ÿผ ์ด์ค‘ ๋ผ์ด์„ ์Šค๊ฐ€ ์ ์šฉ๋จ https://www.mysql.com

MariaDB MariaDB๋Š” ์˜คํ”ˆ ์†Œ์Šค์˜ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ. MySQL๊ณผ ๋™์ผํ•œ ์†Œ์Šค ์ฝ”๋“œ(MySQL์—์„œ fork)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, GPL v2 ๋ผ์ด์„ ์Šค๋ฅผ ๋”ฐ๋ฅธ๋‹ค. ์˜ค๋ผํด ์†Œ์œ ์ธ MySQL์˜ ๋ถˆํ™•์‹คํ•œ๋ผ์ด์„ผ์Šค ์ƒํƒœ์— ๋ฐ˜๋ฐœํ•˜์—ฌ ๋งŒ๋“ค์–ด์กŒ์œผ๋ฉฐ, ๋ฐฐํฌ์ž๋Š” ๋ชฌํ‹ฐ ํ”„๋กœ๊ทธ๋žจ AB์™€ ์ €์ž‘๊ถŒ์„ ๊ณต์œ ํ•ด์•ผ ํ•œ๋‹ค. https://mariadb.org

#7.1 Installation

MySQL ์„ค์น˜

#7.2 MySQLWorkbench

MySQLWorkbench ์„ค์น˜

#7.3 Connecting

Beekeeper Stuidio์™€ ์—ฐ๊ฒฐ

#7.4 MySQL Data Types Part One

๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ํ†ตํ•ด ์ •ํ™•ํžˆ ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํ…Œ์ด๋ธ”์— ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ช…ํ™•ํžˆ ํ•  ์ˆ˜ ์žˆ์Œ

CREATE TABLE users (
  username CHAR(10),
  -- 'son' ์ €์žฅ์‹œ => 'son       ' ๊ณต๋ฐฑ ํฌํ•จํ•œ 10์ž๋ฅผ ์ €์žฅํ•จ, ์ตœ๋Œ€ 255๊ธ€์ž๊นŒ์ง€ ์ €์žฅ๊ฐ€๋Šฅ
  
  email VARCHAR(50),
  -- ๊ฐ€๋ณ€์ ์ธ string ๊ธธ์ด๋ฅผ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ์— ์‚ฌ์šฉ๋จ, ์ตœ๋Œ€ 50์ž ์ €์žฅํ•ด๋ผ !
  
  gender ENUM('Male', 'Female'),
  -- A OR B ์™€ ๊ฐ™์ด ํŠน์ • ์˜ต์…˜ ๊ฐ’๋งŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก
  
  interests SET('Technology', 'Sports', 'Music', 'Art', 'Travel', 'Food', 'Fashion', 'Science'),
  -- ๋ฆฌ์ŠคํŠธ ๋‚ด์—์„œ ์„ ํƒ
  
  bio TEXT,
  -- TINYTEXT 255์ž / TEXT 65,535์ž (64KB) / MEDIUMTEXT 16,775,215์ž (16MB) / LONGTEXT 4,294,967,295์ž (4GB)
  -- ๋‹ค์–‘ํ•˜๊ฒŒ ์žˆ์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋“ค์–ด์˜ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ๋ คํ•ด ๊ฐ€์žฅ ์ž‘์€ ํƒ€์ž…์„ ์„ ํƒํ•˜๋Š”๊ฒŒ ์ข‹์Œ
  
  profile_picture TINYBLOB,
  -- TINYBLOB (255B), BLOB (64KB), MEDIUMBLOB (16MB), LONGBLOB (4GB)
  
  age TINYINT UNSIGNED,
  /* 
  1. TINYINT
  Signed: -128 to 127
  Unsigned: 0 to 255

  2. SMALLINT
  Signed: -32,768 to 32,767
  Unsigned: 0 to 65,535

  3. MEDIUMINT
  Signed: -8,388,608 to 8,388,607
  Unsigned: 0 to 16,777,215

  4. INT (INTEGER)
  Signed: -2,147,483,648 to 2,147,483,647
  Unsigned: 0 to 4,294,967,295

  5. BIGINT
  Signed: -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
  Unsigned: 0 to 18,446,744,073,709,551,615
  */
  
  is_admin BOOLEAN -- TINYINT(1,0)
)









#7.5 MySQL Data Types Part Two

CREATE TABLE users (
  user_id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
	username CHAR(10) NOT NULL UNIQUE, 
  email VARCHAR(50) NOT NULL,
  gender ENUM('Male', 'Female') NOT NULL,
  interests SET('Technology', 'Sports', 'Music', 'Art', 'Travel', 'Food', 'Fashion', 'Science') NOT NULL,
  bio TEXT NOT NULL,
  profile_picture TINYBLOB,
  age TINYINT UNSIGNED NOT NULL,
  is_admin BOOLEAN DEFAULT FALSE NOT NULL,
  
  balance DECIMAL(5, 2) NOT NULL,
  -- DECIMAL(p,s) FLOAT 999.12
  
  joined_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
  -- DATETIME YYYY-MM-DD hh:mm:ss
  /*
  	TIMESTAMP -> '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC
  	DATETIME -> '1000-01-01 00:00:00' to '9999-12-31 23:59:59'
  */
  
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL,
  birth_date DATE NOT NULL,
  bed_time TIME NOT NULL,
  graduation_year YEAR NOT NULL,
  -- 1901 to 2155
  
  CONSTRAINT chk_age CHECK(age < 100),
  CONSTRAINT uq_email UNIQUE (email)
)

#7.6 Insert Into Values

INSERT INTO users (
  username,
  email,
  gender,
  interests,
  bio,
  age,
  is_admin,
  birth_date,
  bed_time,
  graduation_year
) VALUES (
  'MR. NOBODY',
  'mr@nobody.com',
  'Male',
  'Travel,Food,Technology',
  'I like traveling',
  18,
  True,
  '1999-05-09', -- 19990509 1999/05/09
  '22:00', -- 223000 22:30 22
  1976
);

#7.7 ALTER TABLE


-- drop column
ALTER TABLE users DROP COLUMN profile_picture;

-- rename column
ALTER TABLE users CHANGE COLUMN about_me about_me TEXT; -- ์ปฌ๋Ÿผ์ด๋ฆ„๊ณผ ํƒ€์ž… ํ•จ๊ป˜ ๋ฐ”๊ฟ€๋–„

-- change the column type
ALTER TABLE users MODIFY COLUMN about_me TINYTEXT;

-- rename database
ALTER TABLE users RENAME TO customers;
ALTER TABLE customers RENAME TO users;

-- drop constratints
ALTER TABLE users DROP CONSTRAINT uq_email;
ALTER TABLE users DROP CONSTRAINT username, DROP CONSTRAINT chk_age;

-- adding constraints
ALTER TABLE users ADD CONSTRAINT uq_email UNIQUE (email), ADD CONSTRAINT uq_username UNIQUE (username);

ALTER TABLE users ADD CONSTRAINT chk_age CHECK (age < 100);

-- add or remove a NULL constraint
ALTER TABLE users MODIFY COLUMN bed_time TIME NULL;
ALTER TABLE users MODIFY COLUMN bed_time TIME NOT NULL;

SHOW CREATE TABLE users;

#7.8 ALTER TABLE Part Two

ALTER TABLE users MODIFY COLUMN graduation_year DATE; -- error ๊ธฐ์กด ๊ฐ’

ALTER TABLE users ADD COLUMN graduation_date DATE NOT NULL DEFAULT MAKEDATE(grdutaion_year, 1);

UPDATE users SET graduation_date = MAKEDATE(graduation_year, 1);

ALTER TABLE users DROP COLUMN graduation_year;

ALTER TABLE users MODIFY COLUMN graduation_date DATE NOT NULL;

#7.9 Generated Columns

๋‹ค๋ฅธ ์ปฌ๋Ÿผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ๋„์ถœํ•˜๋Š” ์ปฌ๋Ÿผ

CREATE TABLE users_v2 (
  user_id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  first_name VARCHAR(50),
  last_name VARCHAR(50),
  email VARCHAR(100),
  full_name VARCHAR(101) GENERATED ALWAYS AS (CONCAT(first_name, ' ', last_name)) STORED
  -- STORED ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ์ €์žฅ๋จ
);

ALTER TABLE users_v2 ADD COLUMN email_domain VARCHAR(50) GENERATED ALWAYS AS (SUBSTRING_INDEX(email, '@', -1)) virtual;
-- VIRTUAL ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ์ €์žฅํ•˜์ง€ ์•Š์•„๋„ ๋˜์ง€๋งŒ ์กฐํšŒ์‹œ ๋ถˆ์ด์ต

#7.10 Data Import

Last updated

Was this helpful?