发表于: 2017-08-16 23:21:43

1 966


今天完成的事情:

今天在AWS的ec2上安装了mysql5.5.7。原来mysql官网还是提供5.5的,以前没找到。设置用户远程连接权限的时候以前只知道在配置文件里改,但是有些配置文件没找到或者说发生了变化。这时候只要修改mysql库里的user表的相关信息就好了。看了一下《MySQL必知必会》,做了一些笔记。


1.安装卸载配置

默认端口:3306

验证:cmd-->mysql -u root -p -->pwd(密码)

2. 管理MySQL

客户端工具:cmd,Navicat,SQLyogEnt

MySQL存储结构:数据库->表->数据

SQL语言:

一.Datebase数据库操作

show database;  //显示所有数据库

默认数据库:
information schema //mysql元数据,基础数据
mysql    //mysql配置数据库,包含用户信息
performance schema //mysql运行数据,日志信息,性能数据
test    //测试数据库,空

1.create database name; //默认创建数据库
2.>create database name(回车)  //创建数据库
 >default character set utf8(无-);  //并设置默认字符集为utf-8
 
3.drop database name; //删除一个数据库
4.show create database name; //显示数据库默认字符集
5.alter database name default character set gbk; //修改字符集为gbk

二.Table表操作


选择数据库: use name;
创建表:
>create table name(
>字段 数据类型,
>字段 数据类型(长度),
......
>);
查看表:
>show tables; //查看所有表
>desc name;  //查看一张表
删除表:
>drop table name; //删除表
修改表:
>alter table student add column + 字段名 字段类型;//添加字段
>alter table student drop column + 字段名;//删除字段
>alter table student modify column + 字段名  新字段类型; //修改字段类型
>alter table student change column + 旧字段名 新字段名 字段类型; //修改字段名
>alter table 旧表名 rename(to) 新表名; //修改表名

三.Date数据管理

增:


1.插入所有字段(依次插入所有数据)
INSERT INTO 表名 VALUES(1,'男','张三'); //按字段顺序值完全匹配

2.插入部分字段
INSERT INTO 表名(字段1,字段2) VALUES(数据1,数据2);

改:


1.修改所有数据
UPDATE 表名 SET 字段名=数据; //修改表的字段的所有值
2.修改部分数据
UPDATE 表名 SET 字段名=数据 WHERE id=1; //修改id为1的字段数据
3.修改多个字段
UPDATE 表名 AET 字段1=数据1,字段2=数据2 WHERE id=2; //修改id为2的字段数据

删:


1.删除所有表数据
DELETE FROM 表名; //(可带条件删除;不可删除表约束;删除的数据可以回滚)
2.带条件的删除
DELETE FROM 表名 WHERE id=2;
3.另一种删除表数据的方式
TRUNCATE TABLE 表名; //(不能带条件删除;可以删除表数据和表约束;不能回滚)

查:SELECT


1.查询所有列:
SELECT * FROM 表名;
2.查询指定列:
SELECT 字段1,字段2 FROM 表名;
3.查询时指定别名(AS):
SELECT 字段1 AS '别名',字段2 AS '别名' FROM 表名;
4.查询时添加常量列:
SELECT 字段1,字段2,'列内容' AS '别名' FROM 表名;
5.查询时合并列:(两列内容相加;只能合并数值类型字段)
SELECT 字段1,字段2,(字段3+字段4) AS '别名' FROM 表名;
6.查询时去除重复记录
SELECT DISTINCT 字段 FROM 表名;
SELECT DISTINCT (字段) FROM 表名;
7.条件查询(WHERE)
1)逻辑条件:and(与) or(或)
 SELECT * FROM 表名 WHERE id=2 AND name='李四';
2)比较条件:> < >= <= == <>(不等于) between and
 SELECT * FROM 表名 WHERE id>3;
  (WHERE 字段 BETWEEN 数值1 AND 数值2;)
3)判空条件:is null  is not null  ==''   <>'' (null与空字符串)
 SELECT * FROM 表名 WHERE 字段 is null;
4)模糊条件:like (替换标记: %:表示任意字符  _:表示一个字符)
 SELECT * FROM 表名 WHERE NAME LIKE '张';

8.聚合查询:(使用聚合函数查询:sum() avg() max() min()   count()(数量) [括号里填字段])
SELECT SUM(字段) FROM 表名; //查询某个表的某个字段的所有和
9.分页查询:(limit 起始行,查询几行) 起始行从0开始
SELECT * FROM 表名 LIMIT 0,2;
分页查询当前页的数据的sql: LIMIT(当前页-l)*每页显示条数,煤业显示条数
10.查询排序:(默认按插入排序)order by 字段 asc(顺序)/desc(倒叙)默认正序
SELECT * FROM 表名 ORDER BY 字段 ASC;
SELECT * FROM 表名 ORDER BY 字段1 ASC,字段2 DESC; //多个排序条件
11.分组查询:(group by)(分组;统计)
SELECT 字段,COUNT(*) FROM 表名 GROUP BY 字段;
12.分组查询后筛选:1)分组查询 2)筛选(having),GROUP BY之后不能用WHERE,
    只能用HAVING,之前可以用WHERE
SELECT 字段,COUNT(*) FROM 表名 GROUP BY 字段 HAVING COUNT(*) > 2;

3. 数据约束对表的数据进行约束限制


1.默认值:用户不插入值时,默认的值
CREATE TABLE 表名(
 字段 字段类型 DEFAULT '默认值',
);

