数据库部分(MySql)_1
SQL规范
以 “ ; ” 结尾;关键字之间要有空格(可以由多个空格);SQL语句中可以一个或多个换行;关键字不区分大小写。
数据库相关SQL
查询所有数库库:
show databases;
创建数据库:
create database 数据库名称;
查看单个数据库详情
show create database 数据库名称;
删除数据库
drop database 数据库名称;
创建数据库时制定字符集
create database 数据库名称 character set gbk/utf8;
使用数据库
use 数据库名称;
表相关SQL
什么是表:在关系型数据中保存数据库的单元,类似于Excel中表,创建表的时候需要指定表的字段信息。
创建表
create table 表名 (字段名 字段类型,字段名 字段类型...);
查看所有表
show tables;
查看单个表信息
show create table 表名;
删除表
drop table 表名;
创建表指定字符集和引擎
charset engine create table 表名 (字段名 字段类型,字段名 字段类型) engine=myisam/InnoDB charset=gbk/utf8;(InnoDB:支持数据库的感激操作,如事务、外键等;MyIsam:只支持数据基础的增删改查)
查看表字段信息
desc 表名;
修改表相关SQL
修改表名
rename table 原名 to 新名;
修改表的引擎和字符集
alter table 表名 engine=innodb/myisam charset=utf8/gbk;
添加表字段(在表的最后位置添加)
alter table 表名 add chinese int;
在表的最前面添加
alter table 表名 add chinese int first;
在某个字段的后面添加
alter table 表名 add 新字段名 新字段表名 after 老字段名;
删除表字段
alter table 表名 drop 字段名;
修改表字段的名称和类型
alter table 表名 change 老字段表明 新字段表名 字段类型;
修改字段类型和字段的位置
alter table 表名 modity 字段名 新类型 first/after XXX;
表的增删改查
全表插入格式
insert into 表名 values (数据1,数据2,数据3);
指定字段插入
insert into 表名 (字段名1,字段名2...) values (数据1,数据2);
批量插入数据格式
insert into 表名 values (数据1,数据2,数据3),(数据1,数据2,数据3);
指定字段批量格式
insert into 表名 (字段名1,字段名2) values ((数据1,数据2),(数据1,数据2);
所有字段查询
select * from 表名;
指定字段查询
select 字段名,字段名 from 表名;
条件查询格式
select * from 表名 where 条件;
修改数据
update 表名 set 字段名=新的数据 where id=位置;
删除数据
delete from 表名 (表内所有的数据) where 条件;
去重(distinct)
select distinct XX from 表名;
编码问题
在连接数据库后执行set names gbk;把数据库的解码字符集修改成gbk。
主键约束
主键:表示表中数据唯一性的字段称为主键。
约束:约束就是创建表的时候给表中字段添加的限制条件。
主键约束:添加了主键约束的字段,保存的数值必须唯一而且非空
create table 表名 (字段名 类型 primary key,字段名 类型);
主键自增约束
create table 表名 (字段名 类型 primary key auto_increment,字段名 类型);
自增的特点
值为null时会自动赋值;以表中曾出现的最大值基础上+1;删除数据自增数值不减少;delete清空表,自增数值不变。
如何让自增数值清零
使用truncate关键字,相当于drop+create。
truncate table 表名;
注释
创建表的时候可以通过 comment 关键字对字段进行描述
create table 表名 (字段名 类型 primary key auto_increment comment'这个字段是主键',name varcher(20) comment '姓名');
` 和 ' 的区别
`的作用是用来修饰表名和字段名(可以省略);
create table `表名` (id int ,name varchar(20));
' '是作用是用来修饰字符串。
数据冗余
由于表设计不够合理,出现大量的重复数据,成为冗余数据;可以通过拆分表的形式,把可能重复的数据保存到一张新的表中,在原表中只需要通过一个id建立关系即可,这种建立关系的字段称之为外键;
create table T1(id int primary key auto_increment,name varchar(20));
create table T2(id int primary key auto_increment,name varchar(20),T1_id int (上级分类));
事务
事务是数据库中执行SQL语句的最小工作单位,把多条SQL语句放在事务中可以保证多条SQL要么全部成功,要么全部失败。
查看数据库的提交状态
show variables like '%autocommit%';
关闭/打开自动提交
set autocommit = 0/1;
事务回滚
rollback;此关键字会把数据库内存中的数据回滚到上一次commit的点;
savepoint 设置回滚点
savepoint 标识(随便起);
指定的回滚到某个回滚点
rollback to 标识;
事务的应用场景
当执行某一件事需要多行SQL语句时,并且要求多行SQL要么全部成功,要么全部失败,此时必须使用事务,不然就会出现多行SQL部分成功部分失败的情况。
SQL分类
DDL: (Deta Definition Language)数据定义语言,包括create、drop、alter、truncate;不支持事务。
DML: (Deta Manipulation Language)数据操作语言,包括insert、delete、update、select(DQL);支持事务。
DQL: (Data Query Language)数据查询语言,只包括select;不支持事务。
TCL: (transaction Control Language)事务控制语言,包括commit、rollback、savepoint、rollback to等。
DCL: (Data Control Language)数据控制语言;分配用户权限相关的SQL。
数据类型
整数:
int(m):四个字节,和JAVA中的int一致;
bigint(m):八个字节,和JAVA中的long一致;
m代表显示长度,但是必须和zerofill关键字结合使用 create table 表名(num int(10) zerofill);
浮点数类型
double(m,d):m代表总长度,d代表小数点后面的长度;
decimal(m,d):超高精度小数,需要涉及高精度运算时使用;
字符串类型
char(m):长度不可变,执行效率高,最大长度255;
varchar(m):长度可变,节省空间,最大长度65535(超255建议使用text);
text:长度可变,通常保存长度大于255的文本数据,最大值65535;
日期类型
date:只保存年月日;
time:只保存时分秒;
datetime:年月日时分秒,默认值为null,最大值9999-12-31;
timestamp(时间戳):年月日时分秒,默认为当前时间,最大值为2038-01-19。
别名
查询表中所有的字段名 并把原字段名改成XXX 以下有三种方法:
select 原字段名 as '别名' from 表名
select 原字段名 '别名' from 表名
select 原字段名 别名 from 表名
and or in
and 和 java中的&&效果一样
or 和 java中的||效果一样
select * from 表名 where sal=1500 and deptno=10;
select * from 表名 where sal=1500 or sal=3000 or sal=5000;
select * from 表名 where sal in (5000,1500,3000);
between X and Y 查询X和Y之间的信息 (包括X和Y)
select * from 表名 where job between X and Y;
查询
用于模糊查询
_:代表单个未知字符 包含字符a: _a%
%:代表0个或多个位置字符 以a开头: a%;以a结尾: %a
不包含XXX
select * from 表名 where 字段名 not like '%啪啪%';
包含XXX
select * from 表名 where 字段名 like '%啪啪%';
排序
order by 写在 where 的后面;没有 where && limit 写在后面;
order by 后面写排序的字段名,可以写一个或多个,默认排序规则为升序,也可以指定规则:升序(asc) 降序(desc)。
分页查询(limit)
limit X,Y :x代表跳过的条数;y代表查询的条数(每页的条数)。
案例:查询第n页没页m条数据 limit (n-1)*m,m;
日期及相关函数
select 'Hello World';
now() 获取当前日期+时间 select now();
获取当前日期 select curdate();
获取当前时间 select curtime();
从年月日时分秒提取年月日 和提取时分秒 select date(now()); select time(now());
从年月日时分秒中提取年,月,日,时,分,秒
select extract(year from now());
select extract(month from now());
select extract(day from now());
select extract(hour from now());
select extract(minute from now());
select extract(second from now());
日期的格式化 格式:date_format(日期,格式);
%Y 代表四位年 %y 两位年
%m 两位月 %c 一位月
%d 日
%H 24小时 %h 12小时
%i 分 %s 秒
改变格式
select date_format(now(),'%Y年%m月%d日 %H点%i分%s秒');
把非标准格式的时间转成标准格式
str_to_date(非标准格式的时间,格式);
转成标准格式
select str_to_date ('15.08.2016 08:00:00','%d.%m.%Y %H:%i:%s');
ifnull函数
age=ifnull(x,y) 如果x的值为null 则 age=y, x不为null则age=x
update emp set comm=ifnull(comm,0);
聚合函数
对多条数据进行统计查询
求平均值 avg(字段名) select avg(字段名) from 表名;
最大值 max(字段名) select max(字段名) from 表名;
最小值 min(字段名) select min(字段名) from 表名;
总和 sum(字段名) select sum(字段名) from 表名;
查询符合条件的条数 select count(*) from 表名 where 字段名=XX;
字符串相关函数
字符串拼接 concat(s1,s2) 结果为 s1s2
select 字段名,concat(字段名,拼接数据) from 表名;
获取字符串的长度 char_length(字段名)
select 字段名,char_length(字段名) from 表名;
获取字符串在另一个字符串中出现的位置
格式一:instr(str,substr); select instr('asdfg','d'); //3
格式二:locate(substr,str); select locate('d','asdfg'); //3
转换大小写
select upper('abc');select lower('NBA');
去两端空白
字符串中间的空白不能去 select trim(' ab c ');
截取字符串
从左边截取: select left('abcdefg',2);
从右边截取: select right('abcdefg',3);
从某个位置截取: select substring('abcdefg',2,3);//从第二个数据开始截取三个数据
重复
select repeat('ab',3);
反转
select reverse('abc');
替换
select replace('abcdefg','c','m');
插入
select insert('abcdefg',3,2,'m');//把从第三个位置开始的两个数据替换成‘m’。
数据库部分(MySql)_1的更多相关文章
- 数据库 之MySQL 简单教程
So Easy系列之MySQL数据库教程 1. 数据库概述 1.1. 数据库概述 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和 ...
- Mysql数据库知识-Mysql索引总结 mysql mysql数据库 mysql函数
mysql数据库知识-Mysql索引总结: 索引(Index)是帮助MySQL高效获取数据的数据结构. 下边是自己整理的资料与自己的学习总结,,做一个汇总. 一.真的有必要使用索引吗? 不是每一个性能 ...
- 迁移应用数据库到MySQL Database on Azure
by Rong Yu 有用户问怎么把他们应用的数据库迁移到MySQL Database on Azure上,有哪些方式,有没有需要注意的地方.今天我们来概括介绍一下迁移应用数据库到MySQL Data ...
- Cobar是提供关系型数据库(MySQL)分布式服务的中间件
简介 Cobar是提供关系型数据库(MySQL)分布式服务的中间件,它可以让传统的数据库得到良好的线性扩展,并看上去还是一个数据库,对应用保持透明. 产品在阿里巴巴稳定运行3年以上. 接管了3000+ ...
- Mysql数据库的mysql Schema 究竟有哪些东西& 手工注入的基础要领
#查看数据库版本号 mysql> select @@version; +------------+ | @@version | +------------+ | 5.5.16-log | +- ...
- 2、ABPZero系列教程之拼多多卖家工具 更改数据库为Mysql
因为要部署项目到云服务器,不想在服务器上装SqlServer,所以需要把项目改为Mysql. 项目初始化 1.下载项目压缩包,前面文章已经说到,可以加群到群文件里下载.解压缩下载的项目源码,使用VS2 ...
- 关于数据库管理系统DBMS--关系型数据库(MySQL/MariaDB)
数据库的结构(3种):层次,网状,关系型(用的最多): DBMS的三层模型: 视图层:面向最终用户: 逻辑层:面向程序员或DBA: 物理层:面向系统管理员: 关系型数据库管理系统——RDBMS: 主要 ...
- 数据库【mysql篇】学习笔记
Windows服务 -- 启动MySQL net start mysql-- 创建Windows服务 sc create mysql binPath= mysqld_bin_path(注意 ...
- 数据库之数据库管理篇[mysql]
管理数据库 1.mysql开闭使用篇 mariadb在Linux中首次进入mysql(因为此时还没有创建任何用户,mysql的root并不等效于linux中的root用户) sudo mysql 进入 ...
- 数据库之mysql篇(1)—— 数据库管理系统简介/mysql的安装、配置
说mysql之前,还是先说说数据库. 什么是数据库: 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后 ...
随机推荐
- orabbix监控oracle
Orabbix 是一个用来监控 Oracle 数据库实例的 Zabbix 插件.下载地址: http://www.smartmarmot.com/product/orabbix/download/ O ...
- std::string的拷贝赋值研究
说明:以下涉及的std::string的源代码摘自4.8.2版本.结论:std::string的拷贝复制是基于引用计数的浅拷贝,因此它们指向相同的数据地址. // std::string类定义type ...
- linux下使用eclipse打开esp32工程文件,并进行编译下载。
在之前的文章中,已经讲过将esp-idf 运用linux自带的工具下载,但是为了开发的系统性,这里运用eclipse来对idf进行整体的编译. 首先 cd /esp32 运行eclipse,将work ...
- 《mysql必知必会》学习_第15章_20180806_欢
第15章:联结表 P98 外键:外键为某个表的一列A,同时这一列包含另一个表的主键值B(B属于A,等于或者小于的关系) P99 select vend_name,prod_name,prod_pric ...
- 2nd week
<!DOCTYPE html> <html> <head> <title>用户登录.html</title> <meta http-e ...
- 使用root用户登录到AWS EC2服务器
首先是在putty中使用ec2-user登录服务器后,创建root账户的密码,使用如下命令: sudo passwd root 然后会提示你输入new password,输入之后回车,会让你retyp ...
- ReactNative学习笔记(六)集成视频播放
概述 视频播放可以自己写原生代码实现,然后注入JS.如果对视频播放没有特殊要求的话,可以直接使用现成插件. 到官方推荐的插件网站搜索找到下载量第一的插件:react-native-video. 安装 ...
- KeepAlived+Nginx 安装
yum install -y gcc gcc-c++ openssl openssl-devel 目前keepalived最新版本下载:[root@rhel ~]#wget -c http://www ...
- [UWP]使用Popup构建UWP Picker
在上一篇博文<[UWP]不那么好用的ContentDialog>中我们讲到了ContentDialog在复杂场景下使用的几个令人头疼的弊端.那么,就让我们在这篇博文里开始愉快的造轮子之旅吧 ...
- Linux - 查看命令所属的软件包
这里以查看netstat命令所属的软件包为例. CentOS:利用yum provides命令 netstat命令所属的软件包为net-tools [root@CentOS7 ~]# yum prov ...