|
1.MySQL的启动与关闭
1.1方式一:window服务启动MySQL
(1)右键 此电脑->管理
(2)选择服务->找到MySQL服务,右键选择->启动或停止
1.2方式二:DOS命令方式启动
(1)以管理员身份,打开命令行窗口
(2)启动MySQLnet start mysql157
(3)关闭MySQLnet stop mysql157
2.命令行登录数据库
2.1 登录本机
- mysql -u用户名 -p密码
- mysql -uroot -p123456
2.2 指定ip登录
- mysql -h主机ip -u用户名 -p密码
- mysql -h127.0.0.1 -uroot -p123456
3.SQL通用语法
- SQL语句可以单行 或者 多行书写,以分号结尾 ;
- 可以使用空格和缩进来增加语句的可读性。
- MySql中使用SQL不区分大小写,一般关键字大写,数据库名 表名列名 小写。
- 注释方式
- --空格 单行注释
- /**/多行注释
- MySQL特有的单行注释
4.SQL的分类
4.1 DDL(Data Definition Language)
- 数据定义语言
- 用来定义数据库对象:数据库,表,列 等
4.2 DML(Data Manipulation Language)
4.3 DQL(Data Query Language)
4.4 DCL(Date Control Language)
- 数据控制语言
- 用来定义数据库的访问权限和安全级别, 及创建用户
5.DDL操作
5.1 创建数据库
- create database 数据库名
- create database 数据库名 character set 字符集
5.2 查看/选择数据库
- 切换数据库 use 数据库
- 查看当前正在使用的数据库 select database()
- 查看MySql中有哪些数据库 show databases
- 查看一个数据库的定义信息 show create database 数据库名
5.3 修改数据库
- 数据库的字符集修改操作 alter database 数据库名 character set 字符集
5.4 删除数据库
- 从MySql中永久删除某个数据库 drop database 数据库名
5.5 创建表
5.5.1 MySQL的数据类型

