发表于: 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的集合。
遇到的问题:
收获:
评论