windows服务
初始化
mysqld --initialize-insecure
安装/移除MySQL的windows服务
mysqld --install #安装windows服务 mysqld --remove #移除windows服务
启动/停止windows服务
net start mysql #启动windows服务
net stop mysql #停止windows服务
破解密码
跳过授权表来开启服务器
mysqld --skip-grant-tables
统一字符串编码
配置my.ini文件
[mysqld] # 设置mysql的安装目录 **后面的路径一定是安装sql的目录(自己电脑的)** basedir=C:mysql-5.7.22-winx64mysql-5.7.22-winx64 # 设置mysql数据库的数据的存放目录,必须是data datadir=C:mysql-5.7.22-winx64mysql-5.7.22-winx64data
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES # mysql端口 port=3306 # 字符集 [mysqld] character-set-server=utf8 collation-server=utf8_general_ci [client] default-character-set=utf8 [mysql] default-character-set=utf8 #设置完后使用/s;查看配置结果
注;若是配置完后,mysql的windows服务无法启动的话,解决方法是将配置信息中的两个路径中的""换成"/"
管理员登录
mysql -uroot -p
创建用户
create user 'xxx'@'ip地址' indentified by '密码' #可用%代替全部
授权
grant 权限 grant all priviliges on *.* to 'xxx'@'%'; #授予全部权限 revoke all priviliges on *.* from 'xxx'@'%'; #移除
sql命令
选择用户 select user(); 查看所有的数据库 show databases; 创建数据库 create database 名字; 创建表 create table 名字(id int,name char(10)); 为表添加数据 insert into 表名 (id name) values(1 aaa),(2 bbb);
sql的基本语法
查看所有的表 show tables; 查看表的详细结构 desc 表名; 查看表的内容 select * from 表名; select id,name from 表名; select * from 表名 where id=1;
关系型数据库:mysql db2 oricle sqlite 表中存储 非关系型数据库:monogodb redis key : value 基于model 模型 obj.insert
复制表的结构和数据
create table 表名 select * from 库名.表名;
只复制表结构
create table 表名 select * from 库名.表名 where 1>2; create table 表名 like 库名.表名;
储存引擎
mysql 5.5版本之后默认为innodb存储引擎 另外还有mysiam、memory、blackhone #memory,在重启mysql或者重启机器后,表内数据清空 #blackhole,往表内插入任何数据,都相当于丢入黑洞,表内永远不存记录
数据类型
数字
整型 thinyint int bigint 小数 float 在位数比较短的情况下不精准 double 在位数比较长的情况下不精准 decimal 推荐使用 精准内部原理是以字符串的形式去存
字符串
char(10):浪费空间,存储速度快 varchar:精准,节省空间,存储速度慢 sql优化:创建表时,定长的类型往前放,变长的往后放 比如性别 比如地址或描述信息 >255个字符,超了就把文件路径存放到数据库中。 比如图片,视频等找一个文件服务器,数据库中只存路径或url。
时间类型
语法: YEAR YYYY(1901/2155) DATE YYYY-MM-DD(1000-01-01/9999-12-31) TIME HH:MM:SS('-838:59:59'/'838:59:59') DATETIME YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y) TIMESTAMP YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)
now() sql的内置函数,根据数据类型生成对应的时间格式
枚举类型与集合类型
enum 单选 只能在给定的范围内选一个值,如性别 sex 男male/女female
set 多选 在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2,爱好3...)
create table consumer( -> id int, -> name varchar(50), -> sex enum('male','female','other'), -> level enum('vip1','vip2','vip3','vip4'),#在指定范围内,多选一 -> fav set('play','music','read','study') #在指定范围内,多选多 -> );
整型
默认是signed 有符号的 范围 -128~127 sql中没有boolean类型 使用tinyint(1)来表示boolean值 1 表示true 0 表示false -- int 类型后面的存储是显示宽度而不是存储宽度,其它的数据类型都是存储宽度 所以我们来设计表的时候 int类型的字段不用加显示宽度,默认是总长度的位数+1
函数
now() 根据字段的数据类型获取当前的时间格式
char_length: 获取字符长度
length():获取字节数
sql中默认是有符号的
如果设置无符号unsigned
用0填充 zefofill
约束
not null 与 default
create table tb1(id int not null default 2,name char(20) not null); not null #设置不能为空 default #设置默认值
unique
单列唯一
create table dep(id int not null,name varchar(20) unique); # name不能重复
多列唯一 表示每一列都唯一
create table dep2(id int unique,name varchar(20) unique); # id与name都不能重复
组合唯一 (联合唯一) 只要有一列不同,就可以插入数据
create table dep3( d int, name varchar(20), unique(id,name) );
primary key (索引优化查询)
sql版本中,一张表中只允许有一个主键,通常都是id,cid,nid,sid
AUTO_INCREMENT #标识该字段的值自动增长(整数类型,而且为主键) 主键 primary key
primary key (索引优化)
key 查询优化
一个表中可以:
单列做主键
多列做主键(复合主键)
约束:等价于 not null unique,字段的值不为空且唯一
存储引擎默认是(innodb):对于innodb存储引擎来说,一张表必须有一个主键。
单表查询
where 指定条件 group by 分组 having 过滤(having后面的字段只能是分组之后的字段) distinct 去重 order by 排序(asc升序/desc降序) limit 限制显示条数(第一个参数为开始位置,第二个参数为显示数量)
关键字的执行优先级
from where group by having select distinct order by limit
聚合函数
count(1) 计算总个数 avg() sum() max() min()
多表查询
连接匹配的行 inner join 优先显示左记录表 left join 优先显示右记录表 right join 全外连接 select * from employee left join department on employee.dep_id = department.id union select * from employee right join department on employee.dep_id = department.id