zoukankan      html  css  js  c++  java
  • MySQL

    MySQL安装

    MySQL安装

    1. 下载并运行”mysql-5.5.40-win64.msi“;
    2. 选择安装类型,“Custom”用户自定义;
    3. 修改安装路径,“d:MySQLMySQL Server 5.0”;
    4. Install
    5. 选择“进入MySQL配置向导”,并单击“Finish”;
    6. 选择配置方式,“Detailed Configuration”手动配置;
    7. 选择服务器类型,“Developer Machine”开发者电脑,占用内存少;
    8. 选择数据库用途,“Multifunctional Database”多用途数据库;
    9. 选择网站并发连接数,“Manual Setting”手动设置20个;
    10. 选择启用TCP/IP连接;选择标准模式(不允许有语法错误);
    11. 选择编码格式,“Manual Select”手动选择utf8;
    12. 选择作为windows服务;选择自动加入windows路径;
    13. 设置root用户密码,设成"root";是否远程访问,随意;创建匿名用户,否;
    14. Execute,四个对号,说明安装成功;
    15. 否则卸载重装

    MySQL服务命令启动与关闭:

    1. win命令窗口启动服务:net start mysql
    2. win命令窗口关闭服务:net stop mysql

    登录MySQL:

    1. 在window命令窗口,输入mysql -uroot -proot
    2. 远程连接:mysql -h127.0.0.1 -uroot -proot

    卸载:

    1. 停止MySQL服务;
    2. 卸载MySQL;
    3. 删除安装目录下所有文件;
    4. 删除c盘ProgramDate目录中MySQL目录(把隐藏文件显示出来)

    MySQL安装目录:

    1. bin 可执行文件
    2. data 日志、数据
    3. my.ini 配置文件

    MySQL数据目录C:ProgramDataMySQLMySQLServer 5data:

    • 里面的3个文件夹是自带的数据库

    安装SQLyog图形客户端:

    1. 直接安装就行
    2. 安装完成后:新建(名字随便)->设置主机、用户名、密码、端口(其他不用)->连接
    3. 输入SQL命令,选中一行,执行,OK.

    MySQL语法

    SQL是标准,各个数据库语言都有各自的定义。

    SQL语句分类:

    1. DDL数据定义语言:库、表的增删改查
    2. DML数据操纵语言:字段的 增删改
    3. DQL数据查询语言:查询表
    4. DCL数据控制语言:用户权限设置 GRANT/REVOKE

    MySQL语法:

    1. 每条语句分好结尾
    2. 不区分大小写
    3. 三种注释:--空格单行注释,/**/多行注释,#mysql特有注释

    DDL语句

    定义数据库: 查询、创建、修改、删除

    查询数据库

    1. show databases; 所有
    2. show create database test; 查询某个数据库定义信息

    创建数据库

    1. create database db1;
    2. create database if not exists db2;
    3. create database db3 default character set gbk; 设置编码

    修改数据库

    1. alter database db3 character set utf8;

    删除数据库

    1. drop database db2;

    使用数据库

    • use db1;

    查看正在使用的数据库

    • select database();

    定义表:

    创建表

    • create table table_name(字段名1 类型, 字段名2 类型);
      • 字段有:int/double/varchar/date/等
    • create table 新表名 like 旧表名

    查看表

    • show tables; 所有
    • desc table_name; 查看表结构
    • show create table table_name; 查看创建表的SQL语句

    删除表:

    • 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 字符集;

    DML语句

    添加

    • 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;

    修改

    1. update student set score=100 at age=18;

    删除

    1. delete from student where age=100; 条件删除
    2. delete from student; 清空表(一条一条删除,速度慢)
    3. truncate table student; 清空表(删除表并创建一个一模一样的空表)

    DQL语句

    简单查询

    1. select distinct 列名 from 表名; 显示不重复的数据
    2. select score+10 from student; 将结果运算
    3. where语句中的运算符
      • > < <= >= = <> != 后面两个都是不等于
      • where score between 80 and 100;
      • where age in(18, 19, 20);
      • like '张%' 模糊查询%表示任意多个字符,_表示一个字符
      • is null
      • and or not 逻辑运算符

    排序查询

    1. select * from db1 order by score asc; 升序排列
    2. select * from db1 order by score desc; 降序排列
    3. select * from db1 order by score asc, sex desc; 第二排序条件

    聚合查询:max, min, avg, count, sum

    1. select ifnull(id, 0) from student; 如果为null,使用0代替
    2. select count(ifnull(id,0)) from student; 统计数量,不遗漏null

    分组查询

    1. select sex, avg(score) from student group by sex;
    2. 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行的数据中查询

    约束(主键/非空)

    1. 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开始自增长主键
    2. unique 唯一

      • create table stu(name varchar(20) unique) ; 不能重复,但可以为NULL
    3. not null 非空

      • create table stu(age not null); 不能为空
    4. 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 add constraint...;` 和上面一样
      • alter table employee drop foregin key emp_fk; 删除外键
    5. 级联操作:在修改、删除主表主键时,需要更新或删除 副表的外键

      • alter table employee add constraint emp_fk foreign key (dep_id) references department(id) on update cascade on delete cascade; 添加修改、删除级联操作

    MySQL高级

    范式

    数据设计规则,称为范式,有六种范式,满足第三范式就可以了。

    1. 1NF:每一列就是一列 ,不能拆分成两列 (原子性)
    2. 2NF:每一列都完全依赖于主键(不产生局部依赖)
    3. 3NF:任何非主列不得传递依赖于主键。(不产生传递依赖)

    备份和还原

    命令行:

    1. 备份:mysqldump -uroot -proot 数据库名 > d://test.sql
    2. 还原:
      1. 登录数据库 mysql -uroot -proot
      2. 创建数据库create database db1;
      3. 使用数据库use db1;
      4. 执行文件:source d://test.sql;

    图形工具SQLyog

    1. 备份:数据库右键->备份/导出->转存到SQL->导出
    2. 还原:root右键->执行脚本->选择文件

    多表查询

    多表查询

    1. 内连接:隐式内连接、显示内连接
    2. 外连接:左连接、右连接

    笛卡尔积,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。

    事务的四大特性:

    1. 原子性:整体,要么成功,要么失败
    2. 一致性:数据库在事务执行前后一致
    3. 隔离性:事务之间互不影响
    4. 持久性:一旦执行成功,数据库永久保存。

    MySQL中操作事务的方式:

    1. 手动提交事务
      • 成功:开启事务-》执行SQL语句-》成功提交事务
      • 失败:开启事务-》执行SQL语句-》事务的回滚
    2. 自动提交事务:每条SQL语句都是一个事务
    3. 设置回滚点 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;
    

    并发访问数据库,可能存在的问题:

    1. 脏读:一个事务读取另一个事务尚未提交的数据
    2. 不可重复读:一个事务两次读取的内容不一致(update导致)
    3. 幻读:一个事务两次读取的数量不一致(insert/delete导致)

    为了解决并发问题,MySQL事务有四种隔离级别,级别越高,安全性越高,性能越差:

    1. read uncommitted:默认
    2. read committed:避免脏读
    3. repeatable read: 避免脏读、不可重复读
    4. serializable: 串行化,都可以避免

    设置事务隔离级别:

    1. 查看级别select @@tx_isolation;
    2. 设置级别set global transaction isolation level read committed;
    3. 设置后需要重启数据库

    DCL语句

    创建用户

    // 创建用户,只能本地登录
    create user 'user1'@'localhost' identified by '123';
    // 创建用户,可以远程登录
    create user 'user2'@'%' identified by '123';
    

    查看用户权限:

    • show grants for 'user1'@'localhost';

    新创建用户没有权限,需要授权:

    1. grant 权限1,权限2.. on 数据库.表名 to '用户名'@'主机名';
    2. grant create,insert,update,delete on db1.* to 'user1'@'localhost';
    3. grant all on *.* to 'user2'@'%'; 给用户2分配所有权限

    撤销授权:

    1. revoke 权限1,权限2.. on 数据库.表名 from '用户'@'主机';
    2. 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('新棉');

  • 相关阅读:
    Passing structures between C# and C/C++
    Leetcode 题目整理-6 Swap Nodes in Pairs & Remove Duplicates from Sorted Array
    Leetcode 题目整理-5 Valid Parentheses & Merge Two Sorted Lists
    链表
    Leetcode 题目整理-4 Longest Common Prefix & Remove Nth Node From End of List
    Leetcode 题目整理-3 Palindrome Number & Roman to Integer
    Leetcode 题目整理-2 Reverse Integer && String to Integer
    Leetcode 题目整理-1
    Leetcode 题目整理
    static静态变量在c++类中的应用实例
  • 原文地址:https://www.cnblogs.com/mingriyingying/p/13439269.html
Copyright © 2011-2022 走看看