2.非空:某些字段不能为空
 字段 数据类型 NOT NULL,
 
3.唯一:不能有重复值,可有重复的null值
 字段 数据类型 UNIQUE,
 
4.主键(非空+唯一)
 字段 数据类型 PRIMARY KEY,
 1)通常每张表都会设置一个主键字段!用于标记表中每条数据的唯一性
 2)建议不选用表中包含业务含义的字段作为主键
 
5.自增长(自动递增;可以不赋值;从0开始)
 字段 数据类型 AUTO_INCREMENT,
6.外键(约束两张表的数据;解决数据冗余问题)
 外键设置在副表/从表上,ZEROFILL(0填充)
 CONSTRAINT 表名_参考表名_fk(外键名) FOREIGN KEY(字段(外键))
 REFERENCES 参考表名(字段)    //声明一个外键约束

注意:
1.被约束的表被称为副表,约束别人的表称为主表,外键设置在副表上!
2.主表的参考字段通常为主键!
3.添加数据:先添加主表,再添加副表
4.修改数据:先修改副表,再修改主表
5.删除数据:先删除副表,再删除主表

级联修改:解决外键关联先副后主的问题,修改主表后,副表相关数据自动更新
在外键约束声明后面加上:
 ON UPDATE CASCADE;(联级修改)
 ON DELETE CASCADE;(删除级联)

4. 数据库设计

三大范式:设计表尽量遵守

第一范式:要求表的每个字段必须是不可分割的独立单元

第二范式:在第一范式基础上,要求每张表只表达一个意思。表的每个字段都

    表的主键有依赖

第三范式:在第二范式基础上,要求每张表的主键之外的其他字段只能和主

     键有直接决定依赖关系

5.关联查询

关联查询:多个表之间的查询


1.交叉连接查询:产生笛卡尔积现象
SELECT 字段1,字段2 FROM 表1,表2;

2.内连接查询(只有满足条件才会显示)(重要)
1)SELECT 字段1,字段2 FROM 表1,表2
  WHERE 表1.字段=表2.字段; //表连接条件
多表查询:1.表 2.字段 3.表之间连接条件(连接条件数量是表数量-1,缺一不可)
2)另一种语法
 SELECT 字段1,字段2
  FROM 表1 别名  //AS可省略
  INNER JOIN 表2 别名
  ON 连接条件; //可使用别名

3.左[外]连接查询:使用表左边的数据匹配右边表数据,如果符合条件则显示,
   如果不符合则显示null,左边数据一定显示

 SELECT 字段1,字段2
  FROM 表1 别名
  LEFT OUTER JOIN 表2 别名
  ON 连接条件

4.右[外]连接: RIGHT OUTER JOIN

5.自连接查询:(单表)
 SELECT 字段1,字段2
  FROM 表1 别名
  LEFT OUTER JOIN 表1 别名
  ON 连接条件

6. 存储过程

存储过程:带有逻辑的sql语句

特点:1)效率高,在服务器端执行

    2)移植性很差,不同数据库存储过程不可移植

语法


1.创建格式: DELIMITER $ //声明结束符
  CREATE PROCEDURE 名称()
  BEGIN
    多个sql语句,逻辑语句
  END $  //$结束符,可更改

2.执行格式: CALL 名称(); //可带参数,如test(IN id参数名 INT类型)
参数: IN:表示输入参数,可以在存储过程中携带数据
    OUT:表示输出参数,可以从存储过程中返回结果
    INOUT:表示输入输出参数,既可输入,也可输出

MySQL全局变量:
 显示所有全局变量:show variable;
 显示某个全局变量:select @@变量名;
 1)character_set_client:mysql服务器接收数据的编码
 2)character_set_results:mysql服务器输出数据编码
 修改全局变量:set 变量名=修改值;

会话变量:只存在于当前连接中的变量
 定义会话变量:set @变量=值
 查看会话变量:select @变量

局部变量:在存储过程中使用的变量就叫局部变量
   只要存储过程执行完毕,局部变量就丢失

3.删除存储过程: DROP PROCEDURE 名称;

带有条件判断的存储过程,例:
DELIMITER $
CREATE PROCEDURE pro_testIF(IN num,OUT str VARCHAR(20))
BEGIN
 IF num=1 THEN
   SET str='星期一';
 ELSEIF num=2 THEN
   SET str='星期二'l;
END $

7. 触发器

作用:当操作了某张表时,希望触发一些行为,无需调用

创建触发器:(删除)

CREATE TRIGGER 名称 AFTER INSERT(DELETE) ON 表1 FOR EACH ROW

//当往员工表插入记录时

sql语句;

8. MySQL权限问题


root:所有权限
权限账户:只有部分权限(CURD)

修改mysql用户密码:
password:MD5加密函数(单向加密)
mysql数据库,用户配置:user表
修改密码:
UPDATE USER SET PASSWORD('123') WHERE USER='root'(用户名)

分配权限账户:
GRANT SELECT ON 数据库名.表名 TO '用户名'@'账户类型' IDENTIFIEN BY '密码'  //账户类型:ip localhost %:所有人

9.MySQL备份与还原

备份:mysqldump -uroot -p (数据库名) -h(ip)>c:/bak.sql

恢复:mysql -uroot -p (数据库名) < d:/back.sql

注:不需要登陆,但需要密码

明天打算做的事情:

继续看《MySQL必知必会》,顺便看一下Java的集合。


遇到的问题:



收获:



返回列表 返回列表
评论

    分享到