使用命令行连接MYSQL数据库
1.mysql -h主机名 -P端口 -u用户名 -p密码
启动数据库的方式
1.net stop mysql服务名
2.net start mysql服务名
删除已经安装好的mysql服务
sc delete mysql
备份数据库
mysqldump -u用户名 -p -B数据库1 数据库2 数据库n>(可以带path)文件名.sql
恢复数据库
Sourcr 文件名.sql
备份表
mysqldump -u用户名 -p 数据库1 表1 表n>(可以带path)文件名.sql
数据库的基本操作
创建数据库:create database [if not exists] 数据库名
(`character set` 指定字符集不指定默认`utf-8`,`collate` 指定效验规则)指定效验规则:`utf8_bin`[区分大小写]`utf8_general_ci`[不区分大小写]默认;
删除数据库:drop database [if not exists] 数据库名字;
查看数据库:show databases
:
查看数据库创建的语句:show create databases 数据库名称;
表的基本操作
创建表:create table 表名;
:create table 表名(字段名 字段类型,字段名 字段类型)character set 字符集 collate 校对规则 engine 引擎;
创建数据表:create table 表名(定义字段id int comment’解释’);
删除数据表: drop table 表名;
删除行: delete from 表名where 字段= 值;
查看数据表:show tables [like 匹配]
修改数据表: alter table 表名 modify
更换数据表的名称:alter table 旧表名 rename [to|as] 新表名;
更换数据表的名称:rename table 表名 to 新表名
修改表选项: alter table 表名 表选项 [=] 值;
修改表中数据:update 表名 set 字段=值 where 字段=值
创建临时表: create temporary table 表名(定义字段id int comment’解释’);
查看表结构:desc 数据表名 指定字段名(可以不指定);
删除列:alter table 表名 drop (列名);
查看数据表的创建语句:show create table 表名;
查看数据表结构:show [full] columns from 表名;
表的复制: insert into 新表(所有字段) select 字段 from 表
表的自我复制(蠕虫复制):insert into 表 select * from 表
复制列字段:create table 新表 like 旧表;
删除一张表重复记录(去重):先复制字段:innsert into 表名 select distinct * from 表名
更改字段的数据类型:alter table 表名``modify 字段名 新的字段类型 default '' not null;
插入值:insert into 表名的value
修改表
alter table 语句追加,修改,或删除列的语法
添加列:alter table tableName add(colum datatype [default expr])
修改列:alter table tableName modify(colum datatype [default expr])
删除列:alter table tableName drop(colum datatype [default expr])
修改列:alter table db_name.table_rename change id table_id int
修改字符集:alter table tableName character set 字符集
查看表结构:desc tablename;
函数操作
字符串操作
返回字符串字符集:select charset(字段) from 表名;
连接拼接多个列:select concat(字段,’拼接内容’ ,字段) from 表名;
把字符串转大写:select ucase(字段) from 表名;
把字符串转小写:select lcase(字段) from 表名;
从字符串左/右边去n个字符:select left/right(字段,n) from 表名;
替换字符串:select replace(字段,’原名’,’新名’) from 表名
数学函数
绝对值:ABS(num)
十进制转二进制:BIN(数字)
转十六进制:HEX(数字)
进制转换:CONV(数字,进制,转成的进制)
向上取整:CEILING(数字)
向下取整:FLOOR(数字)
保留小数点位(四舍五入):FORMAT(小数,需要保留几位)
求最小值:least(一些数字)
求余:mod(数字,模数)
圆周率:pi()
平方根:sqrt()
幂运算:pow()
返回一个随机数:rand()
范围是0-v-1.0
日期函数
获取当前日期current_date()
当前时间:current_time()
获取当前时间戳:current_timestamp()
返回datetime的部分日期:date(datetime)
在原有时间加上日期或时间:date_add(原有时间,interval 时间 时间类型)
在原有时间减少日期或时间:date_sub(原有时间,interval 时间 时间类型)
两个日期的间隔(天,可以出365返回年):datediff(大时间1,小时间2)
返回秒数:unix_timestamp()
把数字转换时间:from_unixtime(数字,"%Y-%m-%d)
加密函数
查询当前用户和ip:user()
查数据库名称:database()
为字符串返回一个md5 32的字符串(用户密码)加密;md5(str)
从原文密码str计算返回密码字符集:password(str)
比较函数
比较一个值是否在自定集合:in(数,数)
是否不在:not in()
聚合函数
字段数量(不统计null):count()
和:sum()
平均值:avg()
控制函数
流程控制
if(真/假,返回第一个,第二个)ifnull`case 条件表达式 when 表达式1 then 语句 end case`
循环控制
looprepeatwhile
单表查询
语句顺序:select * from 表 group by(分组) 表达式 having(过滤) 表达式 order by(排序) 表达式 limit(分页) 表达式;
分页查询:select...... limit start,row;
从start+1开始查到row结束
清空数据:truncate [table] 表名;
排序
单字段排序:`select * from 数据表名 order by 字段名 [asc升|desc降]`多字段排序: `select * from 数据表名 order by 字段名 [asc升|desc降], 字段名2 [asc升|desc降]`
限量:select [select 选项] 字段列表 from 数据表名 [where表达式] [order by 字段] limit [offset(从什么记录开始),] 记录数
限量后更新数据: update [select 选项] 字段列表 from 数据表名 [where表达式] [order by 字段] limit [offset(从什么记录开始),] 记录数
限量后删除数据: delete [select 选项] 字段列表 from 数据表名 [where表达式] [order by 字段] limit [offset(从什么记录开始),] 记录数
分组
分组统计:`select *|字段 |选项 from 表名 [where 表达式] group by 字段名`分组排序:`select *|字段 |选项 from 表名 [where 表达式] group by 字段名` `[asc升|desc降]`多分组统计:`select *|字段 |选项 from 表名 [where 表达式] group by 字段名` `[asc升|desc降],字段名[asc升|desc降]`回溯统计:`select *|字段 |选项 from 表名 [where 表达式] group by 字段名` `[asc升|desc降],字段名[asc升|desc降]..... with rollup;`统计筛选:`select *|字段 |选项 from 表名 [where 表达式] group by 字段名` `[asc升|desc降],字段名[asc升|desc降]..... with rollup having 条件`;
多表查询
连接查询
子查询
合并(联合)查询:select ...... union [all(不去重)|distinct(去重)] select......
交叉连接:select 字段 from 表1 cross join 表2
内连接:select 字段 from 表1 join 表2 on 匹配条件
左/右连接:select 字段 from 表1 left/right join 表2 on 匹配条件
MySQL约束
约束分为:not null(非空),unique(唯一),primary key(主键) ,foreign key(外键) ,check(检查)
主键:字段名 字段类型 pk
唯一:字段名 字段类型 unique
外键:字段名 字段类型 foreign key(本表) references 主表(字段id)
检查:字段名 字段类型 check(检查条件)
索引[1]
创建一个索引:create index 索引名称 on 表名 (列名);
或alter table 表名 add index 索引名 (列名)
查看索引:show indexes from 表名
或 show keys from 表名
或desc 表名
删除索引:drop index 索引名 on 表名 (字段)
删除主键索引:alter table 数据表 drop pk 或者 drop index 'primary' on 数据表
删除自动增长索引:alter table 数据表 modify 字段名 字段类型
主键索引(添加pk后会自动变成索引):alter table 表名 add primary key (列名)
唯一索引:create [unique] index 索引名称 on 表名 (列名)
普通索引:index
全文索引(一般使用solr和elasticSearch框架):
事务[//]: # (事务的(ACID)特性:1.原子性2.一致性3.隔离性4.持久性)
ACID
事务的四大特性(ACID)[//]: # (1、原子性(Atomicity)事务是一个不可分割的单位,事务中的所有SQL等操作要么都发生,要么都不发生。2、一致性(Consistency)事务发生前和发生后,数据的完整性必须保持一致。3、隔离性(Isolation)当并发访问数据库时,一个正在执行的事务在执行完毕前,对应其他的会话是不可见的,多个并发事务之间的数据是相互隔离的。备份的参数 --single-transaction4、持久性(Durability)一个事务一旦被提交,它对数据库中的数据改变就是永久性的。如果出了错误,事务也不允许撤销,只能通过“补偿性事务”)
(基本操作)
开始一个事务:start transaction;
设置保存点:savepoint 保存点名;
回退事务:rollback to 保存点名;
回退全部事务:rollback;
提交事务:commit;
事务管理
事务隔离级别
脏读:可以读取到其他用户没有提交的数据变化不可重复读:在同一事务内,不同的时刻读到的同一批数据可能是不一样的,可能会受到其他事务的影响,比如其他事务改了这批数据并提交了幻读:
事务隔离级别 | 脏读 | 不可重复读 | 幻读 | 加锁读 |
---|---|---|---|---|
读未提交(read-uncommitted) | 可能 | 可能 | 可能 | 不加锁 |
读已提交(read-committed) | 不可能 | 可能 | 可能 | 不加锁 |
可重复读(repeatable-read) | 不可能 | 不可能 | (有)不可能 | 不加锁 |
串行化(serializable) | 不可能 | 不可能 | 不可能 | 加锁 |
查看全局隔离级别:`select @@global.transaction_isolation;`查看当前会话中的隔离级;`select @@session.transaction_isolation;`查看下一个事务的隔离级别:`select @@transaction_isolation;`修改当前会话隔离级别:`set session transaction isolation level (事务隔离级别);`修改系统当前隔离级别:`set global transaction isolation level (事务隔离级别);`修改默认隔离级别:在mysql.ini文件后面加上:`transaction-isolation=(隔离级别)`
储存引擎
查看支持什么引擎:`show engines;`修改存储引擎:`alter table 表名 engine = 储存引擎;`---## 视图创建视图:`create view 视图名 as select 语句;`修改一个视图:`alter view 视图名 as select 语句;`查看视图:`show create view 视图名;`查看视图表结构:`desc 视图表名;`删除视图:`drop view 视图名1,视图名2;`修改视图:`update 视图表 set 字段='修改' where 字段='查询条件';`## 用户创建用户:`create user '用户名' @'地址' identified by '密码';`删除用户:`drop user '用户名' @'地址';`修改自己的密码:`set password = password('新密码');`修改密码:`set password for '用户名' @'地址'= password('新密码');`[权限](https://www.wolai.com/m352SfuN4skA9jFqd7CuW2)给用户授权:`grant 权限列表... on 库.对象名 to '用户名' @'地址' [identified by '密码'];`回收权限:`revoke 权限列表... on 库.对象名 from '用户名' @'地址';`刷新权限:`flush privileges;`给与全局权限:`grant 权限列表... on *.* to '用户名' @'地址' [with grant option];`数据库级权限:`grant 权限列表... on 数据库名.* to '用户名' @'地址' [with grant option];`表级权限:`grant 权限列表... on 数据库名.表名 to '用户名' @'地址' [with grant option];`字段权限:`grant 权限类型 (字段) on 数据库名.表名 to '用户名' @'地址' [with grant option];`储存过程权限:`grant execute|alter routine|create routine on {*.*|数据库名.*|procedure 数据库名.存储过程} to '用户名' @'地址' [with grant option];`
wolai 原创模板
- Mysql列类型
- 数值类型
- 整形
- tinyint-1
- smallint-2
- mediumint-3
- int-4
- bigint-8
- 小数类型
- float-4
- double-8
- decimal[M,D]-根据M和D
- 整形
- 文本类型(字符串类型)
- char -0-255
- varchar【0-65535】
- text
- longtext
- 二进制
- blob
- longblob
- 日期类型(常用)
- date(年月日)
- time(时分秒)
- datetime(年月日时分秒)
- 数值类型
-
1.查询比较频繁的字段应该创建索引2.唯一性太差的不适合单独创建索引,即便查询频繁3.更新频繁的不适合4.不会出现在where 字句中字段不该创建 ↩︎