Mysql数据库

数据库相关概念

  • 数据库服务器:运行数据管理软件的计算机

  • 数据库:顾名思义数据仓库,是一个文件夹、存储多个文件(数据表)

  • 数据表:对应一个文件,存储在数据库下

  • 数据:对应文件中的每一行,描述事物特征的符号

  • 数据库管理软件

    • 关系型:需要有表结构(mysql,sqlserver,db2,oracle)

    • 非关系型:key-value结构(redis,mongodb)

用户相关

win

  • 安装为系统服务:mysqld --install

  • 改密码:mysqladmin -uroot -proot password "root"

  • 登录:mysql -uroot -proot

  • 启动:net start mysql56

  • 停止:net stop mysql56

  • 破解密码:mysqld --skip-grant-tables

  • 更新密码:update mysql.user set password=password("密码") where user="root" and host="localhost";

  • 刷新:flush privileges;

  • 杀:taskkill /F /PID ....

  • 查看登陆用户:select user();

linux

  • 破解:mysql_safe --skip-grant-tables

统一字符编码

查看字符编码

统一字符编码

  1. # 修改配置文件
  2. [mysqld]
  3. default-character-set=utf8
  4. [client]
  5. default-character-set=utf8
  6. [mysql]
  7. default-character-set=utf8
  8. #mysql5.5以上:修改方式有所改动
  9. [mysqld]
  10. character-set-server=utf8
  11. collation-server=utf8_general_ci
  12. [client]
  13. default-character-set=utf8
  14. [mysql]
  15. default-character-set=utf8
  16. # 这样在控制台输入mysql可以直接登录
  17. user='root'
  18. password='root'

初识sql语句

操作文件夹(库)

  • 切换文件夹:use db1;

  • 增加:create database db1 charset utf8;

  • 查看:

    • 建库语句:show create database db1;

    • 所有数据库:show databases;

    • 查看当前所在数据库:select database();

  • 修改:

    • 修改字符编码:alter database db1 charset gbk;
  • 删除:drop database db1;

操作文件(表)

  • 增:create table t1(id int,name char) engine=innodb;

  • 删:

    • 删除:drop table t1;

    • 清空表结构:truncate table t1;

  • 改:

    • 修改表字段类型:alter table t1 modify name char(6);

    • 修改表字段名称:alter table t1 change name Name varchar(8);

  • 查:

    • 查看建表语句:show create table t1;

    • 查看所有表:show tables;

    • 查看表结构:desc t1;

操作文件内容(记录)

  • 增:insert into t1(id,name) values(1,'egon'),(2,'egon'),(3,'alex');

  • 删:

    • delete from t1; 自增长并没有改变,不是1,所以尽量与where搭配。

    • delete from t1 where id=1;

  • 改:

    • update t1 set name='sb';

    • update t1 set name='alex' where id=2;

  • 查:

    • select * from t1;

    • select id,name from t1;

sql语言类型

  • DDL语句:数据库定义语言,create drop alter

  • DML语句:数据库操作语言,insert update delete select

  • DCL语句:数据库控制语言,grant revoke

存储引擎

什么是存储引擎

现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处理表格用excel,处理图片用png等

数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎

存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)

查看存储引擎

show engines;

表操作

创建

  1. create table 表名(
  2. 字段名1 类型[(宽度) 约束条件],
  3. 字段名2 类型[(宽度) 约束条件],
  4. 字段名3 类型[(宽度) 约束条件]
  5. );

注意:

  1. 在同一张表中,字段名是不能相同
  2. 宽度和约束条件可选
  3. 字段名和类型是必须的

查看表结构

  • 简单:desc table1
  • 详细:show create table table1

