mysql5.7 更改root密码:
在之前的版本中,密码字段的字段名是 password,5.7版本改为了 authentication_string
切换到mysql数据库,更新 user 表:
update user set authentication_string = password('root'), password_expired = 'N', password_last_changed = now() where user = 'root';
这样密码就更新成了root 记得重启mysql服务
2018年10月17日
mysql limit 偏移量,每页条数
偏移量 = (当前页数-1)* 每页条数 //页数从1开始
2018年6月20日
A表和B表,A表的id被绑定在B表中的aid字段,现在想查询A表中 没有被绑定到B表里的数据(简单的说B表里缺少的A表中的值)。
select A.* from A left join B on A.id = B.aid where b.aid is null;
2018-5-11
本地blog数据库赋予限并且新建管理员pendant:
grant all privileges on blog.* to 'pendant'@'localhost' identified by '123123' with grant option;
允许任意ip使用管理员pendant连接数据库,此时pendant等同于root
grant all privileges on *.* to 'pendant'@'%' identified by 'passwd' with grant option;
命令行导入数据表sql:
1.进入数据库安装目录下的bin文件夹然后把要导入的test.sql文件放进去 ;
2.cmd命令行进入同样的文件夹输入:mysql -u root -p --default-character-set=utf8 数据库名<test.sql
命令行导出数据库sql:
1.进入cmd 进入mysql安装的bin文件夹 ;
2.mysqldump -u root -p 数据库名>导出文件名.sql
(2018-2-24)
测试数据库是Mysql,在Navicat 里面直接操作数据。
测试表:a,b
垃圾编辑器,插入代码,选择sql,写了两个小时,最后发表的时候发现只有前面一小半的内容,insert以后的都没有,草稿箱的内容也没了,还要重写。
初级:
# 基本查询 select
select * from a;
# select distinct 返回唯一不同的值
select distinct area,id from b #返回area唯一的值,取值取第一次出现的
# where 子句 用于过滤记录
select * from b where id < 50
# AND 或 OR 运算符用于基于一个以上的条件对记录进行过滤
select * from b where id<50 or id>15000 #第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录
select * from b where id>50 and gid =5 #第一个条件和第二个条件都成立,则 AND 运算符显示一条记录
# order by 用于对结果集进行排序
select * from b where id<65 order by id desc # 根据 id 对查询结果集进行倒序排序(由大到小)
# insert into 用于向表中插入新记录
insert into a values(null,'4','pandent',100,unix_timestamp(now()),1) #第一种写法,如果不指定列,则需要把每一列的值都写上,按列的顺序,这里的顺序是指设计表的时候,栏目(列)的顺序,不是打开表看到的栏目(列)顺序,打开表看到的栏目顺序是可以更改的,更改之后,插入还是按设计表的时候的栏目(列)顺序
这是打开表看到的列的顺序,grade在后。
这是设计表时栏目的添加顺序,第一种写法,应该根据这个顺序来插入值。grade在signuptime之前。
insert into a(game_id,point,signuptime,nickname) values('4',100,unix_timestamp(now()),'pandent') #第二种写法,指定列,按先后顺序增加对应的值
# update 更新表中已存在的数据记录
update a set nickname = 'pandent' where id = 23313 # 如果不加where 则整张表更新,即所有的nickname都变为pandent
#delete 删除表中的记录
delete from a where id> 23313 # 如果省略了where 条件,则整张表会被清空
# select ...limit.... 规定要返回的数据条数
select id from a limit 2 # 返回前两条数据,limit 放在最后 where,order by 都在limit前面
#操作符
#like 操作符 用于在where字句中搜索列中的指定模式
select * from a where nickname like 'pande%' # like 一般搭配通配符 查询nickname 前几位是pande的信息
#通配符
1. % 替代0个或多个字符
2. _ 替代1个字符
3. [charlist] 匹配charlist字符列中任何一个字符 比如[abcd] 匹配 abcd中的任何一个
select id from a where nickname like 'pand%' #查询nickname 前面是pand开头的信息id
select * from a where nickname like 'a_d%' #查询 nickname 中第一个字符是a,第三个字符是b的的信息id
# in 用于在where 子句中规定多个值
select nickname from a where id in (8503,23313,8512)
# between 用于选取介于两个值之间的数据范围内的值,包含边界,可以是文本,数值,日期
select id from a where id between 8503 and 8600
#join 连接 用于把两个或多个表的行结合起来
1. inner join
select a.nickname,b.area from a inner join b on a.id=b.wechat_id where a.id =23313
# inner join 是两表取交集,即查询出来的结果集中两个表同时都包含该条数据的信息,最终才会显示结果集。a表有pandent的信息,但是b表没有pandent的信息 因为最终结果是空
2. left join
select a.nickname,b.area from a left join b on a.id=b.wechat_id where a.id =23313
# left join 是左表取全集,即查询出来的结果集中左表包含该条数据的信息,即可显示。左表有就有,左表没有就没有。a表有pandent的信息,但是b表没有pandent的信息 ,结果还是显示出来了pandent,只不过area显示的是空。
3. right join
select a.nickname,b.area from a right join b on a.id=b.wechat_id where b.id =15071
# right join 是右表取全集,即查询出来的结果集中右表包含该条数据的信息,即可显示。右表有就有,右表没有就没有。b表包含id=15071的信息,结果显示出来了area,只不过nickname显示的是空。
# union 合并两个或多个select语句结果
1.UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
2.默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
3.UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
select area from b where id<=55 union all select area from b where id BETWEEN 56 and 66 UNION ALL select area from b where id in (67,68,69)
#结果为 1-69所有的area信息,包含重复。
# insert into NewTableName select * from OldTableName 从一个表复制数据,然后把数据插入到一个已存在的表中。旧表中任何已存在的行都不会受影响。
insert into d select id,area from b # 注意 这里从b表查询出来两个字段的消息,那么d表应该有两个字段,不多不少,但是字段名称可以不一样,如果从b表查询出来三个字段,那么d表必须有三个字段。
# create table TableName select * from NewTable 新建一个表并复制所查询的数据到新表
create table f select id,area from b # 从b表中查询了多少个字段,那么新表f中就有多少个字段,但是新表f不包含主键等设置,该命令常用语表的备份