一. 记录操作

子查询
select * from students where (age, height) = (select max(age), max(height) from students); 添加
insert into students(name, height) values('刘备', 1.75),('曹操', 1.6); insert into students values(0, 'xx', default, default, '男'); 删除
delete from students where id=5; 逻辑删除
alter table students add is_delete bit default 0; update students set is_delete = 1 where id = 8; 修改
update students set age = 18, gender = '女' where id = 6; 去重
select distinct name, gender from students; 模糊查询
like模糊查询字符;%多个;_任意一个(在哪里星号表示多个,?表示1个) delete from table where field like '%关键词1%' or like '%关键词2%' or like '关键词3';(同not like) regexp正则匹配;^开头,$结尾,.*多个 SELECT * FROM a_code_log WHERE account REGEXP '^1312.*7160$' select * from table where field regex 'world1|world2|world3';(同not regexp); 范围查询
between .. and.. in(...,...,) 排序
order by id asc|desc [,name asc|desc,...] 分页查询
limit 起始位置,记录数,limit 0,5 同limit 5。注意写在最后面。 聚合函数
count(col)、max(col)、min(col)、sum(col)、avg(col) 小数位数
round(avg(price),2) 范围
age<10 and age >8; between...and 判空
is null、is not null,不要写成了=null。 不等于
!=同<>,不要写16<age<18,会返回所有的。只有python可以这样写。 ifnull函数
select avg(ifnull(height,0)) from...若为空使用自己提供的值。 分组
select gender,avg(age) from students group by gender; 分组集合
select gender,group_concat(name) from students group by gender; 分组过滤
只能用于group by后面。 汇总
with rollup,会在记录后面新增统计行,最后写。 内连接
select * from students as s inner join classes as c on s.cls_id = c.id; 左(外)连接
left join以左表为主查询右表数据,右表数据不存在用null填充。 自连接
inner join,把一张表模拟成左右两张表,然后进行连表查询,表还是本身。 注意点: 内连接是求交集;左连接返回左表若右表缺值null填充;用左连接还是右连接看你想返回哪个表;自连接用于乱七八糟的表,如省市表(aid,省市区街,pid(依存关系)),可以自连接很多次。 缓存查询
WITH t1 AS (SELECT file_id FROM UTT_DOWNLOAD_FILE), t2 AS (SELECT FILE_TYPE FROM UTT_DOWNLOAD_FILE), t3 AS (SELECT CUST_ID FROM UTT_DOWNLOAD_FILE);SELECT * FROM t1,t2,t3;

二. 表操作

创建表
CREATE TABLE student( id INT PRIMARY KEY AUTO_INCREMENT COMMENT '学号', name VARCHAR(200) COMMENT '姓名', age int COMMENT '年龄') COMMENT='学生信息' 修改表注释
ALTER TABLE student COMMENT '学生表'; 修改列注释
ALTER TABLE student MODIFY COLUMN name VARCHAR(100) COMMENT '姓名'; SELECT table_name,table_comment FROM information_schema.tables WHERE table_schema = '所在的db' AND table_name ='表名groups' SHOW FULL COLUMNS FROM groups可以按条件的去搜索某名字或某数据类型的列的信息 SHOW FULL COLUMNS FROM tableName WHERE FIELD = 'add_time' OR TYPE LIKE '%date%' 查看tableName表中列名是add_time的或类型是date的列
SELECT column_name, column_comment FROM information_schema.columns WHERE table_schema ='db' AND table_name = 'groups'SHOW CREATE TABLE communication_group ALTER table 表名 MODIFY (字段名 字段类型(长度)); 表中未存有数据
ALTER TABLE 表名 MODIFY 字段名 字段类型(长度); 某列不重复
alter table api_test modify url varchar(200) UNIQUE CREATE TABLE admin (id int(10) NOT NULL AUTO_INCREMENT ,username varchar(50) NOT NULL ,password varchar(50) NOT NULL ,table_name varchar(50) NOT NULL ,PRIMARY KEY (id),UNIQUE KEY username (username)) 添加字段
alter table students add birthday datetime; 修改字段
alter table students modify jixiangwu mascot varchar(20); (modify修改字段类型或约束(表有内容了只能改相近的,不能char改int,只能改varchar,改别的先删掉内容再改。) 修改字段名
alter table students change birthday birth datetime not null; 删除字段
alter table students drop birthday; 删除表
DROP TABLE IF EXISTS sites;(数据和结构全删) 删数据
truncate table student;(保留表结构) 表其它
show create table students; drop table students;desc students(看表结构)。 清空数据id从1开始:
TRUNCATE TABLE tablename 设置id初始值:
ALTER TABLE tableName AUTO_INCREMENT=10000

三. 库操作

show database

CREATE DATABASE [IF NOT EXISTS] teark charset=utf8

DROP DATABASE [IF EXISTS] teark

ALTER DATABASE mydb1 CHARACTER SET utf8;

use teark

select database()

select version()

select now()

show create database teark

SHOW ENGINESSHOW VARIABLES LIKE 'storage_engine

'ctrl+a行首,ctrl+e行尾,ctrl+c结束。

net start/stop mysqlquit/exit

show global variables like 'port'

mysql -uroot -p < test.sql 导入

mysqldump -u root -p db1> db1.sql导出 (若报字符集错,在mysqldump后加--default-character-

set=utf8 -h localhost)

四. 外键

  作用?

    对外键字段的值进行更新和插入时会和引用表中字段的数据进行验证(到外键所在的那个表里面去找有没有插入的这个种类),数据如果不合法则更新和插入会失败,保证数据的有效性和完整性。非要删用on_delete,可级联删可从表null可默认值。

  外键约束?

    创建时设置外键约束放在最后一行,对于已经存在的字段添加外键约束:alter table students add foreign key(cls_id) references classes(id);

  删除外键约束?

    alter table teacher drop foreign key 外键名; ALTER TABLE tb_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name, ...) REFERENCES tb_name (index_col_name,...) [ON DELETE reference_option] [ON UPDATE reference_option]