修改表结构

  • 修改表名: ALTER TABLE 表名 RENAME 新表名;

  • 增加字段

      1. ALTER TABLE 表名
      2. ADD 字段名 数据类型 [完整性约束条件…],
      3. ADD 字段名 数据类型 [完整性约束条件…];
      1. ALTER TABLE 表名
      2. ADD 字段名 数据类型 [完整性约束条件…] FIRST;
      1. ALTER TABLE 表名
      2. ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名;
  • 删除字段:ALTER TABLE 表名 DROP 字段名;

  • 修改字段

    1. ALTER TABLE 表名
    2. MODIFY 字段名 数据类型 [完整性约束条件…];
    3. ALTER TABLE 表名
    4. CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
    5. ALTER TABLE 表名
    6. CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

表的复制

  • 复制表结构 + 记录:create tale t1 select host,user from mysql.user;
  • 复制表结构:
    1. -- 条件不成立,空记录
    2. create table t2 select host,user from mysql.user where 1>5;
    3. create table t3 like mysql.user;

删除表

drop table t3;

数据类型

数字类型

  • int 4字节
  • float(m,d):
    • m是数字总个数 最大255
    • d是小数点后的个数 最大30
  • decimal(m,d):
    • m是数字总个数 最大65
    • d是小数点后的个数 最大30
    • 精度最高

日期类型

  1. create table student(
  2. id int,
  3. name char(6),
  4. born_year year,
  5. birth_date date,
  6. class_time time,
  7. reg_time datetime
  8. );
  9. insert into student values(1,'egon',now(),now(),now(),now());
  10. insert into student values(2,'alex','1997','1996-10-19','12:12:12','2018-09-13 12:12:12');

datetime与timestamp的区别

  1. DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年。
  2. 8字节 4字节
  3. 不受时区影响 受时期影响

'''

字符串类型

'''

  • char定长(0-255):简单粗暴,浪费空间(以空格来填充),存取速度快

  • varchar变长(0-65535):省内存,但是查询速度慢

