"MySQL"个人学习笔记

public class OperatingMySQLOfCommend {
   /*
    * 一、库的的使用语法
    * 1,创建数据库
    *   CREATE DATABASE db1;
    *
    * 2,查所有数据库
    *   SHOW DATABASES;
    *   SELECT DATABASE(); (查看正在使用的库)
    *   SHOW CREATE DATABASE db1; (查看库的自定义信息)
    *
    * 3,使用库
    *   USE db1;
    *
    * 4,查看是否存在某个库并创建库
    *   CREATE DATABASE IF NOT EXISTS db2;
    *
    * 5,查看是否存在某个库并删除库
    *   DROP DATABASE IF NOT EXISTS db2;
    *       或直接删除库:DROP DATABASE db2;
    *
    * 6,创建数据库并指定字符类型或修改库的字符集格式
    *   CREATE DATABASE CHARACTER SET gbk(utf8); (创建库指定字符集)
    *   ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集; (修改库的字符集格式)
    *
    * 二、表的使用语法
    * 1,创建表
    *   CREATE TABLE 表名(
    *   字段名1 字段类型1,
    *   字段名2 字段类型2,
    *   );
    *  蠕虫复制:  CREATE TABLE 新表名 LIKE 旧表名; (快速创建一个表结构相同的表)
     =============================================================== *
    * 2,查看表
    *   (1)表名和表结构及语句
    *       SHOW TABLES; (查看该库下的所有表)
    *       DESC 表名;    (查看表结构)
    *       SHOW CREATE TABLE 表名;   (查看表的创建表的SQL语句)
    *
    *   (2)查表数据
    *       SELECT * FROM 表名; (查看表所有数据,)    * 代表所有列
    *       SELECT 字段名1, 字段名2, 字段名3, ... FROM 表名;
    *           例: SELECT id, NAME ,age, sex, address FROM student;
    *       SELECT 字段名1, 字段名2, ... FROM 表名; (查询表中的部分列)
    *           例: SELECT NAME, age FROM student;
    *
    *   (3)别名查询 (需要多表查询才能体现好处)
    *       SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名; (需要到多表查询的时候才能体现出好处 AS关键字可以省略)
    *           例: SELECT NAME AS 姓名, age AS 年龄 FROM student; (查询sudent表中name 和 age 列,name列的别名为”姓名”,age列的别名为”年龄”)
    *       SELECT NAME, age FROM student AS s; (查询student表中name和age列,student表别名为s)
    *
    *   (4)清除重复值
    *       SELECT DISTINCT 字段名 FROM 表名; (查询指定列并且结果不出现重复数据)
    *           例: SELECT DISTINCT NAME, age FROM student; (查询name,age列并且结果不出现重复name和age)
    *           上诉例子意思是: 如果查询姓名和年龄列,有两个人姓名都为张三,年龄都为20,那么结果只输出一次 (姓名,年龄) (张三,20)
    *            查询指定某些列,如果出现列列数据相同,即使其他列数据不同也只输出一次.
    *
    *   (5)查询结果参与运算(注意: 参与运算的必须是数值类型)
    *        SELECT 列名1 + 固定值 FROM 表名; (某列数据和固定值运算)
    *        SELECT 列名1 + 列名2 FROM 表名; ( 某列数据和其他列数据参与运算)
    *
    *   (6)条件查询
    *       SELECT 字 段名 FROM 表名 WHERE 条件; (查询表获取满足条件的数据)
    *           > 大于 < 小于 <= 小于等于 >= 大于等于 = 等于 <> 、 != 不等于:
    *               SELECT * FROM student3 WHERE math>80; (比较运算符)
    *           and(&&) 多个条件同时满足 or(||) 多个条件其中一个满足 not(!) 不满足:
    *               SELECT * FROM student3 WHERE age>35 AND sex='男'; (逻辑运算符)
    *           in关键字 语法格式: SELECT 字段名 FROM 表名 WHERE 字段 in (数据1, 数据2...); in 里面的每个数据都会作为一次条件,只要满足条件的就会显示:
    *               SELECT * FROM student3 WHERE id IN (1,3,5);  (即是id>1 && id<5)
    *           BETWEEN 值1 AND 值2 表示从值1到值2范围,包头又包尾:
    *               age BETWEEN 80 AND 100 相当于: age>=80 && age<=100
    *
    *   (7) 模糊查找 LIKE
    *       LIKE 表示模糊查询 SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串'; 满足 通配符字符串 规则的数据就会显示出来,
    *       所谓的 通配符字符串 就是 含有通配符的字符串 MySQL通配符有两个: % : 表示0个或多个字符(任意个字符) _ : 表示一个字符.
    *           SELECT * FROM student3 WHERE NAME LIKE '马%'; (查询姓马的人)
    *           SELECT * FROM student3 WHERE NAME LIKE '马__'; (查询姓马,且姓名有三个字的人)
    =========================================================================================================================== *
    * 3,删除表
    *   (1)删除表或列
    *       ALTER TABLE 表名 DROP 列名; (删除列)
    *       DROP TABLE 表名; (直接删除表)
    *       DROP TABLE IF EXISTS 表名; ( 判断表是否存在并删除表)
    *
    *   (2)删除表记录
    *       DELETE FROM 表名 WHERE 字段名 字段名=值; (带条件删除数据)
    *       DELETE FROM 表名; (不带条件删除表记录)
    *       TRUNCATE TABLE 表名; (truncate删除表记录)
    *       truncate和delete的区别:
    *           delete是将表中的数据一条一条删除
    *           truncate是将整个表摧毁,重新创建一个新的表,新的表结构和原来表结构一模一样.
    ==========================================================================================*
    * 4,修改表
    *   (1) 修改表名和表结构及字符集
    *       ALTER TABLE 表名 ADD 列名 类型; (添加表列)
    *       ALTER TABLE 表名 MODIFY列名 新的类型; ( 修改列类型 )
    *       ALTER TABLE 表名 CHANGE 旧列名 新列名 类型; (修改列名)
    *       RENAME TABLE 表名 TO 新表名; (修改表名)
    *       ALTER TABLE 表名 character set 字符集; (修改表的字符集)
    *
    *   (2)插入字段
    *       INSERT INTO 表名 VALUES (值1,值2,值3...); (插入全部字段方式一)  (插入全部字段,此处省略方式二);
    *       INSERT INTO 表名 (字段名1,字段名2,...) VALUES (值1,值2,...);
    *       注意: (1) 值与字段必须对应,个数相同,类型相同
    *             (2) 值的数据大小必须在字段的长度范围内
    *             (3) 除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)
    *             (4) 如果要插入空值,可以不写字段,或者插入null
    *
    *   (3)更新表记录
    *       UPDATE 表名 SET 字段2,字段3,... WHERE 字段1=值1;
    *           例:UPDATE student SET sex='男' WHERE id=2;(把id=2的列中 sex字段改成'男')
    *       UPDATE 表名 SET 字段; (不带条件修改数据)
    *           例:UPDATE student SET sex='女'; (将表中所有sex字段改成'女')
    *       UPDATE: 修改数据
    *       SET: 修改哪些字段
    *       WHERE: 指定条件
    *
    *
    * 三、DQL语句排序
    *   1,单列排序(对一个字段进行排序):  升序: ASC     降序: DESC
    *       SELECT * FROM student3 ORDER BY age DESC;
    *     组合排序(类推字段进行排序):
    *       SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段1 [ASC | DESC],字段2[ASC | DESC]...;
    *
    *   2,聚合函数: 聚合函数是纵向查询,另外聚合函数会忽略空值 注意: 函数与字段不能存在空格
    *       (1)count统计指定列记录数
    *           SELECT COUNT(english) FROM student3; (此语句会忽略null空值)
    *           SELECT COUNT(IFNULL(english,0)) FROM student3;
    *           SELECT COUNT(*) FROM student3; (统计横列个数)
    *           SELECT COUNT(*) FROM student3 WHERE age>40;
    *       (2)sum计算指定列的数据和,如果不是数据值类型,那么计算结果为0
    *       (3)max指定列的最大值 (4)min指定列的最小值
    *       (5)avg计算指定列的平均值,如果不是数据类型,那么计算结果为0
    *   3,分组: 对查询信息进行分组, 相同数据作为一组
    *       SELECT 字段1,字段2... FROM 表名 GROUP BY 分组字段 [HAVING 条件];
    *           例:SELECT sex, COUNT(*) FROM student3 GROUP BY sex; (先按性别分组再统计)
    *              SELECT sex, COUNT(*) FROM student3 WHERE age > 25 GROUP BY sex; (先过滤WHERE条件再分组最后统计)
    *              SELECT sex, COUNT(*) FROM student3 WHERE age > 25 GROUP BY sex HAVING COUNT(*) >2; (分组后统计人数再筛选)
    *           注意:
    *                 having后面可以使用聚合函数
    *                 where后面不可以使用聚合函数   (重点)
    *                 having是在分组后对数据进行过滤.
    *                 where是在分组前对数据进行过滤
    *   4,limit语句  作用:限制查询记录的条数 即分页查询
    *       SELECT *|字段列表 [as 别名] FROM 表名 [WHERE子句] [GROUP BY子句][HAVING子句][ORDER BY子句][LIMIT子句]; (limit放在末尾)
    *       LIMIT语法格式: LIMIT offset,length; 或者limit length; offset 是指偏移量,默认为0   计算:off=(当前页码数-1)*length
    *
    * 四、数据库其他操作
    * 1,数据库备份
    *     (1)source 命令备份还原
    *           备份格式: mysqldump -u用户名 -p密码 数据库 > 文件的路径
    *               mysqldump -uroot -proot day22 > C:\work\课改\MYSQL课改资料\Day02-MYSQL多表查询\code\bak.sql; (备份day22数据库中的数据)
    *           还原格式: SOURCE 导入文件的路径;
    *        注意:还原的时候需要先登录MySQL,并选中对应的数据库
    * 2,数据库约束   作用:保证数据的正确性、有效性和完整性
    *     (1) 增加主键  特点: 唯一、不为空 允许自增(字段类型必须是整数类型,且默认从1开始自增)
    *             a,在创建表的时候给字段添加主键
    *                   字段名 字段类型 PRIMARY KEY;
    *                   如果想在创建表的同时改变自增默认值:  在写完表");"前写: auto_increment=100
    *             b,在已有表中添加主键
    *                   ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
    *                       在已有表后添加并改变自增默认值  ???添加
    *                           ALTER TABLE 表名 auto_increment=100; (已有自增改变默认值)
    *             删除主键
    *                 ALTER TABLE 表名 DROP PRIMARY KEY;
    *           DELETE和TRUNCATE的区别:
    *                  a,DELETE 删除表数据不会重置auto_increment的默认值;
    *                  b,TRUNCATE 摧毁表,重建表 数据将auto_increment的默认值置为1.
    *     (2) 唯一
    *               字段名 字段类型 UNIQUE
    *     (3) 非空
    *               字段名 字段类型 NOT NULL
    *     (4) 默认值
    *               字段名 字段类型 DEFAULT 默认值    (默认值格式)
    *           注意:
    *               一张表中只有一个字段可以设置为主键
    *               一张表中可以多个字段非空与唯一约束
    *               主键可以自动增长,非空与唯一约束的字段不能自动增长
    *    (5)增加外键   (一张表中的某个字段引用另一个表的主键 主表: 约束别人 副表/从表: 使用别人的数据,被别人约束)
    *            a, 新建表时增加外键:
    *                   [CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)
    *                       例: CONSTRAINT emp_depid_ref_dep_id_fk FOREIGN KEY(dep_id) REFERENCES department(id)  (在");"前)
    *                b, 已有表增加外键
    *                   ALTER TABLE 从表 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主键字段名);
     *                      例:  ALTER TABLE employee ADD CONSTRAINT emp_depid_ref_dep_id_fk FOREIGN KEY(dep_id) REFERENCES department(id);
    *                CONSTRAINT -- 约束关键字
    *                FOREIGN KEY(外键字段名) –- 某个字段作为外键dept
    *                REFERENCES -- 主表名(主键字段名) 表示参照主表中的某个字段
    *        删除外键
    *                   ALTER TABLE 从表 drop foreign key 外键名称;
    *                       例:   ALTER TABLE employee DROP FOREIGN KEY emp_depid_ref_dep_id_fk;
    *     (6)级联
    *           在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作
    *               ON UPDATE CASCADE -- 级联更新,主键发生更新时,外键也会更新
    *               ON DELETE CASCADE -- 级联删除,主键发生删除时,外键也会删除
    *     (7)建表原则
    *           一对一(1:1)
    *               外键唯一: 主表的主键和从表的外键(唯一),形成主外键关系.
    *               外键是主键: 主表的主键和从表的主键,形成主外关系
    *           一对多(1:n)
    *               在从表(多方)创建一个字段作为外键指向主表(一方)的主键
    *           多对多(m:n)
    *               需要建立中间表来维护表之间的关系
    *
    *           六大范式(一般满足三种):第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。
    *               第一范式:每一列不能再拆分
    *               第二范式: 一张表只描述一件事情
    *               第三范式:从表的外键必须使用主表的主键
    *
    * 3,多表查询
    *       (1)内连接: (用左边表的记录去匹配右边表的记录,如果符合条件的则显示)
    *               隐式内连接
    *                    SELECT 字段名 FROM 左表, 右表 WHERE 条件 ;
    *                       例: SELECT d.name,e.name FROM emp e,dept d WHERE d.name=e.name;
    *               显示内连接
    *                   SELECT 字段名 FROM 左表 INNER JOIN 右表 ON 条件 ;
    *                       例: SELECT d.name,e.name FROM emp e INNER JOIN dept d ON d.name=e.name;
    *                    当出现多表连接时,SELECT 字段名1,字段名2,... FROM 表1 表别名1 INNER JOIN 表2 表别名2,表3 表别名3... ON 条件1 ON 条件2...; (如果条件之间还有连接用    字段1 BETWEEN 字段2 AND 字段3)
    *                       例:
    *                       SELECT e.`ename`, e.`salary`, j.`jname`, j.`description`, d.`dname`, d.`loc`, s.`grade`
    *                       FROM emp e
    *                       INNER JOIN job j INNER JOIN dept d INNER JOIN salarygrade s
    *                       ON e.job_id=j.id AND e.dept_id=d.id
    *                       AND e.salary BETWEEN s.losalary AND hisalary; (低到高)
    *                   区别:
    *                       隐式内连接要加另外条件的话:  SELECT 字段名 FROM 左表, 右表 WHERE 条件 AND 条件 ;
    *                       显式内连接要加条件的话:      SELECT 字段名 FROM 左表 INNER JOIN 右表 ON 条件 WHERE 条件 ;
    *
    *           `外连接: 左外连接  (如果左表未匹配到右表数据,那么右表数据显示为NULL)
    *                    SELECT 字段名 FROM 左表 LEFT OUTER JOIN 右表 ON 条件;
    *                       例: SELECT * FROM dept LEFT OUTER JOIN emp ON emp.`dept_id`=dept.`id`;
    *
    *               右外链接    (如果右表未匹配到左表数据,那么左表数据显示为NULL)
    *                   SELECT 字段名 FROM 左表 RIGHT OUTER JOIN 右表 ON 条件;
    *                       例: SELECT * FROM dept RIGHT OUTER JOIN emp ON emp. dept_id =dept. id ;
    *
    *       (2)子查询: (查询条件, 查询结果, 表)   子查询结果只要是单列 ,肯定在 WHERE 后面作为 条件 子查询结果只要是多列 ,肯定在 FROM 后面作为表
    *           SELECT 查询字段 FROM 表 WHERE 查询条件;
    *               例:SELECT * FROM employee WHERE salary=(SELECT MAX(salary) FROM employee);
    *           SELECT 查询字段 FROM 表 WHERE 字段=(子查询);  (查询结果一个值)
    *               例: SELECT * FROM emp WHERE salary=(SELECT MAX(salary) FROM emp);
    *           SELECT 查询字段 FROM 表 WHERE 字段 IN (子查询);  (查询结果单列多行)
    *               例:SELECT id FROM dept WHERE NAME IN('开发部','财务部');
    *                   SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE NAME IN('开发部','财务部'));
    *           SELECT 查询字段 FROM (子查询) 表别名 WHERE 条件;  (FROM 后面作为表,表需要取别名 "AS"可以省略)
    *               例: SELECT * FROM dept d, (SELECT * FROM emp WHERE join_date > '2011‐1‐1') e WHERE e.dept_id = d.id;
    *
    * 4,事务
    *       (1)操作事务
    *           手动事务  (每一条增删语句都是一个单独的事务 当有多个事务进行操作就需要开启事务)
    *               start transaction 开启事务  savepoint abc  设置事务回滚点  rollback to abc  回到事务回滚点
    *               commit 提交事务(会清空事务,不可修改)     rollback 回滚事务 (可修改)
    *                   开启事务 -> 执行SQL语句 ->成功 -> 提交事务    (会对数据库数据的数据进行改变)
    *                   开启事务 -> 执行SQL语句 ->失败 -> 回滚事务    (会回退到开启事务时的状态)
    *
    *       (2)自动提交事务:  单独的一个事务不需要开启事务回滚 它是提交自动事务
    *           修改MySQL全局变量"autocommit",取消自动事务提交
    *               0:OFF(关闭自动提交)   set autocommit = 0;
    *               1:ON(开启自动提交)
    *               修改权限:  show variables like '%commit%';
    *                           set autocommit = 0; (事务自动提交关闭)
    *       (3) 事务四大特性:
    *               原子性(Atomicity):  事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
    *               一致性(Consistency):  事务前后数据的完整性必须保持一致.
    *               隔离性(Isolation):  是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离,不能相互影响。
    *               持久性(Durability):  指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响
    *       (4) 事务的隔离级别
    *          a, 脏读: 一个事务读取到了另一个事务中尚未提交的数据
    *             不可重复读:  一个事务中两次读取的数据内容不一致,要求的是一个事务中多次读取时数据是一致的,这是事务update时引发的问题
    *             幻读: 一个事务中两次读取的数据的数量不一致,要求在一个事务多次读取的数据的数量是一致的,这是insert或delete时引发的问题
    *          b,四种隔离级别:
    *             级别    名字      隔离级别                脏读      不可重读    幻读      数据库默认隔离级别
    *               --1 读未提交( read uncommitted ) :      是           是        是
    *               --2 读已提交( read committed )  :       否           是        是          Oracle 和 SQL Serve
    *               --3 可重复读 ( repeatable read ) :      否           否        是          MySQL
    *               --4 串行化 ( serializable) :            否           否        否
    *          c, 事务隔离级别相关命令
    *               [1]查询事务隔离级别:
    *                   show variables like '%isolation%';
    *                   -- 或
    *                   select @@tx_isolation;
    *               [2]设置事务隔离级别,需要退出MSQL再进入MYSQL才能看到隔离级别的变化
    *                   set global transaction isolation level 级别字符串;(修改全局的)
    *                   set session transaction isolation level read uncommitted;(修改当次)
    *                   -- 如:
    *                   set global transaction isolation level read uncommitted;
    *
    *  5, DCL
    *       (1) 创建用户:
    *           CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
    *               例:-- user1用户只能在localhost这个IP登录mysql服务器
    *                   CREATE USER 'user1'@'localhost' IDENTIFIED BY '123';
    *                   -- user2用户可以在任何电脑上登录mysql服务器
    *                   CREATE USER 'user2'@'%' IDENTIFIED BY '123';
    *       (2) 权限修饰符(SELECT,INSERT,UPDATE等,所有权限用 "ALL")    数据库名.表名:  (所有库'*.*' ;所有表  `.*`)
    *           授权用户:
    *               GRANT 权限1, 权限2... ON 数据库名.表名 TO '用户名'@'主机名';
    *                   例: GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON test.* TO 'user1'@'localhost';
    *           撤销权限
    *               REVOKE  权限1, 权限2... ON 数据库.表名 FROM '用户名'@'主机名';
    *           查看权限:
    *               SHOW GRANTS FOR '用户名'@'主机名';
    *       (3) 删除用户
    *               DROP USER '用户名'@'主机名';
    *       (4) 修改用户密码
    *           a,修改管理员密码  ( 需要在未登陆MySQL的情况下操作。)
    *               mysqladmin -uroot -p password 新密码  -- 新密码不需要加上引号
    *           b,修改普通用户密码 ( 需要在登陆MySQL的情况下操作。)
    *               set password for '用户名'@'主机名' = password('新密码');
    *
    *   */
//   888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
     /*
     MySQL:
    │-- bin:mysql相关的可执行文件*.ex
        │-- MySQLInstanceConfig.exe mysql的配置程序
    │-- data: mysql自带的数据库文件
    │-- include: c语言的头文件(不用关注)
    │-- lib: 存放mysql使用到的dll动态库(相当于jar包,不用关注)
    │-- my.ini mysql的配置文件,配置了mysql的相关信息*/
}

另一位博主也挺全面的学习笔记:https://blog.csdn.net/Guet_Kite/article/details/100538576

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值