五. 索引

  广义来说PRIMARY KEY, FOREIGN KEY, KEY/INDEX, UNIQUE都叫索引,狭义说就是KEY/INDEX。

  优点是提高了查询的速度,缺点是降低了增删改的速度。

  一个字段经常出现在where里面适合建立索引。多样性()越多越适合建立索引。

  show index from ...; alter table t_name add index i_name)(可选) (字段名...) drop index name on table;

六. 高级语句

插入查询结果
insert into good_cates(name) select cate_name from goods group by cate_name; 用连接更新字段名
update goods g inner join good_cates gc on g.cate_name=gc.name set g.cate_name=gc.id; 创建表并给某个字段添加数据
create table good_brands (id int unsigned primary key auto_increment,name varchar(40) not null) select brand_name as name from goods group by brand_name; 修改表结构
alter table goods change cate_name cate_id int not null, change brand_name brand_id int not null; 视图
create view v_name as select ...; show tables; drop view; 事务四大特性(简称ACID)
使用事务?
start transaction;/begin;
select balance from checking where customer_id = 10233276;
update checking set balance = balance - 200.00 where customer_id = 10233276;
update savings set balance = balance + 200.00 where customer_id = 10233276;
commit;

七. profile

  执行sql语句可以看到时间?

  set profiling=1

  查看上面的语句花费多少时间?

  show profiles

  关闭时间检测,不然执行的sql都会显示记录时间!

  set profiling=0

八. ORM(建库方式)

1. 全部纯sql语句方式

  一个sql语句七八百行!2.借助orm。orm作用:省去自己拼写SQL,保证SQL语法的正确性。一次编写可以适配多个数据库。防止注入攻击。在数据库表名或字段名发生变化时,只需修改模型类的映射,无需修改数据库操作的代码。

2. 模型类+映射

  先创建模型类,再迁移到数据库中即创建模型类,迁移通过模型类进行数据操作。简单快捷但不能控制所有细节,表结构发生变化的时候,也会难免发生迁移错误。SQL创建数据库表,再编写模型类作映射。避免了迁移错误。如SQLAlchemy映射:不亚于Django的ORM框架。见Flask-SQLAlchemy篇

九. 后记

两种方法去重?

  distinct和...

关于group by

  最好和聚合函数一起用,不对称的数据用group_concat。后面再进行筛选不能用where用having,再想删选就在group by之前筛选。

批量执行sql

  source home/.../a.sql(可以直接拖进来自动形成路径) 视图只能查。

create as

  注意视图的as不同于别的as。

设计者

  数据库的设计得是有经验的,参与设计框架的。数据库开发的程序员掌握power designer;db designer。 n-n必须转换成1-n,来个关系表,只有两个字段即两个主键。

Mysql数据库用户授权

  使用Grant命令。导入sql文件,source 文件名。

