Appearance
ãŠãŒã¶ãŒç»é² & ãã¹ã¯ãŒã åèšå®(root) â
root ã®ãã¹ã¯ãŒãèšå®ãå¿ãããããå Žåã«ã¯ãä»ã®ãŠãŒã¶ç»é²ãã§ããªããªãã®ã§ãå¿ããå Žåã®å¯ŸåŠæ¹æ³ã§ãã
ãã¹ã¯ãŒãç¡ãã§rootãã°ã€ã³ãã â
ã¯ããã«MariaDBã«ä¿åãããŠãããã¹ã¯ãŒããåèšå®ãããããMariaDBã«ãã°ã€ã³ããå¿ èŠããããŸããæ®æ®µã§ããã°ãã°ã€ã³ã®éã¯ãã¹ã¯ãŒãå ¥åãæ±ããããŸãããä»åã¯ãã¹ã¯ãŒãç¡ãã§ãã°ã€ã³ã§ããããã«ããŸãã
äœæ¥å 容ã¯äžæŠMariaDBã忢ãããŠãããã¹ã¯ãŒãå ¥åãã¹ããããããèšå®ã远å ããŸãããã®åŸMariaDBãèµ·åãããŸãã以äžã¯ãã®äœæ¥ã³ãã³ãã§ãã
$ sudo systemctl stop mariadb
$ sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
$ sudo systemctl start mariadb
ãã¹ã¯ãŒããåèšå®ãã â
MariaDBã«ãã°ã€ã³ããããalteræãçšããŠãã¹ã¯ãŒãåèšå®ããŸãã 以äžã®ã³ãã³ãã¯ãã¹ã¯ãŒãåèšå®ã®å ¥åäŸã§ãã
alter user 'root'@'localhost' identified by 'æ°ããrootãã¹ã¯ãŒã';
ãã¹ã¯ãŒããåèšå®ãçµãã£ããäžæŠMariaDBãããã°ã¢ãŠãããŸãã
ãã¹ã¯ãŒãæãã§ãã°ã€ã³ããèšå®ã«æ»ã â
ç¶ããŸããŠããã¹ã¯ãŒãæãã§ãã°ã€ã³ããèšå®ã«æ»ããŸãã ãããããŠãããªããšãã¹ã¯ãŒãç¡ãã§rootãã°ã€ã³ã§ããŠããŸããŸãã®ã§ãããããã§ããŸããã
æ¹æ³ãšããŠã¯ãMariaDBã忢ãããã®ã¡ããã¹ã¯ãŒãå ¥åãã¹ãããããèšå®ãè§£é€ããŸãã ãã®åŸã§MariaDBãèµ·åããŸãã
$ sudo systemctl stop mariadb
$ sudo systemctl unset-environment MYSQLD_OPTS
$ sudo systemctl start mariadb
XAMPP ç°å¢ã§ã®ããŒãžã§ã³ã¢ãã â
XAMPPç°å¢ã§ãMariaDB ã®ã¿ãããŒãžã§ã³ã¢ãããã
- åããŒã¿ããŒã¹ã mysqldump ã§ãSQL ããã¯ã¢ãã
- ææ°ã®å®å®ããŒãžã§ã³ ZIPãã¡ã€ã«ã®ããŠã³ããŒã
- è§£åããŠããã©ã«ãåã mysqlã«å€æŽ
- æ¢åã® xampp/mysql ãã©ã«ãåãå€æŽ xampp/mysql_old
- xampp/mysql/bin (æ°) ã« xampp/mysql_old/bin/my.ini ãã³ããŒ
- xampp/mysqlã« data ãã©ã«ããäœæ
- xampp/mysql_old/backup/. ã xampp/mysql/data/ ãã£ã¬ã¯ããªïŒé€ããã¡ã€ã«ïŒãã³ããŒ
- mariadb ã xamppããèµ·å
- [mysql] mysql_upgrade ã®ã³ãã³ããå®è¡ããŠãæ°ããŒãžã§ã³ã«ããŒã¿ããŒã¹ã®ç°å¢ãåããããïŒåããŒã¿ãŒããŒã¹ã«OKãªã©ã衚瀺ãããïŒ
â»æéãããããŸã phase 7/7 ãŸã§åŸ ã¡ãŸããã - mariadbã xamppã«ãã忢
- mysql_error.log ã®å å®¹ãæ¶å»
- mariadbã xamppããèµ·å
- mysql_error.log ã®å
容ã確èªããšã©ãŒãåºãŠããã°ããšã©ãŒã解決ãã(代衚çãªãšã©ãŒäžèš)
MariaDB ããŒãžã§ã³ãèšãããŠããã®ã§ç¢ºèª - mysqldump ã§ãåããŒã¿ããŒã¹ãSQLã§ããªã¹ã㢠(ããŒã¿ããŒã¹ããšã«æéãããããŸã)
mysql_error å¯Ÿå¿ â
innodb_tables (innodb_index) doesn't exist â
innodb_index doesn't exist 察å¿ãµã€ãæ¥æ¬èªå¯Ÿå¿ãµã€ã
Drop these tables from Mysql:
innodb_index_stats innodb_table_stats slave_master_info slave_relay_log_info slave_worker_infoDelete *.frm and *.ibd files for the 5 tables above.
Create the tables by running the following queries:
CREATE TABLE `innodb_index_stats` (
`database_name` varchar(64) COLLATE utf8_bin NOT NULL,
`table_name` varchar(64) COLLATE utf8_bin NOT NULL,
`index_name` varchar(64) COLLATE utf8_bin NOT NULL,
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`stat_name` varchar(64) COLLATE utf8_bin NOT NULL,
`stat_value` bigint(20) unsigned NOT NULL,
`sample_size` bigint(20) unsigned DEFAULT NULL,
`stat_description` varchar(1024) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`database_name`,`table_name`,`index_name`,`stat_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0;
CREATE TABLE `innodb_table_stats` (
`database_name` varchar(64) COLLATE utf8_bin NOT NULL,
`table_name` varchar(64) COLLATE utf8_bin NOT NULL,
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`n_rows` bigint(20) unsigned NOT NULL,
`clustered_index_size` bigint(20) unsigned NOT NULL,
`sum_of_other_index_sizes` bigint(20) unsigned NOT NULL,
PRIMARY KEY (`database_name`,`table_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0;
æåŸã«ãmysql_upgrade
ãè¡ããŸã (mysql ãµãŒããŒãç«ã¡äžããç¶æ
ã§ã xampp/mysql/bin/mysql_upgrade) ãã ããphpMYAdmin(5.1.3)ã®ãã¡ã€ã«é¢ä¿ãããã¯ããã䜿çšã§ããªããªããŸããããphpMyAdminã¯å©çšã§ããŸã
èªåã®ç°å¢ã§ã¯ãinnodb_index_stas, innodb_table_stats ã ãã«å¯Ÿå¿ããã°ããã£ãã§ãã ãã®ä»ã®ããŒãã«ã® CREATE SQL ã¯ããã¡ããåç §
[Warning] Failed to load slave replication ...Table 'mysql.gtid_slave_pos' doesn't exist in engine â
ããã«é¢ããŠã¯ãã¹ã¿ãŒãæã«ãå€ãã»ãããããªãã ããªã®ã§ãç¡èŠããŠãããšã©ãŒã§ããWarningã
ããã¯ã¢ãããšãªã¹ã㢠â
ããŒã¿ç§»è¡ã®éã¯ãmysqldumpãå©çšããŠãæ¥åžžã®ããã¯ã¢ããã¯ããã¹ãŠã®ããŒã¿ããŒã¹ãããã¯ã¢ãããã mariadbbackupãå©çšããããã«ããã®ç®çããšã«ãæ¹æ³ãåãæ¿ããã
mysqldump â
ããã¯ã¢ãã â
mysqldump ã³ãã³ãã§ããŒã¿ããŒã¹ãã³ãããããšãã§ããŸãã ãã³ããã¡ã€ã«ã«ã¯ãCREATE TABLE, INSERT çã® SQL æãå«ãŸããŸãã倧éããŒã¿ãã®å Žåã¯ããã¯ã¢ããã»ãªã¹ãã¢ã«æéããããããšããããããŸãã mysqlãµãŒããŒãèµ·åããå¿ èŠã¯ãããŸãã
mysqldump -h localhost -u root -pãã¹ã¯ãŒã ããŒã¿ããŒã¹å ããŒãã«å... > dump.sql
mysqldump -h localhost -u root -pãã¹ã¯ãŒã --databases ããŒã¿ããŒã¹å... > dump.sql
mysqldump -h localhost -u root -pãã¹ã¯ãŒã --all-databases > dump.sql
mysqldump -h localhost -u root -pãã¹ã¯ãŒã --databases ããŒã¿ããŒã¹å \
--flush-logs --single-transaction --master-data=2 > dump.sql
- --databases
æå®ããããŒã¿ããŒã¹ããã³ãããŸãããã³ããã¡ã€ã«ã« CREATE DATABASE æãå ããããŸãã - --all-databases
MariaDB ã·ã¹ãã ã§å©çšãã mysql ããŒã¿ããŒã¹ãå«ãããã¹ãŠã®ããŒã¿ããŒã¹ããã³ãããŸãããã³ããã¡ã€ã«ã« CREATE DATABASE æãå ããããŸãã - --flush-logs
ãã³ãåã«ãã°ãã¡ã€ã«ããã©ãã·ã¥ããŸãã - --lock-all-tables
ãã³ãäžå šãŠã®ããŒãã«ãæžã蟌ã¿ããã¯ããŸãããã³ãäžã®ããŒãã«ã¢ã¯ã»ã¹ãããã¯ãããŸãããç¡æ¡ä»¶ã§äžè²«æ§ãä¿ãããããŒã¿ããã³ãããããšãã§ããŸãã - --single-transaction
ã²ãšã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ãšããŠãã³ãããŸãã察象ããŒã¿ããŒã¹ããã¹ãŠ InnoDB ã§ããããšãããã³ããã³ãäžã« CREATE TABLE, DROP TABLE, ALTER TABLE, TRUNCATE TABLE ãå®è¡ããªãããšãæ¡ä»¶ã«ãäžè²«æ§ãä¿ãããããŒã¿ããã³ãããããšãã§ããŸãã--all-databases ã䜿çšããå Žåã¯ãMariaDB ãå éšã§äœ¿çšããŠãã mysql ããŒã¿ããŒã¹ã®ããŒãã«ã InnoDB ã§ã¯ãªããMyISAM ãããã®æ¹è¯çã§ãã Aria ã§ããããšã«æ³šæããŠãã ããã - --master-data=2
ãã³ãéå§æç¹ã®ããžã·ã§ã³æ å ±ãã³ã¡ã³ããšããŠåºåããŸããã¬ããªã±ãŒã·ã§ã³ããã€ããªãã°ããã®ããŒã«ãã©ã¯ãŒãã«åœ¹ç«ã¡ãŸãã
ãªã¹ã㢠â
ããã¯ã¢ããããªã¹ãã¢ããã«ã¯ããã³ããã¡ã€ã«ãåã« SQL æãšããŠå®è¡ããŸãã
mysql -h localhost -u root -pãã¹ã¯ãŒã < dump.sql
mariabackup â
ããã¯ã¢ãã â
mariabackup --backup -u root -pãã¹ã¯ãŒã --target-dir I:\xampp\mysql\data\backup
ããã¯ã¢ããäžã¯ FLUSH TABLES WITH READ LOCK ã§å šããŒãã«ãããã¯ãããŸã
äžè²«æ§ã®ç¢ºèª --prepare ãªãã·ã§ã³ã§ãããã¯ã¢ããããŒã¿ã®äžè²«æ§ãä¿ãããŠããããã§ãã¯ããããšãã§ããŸãã
# mariabackup --prepare --target-dir /tmp/backup
:
191208 03:16:33 completed OK!
ãªã¹ã㢠â
# systemctl stop mariadb
# rm -rf /var/lib/mysql/*
# mariabackup --copy-back --target-dir /tmp/backup
# chown -R mysql:mysql /var/lib/mysql/*
# systemctl start mariadb
xampp
I:\xampp\mysql\data åé€
mariabackup --copy-back --target-dir I:\xampp\mysql\data\backup
phpMyAdmin ãå©çš â
ãMySQLãphpMyadminã®ããã¯ã¢ããïŒåŸ©å æ¹æ³ãããŒã¿ããŒã¹ç®¡çã¯å¿ é ã
ããã¯ã¢ãã â
phpMyadmin
ãExportããã¯ãªãã¯
QuickïŒå
šãŠã®ããŒã¿ããŒã¹ããµã¯ããšããã¯ã¢ãããããæã«äœ¿çš
CustomïŒç¹å®ã®ããŒã¿ããŒã¹ã®ã¿ã®æãã圢åŒãéžæããããšãã«äœ¿çš
zipãã¡ã€ã«ãããŠã³ããŒããããã°çµäº
ãªã¹ã㢠â
æé â ïŒåŸ©å 察象ã®ããŒã¿ããŒã¹ãåé€
ãImportããã¯ãªãã¯
ããã¯ã¢ãããããã¡ã€ã«ãéžæ
ãgoããã¯ãªãã¯ããŠåŸ©å ããŸã
ããŒã¿ããŒã¹ ç¹æš©ä»äž â
åºæ¬çã«ããŒã¿ããŒã¹äœæã¯ãrootã§ãªããšè¡ããªãããã«ããŠãããŒã¿ããŒã¹ãäœæããŠãããã¢ã¯ã»ã¹æš©ã®ä»äžãè¡ããŸãã
(ã»ãã¥ãªãã£ã®èгç¹ãã)
ini
MariaDB [(none)]>GRANT ALL PRIVILEGES ON `personal`.* TO www;
ããŒã¿ããŒã¹ã®ååå€æŽ â
dumpããŠããŒã¿ããŒã¹ã®ååã倿Žãã â
- æ°ããããŒã¿ããŒã¹ãäœæ
mysql> CREATE DATABASE new_db;
- 倿ŽãããããŒã¿ããŒã¹ãmysqldumpã³ãã³ãã§ãããŒã¿ããŒã¹ããšã¯ã¹ããŒãããŸã
$ mysqldump -u root -p -D old_db > /..../old_db.dump
- ããŒã¿ããŒã¹ããšã¯ã¹ããŒãã§ããããæ°ããååã®ããŒã¿ããŒã¹ã«ã€ã³ããŒãããŸã
$ mysql -u root -p -d new_db < /var/tmp/old_db.dump
- æ°ããããŒã¿ããŒã¹ãåé¡ãªããã°å€ãããŒã¿ããŒã¹ã¯åé€ããŸã
mysql> DROP DATABASE old_db;
RENAME TABLE ã³ãã³ããå©çšããŠãªããŒã ãã â
æžåŒïŒRENAME TABLE old_db.table TO new_db.table
- æ°ããããŒã¿ããŒã¹ãäœæ
cmd
mysql> CREATE DATABASE new_db;
- æ°ããããŒã¿ããŒã¹ã«ç§»åããŠãäžèšã®ããã«RENAME TABLEã³ãã³ãã§å€æŽããŸã
cmd
mysql> use new_db;
mysql> RENAME TABLE
old_db.table1 TO new_db.table1,
old_db.table2 TO new_db.table2,
old_db.table3 TO new_db.table3,
# 以äžå¿
èŠãªã ããªããŒã ããããŒãã«åãç¹ããŠãããŸã
- æ°ããããŒã¿ããŒã¹ã§åé¡ãªããã°å€ãããŒã¿ããŒã¹ãåé€ããŸã
cmd
mysql> DROP DATABASE old_db;
ããŒã¿ããŒã¹ã®ãšã¯ã¹ããŒãã»ã€ã³ããŒãã宿œããªãã®ã§ãæéçã¯éã宿œã§ããŸã
ãšã©ãŒå¯Ÿç â
MariaDB ãµãŒããŒãšã©ãŒ â
Ignoring data file ... exists with the same ... â
cmd
2023-02-16 7:20:50 0 [Note] InnoDB: Ignoring data file './personal/#sql-alter-19e8-3.ibd' with space ID 92. Another data file called ./personal/examination_exercise.ibd exists with the same space ID.
Please try to optimize and repair these tables with PhpMyAdmin.
phpMyAdminã§ã該åœã®ããŒãã«ãéžæããŠãæé©åãè¡ããšçŽããŸããã
Databaseãåé€ã§ããªã â
DROP DATABASE ... ã§ãdatabaseãåé€ã§ããªãå Žåã¯ããã®ããŒã¿ããŒã¹ã®ãã©ã«ãã¯æ®ããŠããã©ã«ãã®äžèº«ããã¹ãŠåé€ããŠããè¡ããŸãã phpMyAdmin ã§äœ¿çšäžãšè¡šç€ºãããŠããå Žåãå€ãã
ããŒãã«æäœ â
ããŒãã«å倿Žãã â
ALTER TABLE [IF EXISTS] tbl_name RENAME new_tbl_name
AUTO_INCREMENT æäœ â
AUTO_INCREMENT 屿§ãåé€ããALTER TABLEãå®è¡ãïŒã«ã©ã å®çŸ©ããAUTO_INCREMENTãé€ãïŒ ALTER TABLE samples MODIFY id int(11) NOT NULL
PROIMARY KEY 屿§ãåé€ããALTER TABLEãå®è¡ã ALTER TABLE samples DROP PRIMARY KEY ããã§ãã©ã€ããªãŒããŒãå€ããã ãã®ç¶æ ã«ãªãã°ã«ã©ã ã«å¯ŸããŠèªç±èªåšã«å€æŽãå ããããšãã§ããããã«ãªãã ã«ã©ã ã«å¯ŸããŠäœããã®åŠçãä¿®æ£ãè¡ãããŸãAUTO_INCREMENTããã©ã€ããªãŒããŒãã€ãããå Žåã¯ãæ¬¡ã®æé ãå®è¡ããã
AUTO_INCREMENT 屿§ã远å ãããALTER TABLEãå®è¡ãïŒã«ã©ã å®çŸ©ã«AUTO_INCREMENTãå«ããïŒ ALTER TABLE samples MODIFY id int(11) AUTO_INCREMENT NOT NULL PRIMARY KEY ã«ã©ã ã«éè€ããªããã°ããã§å ã®ç¶æ ã«æ»ãã
AUTO_INCREMENT å€ã®ãªã»ãã ALTER TABLE samples AUTO_INCREMENT 1; // 1ã«ã»ãããããŸãã ãã¹ãŠã®ããŒã¿ãåé€ããŠãããªã»ããã§1ã«ããã¹ãã§ãã
AUTO_INCREMENT ãå©çšãã PRIMARY KEYã®èšå® â
- ãã§ã«ãã©ã€ããªãŒæ°ãããã°åé€
sql
ALTER TABLE <table> DROP PRIMARY KEY
- ç®çã®ã³ã©ã ã«Primary Keyãä»äž ïŒAUTO_INCREMENTã§ãå€ãæžãæããããŸãïŒ
sql
ALTER TABLE <table> MODIFY [target-column] INT AUTO_INCREMENT PRIMARY KEY
LAST_INSERT_ID() Primary Key AUTO_INCREMENT â
LAST_INSERT_ID() SQL 颿°ãŸã㯠mysql_insert_id() CAPI 颿°ã䜿çšããŠãèªåçã«çæãããææ°ã® AUTO_INCREMENT å€ãååŸã§ããŸãã
ãããã®é¢æ°ã¯æ¥ç¶ã«åºæã®é¢æ°ã§ãããããå¥ã®æ¥ç¶ãåæ§ã«æ¿å ¥ãå®è¡ããŠããŠããæ»ãå€ã¯åœ±é¿ãåããŸããã
sql
INSERT INTO table (PrimaryKeyId, data)
VALUES (LAST_INSERT_ID(),data.value)
ON DUPLICATE KEY UPDATE data=VALUES(data);
CSVãã¡ã€ã«ããã®ããŒã¿ã€ã³ããŒã â
CSVãã¡ã€ã«ã®è¡é ã«è¡šé¡ãããå Žå â
1è¡ç®ãã¹ããã IGNORE 1 LINES
LOAD DATA LOCAL INFILE "file.csv" INTO TABLE import_table FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES
LOAD DATA LOCAL INFILE ã® LOCAL ãšããã®ã¯ãmysqlãåããŠãããµãŒãã§ã¯ãªããã¯ã©ã€ã¢ã³ãåŽã®ãã¡ã€ã«ãæå®ãããšããæå³ã§ãã LOCAL ãæå®ããªLãå ŽåïŒã€ãŸã LOAD DATA INFILEã®å ŽåïŒã¯mysqlãµãŒãäžã®ãã¡ã€ã«ãæå®ããããšã«ãªããŸãã ããã /var/lib/mysql ãªã©ç¹å®ã®å Žæããã®çžå¯Ÿãã¹ã§ããããšãæ³å®ããå¿ èŠããããŸãïŒmysqldã®èšå®ã«ããïŒã
ç¹å®åãæå® â
CSVã®åæå®ã¯ã @1, @3, @6 ãšãã§ãåäœçœ®æå® MariaDBåŽã§ããããã³ã° SET JIS_ORG = @1, ZIP_ORG = @3, K_NAME = @9,
LOAD DATA LOCAL INFILE '/????/?????.csv' INTO TABLE mst_zip FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' (@1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12, @13, @14, @15) SET JIS_ORG = @1, ZIP_ORG = @3, K_NAME = @9, H_NAME_ORG = @6, K_JIS = @8, H_JIS_ORG = @5 ;
â»ããŒã¿æœåºåŽã§ãå¿ èŠã®ãã£ãŒã«ãã ããç§»è¡å ã®ããŒãã«ã«åãããŠãæœåºããŠãã€ã³ããŒãããããæ¹ã®ã»ãããç°¡åã§ãã
sqlã«ããããŒã¿ã€ã³ããŒã â
sqlãã¡ã€ã«ãå©çšããŠãããŒã¿ãã€ã³ããŒãããŸãã
äºå確èª
- Windowsã³ã³ãœãŒã«ããå®è¡ããéã«ãã³ã³ãœãŒã«ã®å¿ ãæåã³ãŒãã®å€æŽãããŠãã (ãã¡ã€ã«ã€ã³ããŒãæã«ããšã©ãŒãæååãããã®ã§ããã®å¯Ÿå¿ã§ãïŒ
- å€§èŠæš¡ããŒã¿ãèªã¿èŸŒãéã«ãMariaDB packetã®å®¹éã倧ããããŠããªããš
ãserver has gone awayãã®ãšã©ãŒãåºãŸã æ§æãã¡ã€ã«(my.ini)ã®å€æŽã確èª(ããã©ã«ã1MïŒ max_allowed_packet=1Mã--> 20M (my.ini)
> chcp 65001 $ mysql -u root Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 4 Server version: 10.6.11-MariaDB mariadb.org binary distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. $ MariaDB[root] > use [ããŒã¿ããŒã¹]; $ MariaDB[root] > source [sqlãã¡ã€ã«];
CSV ãã¡ã€ã«ã«ããŒã¿ããšã¯ã¹ããŒã â
ããŒã¿ã®ã¿ã®ãšã¯ã¹ããŒã â
â» ãã¡ã€ã«ã®å Žæã«ã¯ãã¹ã©ãã·ã¥(/)ãçšããããš
sql
SELECT *
INTO OUTFILE 'c:/Users/takem/Downloads/outputfile.csv'
CHARACTER SET 'utf8'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
FROM account_journal WHERE title_id=970 ORDER BY journal_date
ååãåæãšã¯ã¹ããŒã â
ååã¯ããšã¯ã¹ããŒãæã«åœåã§ããŸã
sql
SELECT *
INTO OUTFILE 'c:/Users/takem/Downloads/outputfile.csv'
CHARACTER SET 'utf8'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
FROM (
SELECT 'ä»èš³çªå·','æ¥ä»','åå®ç§ç®','opponent_title_id','journal_summary','debit_amount','credit_amount'
UNION
SELECT journal_number,journal_date,title_id,opponent_title_id,journal_summary,debit_amount,credit_amount
FROM account_journal WHERE title_id=970 ORDER BY journal_date
) temp_table;
TableA ã®å€ã TableB ã®å€ã§æŽæ°ãã â
ãã¡ãã®ãµã€ããåèã«ãããŠããã ããŸãã
ãŸããTabelA ã®å 容ã TableB ã®å 容ã«ããæ¹æ³ã§ãã
äŸãã°ãTableA ã® name ãšãããã£ãŒã«ãã®å€ããTableB ã®ãã¡åã id ãæã€ã¬ã³ãŒãã® name ã§äžæžãããããšããŸãã ã¡ãªã¿ã«ãid ã¯äžæã®åæã§ãããã®å Žåãæµã UPDATE æã¯åçŽã
UPDATE TableA, TableB SET TableA.name = TableB.name WHERE TableA.id = TableB.id;
ããã§ãåã id ã®ã¬ã³ãŒãã® name ã§æŽæ°ãããŸããã
TableA ã«å±ãã TableB ã®å€ããTableA ãå±ãã TableC ã®å€ã§æŽæ°ãã æ¬¡ã«å¿çšç·šãèŠåºãã¯ã¡ãã£ãšãããã¥ãã衚çŸã«ãªã£ã¡ãããŸããã
äŸãã°ãUsers ãšããããŒãã«ããããããã®1ã¬ã³ãŒãã§ãã User ãææããæ å ± Infos ãšããããŒãã«ããããšããŸãããããŠéã«ã User ãå±ãã Companies ãšããããŒãã«ããããšããŸãã ããããã®çŽä»ã㯠Infos.user_id ãš Users.id ãUsers.company_id ãš Companies.id ãšããæãã§ã€ãªãã£ãŠããšããŸãã
ãã®æã«ãInfos ã® name ãšãããã£ãŒã«ãããææè ãæå±ããŠãã Companies ã® name ã§äžæžããããå ŽåãèããŸãã
ãã®å ŽåãInfos ãš Companies ã®éã«çŽæ¥çãªæ¥ç¹ããªããããå ã»ã©ã®ãããªåçŽãªæã§ã¯ãããŸããã ããããå ã»ã©ã® TableB ã®éšåã« SELECT æã䜿ã£ãŠ Infos.id ãš Companies.name ã®çµã¿åããæã£ãŠããããšã§å®çŸã§ããŸãã
ãŸãã¯æºåãšããŠããŒã¿ååŸã® SQL æãèããŠã¿ãŸãã
SELECT Infos.id AS id, Companies.name AS name FROM Infos LEFT JOIN Users ON Infos.user_id = Users.id LEFT JOIN Companies ON Users.company_id = Companies.id;
InfosãUsersãCompanies ã JOIN ã§ã€ãªããŠãInfos.id ãš Companies.name ã®çµã¿åããã§ããŒã¿ãæã£ãŠããŸããã ã§ã¯ããããå ã»ã©ã® UPDATE æã«å ¥ã蟌ãã§ãããŸãããã
UPDATE Infos, (SELECT Infos.id AS id, Companies.name AS name FROM Infos LEFT JOIN Users ON Infos.user_id = Users.id LEFT JOIN Companies ON Users.company_id = Companies.id) AS Com SET Infos.name = Com.name WHERE Infos.id = Com.id;
ããã§ç®çã®äžæžããã§ããŸããã
ãã®ãè€æ°ããŒãã«ã«ãŸããã£ãŠ UPDATE ãè¡ãããæ¹ãã€ãã€ãå¿ããã¡ãªã®ã§ãèªåçšãå ŒããŠæžããŠã¿ãŸããã åèã«ãªãã°å¹žãã§ãã
ååŸããããŒã¿ã衚圢åŒã§ã¯ãªãããŒã¿ããšã«åããŠè¡šç€ºãã â
衚圢åŒã§ã¯ãªããããŒã¿ããšã«è¡šç€ºããå Žåã¯ãæåŸã«ãÂ¥Gããã€ãã
MariaDB [lefty]> SELECT * FROM merchandise_barcode WHERE barcode=83976\G
*************************** 1. row ***************************
barcode: 83976
merchandise_id: 604724
merchandise_title: [USA] AFRICAN SHEA BUTTER
merchandise_color: BLACK
merchandise_size: FS
current_location: 999
current_state: 21
origin_sale_price: 3500.000
current_sale_price: 1700.000
merchandise_cost: NULL
sale_price: 0.000
consignment_state: 10
consignment_statement_no: 0
1 row in set (0.001 sec)
ãªã¢ãŒãã¢ã¯ã»ã¹èšå® â
- firewallã§ãããŒã(3306)ãéãã(client)
- ã¢ã¯ã»ã¹ãŠãŒã¶ãŒã®è¿œå (Sever)
- ã¢ã¯ã»ã¹ãŠãŒã¶ãŒã®è¿œå (client)
- ããŒã¿ããŒã¹ãµãŒã㌠æ¥ç¶ãã¹ã
- PHP ããŒã¿ããŒã¹æ¥ç¶
- 6.phpMyAdmin ãã°ã€ã³ (192.168.100.21ãžã®æ¥ç¶)
firewallã§ãããŒã(3306)ãéãã(Client) â
ãµãŒããŒãäœãéã«ãæç¶ããããŠããã®ã§ãåºæ¬çã«ããŒãã¯ç©ºããŠããŸãã
cmd
$ sudo fireall-cmd --list-all
....
éããŠããªããã°ãããŒããéããŸã(Only Server) â»ããŒã«ã«ã®ããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ãããšãã¯ãããŒã«ã«ã§ãéããªããã°ãã¢ã¯ã»ã¹ã§ããŸããã
cmd
$sudo firewall-cmd --add-service=mysql
success
$sudo firewall-cmd --runtime-to-permanent
success
åè rich æžåŒã§ãFirewallãããŠããã®ã§ã192.168.100.12ããåä»ãããªãäŸ
cmd
#systemctl status firewalld
â firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since æ°Ž 2021-11-17 17:42:57 JST; 5 days ago
Docs: man:firewalld(1)
Main PID: 10069 (firewalld)
CGroup: /system.slice/firewalld.service
mq10069 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid
âŠ
#firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.100.12" port protocol="tcp" port="3306" accept"
success
#systemctl stop firewalld
#systemctl start firewalld
ãããåé€ããŠãäžèšã®ããã«ããŒããéããªãããŸããã
cmd
#firewall-cmd --permanent --zone=public --remove-rich-rule="rule family="ipv4" source address="192.168.100.12" port protocol="tcp" port="3306" accept"
ã¢ã¯ã»ã¹ãŠãŒã¶ãŒã®è¿œå (Sever) â
ã¢ã¯ã»ã¹ãããåŽã«ããæ¥ç¶å ã§ãŠãŒã¶ãŒç¢ºèªãè¡ãã®ã§ãã¢ã¯ã»ã¹ããåŽã«ããŠãŒã¶ãŒã远å ã
sql
MariaDB [(none)] > CREATE USER 'www'@'%' IDENTIFIED BY 'wwwkey';
MariaDB [(none)] > SELECT user,host FROM mysql.user;
+-------+-----------+
| User | Host |
+-------+-----------+
| www | % |
| mysql | localhost |
| root | localhost |
+-------+-----------+
MariaDB [(none)] > GRANT ALL PRIVILEGES ON *.* TO 'www';
ã¢ã¯ã»ã¹ãŠãŒã¶ãŒã®è¿œå (client) â
sql
MariaDB [(none)] > CREATE USER 'www' identified by 'wwwkey';
MariaDB [(none)] > SELECT user,host FROM mysql.user;
+-------+-----------+
| User | Host |
+-------+-----------+
| www | % |
| mysql | localhost |
| root | localhost |
+-------+-----------+
ããŒã¿ããŒã¹ãµãŒã㌠æ¥ç¶ãã¹ã â
cmd
$ sudo mysql -h 192.168.100.??? -u www -pwwwkey
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 51
Server version: 10.4.22-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
PHP ããŒã¿ããŒã¹æ¥ç¶ â
php
$user = "www";
$pass = "wwwkey";
$host = "192.168.100.21";
$dbname = "test";
$dsn = "mysql:host={$host};dbname={$dbname};charset=utf8mb4";
try {
$pdo = new PDO($dsn,$user,$pass);
}
catch (PDOException $e) {
echo "æ¥ç¶å€±æ: " . $e->getMessage() . "\n";
exit();
}
echo "MariaDB æ¥ç¶æå
";
echo $dsn."
";
phpMyAdmin èšå® â
phpMyAdminãã€ã³ã¹ããŒã«ããŠããã°ãèšå®ãã¡ã€ã«ã®å€æŽ
/etc/phpMyAdmin/config.inc.php
php
$i++;
$cfg['Servers'][$i]['Host'] = '192.168.100.21'; //provide hostname localhostãã倿Ž
$cfg['Servers'][$i]['Host'] = "3306"; //port èšå®ãããŠããªãã®ã§ã远å
JSONã䜿ã â
æ£èŠè¡šçŸçœ®æ â
ããŒãã«ã®ã³ã©ã ãæ£èŠè¡šçŸãå©çšãã眮æ
ini
SELECT
-- æ£èŠè¡šçŸ 2çªç®ã®ã°ã«ãŒãã®ã¿ã衚瀺
-- åèãµã€ã https://runebook.dev/ja/docs/mariadb/regexp_replace/index
REGEXP_REPLACE(exam_question,'(<iframe.*/)(.*.pdf)(.*)','\\2')
FROM examination_past_questions
WHERE exam_id in (24,25);
personal ããŒã¿ããŒã¹ã§ãããŒã¿ã倿Žããéã«å©çšããŸãã
ini
ALTER TABLE examination_past_questions
ADD COLUMN exam_pdf_question TEXT COMMENT 'ïŒæ¬¡è©Šéšçšåé¡PDF',
ADD COLUMN exam_pdf_answer TEXT COMMENT 'ïŒæ¬¡è©Šéšçšè§£çPDF'
-- UPDATEããåã« SELECTåã§ãã¡ãããšæ£èŠè¡šçŸãæãåºããŠãããããã§ãã¯
UPDATE examination_past_questions
SET
exam_pdf_question = REGEXP_REPLACE(exam_question,'(<iframe.*/)(.*.pdf)(.*)','\\2')
,exam_pdf_answer = REGEXP_REPLACE(exam_answer,'(<iframe.*/)(.*.pdf)(.*)','\\2')
WHERE exam_id in (24,25);
SQL â
GROUP_CONCAT (MYSQL ïŒå¯Ÿè€æ°ã®LEFT JOINã1è¡ã§è¡šç€º) â
ãšãŠã䟿å©ãªæ©èœã§ã䜿ãããã§ã
MYSQL ïŒå¯Ÿè€æ°ã®LEFT JOINã1è¡ã§è¡šç€ºã§ããããã«ããã
FIND_IN_SETãšäžç·ã«äœ¿ãã°ãå¿çšãå©ããŸã
SQL
SELECT A.*, GROUP_CONCAT(b.item)
FROM table A
LEFT OUTER JOJN table b
ON A.id=b.id
GROUP BY A.id HAVING FIND_IN_SET('B',GROUP_CONCAT(b.item))
GROUP_CONCAT ã®ãªãã«ã'B'ãå«ãŸããå Žåã¯ãéžã³ãŸããšããããšã«ãªããŸã
SQLå¥¥ãæ·±ã
Dynamic Columns (åçã«ã©ã ) â
åçåã䜿çšãããšãããŒãã«å ã®è¡ããšã«ç°ãªãåã®ã»ãããæ ŒçŽã§ããŸããããã¯ãåã®ã»ããã BLOB ã«ä¿åãããããæäœããããã®å°ããªé¢æ°ã®ã»ãããæã€ããšã§æ©èœããŸãã
éåžžã®åã䜿çšã§ããªãå Žåã¯ãåçåã䜿çšããå¿ èŠããããŸãã
å žåçãªäœ¿çšäŸã¯ãå€ãã®ç°ãªã屿§ (ãµã€ãºãè²ãééãªã©) ãæã€å¯èœæ§ã®ããã¢ã€ãã ãä¿åããå¿ èŠããããå¯èœãªå±æ§ã®ã»ãããéåžžã«å€§ããããäºåã«äžæã§ããå Žåã§ãããã®å Žåã屿§ãåçåã«å ¥ããããšãã§ããŸãã
åçåã®åºæ¬ â
ããŒãã«ã«ã¯ãåçåã®ã¹ãã¬ãŒãžãšããŠäœ¿çšããã BLOB åãå¿ èŠã§ãã
sql
create table assets (
item_name varchar(32) primary key, -- ãã¹ãŠã®ã¢ã€ãã ã«å
±éã®å±æ§
dynamic_cols blob -- åçåã¯ããã«ä¿åãããŸã
);
äœæåŸã¯ãåçå颿°ãä»ããŠåçåã«ã¢ã¯ã»ã¹ã§ããŸãã
2 ã€ã®åçåãå«ãè¡ãæ¿å ¥ããŸã: color=blueãsize=XL
sql
INSERT INTO assets VALUES
('MariaDB T-shirt', COLUMN_CREATE('color', 'blue', 'size', 'XL'));
åçãªåãå«ãå¥ã®è¡ãæ¿å ¥ããŸã: color=blackãprice=500
sql
INSERT INTO assets VALUES
('Thinkpad Laptop', COLUMN_CREATE('color', 'black', 'price', 500));
ãã¹ãŠã®é ç®ã«å¯ŸããŠåçåãcolorããéžæããŸãã
sql
SELECT item_name, COLUMN_GET(dynamic_cols, 'color' as char)
AS color FROM assets;
+-----------------+-------+
| item_name | color |
+-----------------+-------+
| MariaDB T-shirt | blue |
| Thinkpad Laptop | black |
+-----------------+-------+
è¡ã«åçåã远å ããããè¡ããåçåãåé€ãããããããšãã§ããŸãã
sql
-- åãåé€ããŸãã
UPDATE assets SET dynamic_cols=COLUMN_DELETE(dynamic_cols, "price")
WHERE COLUMN_GET(dynamic_cols, 'color' as char)='black';
-- åã远å ããŸãã
UPDATE assets SET dynamic_cols=COLUMN_ADD(dynamic_cols, 'warranty', '3 years')
WHERE item_name='Thinkpad Laptop';
ãã¹ãŠã®åããªã¹ããããããããã®å€ã JSON 圢åŒã§ååŸãããããããšãã§ããŸãã
sql
SELECT item_name, COLUMN_LIST(dynamic_cols) FROM assets;
+-----------------+---------------------------+
| item_name | COLUMN_LIST(dynamic_cols) |
+-----------------+---------------------------+
| MariaDB T-shirt | `size`,`color` |
| Thinkpad Laptop | `color`,`warranty` |
+-----------------+---------------------------+
SELECT item_name, COLUMN_JSON(dynamic_cols) FROM assets;
+-----------------+----------------------------------------+
| item_name | COLUMN_JSON(dynamic_cols) |
+-----------------+----------------------------------------+
| MariaDB T-shirt | {"size":"XL","color":"blue"} |
| Thinkpad Laptop | {"color":"black","warranty":"3 years"} |
+-----------------+----------------------------------------+
åçåã®ãªãã¡ã¬ã³ã¹ â
COLUMN_CREATE â
sql
COLUMN_CREATE(column_name, value [as type], [column_name, value
[as type]]...);
æå®ãããåãšå€ãæ ŒçŽããåçå BLOB ãè¿ããŸãã
æ»ãå€ã¯ä»¥äžã«é©ããŠããŸãã
ããŒãã«ã«åçŽãã
ä»ã®åçå颿°ã䜿çšããŠããã«å€æŽãã as type ããŒãã§ã¯ãå€ã®ã¿ã€ããæå®ã§ããŸãã
ã»ãšãã©ã®å Žåã MariaDB ã¯å€ã®ã¿ã€ããæšæž¬ã§ãããããããã¯åé·ã§ããå€ã®åãæããã§ãªãå Žåã¯ãæç€ºçãªåæå®ãå¿
èŠã«ãªãå ŽåããããŸãã
ããšãã°ããªãã©ã« '2012-12-01' ã«ã¯ããã©ã«ãã§ CHAR åããããæ¥ä»ãšããŠä¿åããã«ã¯ '2012-12-01' AS DATE ãæå®ããå¿
èŠããããŸãã
詳现ã«ã€ããŠã¯ãã Datatypes ãã»ã¯ã·ã§ã³ãåç
§ããŠãã ããã MDEV-597 ã«ã泚æããŠãã ããã
䜿çšäŸïŒ
sql
-- MariaDB 10.0.1+:
INSERT INTO tbl SET dyncol_blob=COLUMN_CREATE("column_name", "value");
COLUMN_ADD â
sql
COLUMN_ADD(dyncol_blob, column_name, value [as type],
[column_name, value [as type]]...);
åçåã远å ãŸãã¯æŽæ°ããŸãã
- dyncol_blob ã¯ãæå¹ãªåçå BLOB (ããšãã°ã COLUMN_CREATE ã¯ãã®ãã㪠BLOB ãè¿ããŸã) ãŸãã¯ç©ºã®æååã®ããããã§ããå¿ èŠããããŸãã
- column_name ã¯ã远å ããåã®ååãæå®ããŸãã dyncol_blob ã«ãã®ååã®åããã§ã«ããå Žåã¯äžæžããããŸãã
- value ã¯åã®æ°ããå€ãæå®ããŸãã NULL å€ãæž¡ããšãåãåé€ãããŸãã
- as type ã¯ãªãã·ã§ã³ã§ããã¿ã€ãã«ã€ããŠã¯ãã #datatypes ãã»ã¯ã·ã§ã³ãåç
§ããŠãã ããã
æ»ãå€ã¯ã倿ŽåŸã®åçå BLOB ã§ãã
䜿çšäŸïŒ
sql
-- MariaDB 10.0.1+:
UPDATE t1 SET dyncol_blob=COLUMN_ADD(dyncol_blob, "column_name", "value")
WHERE id=1;
泚: COLUMN_ADD() ã¯éåžžã®é¢æ° ( CONCAT() ãšåæ§) ã§ãããããããŒãã«å ã®å€ãæŽæ°ããã«ã¯ UPDATE ... SET dynamic_col=COLUMN_ADD(dynamic_col, ....) ãã¿ãŒã³ã䜿çšããå¿ èŠããããŸãã
COLUMN_GET â
sql
COLUMN_GET(dyncol_blob, column_name as type);
column_name as type ã§ã¯ãèªã¿åãåçåã®ããŒã¿åãæå®ããå¿ èŠããããŸãã
ããã¯çŽèгã«åããããã«æãããããããŸããããªãååŸããããŒã¿åãæå®ããå¿ èŠãããã®ã§ãããã? åçåã·ã¹ãã ã¯ãä¿åãããŠããããŒã¿ããããŒã¿åã倿ã§ããªãã®ã§ãããã?
çãã¯ãSQL ã¯éçã«åä»ããããèšèªã§ãããšããããšã§ããSQL ã€ã³ã¿ãŒããªã¿ãŒã¯ãã¯ãšãªãå®è¡ããåã«ãã¹ãŠã®åŒã®ããŒã¿åãç¥ã£ãŠããå¿ èŠããããŸã (ããšãã°ãããªãã¢ã ã¹ããŒãã¡ã³ãã䜿çšããŠã㊠"select COLUMN_GET(...)" ãå®è¡ããå Žåãããªãã¢ã ã¹ããŒãã¡ã³ã API ã§ã¯ããµãŒããŒãèªã¿åãããåã®ããŒã¿åãäºåã«ã¯ã©ã€ã¢ã³ãã«éç¥ããå¿ èŠããããŸã)ã¯ãšãªãå®è¡ããããµãŒããŒã¯åã®å®éã®ããŒã¿åã確èªã§ããŸã)ã
COLUMN_DELETE â
sql
COLUMN_DELETE(dyncol_blob, column_name, column_name...);
æå®ãããååã®åçåãåé€ããŸããè€æ°ã®ååãä»ããããšãã§ããŸãã
æ»ãå€ã¯ã倿ŽåŸã®åçå BLOB ã§ãã
COLUMN_EXISTS â
sql
COLUMN_EXISTS(dyncol_blob, column_name);
column_name ãšããååã®åã dyncol_blob ã«ååšãããã©ããã確èªããŸãããã¯ããã®å Žå㯠1 ãè¿ããããã§ãªãå Žå㯠0 ãè¿ããŸãã
COLUMN_LIST â
sql
COLUMN_LIST(dyncol_blob);
ååã®ã«ã³ãåºåããªã¹ããè¿ããŸããååã¯ããã¯ã¯ã©ãŒãã§åŒçšãããŸãã
sql
SELECT column_list(column_create('col1','val1','col2','val2'));
+---------------------------------------------------------+
| column_list(column_create('col1','val1','col2','val2')) |
+---------------------------------------------------------+
| `col1`,`col2` |
+---------------------------------------------------------+
COLUMN_CHECK â
sql
COLUMN_CHECK(dyncol_blob);
yncol_blob ãæå¹ãªããã¯ãããåçå BLOB ã§ãããã©ããã確èªããŸããæ»ãå€ 1 㯠BLOB ãæå¹ã§ããããšãæå³ããæ»ãå€ 0 㯠BLOB ãæå¹ã§ãªãããšãæå³ããŸãã
çè«çæ ¹æ : éåžžãæå¹ãªåçå BLOB ã䜿çšããŠåäœããŸãã COLUMN_CREATE ã COLUMN_ADD ã COLUMN_DELETE ã®ãããªé¢æ°ã¯ãåžžã«æå¹ãªåçå BLOB ãè¿ããŸãããã ããåçå BLOB ã誀ã£ãŠåãè©°ããããããããæåã»ããããå¥ã®æåã»ããã«ãã©ã³ã¹ã³ãŒããããããããšãç ŽæããŸãããã®é¢æ°ã䜿çšãããšãBLOB ãã£ãŒã«ãã®å€ãæå¹ãªåçå BLOB ã§ãããã©ããã確èªã§ããŸãã
泚: COLUMN_CHECK ãç Žæã«æ°ã¥ããªãããã«ãåãæšãŠã«ãã£ãŠåçå "clearly" ãåãåãããå¯èœæ§ããããŸãããåãæšãŠã®å Žåã¯å€ã®ä¿åäžã«èŠåãçºè¡ãããŸãã
COLUMN_JSON â
dyncol_blob å ã®ããŒã¿ã® JSON 衚çŸãè¿ããŸãã
䜿çšäŸ:
sql
SELECT item_name, COLUMN_JSON(dynamic_cols) FROM assets;
+-----------------+----------------------------------------+
| item_name | COLUMN_JSON(dynamic_cols) |
+-----------------+----------------------------------------+
| MariaDB T-shirt | {"size":"XL","color":"blue"} |
| Thinkpad Laptop | {"color":"black","warranty":"3 years"} |
+-----------------+----------------------------------------+
å¶éäºé : COLUMN_JSON ã¯ãæ·±ã 10 ã¬ãã«ä»¥äžã®ãã¹ããããåçåããã³ãŒãããŸãã 10 ã¬ãã«ããæ·±ããã¹ããããŠããåçåã¯ããšã³ã³ãŒããããã« BINARY æååãšããŠè¡šç€ºãããŸãã
å šææ€çŽ¢(Innodb) â
èªåã®ãã¹ã¯ãŒããæ¥èšã§ãå šææ€çŽ¢ãã§ããã°ããã®ã«ãšæã£ãŠèª¿ã¹ãŸããã
äžèšã®éã®ãµã€ãããšãŠãåèã«ãªããŸãããããããã¯ãã¡ãã«ã³ããããŠããŸãããã説æãªã©è©³çްãç¥ããããã°ããµã€ãã蚪åã
MySQLã®å šææ€çŽ¢ â
MySQLã§ã¯FULLTEXT INDEXãšããINDEXãçšæãããŠããããããå©çšããããšã§LIKEæ€çŽ¢ãšæ¯èŒããŠãé«éã«å¯Ÿè±¡ã®ããŒã¿ãæœåºããããšãã§ããŸãã ãŸããå®å šäžèŽã ãã§ã¯ãªãé¡äŒŒããæç« ãåãããŠæ€çŽ¢ãã該åœçãé«ãã¬ã³ãŒãããè¿åŽããŠãããããšãå¯èœã§ãã
FULLTEXT INDEXã«ã€ããŠ
FULLTEXT INDEXã¯ãMySQLã«çšæãããŠããINDEXã®äžçš®ã§ãããã¹ãããŒã¹ã®ã«ã©ã (CHAR,VARCHAR,TEXT)ã«æå®ããããšãã§ããINDEXã§ãã FULLTEXT INDEXãæå®ããããŒãã«ã«å¯ŸããŠãå šææ€çŽ¢é¢æ°ãå©çšããããšã§å¯Ÿè±¡ãæœåºããããšãã§ããŸãã
FULLTEXT INDEXã®æå®ã«ã€ããŠã¯ä»ã®INDEXãšåæ§ã«ãããŒãã«äœææã«CREATE TABLEã§æå®ãããã
ALTER TABLEã»CREATE INDEXãå©çšããŠè¿œå ããããšãã§ããŸãã
sql
# CREATE TABLE ã§æå®ããå Žåã®äŸ
CREATE TABLE `smartshopping_products` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`maker` varchar(255) DEFAULT NULL COMMENT 'ã¡ãŒã«ãŒå',
`brand` varchar(255) DEFAULT NULL COMMENT 'ãã©ã³ãå',
`title` varchar(255) DEFAULT NULL COMMENT 'ååå',
`price` int(11) unsigned NOT NULL DEFAULT '0' COMMENT 'äŸ¡æ Œ',
`updated_at` timestamp NULL DEFAULT NULL COMMENT 'æŽæ°æ¥æ',
`created_at` timestamp NULL DEFAULT NULL COMMENT 'äœææ¥æ',
PRIMARY KEY (`id`),
FULLTEXT KEY `FT_Maker_Brand_Title` (`maker`,`brand`,`title`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='FULLTEXT INDEXçšãµã³ãã«ããŒãã«';
å šææ€çŽ¢é¢æ°ã«ã€ã㊠â
å šææ€çŽ¢é¢æ°ã¯ãäžèšã®æ§æãå©çšããããšã§å®è¡ããããšãã§ããŸãã MATCHã®éšåã«ã¯æ€çŽ¢å¯Ÿè±¡ã®ã«ã©ã ãæå®ããAGAINSTã«ã¯æ€çŽ¢ãããããŒã¯ãŒããæå®ããŸãã MATCH (col1,col2...) AGAINST (expr [search_modifier])
â»FULLTEXT INDEXã§è€æ°ã«ã©ã æå®ããŠããå Žåã¯ãMATCHã§å šãŠã®ã«ã©ã ãæå®ããªããšãšã©ãŒã«ãªãã®ã§æ³šæã§ãã
sql
# SELECT * FROM [ããŒãã«å] WHERE MATCH([fulltextIndexã§æå®ããå
šãŠã®ã«ã©ã ]) AGAINST([æ€çŽ¢ããŒã¯ãŒã]);
SELECT * FROM smartshopping_products WHERE MATCH(`maker`,`brand`,`title`) AGAINST('çé
žæ°Ž');
è€æ°ããŒã¯ãŒãã®å Žå â
ä»åäœæããååæ€çŽ¢ãªã©ã§ãè€æ°ã®ããŒã¯ãŒãã«å¯Ÿå¿ãããå Žåã¯äžèšã®éãã«æå®ããããšã§å¯Ÿå¿ããããšãã§ããŸãã
ORæ€çŽ¢ â
ORæ€çŽ¢ããããå Žåã¯ãAGAINSTã§æå®ããããŒã¯ãŒããåè§ã¹ããŒã¹åºåãã§æå®ããããšã§è€æ°ã®ããŒã¯ãŒãã«å¯Ÿå¿ããããšãã§ããŸãã
sql
SELECT * FROM smartshopping_products WHERE MATCH(`maker`,`brand`,`title`) AGAINST('çé
žæ°Ž ã¬ã¢ã³');
ANDæ€çŽ¢ â
ANDæ€çŽ¢ããããå Žåã¯ãããŒã¯ãŒãã«å°ã远å ãå¿ èŠã§ãAGAINSTã§æå®ããããŒã¯ãŒãã®åã«ã+ããã€ããããšã§å¯Ÿå¿ããããšãã§ããŸãã
sql
SELECT * FROM smartshopping_products WHERE MATCH(`maker`,`brand`,`title`) AGAINST('+çé
žæ°Ž +ã¬ã¢ã³');
ANDãšORã©ã¡ããå©çšãã â
æåŸã«æ¡ä»¶ãè€åã§å©çšãããå Žåã®ãã¿ãŒã³ã§ãã
æå®æ¹æ³ã¯ANDæ€çŽ¢ãORæ€çŽ¢ã«æžãããã®ãšåãã§ããããŸãšãããéšåãæ¬åŒ§ã§ãŸãšããŠãããå¿
èŠããããŸãã
äžèšã®å Žåã ãšããµã³ããªãŒåã¯ã¢ãµããå«ãŸããŠããçé
žæ°Žåã¯ã¬ã¢ã³ãå«ãååãæœåºãããã€ã¡ãŒãžã§ãã
sql
SELECT * FROM smartshopping_products WHERE MATCH(`maker`,`brand`,`title`) AGAINST('+(ãµã³ããªãŒ ã¢ãµã) +(çé
žæ°Ž ã¬ã¢ã³)');