服务开启停止
#管理员身份下cmd
net start/stop mysql
数据库链接
mysql -h 127.0.0.1 -u root -p #-h 127.0.0.1默认
常用参数
-A 不预读数据库信息,提高连接和切换数据库速度,使用--disable-auto-rehash代替
--default-character-set 使用的默认字符集
-e 执行命令并退出
-h 主机地址
-p 连接到服务器时使用的密码
-P 连接的端口号
相关文件夹
bin目录下保存了MySQL常用的命令工具以及管理工具、data目录是MySQL默认用来保存数据文件以及日志文件的地方、docs目录下是MySQL的帮助文档、include目录和lib目录是MySQL所依赖的头文件以及库文件、share目录下保存目录文件以及日志文件。
创建数据库
create database name;
创建数据库后查看该数据库基本信息MySQL命令:
show create database name;
删除数据库
drop database name;
切换数据库
use name;
查看当前使用的数据库 MySQL命令:
select database();
create table t1 (id int , id int(5))
//INT(4)与INT(5),括号中的字符表示显示宽度,整数列的显示宽度与MySQL需要用多少个字符来显示该列数值,与该整数需要的存储空间的大小都没有关系,它们在数据库里面存储的都是4个字节的长度。
zerofill
和 unsigned
zerofill采用零填充,不足5位采用0填充,配合数据宽度
create table t2 (id int , id2 int(5) zerofill);
create table t3 (id int , id2 int(5) unsigned);
auto_increment
只用于整数类型
产生唯一标识
值从1开始,逐行增加
一个表中最多只能存在一个自增列
自增列应该定义为not null
自增列应该这只为 primary key 或者 unique
id int not null auto_increment primary key
浮点数类型
定点数类型
float , double , decimal 特点:
1.(m,d)表示方式:m指的是整数位,d指的是小数位(又称作精度和标度)
2.float/double四舍五入丢失精度,decimal会截断数据并输出warning
3.如果不指定精度,float/double采用操作系统默认,decimal则是(10,0)
位类型
1 存放位字段值
2 指定存放多位二进制的长度,默认为1(范围:1~64)
3 读取需要bin()/hex(),普通的select读取结果为null
4 插入的值会转化为二进制码,如果长度运行则正常处理,否则插入失败
create table t6 (id bit(1));
select bin(id) from t6;
当前系统日期
timestamp:返回yyyy-mm-dd hh:mm:ss 宽度19
timestamp:不适合存放久远日期,超出范围则会采用零值填充
//不同格式的显示零值格式
d date, t time,dt datetime
+------------+----------+---------------------+
| d | t | dt |
+------------+----------+---------------------+
| 2016-11-25 | 14:52:44 | 2016-11-25 14:52:44 |
+------------+----------+---------------------+
//默认值的体现
id1 timestamp
+---------------------+
| id1 |
+---------------------+
| 2016-11-25 14:55:45 |
+---------------------+
//timestamp字段只能有一个"CURRENT_TIMESTAMP"
+-------+-----------+------+-----+---------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------+------+-----+---------------------+-----------------------------+
| id1 | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| id2 | timestamp | NO | | 0000-00-00 00:00:00 | |
+-------+-----------+------+-----+---------------------+-----------------------------+
//timestamp和时区相关:SYSTEM 指的是和主机时区保持一致
show variables like "%_zone";
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | CST |
| time_zone | SYSTEM |
+------------------+--------+
//修改时区
set time_zone="+9:00"/在 [mysqld] 之下加 default-time-zone=timezone
年份
year:默认为4位格式.1901~2155和0000. 2位的已经不推荐,高版本已经不支持了.
timestamp和datetime区别:
1、timestamp支持范围小(1970-01-01 08:00:01到2038年某个点)
2、表中第一个timestamp字段,会默认采用当前系统时间.如果更新其他字段,该字段没有赋值的话,则该字段会自动更新.如果指定字段不满足规格,则采用零值填充
3、timestamp查询和插入都会受到当地时区影响datetime支持范围宽度大(1000-01-01 00:00:00到9999-12-31 23:23:59)
char和varchar的区别:
枚举类型:
create table `t8` (
`gender` enum('m','f') default null
) engine=innodb default charset=utf8
集合类型
create table t9 (col set ('a','b','c','d'));
算数运算符
比较运算符
NULL值不能参与"=","!=","<==>","<>"等场景比较
select * from t1 where id is null;
select * from t1 where id is not null;
between 比较为闭区间
a between min and max ==> a >=min and a<=max
select * from stu where id between 1 and 3;
in 在集合中匹配
select * from stu where id in (1,2,3);
like 这个在大量数据的情况下慎重选择 会影响查询性能
select id2 from t1 where id2 like "%03%";
regexp 这个在大量数据的情况下慎重选择,会影响查询性能。
select * from t1 where id2 regexp '0001';
逻辑运算符
位运算符
数据库创建成功后可在该数据库中创建数据表(简称为表)存储数据。请注意:在操作数据表之前应使用“USE 数据库名;”指定操作是在哪个数据库中进行先关操作,否则会抛出“No database selected”错误。
语法如下:
create table 表名(
字段1 字段类型,
字段2 字段类型,
…
字段n 字段类型
);
create table student(
id int,
name varchar(20),
gender varchar(10),
birthday date
);
示例:查看当前数据库中所有表 MySQL命令:
show tables;
效果展示
示例:查表的基本信息 MySQL命令:
show create table student;
示例:查看表的字段信息 MySQL命令:
desc student;
效果展示
示例:修改表名 MySQL命令:
alter table student rename to stu;
示例:修改字段名 MySQL命令:
alter table stu change name sname varchar(10);
#把 name 变成 sname varchar(10);
示例:修改字段数据类型 MySQL命令:
alter table stu modify sname int;
示例:增加字段 MySQL命令:
alter table stu add address varchar(50);
示例:删除字段 MySQL命令:
alter table stu drop address;
实例:字段增加修改 add/change/modify/ 添加顺序:
1 add 增加在表尾.
2 change/modify 不该表字段位置.
3 修改字段可以带上以下参数进行位置调整(frist/after column_name);
alter table emp change age age int(2) after ename;
alter table emp change age age int(3) first;
示例:删除数据表 MySQL命令:
drop table stu;
//指定字段,
//自增,默认值等字段可以不用列出来,没有默认值的为自动设置为NULL
insert into stu (id,sname,birthday,address) values (001,'Jack','2000-01-01','China');
//可以不指定字段,但要一一对应
insert into stu values (001,'Jack','2000-01-01','China');
//批量插入记录
insert into stu values (001,'Jack','2000-01-01','China'),(002,'Mike','2013-01-01','America');
update stu set birthday="2000-02-02" where same="Jack";
//查看所有字段
select * from stu;
//查询不重复记录
//结果只返回所有不重复的sname
select distinct(sname) from stu ;
//结果返回所有不重复的sname的其他所有值,例如生日编号等
select distinct(sname),stu.* from stu ;
//条件查询
//比较运算符: > < >= <= <> != ...
//逻辑运算符: and or ...
select * from stu where id=001 or id=002;
//请仔细检查where条件,慎重
delete from stu where sname='Jack';
order by
// desc降序,asc升序(默认)
select * from stu order by id ;
select * from stu order by id asc;
select * from stu order by id desc,birthday desc;
limit
:分页//只显示一条
select * from stu limit 1;
//每页10条进行分页,从第五条之后开始显示
select * from stu limit 5,10;
select * from stu order by id desc,birthday desc limit 1;
函数:count():记录数 / sum(总和); / max():最大值 / min():最小值
select count(id) from stu ;
select sum(id) from stu ;
select max(id) from stu ;
select min(id) from stu ;
group by
分组://分组统计
//按照学生id对 学生id 分组显示
select id from stu group by id;
//按照 每个学生的id的数量 分组显示
select count(id) as count from stu group by id;
select count(id) as count,id from stu group by id;
#执行不出来?select count(id) as count,stu.* from stu group by id;
having
对分组结果二次过滤:select count(id) as count,id from stu group by id having id >= 2;
with rollup
对分组结果二次汇总select count(id),stu.* from stu group by id,sname with rollup;
//=, !=
select * from emp where deptno = (select deptno from dept where deptname="技术部");
select * from emp where deptno != (select deptno from dept where deptname="技术部");
//in, not in
//当需要使用里面的结果集的时候必须用in();
select * from emp where deptno in (select deptno from dept where deptname="技术部");
select * from emp where deptno not in (select deptno from dept where deptname="技术部");
//exists , not exists
//当需要判断后面的查询结果是否存在时使用exists();
select * from emp where exists (select deptno from dept where deptno > 5);
select * from emp where not exists (select deptno from dept where deptno > 5);
union
记录联合// union:返回去重之后的结果
select sname from stu union select sname from stu;
// union all:返回所有结果 #相当于一次查询俩列
select sname from stu union all select id from stu;
grant select,insert on test.* to 'db_user_1'@'localhost' identified by '123456';
flush privileges;
revoke insert on test.* from 'db_user_1'@'localhost';
参考:
在此非常感谢以下技术博文
来源:简书 战神悟空-Mysql 基础