MySQL-其它整理
一:基本操作
插入
INSERT INTO 表名称 VALUES (值1, 值2,....);
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....);
更新
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值;
删除
DELETE FROM 表名称 WHERE 列名称 = 值;
TRUNCATE TABLE 表名称 ; #清空表
二:FOREIGN KEY 约束
一个表中的外键指向另一个表中的主键。用于预防破坏表之间连接的动作,也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。Persons 表中的 "Id_P" 列是 Persons表中的 主键,Orders表中的 "Id_P" 列是Orders表中的 外键。
CREATE TABLE `Orders` (
`Id_O` INT(11) NOT NULL,
`OrderNo` INT(11) NOT NULL,
`Id_P` INT(11) DEFAULT NULL,
PRIMARY KEY (`Id_O`),
KEY `Id_P` (`Id_P`),
FOREIGN KEY (`Id_P`) REFERENCES `Persons` (`Id_P`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
CREATE TABLE `Persons` (
`Id_P` INT(11) NOT NULL,
`LastName` VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (`Id_P`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
三:UNIQUE 约束,用来约束列的唯一性,每个表可以有多个 UNIQUE 约束,但只能有一个 PRIMARY KEY 约束。
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (Id_P)
)
四:创建索引
本例会创建一个简单的索引,名为 "PersonIndex",在 Person 表的LastName 列:
CREATE INDEX PersonIndexON Person (LastName) ;
如果您希望以降序索引某个列中的值,您可以在列名称之后添加保留字DESC:
CREATE INDEX PersonIndexON Person (LastName DESC) ;
假如您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:
CREATE INDEX PersonIndexON Person (LastName, FirstName)
五:将表的主键值插入到其它列
UPDATE
`coupon` c1,
`coupon` c2
SET c1.`sequence_num` = c2.`coupon_id` WHERE c1.coupon_id = c2.coupon_id
六:将查出来的数据插入导指定表
INSERT INTO `activity_publicity_cust`(
`match_cust_id`,`is_delete`,`create_time`,`update_time`
)
SELECT
`match_cust_id`,
(SELECT 1) is_delete,
NOW() ce,
NOW() up
FROM `activity_match_cust` WHERE `match_id` IS NULL AND `customer_id` IS NULL
七:select查询执行顺序
(7) SELECT
(8) DISTINCT <select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) HAVING <having_condition>
(9) ORDER BY <order_by_condition>
(10) LIMIT <limit_number>
SELECT执行顺序一共分为10步,最先执行FROM操作,最后执行LIMIT操作。其中每一次操作都会产生一张虚拟表作为下一个处理的输入,只是这些虚拟的表对用户来说是透明的,只有最后一个虚拟的表才会被作为结果返回。
#过程分析
1、FORM: 对FROM左表和右表计算笛卡尔积,产生虚表VT1。
2、ON: 对虚表VT1进行ON过滤,只有那些符合<JOIN-CONDITION>的行才会被记录在虚表VT2中。
3、JOIN: 如果指定了OUTER JOIN(比如left join、 RIGHT join),只有匹配的行才会被插入到虚拟表VT3中。
4、WHERE: 对虚拟表VT3进行WHERE条件过滤。只有符合<WHERE-CONDITION>的记录才会被插入到虚拟表VT4中。
5、GROUP BY: 根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5。
6、HAVING: 对虚拟表VT5应用having过滤,只有符合<HAVING-CONDITION>的记录才会被 插入到虚拟表VT6中。
7、SELECT: 执行select操作,选择指定的列,插入到虚拟表VT7中。
8、DISTINCT: 对VT7中的记录进行去重。产生虚拟表VT8.
9、ORDER BY: 将虚拟表VT8中的记录按照<order_by_list>进行排序操作,产生虚拟表VT9.
10、LIMIT:取出指定行的记录,产生虚拟表VT10, 并将结果返回。
八:select case查询
SELECT
CASE counterType
WHEN 1 THEN 'CTP'
WHEN 2 THEN 'NULL'
WHEN 3 THEN '飞鼠'
ELSE 'default'
END AS counterName
FROM urls
九:SQL执行时间
#查询版本5.0之后支持
SELECT VERSION();
#查看profile是否开启
SHOW VARIABLES LIKE "%pro%"
SET profiling =1;
SELECT 1;
SET profiling =1;
SELECT 2;
SHOW PROFILES;
-- 语法:SHOW PROFILE FOR QUERY QUERY_ID 查询ID对应SQL执行时各个操作耗时
SHOW PROFILE FOR QUERY 497
-- 语法:SHOW PROFILE type FOR QUERY QUERY_ID, 可以查看SQL语句执行各种资源耗时
SHOW PROFILE ALL FOR QUERY 497
其中type:
ALL: 显示所有的开销信息
BLOCK IO : 显示块IO相关开销
CPU : 显示cpu 相关开销
IPC: 显示发送和接收相关开销
MEMORY: 显示内存相关开销
PAGE FAULTS:显示页面错误相关开销信息
SOURCE : 显示和Source_function ,Source_file,Source_line 相关的开销信息
SWAPS :显示交换次数相关的开销信息
十:开启自定义函数功能
-- 查看是否开启创建函数的功能
show variables like '%func%';
-- 开启创建函数的功能
set global log_bin_trust_function_creators = 1;
十一:tinyint类型
tinyint 型的字段如果设置为UNSIGNED类型,只能存储从0到255的整数,不能用来储存负数。
tinyint 型的字段如果不设置UNSIGNED类型,存储-128到127的整数。
1个tinyint型数据只占用一个字节;一个INT型数据占用四个字节。

浙公网安备 33010602011771号