MySQL安装
MySQL服务命令启动与关闭:
net start mysql
net stop mysql
登录MySQL:
mysql -uroot -proot
mysql -h127.0.0.1 -uroot -proot
卸载:
MySQL安装目录:
bin
可执行文件data
日志、数据my.ini
配置文件MySQL数据目录C:ProgramData\MySQL\MySQLServer 5\data
:
安装SQLyog图形客户端:
SQL是标准,各个数据库语言都有各自的定义。
SQL语句分类:
MySQL语法:
--空格
单行注释,/**/
多行注释,#
mysql特有注释定义数据库: 查询、创建、修改、删除
查询数据库
创建数据库
修改数据库
删除数据库
使用数据库
查看正在使用的数据库
定义表:
创建表
create table table_name(字段名1 类型, 字段名2 类型);
create table 新表名 like 旧表名
查看表
删除表:
drop table table_name
;drop table if exists table_name
;修改表:
alter table 表明 add 列名 类型;
alter table 表明 modify 列名 新的类型;
alter table 表明 change 列名 新的列名 类型;
alter table 表明 drop 列名;
rename table 表明 to 新表名;
alter table 表明 character set 字符集;
添加
insert into student values (1, ‘张三‘, 18, null, null);
insert into student(id, name) values (2, ‘李四‘)
insert into student select * from student2;
insert into 表1(列1,列2,) select 列1,列2 from 表2;
修改
update student set score=100 at age=18;
删除
delete from student where age=100;
条件删除delete from student;
清空表(一条一条删除,速度慢)truncate table student;
清空表(删除表并创建一个一模一样的空表)简单查询
select distinct 列名 from 表名;
显示不重复的数据select score+10 from student;
将结果运算> < <= >= = <> !=
后面两个都是不等于where score between 80 and 100;
where age in(18, 19, 20);
排序查询
select * from db1 order by score asc;
升序排列select * from db1 order by score desc;
降序排列select * from db1 order by score asc, sex desc;
第二排序条件聚合查询:max, min, avg, count, sum
select ifnull(id, 0) from student;
如果为null,使用0代替select count(ifnull(id,0)) from student;
统计数量,不遗漏null分组查询
select sex, avg(score) from student group by sex;
select sex, avg(score) from student group by sex having avg(score)>60;
分组结果筛选分页查询
select * from student limit offset,length;
从第offset行开始的length条数据中查询select * from student limit 10, 5;
从10-15行的数据中查询primary key 主键
alter table stu drop primary key;
删除主键alter table stu add primary key(id);
添加主键create table stu(id int primary key AUTO_INCREMENT);
自增长主键create table stu(...) AUTO_INCREMENT=1000;
从1000开始自增长主键unique 唯一
create table stu(name varchar(20) unique) ;
不能重复,但可以为NULLnot null 非空
create table stu(age not null);
不能为空foreign key 外键
create table employee(
id int primary key auto_increment,
dep_id int,
/*添加dep_id的外键, 外键名字为emp_fk*/
constraint emp_fk foreign key(dep_id) references department(id)
);
alter table employee drop foregin key emp_fk;
删除外键级联操作:在修改、删除主表主键时,需要更新或删除 副表的外键
alter table employee add constraint emp_fk foreign key (dep_id) references department(id) on update cascade on delete cascade;
添加修改、删除级联操作数据设计规则,称为范式,有六种范式,满足第三范式就可以了。
命令行:
mysqldump -uroot -proot 数据库名 > d://test.sql
mysql -uroot -proot
create database db1;
use db1;
source d://test.sql;
图形工具SQLyog
多表查询
笛卡尔积,select * from emp,dept;
导致结果太多,所以要联合查询
隐式内连接:
不适用JOIN关键字,使用WHERE指定
SELECT * FROM emp, dept WHERE emp.`dept_id`=dept.`id`;
显示内连接:
使用 JOIN ... ON 语句
SELECT * FROM emp JOIN dept ON emp.`dept_id`=dept.`id`;
左连接
使用 LEFT JOIN ... ON
SELECT * FROM emp LEFT JOIN dept ON emp.`dept_id`=dept.`id`;
右连接
SELECT * FROM emp RIGHT JOIN dept ON emp.`dept_id`=dept.`id`;
子查询(嵌套查询)
/* 一个结果 */
select * from emp where salary = (select max(salary) from emp);
/* 一列结果 */
select * from dept where id in (select dept_id from emp where salary > 5000);
/* 多行多列 */
select * from (子查询) where 条件;
事务执行是一个整体,必须保证所有SQL语句执行成功。如转账,小明账号-500,对方账号+500。
事务的四大特性:
MySQL中操作事务的方式:
savepoint point_name;
和rollback to point_name;
例,手动提交事务的两种情况:(在win命令窗口)
/* 成功 */
start transaction;
update db1 set money=money-500 where name=‘小明’;
update db1 set money=money+500 where name=‘老王‘;
commit;
/* 失败 */
start transaction;
update db1 set money=money-500 where name=‘小明’;
update db1 set money=money+500 where name=‘老王‘;
rollback;
并发访问数据库,可能存在的问题:
为了解决并发问题,MySQL事务有四种隔离级别,级别越高,安全性越高,性能越差:
设置事务隔离级别:
select @@tx_isolation;
set global transaction isolation level read committed;
创建用户
// 创建用户,只能本地登录
create user ‘user1‘@‘localhost‘ identified by ‘123‘;
// 创建用户,可以远程登录
create user ‘user2‘@‘%‘ identified by ‘123‘;
查看用户权限:
show grants for ‘user1‘@‘localhost‘;
新创建用户没有权限,需要授权:
grant 权限1,权限2.. on 数据库.表名 to ‘用户名‘@‘主机名‘;
grant create,insert,update,delete on db1.* to ‘user1‘@‘localhost‘;
grant all on *.* to ‘user2‘@‘%‘;
给用户2分配所有权限撤销授权:
revoke 权限1,权限2.. on 数据库.表名 from ‘用户‘@‘主机‘;
revoke all on db1.* from ‘user1‘@‘localhost‘;
撤销用户1在db1上的所有权限删除用户:drop user ‘user1‘@‘localhost‘;
修改管理员密码:mysqladmin -uroot -p password 123456
在未登录mysql情况下修改的密码
修改普通用户密码:set password for ‘user1‘@‘localhost‘=password(‘新棉‘);
原文:https://www.cnblogs.com/mingriyingying/p/13439269.html