数据库引擎

InnoDB

  具有提交、回滚和崩溃恢复能力的事物安全(ACID兼容)存储引擎,支持外键。

MyISAM

  AUTO_INCREMENT列当插入修改时会被更新,因此比InnoDB类型的AUTO_INCREMENT更快;不支持事务。创建数据库将产生3个文件。文件的名字以表名字开始,扩展名之处文件类型:frm文件存储表定义、数据文件的扩展名为.MYD(MYData)、索引文件的扩展名时.MYI(MYIndex)

MEMORY

  数据存储到内存,为查询和引用其他表数据提供快速访问,类似redis。适合只是临时存放数据,数据量不大,并且不需要较高的数据安全性。MySQL中使用该引擎作为临时表,存放查询的中间结果。

Archive

  支持高并发的插入操作,但是本身不是事务安全的。适合只有INSERT和SELECT操作,如存储归档数据,如记录日志信息。

关于引擎

  决定数据的保存方式和sql的执行方式。扫描每条记录占多少字节,写入到文件。一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求* *

专业术语

  DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;

  DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);

  DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;

常见MySQL数据类型

  • CAHR(Length) Length字节 定长字段,长度为0~255个字符

  • VARCHAR(Length) String长度+1字节或String长度+2字节 变长字符,长度为0~65 535个字符

  • TINYTEXT String长度+1字节 字符串,最大长度为255个字符

  • TEXT String长度+2字节 字符串,最大长度为65 535个字符

  • MEDIUMINT String长度+3字节 字符串,最大长度为16 777 215个字符

  • LONGTEXT String长度+4字节 字符串,最大长度为4 294 967 295个字符

  • TINYINT(Length) 1字节 范围:-128~127,或者0~255(无符号)

  • SMALLINT(Length) 2字节 范围:-32 768~32 767,或者0~65 535(无符号)

  • MEDIUMINT(Length) 3字节 范围:-8 388 608~8 388 607,或者0~16 777 215(无符号)

  • INT(Length) 4字节 范围:-2 147 483 648~2 147 483 647,或者0~4 294 967 295(无符号)

  • BIGINT(Length) 8字节 范围:-9 2  23 372 036 854 775 808~9 223 372 036 854 775 807,或者0~18 446 744 073 709 551 615(无符号)

  • FLOAT(Length, Decimals) 4字节 具有浮动小数点的较小的数

  • DOUBLE(Length, Decimals) 8字节 具有浮动小数点的较大的数

  • DECIMAL(Length, Decimals)Length+1字节或Length+2字节 存储为字符串的DOUBLE,允许固定的小数点DATE 3字节 采用YYYY-MM-DD格式DATETIME 8字节 采用YYYY-MM-DD HH:MM:SS格式TIMESTAMP 4字节 采用YYYYMMDDHHMMSS格式;可接受的范围终止于2037年TIME 3字节 采用HH:MM:SS格式

  • ENUM 1或2字节 Enumeration(枚举)的简写,这意味着每一列都可以具有多个可能的值之一

  • SET 1、2、3、4或8字节 与ENUM一样,只不过每一列都可以具有多个可能的值注意:int(20)里面代表显示位数,而不是只能存储这么多位。

十. 作者留言

  原创不宜,如果觉得本文对你有帮助,记得打赏作者噢O(∩_∩)O,你的一点点爱心是我创作路上最大的动力~

