#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?