5.5.2 创建表
- CREATE TABLE 表名( 字段名称1 字段类型(长度), 字段名称2 字段类型 最后一列不要加逗号 );
5.5 复制表结构
- create table 新表名 like 旧表名
5.6 查看表
- 查看数据表的结构 desc 表名
- 查看当前数据库中的所有表名 show tables
5.7 删除表
- 删除表 drop table 表名
- 判断表是否存在,存在再删除,不存在不执行删除drop table if exists 表名
5.8 修改表
5.8.1 修改表名
5.8.2 修改表的字符集
- alter table 表名 character set 字符集
5.8.3 向表中添加列
- alter table 表名 add 字段名 字段类型
5.8.4 修改表中列的数据类型或长度
- alter table modify 字段名称 字段类型
5.8.5 修改列名称
- alter table 表名 change 旧列名 新列名 类型(长度)
5.8.6 删除列
6. DML操作
6.1 插入数据
6.1.1 插入全部字段,将所有字段名都写出来
- insert into 表名 (字段名1,字段名2...) values(字段值1,字段值2...)
6.1.2 插入全部字段,不写字段名
- insert into 表名 values(字段值1,字段值2...)
6.1.3 插入指定字段的值
- insert into 表名(指定字段名...) values(指定字段值)
6.1.4 注意
- 值的字段必须要对应,个数相同且数据类型相同
- 值的数据大小,必须在字段指定的长度范围内
- varchar、char、date类型的值必须使用单引号,或者双引号包裹
- 如果要插入空值,可以忽略不写,或者插入null
- 如果插入指定字段的值,必须写上列名
6.2 更改数据
6.2.1 不带条件的修改
6.2.2 带条件的修改
- update 表名 set 列名 = 值[where 条件表达式:字段名 = 值]
6.3 删除数据
6.3.1 删除所有数据
- delete from 表名
- 要删除表中的所有数据不推荐使用, 有多少条记录 就执行多少次删除操作. 效率低
6.3.2 指定条件 删除数据
- delete from 表名[where 字段名 = 值]
6.3.3 truncate删除数据
- truncate table 表名
- 删除表中的所有数据,先删除整张表, 然后再重新创建一张一模一样的表. 效率高
7. DQL操作
7.1 简单查询
- select 列名 from 表名
- select 列名 as 别名 from 表名 as 表别名
7.2 条件查询
- select 列名 from 表名 where 条件表达式
7.2.1 比较运算符
- >、<、<=、>=、=、<>、!=
- between...and... 显示在某一区间的值
- in(集合) in中的每个数据都会作为一次条件,只要满足条件就会显示
- like 模糊查询
- is null 查询某一列为null的值
7.2.2 逻辑运算符
- and && 多个条件同时成立
- or || 多个条件任一成立
- not 不成立,取反
7.3 模糊查询
7.4 排序
7.4.1 单列排序
- 只按照某一个字段进行排序
- SELECT 字段名 FROM 表名 [WHERE 字段 = 值] ORDER BY 字段名 [ASC / DESC]
- ASC 升序排序(默认) DESC 降序排序
7.4.2 组合排序
- 同时对多个字段进行排序,如果第一个字段相同,就按照第二个字段进行排序
7.5 聚合函数
7.5.1 count(字段)
7.5.2 sum(字段)
7.5.3 max(字段)
7.5.4 min(字段)
7.5.5 avg(字段)
7.6 分组
- 使用 GROUP BY 语句,对查询的信息进行分组,相同数据作为一组
- SELECT 分组字段/聚合函数 FROM 表名 GROUP BY 分组字段 [HAVING 条件];
- 分组时可以查询要分组的字段或者使用聚合函数进行统计操作,*查询其他字段没有意义
7.7 过滤
- having:对分组后的数据进行过滤,having 后面可以写聚合函数
- where:进行分组前的过滤,where后面不能写聚合函数
7.8 limit
- limit是限制的意思,用于 限制返回的查询结果的行数 (可以通过limit指定查询多少行数据)
- limit 语法是 MySql的方言,用来完成分页
- SELECT 字段1,字段2... FROM 表名 LIMIT offset , length;
- offset: 起始行数, 从0开始记数, 如果省略 则默认为 0; length:返回的行数
8.约束
- 对表中的数据进行进一步的限制,从而保证数据的正确性、有效性、完整性. 违反约束的 不正确数据,将无法插入到表中
8.1主键约束
- 用来表示数据库中的每一条记录,不可重复,唯一,非空
- 字段名 字段类型 primary key
- 通常针对业务去设计主键,每张表都设计一个主键id
- 主键是给数据库和程序使用的,跟最终的客户无关,所以主键没有意义没有关系,只要能够保证不重复 就好
8.1.1 添加主键约束
- 创建表的时候添加 字段名 字段类型 primary key 或者primary key(字段名)
- 通过DDL语句进行设置 ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
8.1.2 删除主键约束
- 通过DDL语句删除 ALTER TABLE 表名 DROP PRIMARY KEY;
8.1.3 主键的自增
- AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型)
8.1.4 修改自增主键自增的起始值
- AUTO_INCREMENT = 起始值,默认为1
- delete:只是删除表中所有数据,对自增没有影响。
- truncate:将整个表删除掉,然后创建一个新的表自增的主键,重新从1开始
8.2 非空约束
- 某一列不允许为空
- 字段名 字段类型 not null
8.3 唯一约束
- 表中的某一列的值不能重复(对null不做唯一的判断)
- 字段名 字段类型 unique
- 主键约束与唯一约束的区别
- 主键约束 唯一且不能够为空
- 唯一约束 唯一但可以为空
- 一个表中只能有一个主键,但是可以有多个唯一约束
8.4 外键约束
- 外键指的是在 从表 中 与 主表 的主键对应的那个字段
- 使用外键约束可以让两张表之间产生一个对应关系,从而保证主从表的引用的完整性
8.4.1 创建外键约束
- 新建表时添加:[CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)
- 已有表添加:ALTER TABLE 从表 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主 键字段名);
- 从表外键类型必须与主表主键类型一致 否则创建失败.
- 添加数据时, 应该先添加主表中的数据.
8.4.2 删除外键约束
- alter table 从表 drop foreign key 外键约束名称
- 删除数据时,应该先删除从表中的数据.
- 级联删除 ON DELETE CASCADE 创建表时使用
8.5 默认值约束
9 .数据库事务
- 事务是一个整体,由一条或者多条SQL 语句组成,这些SQL语句要么都执行成功,要么都执行失败, 只要有一 条SQL出现异常,整个操作就会回滚,整个业务执行失败
9.1 回滚
- 即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤销,滚回到事务开始时的状态。(在提交之前执行)
9.2 MySql事务操作
9.2.1手动提交事务
- start transaction; 或者 BEGIN; 开启事务
- commit;提交事务,将事务中所有对数据库的更新都写 到磁盘上的物理数据库中,事务正常结束
- rollback;:回滚事务,表示撤销事务,即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中 对数据库的所有已完成的操作全部撤销,回滚到事务开始时的状态
- 执行成功的情况: 开启事务 -> 执行多条 SQL 语句 -> 成功提交事务
- 执行失败的情况: 开启事务 -> 执行多条 SQL 语句 -> 事务的回滚
9.2.2 自动提交事务
- 默认每一条 DML(增删改)语句都是一个单独的事务,每条语句都会自动开启一个事务,语句执 行完毕 自动提交事务,MySQL 默认开始自动提交事务
- SHOW VARIABLES LIKE &#39;autocommit&#39;; 查看autocommit状态
- SET @@autocommit=off 修改自动提交为手动提交,将状态设置为off
9.2.3 事务的四大特性
- 原子性:每个事务都是一个整体,不可再拆分,事务中所有的 SQL 语句要么都执行成功, 要么都 失败
- 一致性:事务在执行前数据库的状态与执行后数据库的状态保持一致。如:转账前2个人的 总金额 是 2000,转账后 2 个人总金额也是 2000.
- 隔离性:事务与事务之间不应该相互影响,执行时保持隔离的状态.
- 持久性:一旦事务执行成功,对数据库的修改是持久的。就算关机,数据也是要保存下来的
9.3 事务的隔离级别
9.3.1 数据的并发访问
- 一个数据库可能拥有多个访问客户端,这些客户端都可以并发方式访问数据库. 数据库的相同数据可能被 多个事务同时访问,如果不采取隔离措施,就会导致各种问题, 破坏数据的完整性
9.3.2 并发访问会产生的问题
- 事务在操作时的理想状态: 所有的事务之间保持隔离,互不影响。因为并发操作,多个用户同时访问同 一个 数据。可能引发并发访问的问题
- 脏读 :一个事务读取到了另一个事务中尚未提交的数据
- 不可重复读: 一个事务中两次读取的数据内容不一致, 要求的是在一个事务中多次读取时数据是一 致的. 这是进行 update 操作时引发的问题
- 幻读: 一个事务中,某一次的 select 操作得到的结果所表征的数据状态, 无法支撑后续的业务 操作. 查询得到的数据状态不准确,导致幻读,比如 select 某记录是否存在,不存在,准备插入此记录,但执行 insert 时发现此记录已存在,无 法插入,此时就发生了幻读。
9.3.3 四种隔离级别

9.3.4 隔离级别相关命令
- select @@tx_isolation; 查看隔离级别
- mysql默认隔离级别为repeatable read
- set global transaction isolation level 隔离级别名称;
- 设置事务隔离级别,需要退出 MySQL 再重新登录才能看到隔离级别的变化
|
|