Mysql基本使用指南的更多相关文章

  1. mysql索引详解,摘自《MySQL 5权威指南》

    本文介绍了数据库索引,及其优.缺点.针对MySQL索引的特点.应用进行了详细的描述.分析了如何避免MySQL无法使用,如何使用EXPLAIN分析查询语句,如何优化MySQL索引的应用.本文摘自< ...

  2. MySQL 升级方法指南大全

    原文:MySQL 升级方法指南大全 通常,从一个发布版本升级到另一个版本时,我们建议按照顺序来升级版本.例如,想要升级 MySQL 3.23 时,先升级到 MySQL 4.0,而不是直接升级到 MyS ...

  3. Atitit mysql存储过程编写指南

    Atitit mysql存储过程编写指南 1.1. 设定参数与返回值  `obj_id` int ,,返回类型 varchar(200)1 1.2. 在语句中使用传入的obj_id参数1 1.3. 测 ...

  4. mysql排错小指南

    mysql排错小指南 查询运行很慢时,可以执行mysql> show processlist\G mysql> show processlist\G ******************* ...

  5. 一份平民化的MySQL性能优化指南

    前言 近期在重新学习总结MySQL数据库性能优化的相关知识,本文是根据自己学习以及日常性能测试调优过程中总结的经验整理了一份平民化的优化指南,希望对大家在进行MySQL调优分析时有帮助!   MySQ ...

  6. cdh版本的hue安装配置部署以及集成hadoop hbase hive mysql等权威指南

    hue下载地址:https://github.com/cloudera/hue hue学习文档地址:http://archive.cloudera.com/cdh5/cdh/5/hue-3.7.0-c ...

  7. Metabase 从 H2 迁移到 MySQL 踩坑指南

    写在前面的话 首先如果你看到了这篇文章,可能你就已经指定 Metabase 是啥了,我这里还是简单的做个说明: Metabase is the easy, open source way for ev ...

  8. CentOS7.5下,MySQL安装配置指南

    [root@host---- home]# grep 'temporary password' /var/log/mysqld.log --20T02::.457613Z [Note] A tempo ...

  9. MySQL 页完全指南——浅入深出页的原理

    之前写了一些关于 MySQL 的 InnoDB 存储引擎的文章,里面好几次都提到了页(Pages)这个概念,但是都只是简要的提了一下.例如之前在聊 InnoDB内存结构 时提到过,但当时的重点是内存架 ...

  10. 腾讯云TDSQL MySQL版 - 开发指南 二级分区

    TDSQL MySQL版 目前支持 Range 和 List 两种格式的二级分区,具体建表语法和 MySQL 分区语法类似. 二级分区语法 一级 Hash,二级 List 分区示例如下: MySQL ...

随机推荐

  1. 修改Listen 1源码的一点心得

    注:本文只作为技术交流 首先感谢听1的作者写出这么强大的音乐播放器!! 软件首页地址:点击打开链接 软件的github上上上地址:点击打开链接 软件唯一让我美中不足的就是不能下载,这可能是作者考虑到了 ...

  2. Oracle 两字符串相似度比较

    select SYS.UTL_MATCH.edit_distance_similarity('为中华之举起而读书','为中华') from dual;

  3. .NET 云原生架构师训练营(基于 OP Storming 和 Actor 的大型分布式架构一)--学习笔记

    目录 为什么我们用 Orleans Dapr VS Orleans Actor 模型 Orleans 的核心概念 为什么我们用 Orleans 分布式系统开发.测试的难度(服务发现.通信) 运维的复杂 ...

  4. 前端工程化筑基-Node/npm/babel/polyfill/webpack

    00.前端搬砖框架 开发 ⇨ 构建 ⇨ 部署上线 ⇨ 摸鱼: 01.Node.js/npm Node.JS 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境,不是JS库(是C ...

  5. Redis-03 Redis事务

    需要特别注意,Redis 的命令是原子性的,而 Redis 的事务是非原子性的 事务相关命令 MULTI 命令 开启事务命令,Redis将操作命令逐个放到队列中,根据EXEC命令来原子化执行命令 EX ...

  6. C语言常用知识总结

    在 C 语言中,常量是一种固定值的标识符,它的值在程序执行期间不会改变. C 语言中有几种不同类型的常量: 字符常量:用单引号括起来的单个字符,例如 'A'.'b'.'1' 等. 字符串常量:用双引号 ...

  7. Python实现k-近邻算法案例学习

    一.介绍 你好,我是悦创. 博客首发:https://bornforthis.cn/column/Machine-learning/informal-essay/01.html 本文是由给私教学员 c ...

  8. 华为云Stack新版发布:构筑行业云底座,共创行业新价值

    摘要:在以"政企深度用云,释放数字生产力"为主题的华为云Stack战略暨新品发布会上,华为云提出深度用云三大关键举措,并发布华为云Stack 8.2版本,以智能进化推动创造行业新价 ...

  9. python之路22 hashlib、subprocess、logging模块

    hashlib加密模块 hashlib模块为不同的安全哈希/安全散列(Secure Hash Algorithm)和 信息摘要算法(Message Digest Algorithm)实现了一个公共的. ...

  10. 如何通过Java代码在PDF中插入、替换或删除图像?

    图文并茂的内容往往让人看起来更加舒服,如果只是文字内容的累加,往往会使读者产生视觉疲劳.搭配精美的文章配图则会使文章内容更加丰富,增加文章可读性的同时,也能提升用户体验.但由于PDF文档安全性较高,不 ...