1.创建表结构
CREATE TABLE table_name (column_name column_type)
2.删除数据表
DROP TABLE table_name
3.插入数据
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN )
4.查询数据
SELECT column_name,column_name FROM table_name [WHERE Clause] [LIMIT N] [ OFFSET M]
5.where条件
SELECT field1, field2,...fieldN FROM table_name1, table_name2... [WHERE condition1 [AND [OR]] condition2.....
6.update更新数据
UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
7. delete删除数据
DELETE FROM table_name [WHERE Clause]
8.like子句
SELECT field1, field2,...fieldN FROM table_name WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
8.union 语句
SELECT expression1, expression2, ... expression_n FROM tables
[WHERE conditions] UNION [ALL | DISTINCT] SELECT expression1, expression2, ... expression_n
FROM tables [WHERE conditions]
9.排序
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]
10.分组
SELECT column_name, function(column_name) FROM table_name WHERE column_name operator value
GROUP BY column_name
11.连接
- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
- LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
- RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author
SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a LEFT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author
SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a RIGHT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author
12.null值处理
select * , columnName1+ifnull(columnName2,0) from tableName
13.正则
查找name字段中以'st'为开头的所有数据
SELECT name FROM person_tbl WHERE name REGEXP '^st'
14 限制只取第一个,类似于top 1
SELECT * FROM
(
SELECT paused_time as end_time FROM production_time WHERE created_time = curdate()
UNION
SELECT resumed_time as end_time FROM pause_timer WHERE created_time = curdate()
UNION
SELECT end_time as end_time FROM timer_idle WHERE created_time = curdate()
) as end_time
ORDER BY end_time DESC
LIMIT 1
15 列出常见MYSQL数据存储引擎
InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。
MyISAM:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比 较低,也可以使用。
MEMORY:所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。
16 mysql 获取两个时间相差年,天,秒等等
SELECT
TIME_TO_SEC(TIMEDIFF('2018-09-30 19:38:45', '2018-08-23 10:13:01')) AS DIFF_SECOND1, -- 秒
UNIX_TIMESTAMP('2018-09-30 19:38:45')-UNIX_TIMESTAMP('2018-08-23 10:13:01') AS DIFF_SECOND2, -- 秒
TIMESTAMPDIFF(SECOND,'2018-08-23 10:13:01','2018-09-30 19:38:45') AS DIFF_SECOND3, -- 秒
TIMESTAMPDIFF(MINUTE,'2018-08-23 10:13:01','2018-09-30 19:38:45') AS DIFF_MINUTE, -- 分
TIMESTAMPDIFF(HOUR,'2018-08-23 10:13:01','2018-09-30 19:38:45') AS DIFF_HOUR, -- 小时
TIMESTAMPDIFF(DAY ,'2018-08-23 10:13:01','2018-09-30 19:38:45') AS DIFF_DATE1, -- 天
DATEDIFF('2018-09-30 19:38:45','2018-08-23 10:13:01') AS DIFF_DATE2, -- 天
TIMESTAMPDIFF(MONTH,'2018-08-23 10:13:01','2018-09-25 19:38:45') AS DIFF_MONTH, -- 月
TIMESTAMPDIFF(YEAR,'2018-08-23 10:13:01','2020-07-25 19:38:45') AS DIFF_YEAR -- 年
FROM TABLE;
17 获取近三年的数据
select year(max(statistic_date))-3 from chinatimes_db.t_fund_nav_cal_pre where fund_id = 'GSF000109762' order by statistic_date
select DATE_SUB(max(statistic_date), INTERVAL 3 YEAR) as start_date from chinatimes_db.t_fund_nav_cal_pre where fund_id = 'GSF000109762' order by statistic_date
18第一个是复制表结构第二个是复制内容
CREATE TABLE new_fund_nav LIKE chinatimes_db.t_fund_nav;
INSERT INTO new_fund_nav SELECT * FROM chinatimes_db.t_fund_nav;
19 数据库字段替换某一些关键字
UPDATE 表名 SET 字段名 = REPLACE(替换前的字段值, '替换前关键字', '替换后关键字');
20 增加字段
ALTER TABLE 表名 ADD COLUMN 字段名 VARCHAR(20) DEFAULT NULL COMMENT '字段名'
指定在某个字段之后加AFTER字段名
ALTER TABLE research_report_bak ADD COLUMN report_date varchar(200) DEFAULT NULL COMMENT '研报发布日期' AFTER size
21 取某字段的后几位
select SUBSTRING(title, -6) from research_report_bak
22数据表 从一个数据库存到另一个数据库
CREATE TABLE 表名称 LIKE 数据库.表名称;
INSERT 表名称 SELECT * FROM 数据库.表名称;
23删除某列
ALTER TABLE table_name DROP COLUMN field_name
24更改某个字段里的某个字符串
update state_statistical_bureau set content=REPLACE (content,',','')
25 MySQL死锁解决
show full processlist;
select * from information_schema.innodb_trx;
kill id
26 修改字段的注释
alter table tablename modify column field_name varchar(200) NOT NULL COMMENT '注释'
字段名和字段类型在后面照写保持一致,就注释换掉就行
27删除唯一索引:
ALTER TABLE `operate_abnormals` DROP INDEX `index_rec_id`
28从另一张表更新到一个表
UPDATE e_listed_shareholder e,listed_company_table l set e.stock_code = l.stock_code where e.entname = l.corporate_name