'''

枚举和集合类型

  1. create table consumer(
  2. id int,
  3. name char(4),
  4. sex enum('male','female','other'),
  5. level enum('vip1','vip2','svip'),
  6. hobbies set('game','music','run')
  7. );
  8. insert into consumer values(1,'egon','male','svip','music,game');
  9. -- 不在范围内就为空
  10. insert into consumer values(1,'egon','xx','svip','music,game');
  • enum:单选
  • set:多选

完整性约束

not null与default

  1. create table t1(
  2. id int not null ,
  3. name char(4),
  4. sex enum('male','female') not null default 'male'
  5. );
  6. insert into t1(id,name) values('1','alex');

不为空和默认值

unique

唯一约束

  • 单列唯一
    1. create table dpt(
    2. id int,
    3. name char(10) unique
    4. );
    5. insert into dpt values(1,"IT");
    6. insert into dpt values(2,"IT");
    7. -- 方式一
    8. create table dpt(
    9. id int unique,
    10. name char(10) unique
    11. );
    12. -- 方式二
    13. create table dpt(
    14. id int,
    15. name char(10),
    16. unique(id),
    17. unique(name)
    18. );
  • 联合唯一
    1. --ip和端口联合唯一
    2. create table services(
    3. id int ,
    4. ip char(15),
    5. port int,
    6. unique(ip,port),
    7. unique(id)
    8. );
    9. insert into services values
    10. (1,'127.0.0.1',80),
    11. (2,'127.0.0.1',81),
    12. (3,'118.25.126.94',80);

primary_key

主键

  • 不为空、且唯一
  • 必须设定一个主键
  • 对于innodb存储引擎来说: 一张表只能有一个主键
  • 加快了查询速度

单列主键

  1. create table t1(
  2. id int primary key,
  3. name char(16),
  4. );

复合主键

  1. create table services1(
  2. ip char(15),
  3. port int,
  4. primary key(ip,port)
  5. );

auto_increment

自增

  1. create table t3(
  2. id int primary key auto_increment,
  3. name char(4)
  4. );
  5. insert into t3(name) values
  6. ('egon'),
  7. ('alex'),
  8. ('wpq');
  9. insert into t3(id,name) values('5','jw')

查看:show variables like 'auto_inc%';

步长:auto_increment_increment

起始偏移量:auto_increment_offset

设置步长:

  • 会话级别:set session auto_increment_increment=3;
  • 全局级别:set gloable auto_increment_increment=3;

设置偏移量:

  • set gloable auto_increment_offset=3;

注意

  • 起始偏移量<=步长
  • delete from student;:清空表,但是自增按照删除前的位置继续自增
  • truncate table t1;:清空表,且自增也初始化。

foreign_key

用来建立表与表之间的关系

  1. -- 先创建dep
  2. create table dep(
  3. id int primary key auto_increment,
  4. name char(16),
  5. comment char(50)
  6. );
  7. -- 插入数据
  8. insert into dep(name,comment) values('CEO','一群吹牛的部门'),
  9. ('IT','技术一般的部门'),
  10. ('财务','花钱特别多的部门'),
  11. ('销售','不会卖东西的部门');
  12. -- 再创建关联的emp
  13. create table emp(
  14. id int primary key,
  15. name char(10),
  16. sex enum('male','female'),
  17. dep_id int,
  18. constraint fk_dep foreign key(dep_id) references dep(id)
  19. on delete cascade
  20. on update cascade
  21. )
  22. -- 插入数据
  23. insert into emp(name,sex,dep_id) values
  24. ('alex','male',1),
  25. ('egon','male',2),
  26. ('yuanhao','female',3),
  27. ('wupeiqi','male',4);

数据操作

插入

  1. 1. 插入完整数据(顺序插入)
  2. 语法一:
  3. INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n);
  4. 语法二:
  5. INSERT INTO 表名 VALUES (值1,值2,值3…值n);
  6. 2. 指定字段插入数据
  7. 语法:
  8. INSERT INTO 表名(字段1,字段2,字段3…) VALUES (值1,值2,值3…);
  9. 3. 插入多条记录
  10. 语法:
  11. INSERT INTO 表名 VALUES
  12. (值1,值2,值3…值n),
  13. (值1,值2,值3…值n),
  14. (值1,值2,值3…值n);
  15. 4. 插入查询结果
  16. 语法:
  17. INSERT INTO 表名(字段1,字段2,字段3…字段n)
  18. SELECT (字段1,字段2,字段3…字段n) FROM 2
  19. WHERE …;

更新

  1. 语法:
  2. UPDATE 表名 SET
  3. 字段1=值1,
  4. 字段2=值2,
  5. WHERE CONDITION;
  6. 示例:
  7. UPDATE mysql.user SET password=password(‘123’)
  8. where user=’root and host=’localhost’;

删除

  1. 语法:
  2. DELETE FROM 表名
  3. WHERE CONITION;
  4. 示例:
  5. DELETE FROM mysql.user
  6. WHERE password=’’;

查询

  • 单表查询
  1. --单表查询
  2. -- select distanct 字段1,字段2,字段3 from 库.表 where 条件 group by 分组条件 having 过滤 order by 排序字段 limit n;
  3. -- 优先级 where group distinct order by
  4. -- 创建表
  5. create table emp(
  6. id int primary key auto_increment,
  7. name varchar(20) not null,
  8. sex enum('male','female') not null default 'male',
  9. age int not null default 21,
  10. hire_date date not null,
  11. post varchar(50),
  12. post_comment varchar(100),
  13. salary double(15,2),
  14. office int,
  15. depart_id int
  16. );
  17. -- 插入记录
  18. -- 三个部门:教学,销售,运营
  19. insert into emp(name,sex,age,hire_date,post,salary,office,depart_id) values
  20. -- 以下是教学部
  21. ('egon','male',18,'20170301','老男孩驻沙河办事处外交大使',7300.33,401,1),
  22. ('alex','male',78,'20150302','teacher',1000000.31,401,1),
  23. ('wupeiqi','male',81,'20130305','teacher',8300,401,1),
  24. ('yuanhao','male',73,'20140701','teacher',3500,401,1),
  25. ('liwenzhou','male',28,'20121101','teacher',2100,401,1),
  26. ('jingliyang','female',18,'20110211','teacher',9000,401,1),
  27. ('jinxin','male',18,'19000301','teacher',30000,401,1),
  28. ('成龙','male',48,'20101111','teacher',10000,401,1),
  29. -- 以下是销售部门
  30. ('歪歪','female',48,'20150311','sale',3000.13,402,2),
  31. ('丫丫','female',38,'20101101','sale',2000.35,402,2),
  32. ('丁丁','female',18,'20110312','sale',1000.37,402,2),
  33. ('星星','female',18,'20160513','sale',3000.29,402,2),
  34. ('格格','female',28,'20170127','sale',4000.33,402,2),
  35. -- 以下是运营部门
  36. ('张野','male',28,'20160311','operation',10000.13,403,3),
  37. ('程咬金','male',18,'19970312','operation',20000,403,3),
  38. ('程咬银','female',18,'20130311','operation',19000,403,3),
  39. ('程咬铜','male',18,'20150411','operation',18000,403,3),
  40. ('程咬铁','female',18,'20140512','operation',17000,403,3);
  41. -- 查询
  42. -- 字段查询
  43. select id,name from emp;
  44. -- 去重
  45. select distinct post from emp;
  46. -- 别名
  47. select name,salary*12 as 年薪 from emp;
  48. -- 字符串拼接
  49. select concat('<姓名:',name ,'>',' <性别:',sex,'>') as info from emp;
  50. -- where条件查询
  51. select id,name,age from emp where id>7;
  52. select name from emp where post='teacher' and salary > 8000;
  53. select name,salary from emp where salary between 20000 and 30000;
  54. select name,salary from emp where salary in (20000,30000);
  55. select name,salary from emp where salary not in (20000,30000);
  56. -- 不能用等于
  57. select name from emp where post_comment is NULL ;
  58. -- 模糊匹配
  59. -- 任意字符
  60. select name from emp where name like "jin%";
  61. -- 一个字符
  62. select name from emp where name like "jin___";
  63. --group by 分组查询
  64. select sex from emp group by sex; -- 只能查分组的字段,以及聚合
  65. select sex,count(sex) from emp group by sex; -- 统计男女性别数目
  66. select post,count(post) from emp group by post;-- 每个职位有多少员工
  67. select post,avg(salary) from emp group by post;
  68. select post,group_concat(name) from emp group by post;-- 每个职位下所有员工的姓名
  69. --having 分组后过滤 可以使用聚合函数过滤
  70. --查询各岗位包含的员工个数小于2的岗位名,岗位内包含的员工名字、个数
  71. select post,group_concat(name),count(post) from emp group by post having count(id)<2;
  72. --查询各岗位平均薪资大于1万的岗位名、平均工资
  73. select post,avg(salary) from emp group by post having avg(salary)>10000;
  74. --查询各岗位平均薪资大于1万且小于2万的岗位名、平均工资
  75. select post,avg(salary) from emp group by post having avg(salary) between 10000 and 20000;
  76. --order by排序
  77. select id,age from emp order by age asc; --年龄从小到大升序
  78. select id,age from emp order by age desc; --年龄从小到大降序
  79. select id,age from emp order by age desc ,id asc; --年龄从小到大降序,id升序
  80. -- limit n分页
  81. select * from emp limit 3;
  82. -- 查询工资最高的那个人的信息
  83. select * from emp order by salary desc limit 1;--第一条
  84. select * from emp limit 0,5; --取五条数据 ,从1开始
  85. -- 注意:并不是那么简单,性能问题
  86. --总结:
  87. -- 语法顺序:
  88. -- 执行上顺序:
  89. --from 表--where条件--group分组--hanving过滤--distinct--order by排序--limit 分页--
  90. -- 正则
  91. select * from emp where name regexp '^jin.*g$';
  92. select * from emp where name regexp '^jin.*(g|n)$';
  • 连表查询
  1. -- 建表
  2. create table dep(
  3. id int,
  4. name varchar(20)
  5. );
  6. create table emp(
  7. id int primary key auto_increment,
  8. name varchar(20),
  9. sex enum('male','female') not null default 'male',
  10. age int,
  11. dep_id int
  12. );
  13. -- 插入数据
  14. insert into dep values
  15. (200,'技术'),
  16. (201,'人力资源'),
  17. (202,'销售'),
  18. (203,'运营');
  19. insert into emp(name,sex,age,dep_id) values
  20. ('egon','male',18,200),
  21. ('alex','female',48,201),
  22. ('wupeiqi','male',38,201),
  23. ('yuanhao','female',28,202),
  24. ('liwenzhou','male',18,200),
  25. ('jingliyang','female',18,204)
  26. ;
  27. --内连接:两个表的共同部分
  28. select * from dep d inner join emp e on e.dep_id=d.id;
  29. --左连接:保留左表,右表没有的以null填充
  30. select * from dep d left join emp e on e.dep_id=d.id;
  31. --右连接:保留右表,左表没有的以null填充
  32. select * from dep d right join emp e on e.dep_id=d.id;
  33. --全连接
  34. select * from dep d left join emp e on e.dep_id=d.id
  35. union
  36. select * from dep d right join emp e on e.dep_id=d.id;
  37. --查询平均年龄大于30岁的员工的部门名
  38. select d.name,avg(age) from emp e inner join dep d on d.id=e.dep_id group by d.name having avg(age)>30;
  39. -- {
  40. -- "server":"0.0.0.0",
  41. -- "port_password":{
  42. -- "8383":"wgx123456",
  43. -- "8384":"jw123456"
  44. -- },
  45. -- "timeout":300,
  46. -- "method":"aes-256-cfb",
  47. -- "fast_open":false
  48. --
  49. -- }

权限管理

视图

  • 虚拟表,是已经编译好的SQL语句,是基于执行SQL语句的结果集的可视化的表
  • 视图的建立和删除只影响视图本身,不影响对应的表。

触发器

触发器(trigger)是提供给程序员和数据分析员来保证数据完整性的一种方法,是一种特殊类型的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发。

类型

  • 事后触发器(表):增删改查自动执行,调用一个或多个
  • 替代触发器(视图):不止应用到表上,不会先执行增删改查,只会执行自己本身的代码。

事务

事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性。

存储过程

存储在服务器,一组tsql语句。通过调用它的名字可以执行其内部的一堆sql

优点

  1. 提高程序的通用性和可移植性

  2. 提高数据库的运行速度

  3. 减轻网络带宽,减少网络流量

  4. 安全性高,可设定只有某些用户才具有对指定存储过程的使用权

索引

加速查询速率

常用索引

  • 普通索引INDEX:加速查找

  • 唯一索引:

    • 主键索引PRIMARY KEY:加速查找+约束(不为空、不能重复)
    • 唯一索引UNIQUE:加速查找+ 约束(可为空,不能重复)
  • 联合索引:

    • PRIMARY KEY(id,name):联合主键索引
    • UNIQUE(id,name):联合唯一索引
    • INDEX(id,name):联合普通索引

001---mysql的更多相关文章

  1. 001.mysql安装(lnmp)

    mysql官方网站:http://dev.mysql.com/downloads/ Linux环境:刚安装的32位的“最小化安装“的CentOS 6.7 mysql版本:本次实验安装的是mysql5. ...

  2. 001.MySQL高可用主从复制简介

    一 简介 1.1 概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布在多个系统之上,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves ...

  3. [异常篇]001.MySQL数据库忘记root密码解决办法[转载]

    MySQL数据库忘记root密码解决办法 1.在运行输入services.msc打开服务窗体,找到MYSQL服务.右键停止将其关闭.如图: 2.在运行输入cmd打开终端. 3.找到MYSQL的安装目录 ...

  4. Django进阶Model篇001 - mysql 数据库的配置

    django 默认支持sqlite.mysql.oracle.postgresql数据库,像db2和sqlserver之类的数据库需要第三方的支持,具体详见: https://docs.djangop ...

  5. [mysql相关集锦] 001 - mysql zip安装/The service already exists/MySQL 服务无法启动

    本随笔参考了其他博客内容,且在验证有效之下才或誊抄或摘录或加上自己经验组合而成. 参考博客: 1,https://www.jianshu.com/p/413d29b67422 2,https://bl ...

  6. [批处理教程之MySQL]001.MySQL 常用命令大全

    连接MySQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MySQL 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p ...

  7. mysql实例 保存查询结果到变量

    本文介绍下,一个mysql的例子,将查询到的数据结果保存到一个变量中.有需要的朋友可以参考下. 本代码演示: 将mysql查询结果保存到变量中的方法. 代码: view source print? 0 ...

  8. mysql触发器的例子--插入前更新数据

    本文介绍下,一个mysql触发器的例子,在数据插入前更新相关内容,有需要的朋友参考下. mysql触发器的例子,如下: view source print? 001 mysql> CREATE  ...

  9. Mysql宽字节注入(转)

    尽管现在呼吁所有的程序都使用unicode编码,所有的网站都使用utf-8编码,来一个统一的国际规范.但仍然有很多,包括国内及国外(特别是非英语国家)的一些cms,仍然使用着自己国家的一套编码,比如g ...

  10. MySQL 5.7.18的安装及主从复制(主从同步)

    MySQL 5.7.18的安装与主从复制 IP 计算机名 角色 192.168.1.222 001 master 192.168.1.233 002 slave CentOS 6.9安装mysql5. ...

随机推荐

  1. Python实例---三级菜单的实现[low]

    # version: python3.2.5 # author: 'FTL1012' # time: 2017/12/7 09:16 menu = { '陕西': { '西安': { '未名区': [ ...

  2. 【MyBatis】 MyBatis入门

    1.MyBatis简介 MyBatis是这个框架现在的名字,而此框架最早的名字是IBatis,其名字的含义是“internet”.“abatis”两个单词的组合,是在2002年的时候开始的一个开源项目 ...

  3. Echarts 嵌套饼图实现,内环点击控制外环显示

    Echarts有交互事件,但是如果用其进行图形变更,恐怕就只有重新修改配置了. 如图,我想要实现,内圈的数据控制外圈的图形,当点击内环的某一块时,就可以实现,更改外环的目的. 起初我想能不能直接修改o ...

  4. python选课系统

    程序名称: 选课系统 角色:学校.学员.课程.讲师 要求: 1. 创建北京.上海 2 所学校 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海 ...

  5. python网络爬虫--简单爬取糗事百科

    刚开始学习python爬虫,写了一个简单python程序爬取糗事百科. 具体步骤是这样的:首先查看糗事百科的url:http://www.qiushibaike.com/8hr/page/2/?s=4 ...

  6. weblogic之CVE-2016-3510反序列化分析

    将反序列化的对象封装进了weblogic.corba.utils.MarshalledObject,然后再对MarshalledObject进行序列化,生成payload字节码.由于Marshalle ...

  7. 6、Spring Cloud -熔断器Hystrix

    6.1.什么是Hystrix 在分布式系统中.服务与服务之间的依赖错综复杂,一种不可避免的情况就是某些服务 出现故障,导致依赖于它们的其他服务出现远程调度的线程阻塞.   Hystrix是Netfli ...

  8. SpringBoot实战(六)之使用LDAP验证用户

    关于ubuntu16.04服务器安装配置LDAP参考链接为:https://www.howtoing.com/how-to-install-and-configure-openldap-and-php ...

  9. sqoop2启动client异常

    java环境:  java version "10.0.1" ,启动sqoop-shell端或者是sqoop-client端异常,异常如下: [root@hadoop1 home] ...

  10. 用 S5PV210 学习 Linux (二) 刷机(二)

    1.在 Ubuntu 下 ,进入  dnw-linux-master\src\driver 文件下,make 截图 如下: 2.紧接着 加载该模块到内核(注意:需要root权限),sudo insmo ...