MySQL數據庫經常使用操做入門

一.MySQL

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

相關文章
相關標籤/搜索