MySQL是一個關係型數據庫管理系統,由瑞典MySQL AB公司開發,目前屬於Oracle旗下產品。在WEB應用方面,MySQL是最好的RDBMS應用軟件。MySQL體積小、速度快、整體擁有成本低,尤爲是開放源碼這一特色,通常中小型網站的開發都選擇MySQL做爲網站數據庫。mysql
環境:MySQL(5.7.20)sql
CREATE TABLE IF NOT EXISTS `shop`.`spu` ( `spu_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` varchar(64) NOT NULL COMMENT '商品名稱', `brand_id` int NOT NULL COMMENT '品牌ID', `is_online` tinyint(1) unsigned DEFAULT '0' COMMENT '是否在線', PRIMARY KEY (`spu_id`), KEY `idx_name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='SPU信息';
默認Linux系統中,數據庫名和表名區分大小寫,字段名不區分大小寫。
編碼使用utf8或者utf8mb4,utf8mb4是utf8的超集,utf8mb4能存儲4字節的表情字符。
KEY包含兩層意義(約束和索引),建表語句中KEY等同於INDEX,即普通索引。數據庫
1.INSERT INTO
INSERT INTO `shop`.`spu` VALUES (1, "I Phone 7", 3, 0);
INSERT INTO `shop`.`spu` (`spu_id`, `name`, `brand_id`, is_online) VALUES (2, "SONY Z3", 7, 1);
服務器
2.INSERT INGORE INTO
INSERT IGNORE INTO `shop`.`spu` (`spu_id`, `name`, `brand_id`, is_online) VALUES (2, "SONY XZ", 7, 1);
函數
IGNORE插入與INSERT插入功能同樣,區別是:若是發現表中已經有此行數據(根據主鍵或惟一索引判斷)則忽略當前插入;不然,插入新數據。
網站
3.REPLACE INTO
REPLACE INTO `shop`.`spu` (`spu_id`, `name`, `brand_id`) VALUES (2, "MI MIX 4", 5);
編碼
REPLACE插入與INSERT插入功能同樣,區別是:若是發現表中已經有此行數據(根據主鍵或惟一索引判斷)則先刪除此行數據,而後插入新的數據;不然,直接插入新數據。spa
SELECT * FROM `shop`.`spu`;
SELECT * FROM `shop`.`sku`;
3d
1.INNER JOINcode
SELECT * FROM `shop`.`spu` spu INNER JOIN `shop`.`sku` sku ON spu.`spu_id` = sku.`spu_id` AND spu.`brand_id` > 3 AND sku.`desc` != '64G';
INNER JOIN只返回符合ON條件的記錄,同時會過濾LEFT表和RIGHT表(ON中的過濾條件同時有效)。
2.LEFT JOIN
SELECT * FROM `shop`.`spu` spu LEFT JOIN `shop`.`sku` sku ON spu.`spu_id` = sku.`spu_id` AND spu.`brand_id` > 3 AND sku.`desc` != '64G';
LEFT JOIN無論ON上的條件是否爲真,都返回LEFT表中的全部記錄,ON只起鏈接做用(ON中的過濾條件對LEFT表不起做用,只對RIGHT表起過濾做用)。
3.RIGHT JOIN
SELECT * FROM `shop`.`spu` spu RIGHT JOIN `shop`.`sku` sku ON spu.`spu_id` = sku.`spu_id` AND spu.`brand_id` > 3 AND sku.`desc` != '64G';
RIGHT JOIN無論ON上的條件是否爲真,都返回RIGHT表中的全部記錄,ON只起鏈接做用(ON中的過濾條件對LEFT表起做用,對RIGHT表不起過濾做用)。
SELECT `spu_id`, COUNT(`price`), COUNT(*), MIN(`price`), MAX(`price`), AVG(`price`), SUM(`price`) FROM `shop`.`sku` GROUP BY `spu_id`;
COUNT(*)不忽略NULL值,COUNT(字段名)忽略NULL值。
MIN()、MAX()、AVG()、SUM()等忽略NULL值。
MySQL禁止嵌套更新
1.使用子查詢
UPDATE `shop`.`sku` SET `price` = (SELECT * FROM (SELECT MAX(`price`) as max_price FROM `shop`.`sku`) as tmp);
2.使用INNER JOIN
UPDATE `shop`.`sku` sku INNER JOIN (SELECT MAX(`price`) AS max_price FROM `shop`.`sku`) tmp SET sku.`price` = tmp.`max_price`;
DELETE FROM `shop`.`spu` WHERE `goods_id` = 1;
TRUNCATE TABLE `shop`.`spu`;
TRUNCATE可以快速清空一個表,清空時不寫服務器log,執行效率比DELETE高。
導出
SELECT * FROM `shop`.`spu` INTO OUTFILE '/tmp/out.csv' FIELDS TERMINATED BY ',';
導入
LOAD DATA INFILE '/tmp/out.csv' INTO TABLE `shop`.`spu` FIELDS TERMINATED BY ',';
備份
root@e0cdff86e1d2:~# mysqldump -u root -p shop spu sku > /tmp/backup.sql
還原
root@e0cdff86e1d2:~# mysql -u root -p shop < /tmp/backup.sql