1.卸载和安装, 卸载的时候c盘打开隐藏显示把里面的mysql卸载干净,控制面板上面卸载了,再把文件夹全删了(简单粗暴的方法),回头再安装。更改my.in文件(两处) 配环境变量。
2.数据库用到的一些代码语句
1.创建数据库: CREATE DATABASES mydb1
CREATE DATABASES IF NOT EXISTS mydb2 character SET gbk;
CREATE DATABASES mydb3 character SET GBK COLLATE gbk_chinese_ci;
2.查看当前数据库服务器中的数据库 show databases;
查看以前创建的 show create database mydb2;
3.修改:ALTER DATABASE mydb2 character SET utf8;
4.删除 DROP DATABASE db_name;
3.DML操作 对表中的数据进行增删改的操作 INSERT UPDATE DELETE
(1)INSERT INTO 表名(列明1,列明2) ...VALUES(列值1,列值2);
个数和顺序要一一对应,不能超过列定义
(2)UPDATE 表名 SET 列名1=列值1,列名2=列值2...where 列名=值
eg:UPDATE student SET age=22;
(3)删除操作 DELETE
删除指定记录 DELETE FROM 表名 where name=‘元宝’;
删除表中所有数据 DELETE FROM emp; (删库跑路专用)
*********************************************************************************
*************************重点************************DQL数据查询************
关键字 select
SELECT selection_list /要查询的列名称/
FROM table_list /要查询的表名称/
WHERE condition /行条件/
GROUP BY grouping_columns /对结果分组/
HAVING condition /分组后的行条件/
ORDER BY sorting_columns /对结果排序/
LIMIT offset_start, row_count /结果限定/
1.1.简单查询: select * from stu;
1.2条件查询 select * from stu where gender='male' and age>10;
用到的比较运算符,算数运算符和关系运算符 =、!=、<>、<、<=、>、>=; IN(set); IS NULL; AND OR NOT +-*/
1.3模糊查询 关键字LIKE
a._ 任意一个字符
b. %任意0-n个字符 ‘秦%’----》 首字为 秦
c.select * from stu where sname like ‘____’; 四个字节
1.4字段控制查询
(1)去除重复记录,select distinct sal from emp;
select distinct sal,comm from emp;
(2)查看两者之和, select * ,sal+comm from emp;(同类型)
select * ,sal+ifnull(comm,0) from emp;
(3)给列明添加别名 select *,sal+ifnull(comm,0)as total from emp;(可以省略as关键字)
1.5 排序
(1)查询所有学生记录,按年龄升序排序 select * from stu order by age asc;
(2)降序排列 select *from stu order by age desc;
1.6 聚合函数 纵向运算的函数
(1)count: 统计指定列不为null的记录行数;select count(*)as ‘cnt’ from emp;
(2)max: 计算最大值
(3)min :计算最小值
(4)sum 指定列的数值和
(5)avg 计算指定列的平均值
1.7分组查询 group by 凡是和聚合函数同时出现的列明,一定要卸载group by之后
1.7.2 having 子句, select deptno,sum(sal) from emp group by deptno having sum(sal)> 9000;
having和where的区别
a.having是在分组后对数据进行过滤,w here是字分组前对数据进行过滤
b.having 后面可以使用分组函数,where后面不可以使用分组函数。
where是对分组前记录的条件没如果没有满足where子句的条件,那么这行不会参见分组,而having是对分组后数据的约束。
1.8limit 限制 用来限定查询结果的起始行以及总行数,select *from emp limit 0,5
总结: 查询语句书写顺序:select列from 表 where-group by-having -order by-limit
查询语句执行顺序:from表 where-group by-having-select-order by-limit
一.sql语句:
ddl数据定义语言 创建库 创建表
dml数据操纵语言 添加删除更新 insert delete update
dql 数据查询语言 select
dcl 数据控制语言,用户的创建权限分配
二.dql
条件查询 where 运算符 = != <> > >= < <= in between and and or not + - * / %
模糊查询 通配符 _表示一个字符 %表示任意多个字符
字段查询 distinct去重 合并 别名
排序 order by
聚合函数 count sun max min avg
分组查询 group by having
limit 限制查询
MySQL约束与多表查询
1.函数
CHARSET(str) //返回字串字符集
CONCAT (string2 [,... ]) //连接字串
INSTR (string ,substring ) //返回substring首次在string中出现的位置,不存在返回0
LCASE (string2 ) //转换成小写
LEFT (string2 ,length ) //从string2中的左边起取length个字符
LENGTH (string ) //string长度,字节的长度
LOAD_FILE (file_name ) //从文件读取内容
LOCATE (substring , string [,start_position ] ) 同INSTR,但可指定开始位置
LPAD (string ,length ,pad ) //重复用pad加在string开头,直到字串长度为length
LTRIM (string ) //去除前端空格
REPEAT (string2 ,count ) //重复count次
REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替换search_str
RPAD (string ,length ,pad) //在str后用pad补充,直到长度为length
RTRIM (string ) //去除后端空格
STRCMP (string1 ,string2) //逐字符比较两字串大小,
SUBSTRING (str , position [,length ]) //从str的position开始,取length个字符,
TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) //去除指定位置的指定字符
UCASE (string2 ) //转换成大写
RIGHT(string2,length) //取string2最后length个字符
SPACE(count) //生成count个空格
注:mysql中处理字符串时,默认第一个字符下标为1,即参数position必须大于等于1
数学类函数
ABS (number2 ) //绝对值
BIN (decimal_number) //十进制转二进制
CEILING (number2 ) //向上取整
CONV(number2,from_base,to_base) //进制转换
FLOOR (number2 ) //向下取整
FORMAT (number,decimal_places ) //保留小数位数
HEX (DecimalNumber) //转十六进制
POWER (number ,power ) //求指数
RAND([seed]) //随机数
ROUND (number [,decimals ]) //四舍五入,decimals为小数位数] 注:返回类型并非均为整数
日期时间类
ADDTIME (date2 ,time_interval) //将time_interval天加到date2 秒
ADDDATE('2019-04-15',2); #2天
CURRENT_DATE ( ) //当前日期
CURRENT_TIME ( ) //当前时间
CURRENT_TIMESTAMP ( ) //当前时间戳
DATE (datetime ) //返回datetime的日期部分
DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或时间
DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式显示datetime
DATE_SUB (date2 , INTERVAL d_value d_type ) //在date2上减去一个时间
DATEDIFF (date1 ,date2 ) //两个日期差
DAY (date ) //返回日期的天
DAYNAME (date ) //英文星期
DAYOFWEEK (date ) //星期(1-7) ,1为星期天
DAYOFYEAR (date ) //一年中的第几天
EXTRACT (interval_name FROM date ) //从date中提取日期的指定部分
MAKEDATE (year ,day ) //给出年及年中的第几天,生成日期串
MAKETIME (hour ,minute ,second ) //生成时间串
MONTHNAME (date ) //英文月份名
NOW ( ) //当前时间
SEC_TO_TIME (seconds ) //秒数转成时间
STR_TO_DATE (string ,format ) //字串转成时间,以format格式显示
TIMEDIFF (datetime1 ,datetime2 ) //两个时间差
TIME_TO_SEC(time) //时间转秒数
WEEK (date_time [,start_of_week ]) //第几周
YEAR (datetime ) //年份
DAYOFMONTH(datetime) //月的第几天
HOUR(datetime) //小时
数据完整性
作用:保证用户输入的数据存到数据库是符合规范的。 在表中添加约束。
1.主键约束:每个表中要有一个主键,数据唯一且不能为null;
添加方式: a.直接在属性后面加上primary key;
b.在最后加一个primary key写上属性的名字,可以写多个;
c.在表格写完的 ; 后面加alter table student add primary key(不推荐);
2.唯一约束:数据不能重复,可以为null 直接在属性后面添加unique
3.自动增长列:不能单独使用,一般需要和主键配合使用,给主键添加自动增长的数值,列只能是数值类型;
加到key 后面 auto_increment后面, 创建表格后面的括号写上 auto_increment=100; 自动增长的数字;
自动增长的是跟着最大的那个数加的;
4.域完整性约束:作用限制此单元格的数据正确,不对其他单元格起作用,域代表当前单元格。
多表查询
1.一对多关系: 在多的一方创建一个字段,字段作为外键指向一方的主键
2.多对多关系:需要创建第三张表,中间表至少两个字段,这两个字段分别作为外键指向各自一方的主键。
3.一对一关系:在多的一方创建一个外键指向一方的主键,将外键设置为unique和非空, 主键对应让一对一的双方的主键进行建立关系。
二.多表查询
1.合并结果集 union union all
2.连接查询 a.内连接: inner oin on 查询结果必须满足条件
b.外连接 outer join on 查询出的结果存在不满足条件的可能;
c.左外连接 left join 右外连接 right join 先查询出左表然后再查询右表不满足显示null
3.子查询: 合并结果集 a.union 去除重复记录, select *from emp union select *from emp2;
b.union all 不去重复的记录,select *from emp1 union all select *from emp2;
被合并的两个结果,列数必须相同,列表型可以不同。
3.2 连接查询 求出多个表的乘机,产生笛卡尔积,一个a 后面连接所有的b