Mysql基本使用指南
一. 记录操作
子查询
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基本使用指南的更多相关文章
- mysql索引详解,摘自《MySQL 5权威指南》
本文介绍了数据库索引,及其优.缺点.针对MySQL索引的特点.应用进行了详细的描述.分析了如何避免MySQL无法使用,如何使用EXPLAIN分析查询语句,如何优化MySQL索引的应用.本文摘自< ...
- MySQL 升级方法指南大全
原文:MySQL 升级方法指南大全 通常,从一个发布版本升级到另一个版本时,我们建议按照顺序来升级版本.例如,想要升级 MySQL 3.23 时,先升级到 MySQL 4.0,而不是直接升级到 MyS ...
- Atitit mysql存储过程编写指南
Atitit mysql存储过程编写指南 1.1. 设定参数与返回值 `obj_id` int ,,返回类型 varchar(200)1 1.2. 在语句中使用传入的obj_id参数1 1.3. 测 ...
- mysql排错小指南
mysql排错小指南 查询运行很慢时,可以执行mysql> show processlist\G mysql> show processlist\G ******************* ...
- 一份平民化的MySQL性能优化指南
前言 近期在重新学习总结MySQL数据库性能优化的相关知识,本文是根据自己学习以及日常性能测试调优过程中总结的经验整理了一份平民化的优化指南,希望对大家在进行MySQL调优分析时有帮助! MySQ ...
- 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 ...
- Metabase 从 H2 迁移到 MySQL 踩坑指南
写在前面的话 首先如果你看到了这篇文章,可能你就已经指定 Metabase 是啥了,我这里还是简单的做个说明: Metabase is the easy, open source way for ev ...
- CentOS7.5下,MySQL安装配置指南
[root@host---- home]# grep 'temporary password' /var/log/mysqld.log --20T02::.457613Z [Note] A tempo ...
- MySQL 页完全指南——浅入深出页的原理
之前写了一些关于 MySQL 的 InnoDB 存储引擎的文章,里面好几次都提到了页(Pages)这个概念,但是都只是简要的提了一下.例如之前在聊 InnoDB内存结构 时提到过,但当时的重点是内存架 ...
- 腾讯云TDSQL MySQL版 - 开发指南 二级分区
TDSQL MySQL版 目前支持 Range 和 List 两种格式的二级分区,具体建表语法和 MySQL 分区语法类似. 二级分区语法 一级 Hash,二级 List 分区示例如下: MySQL ...
随机推荐
- Android ViewPager2 + Fragment + BottomNavigationView 联动
Android ViewPager2 + Fragment + BottomNavigationView 联动 本篇主要介绍一下 ViewPager2 + Fragment + BottomNavig ...
- 【SQL】SQL常见窗口函数整理汇总大全(用到over的场景)
〇.概述 1.常用网站 SQL窗口函数:https://blog.csdn.net/liangmengbk/article/details/124253806 2.介绍 像聚合函数一样对一组数据进行分 ...
- 【Day01】Spring Cloud入门-架构演进、注册中心Nacos、负载均衡Ribbon、服务调用RestTemplate与OpenFeign
〇.课程内容 课程规划 Day1 介绍及应用场景 Day2 组件介绍及 广度 Day3 设计思想.原理和源码 Day4 与容器化的容器(服务迁移.容器编排) 一.业务架构的演进 1.单体架构时代 缺陷 ...
- 线上服务异常的定位、处理与优化的探索 - 第三章 Java虚拟机
Java虚拟机 之所以引入关于JVM的篇章,是发现多数项目发生的线上问题很大的几率源自JVM调优配置不当引起.对JVM的内存模型.GC垃圾回收机制.调优方式有一个系统化的了解后,可以快速处理或避免 ...
- Java手写一个批量获取数据工具类
1. 背景 偶尔会在公司的项目里看到这样的代码 List<Info> infoList = new ArrayList<Info>(); if (infoidList.size ...
- 日爬百万数据的域名限制、url的清洗和管理
一.域名去重1.检测开头:link.startswith('http') txt = "Hello, welcome to my world." x = txt.startswit ...
- VRRP原理和实战
一.VRRP基本概述 ·VRRP能够在不改变组网的情况中,将多台路由器虚拟成一个虚拟路由器,通过配置虚拟路由器的IP地址为默认网关,实现网关的备份. ·协议版本:VRRPv2(常用)和VRRPv3 · ...
- 大角度非迭代的空间坐标旋转C#实现
1. 绪论 在前面文章中提到空间直角坐标系相互转换,测绘坐标转换时,一般涉及到的情况是:两个直角坐标系的小角度转换.这个就是我们经常在测绘数据处理中,WGS-84坐标系.54北京坐标系.80西安坐标系 ...
- python 之excel文件读取封装
import os import xlrd PATH = lambda p: os.path.abspath( os.path.join(os.path.dirname(__file__), p) ) ...
- MongoDB - 模式设计
注意事项 模式设计,即在文档中表示数据的方式,对于数据表示来说时非常关键的. 为 MongoDB 做模式设计时,在性能.可伸缩性和简单性方面是重中之重,也需要考虑一些特别的注意事项. 限制条件 与常见 ...