MySQL 笔记
Posted tomiaa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 笔记相关的知识,希望对你有一定的参考价值。
1、启动/关闭mysql服务
net start mysql // 启动服务
net stop mysql //停止服务
2、链接MySQL
mysql -h主机地址 -u用户名 -p用户密码
mysql -h localhost -u root -p
// -h 链接host的IP地址 默认localhost本机
// -u 用户名 -user root
// -p 密码 -password 密码
[注意] -h和主机地址、-u用户名 中间可以不加空格,-p 后面必须要加。-p后面不输入密码 第二行可以输入***遮盖的密码
exit 退出MySQL
3、修改密码
mysqladmin -u用户名 -p旧密码 password 新密码
[注意] -u用户名、 -p旧密码 中间不能有空格 例如-uroot -proot 否则会修改不成功
[注意]如果刚开始安装没有设置密码 -p旧密码一项可以省略。
update mysql.user set authentication_string=\'新密码\' where user=\'root\';
4、忘记密码
密码存放在mysql库,user表中。旧版密码的字段是password
进入安装目录的 bin下启动cmd
任务管理器结束mysqld.exe进程
mysqld --skip-grant-tables 回车
输入 mysql 回车直接进入
安装的MySQL的目录下,找my.ini文件;
在[mysqld]后添加一行skip-grant-tables
重启MySQL服务器。
登录mysql,键入mysql –uroot –p;直接回车(Enter)无需密码
update mysql.user set authentication_string=\'新密码\' where user=\'root\';
5、用户管理
增加新用户
grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"
grant select,insert,update,delete on *.* to user1@localhost Identified by "password1";
[查询、插入、修改、删除] [所有数据库] 用户名user@本机 [密码]
[注意]设置所有地方都可以登录 localhost替换成%
[注意]设置没有密码 把 password1
6、操作库
show databases; // 显示库列表
use 数据库名; //打开/选择库
create database 库名字;// 创建库
drop database 库名; // 删除库 不存在会报错
drop database if exists 库名; // 删除库 加if exists 判断,不存在也不会产生错误
/* *错误信息
*ERROR 1008 (HY000): Can\'t drop database \'drop_database\'; database doesn\'t exist
//发生错误,不能删除\'drop_database\'数据库,该数据库不存在。
Query OK, 0 rows affected, 1 warning (0.00 sec)
//产生一个警告说明此数据库不存在
*/
/* 创建库并分配给用户,依次执行3步: */
1、create database 库名;
2、grant select,inseter,update,delete,create,drop,alter, on 数据库名.* to 数据库名@localhost identified by \'密码\';
3、set password for \'数据库名\'@\'localhost\' = old_password(\'密码\');
7、操作表
show tables;//显示表
drop table 表名;//删除表
desc 表名; //显示表结构 [表的字段及类型]
create table `表名`(字段名:类型,[字段名n:类型n...]); //创建表
[注意]`表名` 表名/字段名可能有关键字,加上``反引号变成无意义的字符串
/* 例子 */
create table mydemo(
id int(4) [not null] [primary key] [auto_increment] [default "默认"],
// 字段 整形(长度) [不能为空] [设置为主键] [自动递增] [默认值]
degree double(16,2)
)[character set utf8];
// 修改表名
rename table 原表名 to 新表名;
// add 添加字段
alter table 表名 add 字段名 数据类型 其他(创建表的可选项一样);
// 修改字段
alter tabler 表名 change 旧字段 新字段 [类型、其他];
// 删除字段
alter table 表名 drop 字段名;
// index 添加索引
alter table 表名 add index 索引名 (字段名,[字段名n...]);
// 加唯一限制条件的索引
alter table 表名 add unique 索引名 (字段名);
// 加主关键字的索引 把某个字段加上主键
alter table 表名 add primary key (字段名);
// drop 删除索引
alter table 表名 drop index 索引名;
8、操作表中数据
// 插入一行数据
insert into 表名(字段名,[字段名n]) values(\'对应字段名的值\',[\'对应字段名n的值\']);
// 当添加一行数据时全部字段都要填的时候, (字段名,[字段名n]) 可以简写
insert into 表名 values(\'值\',\'值2\');// 值的顺序不能错
[注意] insert一次只能插入一行数据
/* 单表查询 */
select */字段名/函数/字符串 from 表名 [[where条件] [group by 字段名] [order by 字段名] [asc/desclimit matchMedia] [m,n] [having 条件] ];
// 删除行数据
delete from 表名 [where 表达式];
// 修改行数据
update 表名 set 字段=\'值\',[字段n=\'值\'] [where 表达式];
// [注意]如果没有where语句,将更新所有的行
9、单表查询
select */字段名/函数/字符串 [as 别名] from 表名 [not 排除][ where 条件 group by 字段名 order by 字段名 asc/desc limit m,n havimg 条件 ]
select * 所有字段
select name 查询名字为name的字段
select \'每一行都显示\' 每一行都显示字符串的内容
select count(字段) 统计字段的行数/个数
select sum(字段) 求和
select max(字段) 最大值
select min(字段) 最小值
select avg(字段) 平均值
select distinct 字段 //去重, 查询后字段重复的被去除
select concat(\'字符串\', 字段名) 拼接成新的字符串
where age=\'20\' age为20的
// 或
where sx=\'a\' || sx=\'b\' sx等于\'b\' 或 sx等于\'b\'
where sx=\'a\' or sx=\'b\' sx等于\'b\' 或 sx等于\'b\'
where sx in(\'a\',\'b\') sx等于\'b\' 或 sx等于\'b\'
// 且
where cj>=60 and cj<=80 cj大于等于60,小于等于80的
where cj>=60 && cj<=80 cj大于等于60,小于等于80的
// 区间
where cj between 60 and 80 cj在60至80之间 包含60,80
// 不等于
where sx<>\'计算机系\' 不是计算机系的
where sx!=\'计算机系\' 不是计算机系的
// is 查询 null
where sx is null 查询为null的
where sx is not null 查询不为null的
// 模糊查询
% 表示0或n个字符
_ 表示一个字符
where xm like \'%王%\' xm包含王字的
where xm like \'王%\' xm王开头的
where xm like \'王_\' xm王开头后面一个字的
分组
group by 字段
select count(sex) from 表名 group by sex; //统计sex 男女多少人
排序
order by 字段 asc/desc
asc 升序 desc 降序 默认asc
动态排序
order by age asc,cj desc ;// age 升序,第二cj 降序
随机排序
order by rand()
对结果集进行筛选,查询后的结果
having 条件
显示条数/游标
limit m,n
m 代表游标,一列的字段为0,第一行为1,第二行为2
n 为显示的行数
只有一个条件时,就表示显示几列。默认m是0开始
分页的公式 (页数-1) * 每页显示的行数
10、连表查询
全连表
select * from 表名1 inner join 表名2 on 条件 [inner join 表名3 on 条件] [where 条件]
连接两个表查询, 条件可以设置相等值关联 如 表1.id=表2.id 只显示满足条件的结果
select * from xsb inner json cjb on xsb.id=cjb.id;
可以给表名起别名 as
select * from xsb as a inner json cjb as b on a.id=b.id;
左连表
select * from 表名1 left join 表名2 on 条件 [left join 表名3 on 条件] [where 条件]
第一个表全部显示,后面的表满足on条件的会出现在结果集上。不满足的以null显示
以上是关于MySQL 笔记的主要内容,如果未能解决你的问题,请参考以下文章