MySQL安装
MySQL服务命令启动与关闭:
net start mysqlnet stop mysql登录MySQL:
mysql -uroot -prootmysql -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.sqlmysql -uroot -prootcreate 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