网站做自适应好不好,参加网站建设项目人员保障体系,it外包 源码,国内小程序最好的公司1.MySQL(老版)基础 开启MySQL服务: net start mysql mysql为安装时的名称 关闭MySQL服务: net stop mysql 注: 需管理员模式下运行Dos命令 . 打开服务窗口命令 services.msc 登录MySQL服务: mysql [-h localhost -P 3306] -u root -p****** Navicat常用快捷键
键动作CTRLG设…1.MySQL(老版)基础 开启MySQL服务: net start mysql mysql为安装时的名称 关闭MySQL服务: net stop mysql 注: 需管理员模式下运行Dos命令 . 打开服务窗口命令 services.msc 登录MySQL服务: mysql [-h localhost -P 3306] -u root -p****** Navicat常用快捷键
键动作CTRLG设置位置文件夹CTRL## 代表 0 至 9从收藏夹列表打开对象窗口F6命令列界面CTRLH历史日志CTRLQ新建查询F12仅显示活跃对象
常规
键动作CTRLN新建对象SHIFTCTRL## 代表 0 至 9添加收藏夹F8Navicat 主窗口CTRLTAB 或 SHIFTCTRLTAB下一个窗口F1说明CTRLF1在线文件
表设计器
键动作CTRLO打开表CTRLF查找字段F3查找下一个字段SHIFTF3查找上一个字段
表查看器或视图查看器
键动作CTRLD设计表或设计视图CTRLQ查询表或查询视图CTRLF查找文本F3查找下一个文本CTRLG前往行CTRL 左箭头当前记录的第一个数据列CTRL 右箭头当前记录的最后一个数据列CTRLHOME当前列的第一个数据行CTRLEND当前列的最后一个数据行CTRLPAGE UP 或 CTRL 上箭头当前窗口的第一个数据行CTRLPAGE DOWN 或 CTRL 下箭头当前窗口的最后一个数据行CTRLR在筛选向导套用筛选SHIFT 箭头选择单元格CTRLENTER打开编辑器来编辑数据INSERT 或 CTRLN插入记录CTRLDELETE删除记录CTRLS应用记录改变ESC取消记录改变CTRLT停止加载数据
视图或查询
键动作CTRLO加载视图或加载查询CTRL/注释行SHIFTCTRL/取消注释行CTRLE视图定义或查询编辑器CTRLR运行SHIFTCTRLR运行已选择的F7从这里运行一个语句CTRLT停止
SQL 编辑器
键动作CTRLF查找文本F3查找下一个文本CTRL 或 CTRL鼠标滚轮向上放大CTRL± 或 CTRL鼠标滚轮向下缩小CTRL0重设缩放
调试器
键动作F9运行F8逐过程F7逐语句SHIFTF7跳过
报表
键动作CTRLO在报表设计中打开报表CTRLP在报表设计中打印CTRLG在报表设计中组PAGE DOWN下一页PAGE UP上一页END第尾页HOME第一页
模型
键动作CTRLD在模型中新建图表CTRLP打印ESC选择H移动图表T新建表V新建视图L新建层A新建标签N新建笔记I新建图像R新建外键CTRLB显示已选择的表、视图、外键或形状为粗体CTRL 或 CTRL鼠标滚轮向上放大CTRL± 或 CTRL鼠标滚轮向下缩小CTRL0重设缩放
一、DQL基础学习data query language 基础查询 /*
一、基础查询语法: SELECT 查询列表 FROM 表名;1.查询列表可以是:表中的字段、常量值、表达式、函数2.查询的结果是一个虚拟的表格
*/
USE myemployees;
#1.查询表中单个字段
SELECTlast_name
FROMemployees;#2.查询表中多个字段
SELECTlast_name,salary,email
FROMemployees;#3.查询表中所有字段
SELECT*
FROMemployees;
#4.查询常量值
SELECT100;
SELECTTom;
#5.查询表达式
SELECT90 * 20;
SELECT100 % 98;
#6.查询函数
SELECTVERSION();#7.起别名 -- 便于理解;有重名时可以区分开来.
#方式一:
SELECTlast_name AS 姓,first_name AS 名
FROMemployees;#方式二:
SELECTlast_name 姓,first_name 名
FROMemployees;
SELECTsalary AS OUT put
FROMemployees;#8.去重
#案例1:查询员工表中涉及到的所有的部门编号,(去重相同编号) distinct
SELECT DISTINCTdepartment_id
FROMdepartments;#9.连接字段 concat()
SELECTCONCAT( last_name, first_name ) AS 姓名
FROMemployees;#10.查看表的结构
DESC departments;条件查询 /*
二、条件查询语法: select 查询列表 from 表名 where 筛选条件;
*/
#案例1:查询工资12000的员工信息
SELECT*
FROMemployees
WHEREsalary 12000;#案例2:查询部门编号不等于90号的员工名和部门编号
SELECTlast_name,department_id
FROMemployees
WHEREdepartment_id 90;#案例1:查询工资在10000到20000之间的员工名、工资以及奖金
SELECTlast_name,salary,commission_pct
FROMemployees
WHEREsalary 20000 AND salary 10000;#案例2:查询部门编号不是在90到110之间或者工资高于15000的员工信息
SELECT*
FROMemployees
WHERE( department_id 90 OR department_id 110 ) OR salary 15000;/*
方式三、模糊查询like一般和通配符使用:% 任意多个字符,包含0个字符between andinis null is not null
*/
# like
#案例1:查询员工名中包含字符a的员工信息
SELECT*
FROMemployees
WHERElast_name LIKE %a%;#案例2:查询员工名中第三个字符为e第五个字符为a的员工名和工资
SELECTlast_name,salary
FROMemployees
WHERElast_name LIKE __n_l%;#案例3:查询员工名中第二个字符为_的员工名
SELECTlast_name
FROMemployees
WHERElast_name LIKE _\_%;# between and
#案例1:查询工资在10000到20000之间的员工名、工资以及奖金
SELECTlast_name,salary,commission_pct
FROMemployees
WHEREsalary BETWEEN 10000 AND 20000;#in
#案例:查询员工的工种编号是IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
SELECTlast_name,job_id
FROMemployees
WHEREjob_id IT_PROT OR job_id AD_VP OR JOB_ID AD_PRES;
#-------------------------------------
SELECTlast_name,job_id
FROMemployees
WHEREjob_id IN ( IT_PROT, AD_VP, AD_PRES );# is null is no null ( 号不可以判断 null)
#案例1:查询没有奖金的员工名和奖金率
SELECTlast_name,commission_pct
FROMemployees
WHEREcommission_pct IS NULL;
SELECTlast_name,commission_pct
FROMemployees
WHEREcommission_pct IS NOT NULL;#安全等于
SELECTlast_name,commission_pct
FROMemployees
WHEREcommission_pct NULL;#案例2:查询工资为12000的员工信息
SELECT*
FROMemployees
WHEREsalary 12000;#案例3.查询员工号为176的员工的姓名和部门号和年薪
SELECTlast_name,department_id,employee_id,salary * 12 *(1IFNULL ( commission_pct, 0 )) AS 年薪
FROMemployees
WHEREemployee_id 176;*
FROMemployees; 排序查询 /*
排序查询:语法:select 查询列表from 表[where 筛选条件]order by 排序列表 asc | desc
*/#案例1:查询员工信息,要求工资从高到低排序
SELECT*
FROMemployees
ORDER BYsalary DESC;SELECT*
FROMemployees
ORDER BYsalary DESC,hiredate ASC;#案例2:查询员工的姓名和部门号和年薪按年薪降序按姓名升序
SELECTlast_name,department_id,salary * 12 *(1IFNULL ( commission_pct, 0 )) AS 年薪
FROMemployees
ORDER BY年薪 DESC,LENGTH( last_name ) ASC;#案例3:选择工资不在8000到17000的员工的姓名和工资按工资降序
SELECTlast_name,salary
FROMemployees
WHERENOT ( salary 8000 AND salary 17000 )
ORDER BYsalary DESC;#案例4:查询邮箱中包含e的员工信息并先按邮箱的字节数降序再按部门号升序
SELECT*,LENGTH( email )
FROMemployees
WHEREemail LIKE %e%
ORDER BYLENGTH( email ) DESC,department_id ASC; 常见函数 一、字符函数 /*进阶四:常见函数:语法: select 函数名(实参列表) [from 表];分类函数:单行函数: 如 concat lenght ifnull等;双行函数: 功能:做统计使用又称为统计函数、聚合函数、组函数
*/#一、字符函数-- 1.LENGTH() 返回字节大小
SELECT LENGTH(Tom);
SELECT LENGTH(张三);-- 2.CONCAT(str1,str2,...) 拼接字符串
SELECT CONCAT(last_name,_,first_name) AS 姓名
FROM employees; -- 3.UPPER(str)、LOWER(str) 大小写
SELECT UPPER(Tom);
SELECT LOWER(Tom);#案例1:将姓变大写名变小写然后拼接
SELECT CONCAT(UPPER(last_name),_,LOWER(first_name)) AS 姓名
FROM employees;-- 4.substr、substring 索引从 1 开始
#截取从指定索引处后面所有字符
SELECT SUBSTR(李莫愁爱上了陆展元,7) output;
#截取从指定索引处指定字符长度的字符
SELECT SUBSTR(李莫愁爱上了陆展元,1,3) output;#案例2:姓名中首字符大写其他字符小写然后用_拼接显示出来
SELECT
CONCAT(UPPER(SUBSTR(last_name,1,1)),_,LOWER(SUBSTR(last_name,2))) 姓名
FROMemployees;-- 5.instr 返回子串第一次出现的索引,如果找不到返回 0 ;
SELECT INSTR(望庐山瀑布,庐山) AS 子串索引; -- 2-- 6.trim 去除字符两边指定字符,默认参数是去除空格
SELECT TRIM( 张三 ) AS 姓名;
SELECT TRIM(a FROM aaaaa张aaaaaaa三aaaaaaaaa) AS 姓名;-- 7.lpad,rpad 用指定的字符实现左(右)填充指定长度SELECT LPAD(张三,10,*);
SELECT RPAD(张三,10,*);-- 9.replace 替换
SELECT REPLACE(周芷若爱上了张无忌,周芷若,赵敏) AS 姓名; 二、数学函数 #二、数学函数-- 1.round 四舍五入
SELECT ROUND(-1.55);
SELECT ROUND(1.155,2);-- 2.ceil 向上取整,返回 该参数最小整数
SELECT CEIL(-1.02);
SELECT CEIL(5.2);-- 3.floor 向下取整,返回 该参数最大整数
SELECT FLOOR(-9.99);
SELECT FLOOR(9.99)-- 4.truncate 截断
SELECT TRUNCATE(5.6854,1);-- 5.mod 取余 mod(a,b) : a-a/b*b 10-10/3*3 1
SELECT MOD(10,3);
SELECT 10 % 3; 三、日期函数 格式表 格式描述%a缩写星期名%b缩写月名%c月数值%D带有英文前缀的月中的天%d月的天数值(00-31)%e月的天数值(0-31)%f微秒%H小时 (00-23)%h小时 (01-12)%I小时 (01-12)%i分钟数值(00-59)%j年的天 (001-366)%k小时 (0-23)%l小时 (1-12)%M月名%m月数值(00-12)%pAM 或 PM%r时间12-小时hh:mm:ss AM 或 PM%S秒(00-59)%s秒(00-59)%T时间, 24-小时 (hh:mm:ss)%U周 (00-53) 星期日是一周的第一天%u周 (00-53) 星期一是一周的第一天%V周 (01-53) 星期日是一周的第一天与 %X 使用%v周 (01-53) 星期一是一周的第一天与 %x 使用%W星期名%w周的天 0星期日, 6星期六%X年其中的星期日是周的第一天4 位与 %V 使用%x年其中的星期一是周的第一天4 位与 %v 使用%Y年4 位%y年2 位#三、日期函数
#now返回当前系统日期时间
SELECT NOW()#curdate返回当前系统日期,不包含时间
SELECT CURDATE()#curtime返回当前时间,不包含日期
SELECT CURTIME()#可以获取指定的部分,年、月、日、小时、分钟、秒
SELECT YEAR(NOW());
SELECT MONTH(NOW());
SELECT MONTHNAME(NOW()); #返回英文格式
SELECT SECOND(NOW()) ;#datediff(exp1,exp2): 返回两个日期相差的天数
SELECT DATEDIFF(NOW(),2000-1-24);#str_to_date 将字符通过指定的格式转换成日期SELECT STR_TO_DATE(NOW(),%Y-%m-%d) AS 时间;#date_format: 将日期转换成指定格式的字符串指定的格式是输出格式
SELECT DATE_FORMAT(NOW(),%b %d %Y %h:%i %p);#案例1:查询有奖金的员工名和入职日期(xx月/xx日xx年)
SELECT last_name,DATE_FORMAT(hiredate,%m月/%d日%y年) AS 入职时间
FROM employees
WHEREcommission_pct IS NOT NULL; 四、其他函数 #其他函数SELECT VERSION();
SELECT DATABASE();
SELECT USER(); 五、流程控制函数 -- 1.if函数: if else 的效果
SELECT last_name,commission_pct,IF(commission_pct IS NOT NULL,有奖金,没奖金) AS 备注
FROMemployees;-- 2.case函数的使用一: swich case 的效果/*
案例:查询员工的工资要求部门号30显示的工资为1.1倍部门号40显示的工资为1.2倍部门号50显示的工资为1.3倍其他都门显示的工资为原工资
*/
SELECTsalary AS 原始工资,department_id,
CASE department_id WHEN 30 THENsalary * 1.1 WHEN 40 THENsalary * 1.2 WHEN 50 THENsalary * 1.3 ELSE salary
END AS 新工资
FROMemployees;-- 3.case函数的使用二: 类似于多重 if 的效果/*
案例1:查询员工的工资的情况如果工资20000,显示A级别如果工资15000,显示B级别如果工资10000,显示c级别否则,显示D级别
*/
SELECT salary,
CASE WHEN salary 20000 THEN AWHEN salary 15000 THEN BWHEN salary 10000 THEN CELSE D
END AS 等级
FROM employees;
六、分组函数 #六、分组函数/*功能用作统计使用又称为聚合函数或统计函数或组函数分类sum 求和、avg 平均值、max 最大值、min 最小值、count 计数非空特点:1、sum、avg 一般用于处理数值型max、min、count可以处理任何类型2、以上分组函数都忽略nu11值3、可以和 distinct搭配实现去重的运算4、count函数的单独介绍一般使用 count(*)用作统计行数和分组函数一同查询的字段有限制要求是group by后的字段 */-- 1.sum、avg、max、min、countSELECT SUM(salary) 求和 ,AVG(salary) 平均值,MAX(salary) 最大值,MIN(salary) 最小值 FROM employees;SELECT SUM(DISTINCT salary) FROM employees;-- 2.countSELECT COUNT(*) FROM employees;SELECT COUNT(1) FROM employees;#案例1.查询部门编号为90的员工个数SELECT COUNT(*)FROM employeesWHEREdepartment_id 90; 分组查询 #进阶五:分组查询
/*语法:select 分组函数,列(要求出现在 group by 的后面)from 表[where 筛选条件]group by 分组列表[order by 子句]注意:查询列表必须特殊,要求是分组函数和 group by后出现的字段
特点:
1、分组查询中的筛选条件分为两类数据源 位置 关键字
分组前筛选 原始表 group by子句的前面 where
分组后筛选 分组后的结果集 group by子句的后面 having①分组函数做条件肯定是放在 having子句中②能使用分组前筛选就尽量使用 --效率问题*/
#案例1:查询邮箱中包含a字符的,每个部门的平均工资
SELECT AVG(salary),department_id
FROM employees
WHERE email LIKE %a%
GROUP BY department_id;#案例2:查询有奖金的每个领导手下员工的最高工资
SELECT MAX(salary),manager_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY manager_id;#案例3:查询哪个部门的员工个数2
#①查询每个部门的员工个数
SELECT COUNT(*),department_id
FROM employees
GROUP BY department_id
#②根据①的结果进行筛选,查询哪个部门的员工个数2
HAVING COUNT(*) 2;#案例4:查询每个工种有奖金的员工的最高工资12000的工种编号和最高工资
#①查询每个工种有奖金的员工的最高工资
SELECT MAX(salary) 最高工资,job_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY job_id
#②根据①结果继续筛选,最高工资12000
HAVING MAX(salary) 12000;#案例5:查询领导编号102的每个领导手下的最低工资5000的领导编号是哪个,以及其最低工资
SELECT MIN(salary),manager_id
FROM employees
WHERE manager_id 102
GROUP BY manager_id
HAVING MIN(salary) 5000;#案例6:查询每个部门每个工种的员工的平均工资,并排序
SELECT AVG(salary),department_id,job_id
FROM employees
GROUP BY department_id,job_id
ORDER BY AVG(salary) DESC; 练习: #练习:
#1.查询各job_id的员工工资的最大值,最小值,平均值,总和,并按 job_id升序
SELECT MAX(salary), MIN(salary), AVG(salary), SUM(salary),job_id
FROM employees
GROUP BY job_id
ORDER BY job_id;
#2.查询员工最高工资和最低工资的差距(DIFFERENCE)
SELECT MAX(salary)-MIN(salary) DIFFERENCE
FROM employees;#3.查询各个管理者手下员工的最低工资,#其中最低工资不能低于6000,没有管理者的员工不计算在内
SELECT MIN(salary),manager_id
FROM employees
WHERE manager_id IS NOT NULL
GROUP BY manager_id
HAVING MIN(salary) 6000;#4.查询所有部门的编号,员工数量和工资平均值,并按平均工资降序
SELECT department_id,COUNT(*),AVG(salary)
FROM employees
GROUP BY department_id
ORDER BY AVG(salary) DESC;#5.选择具有各个 job_id的员工人数
SELECT COUNT(*),job_id
FROM employees
WHERE job_id IS NOT NULL
GROUP BY job_id; 连接查询 #进阶六:连接查询
/*1、等值连接①多表等值连接的结果为多表的交集部分②n表连接,至少需要n-1个连接条件③多表的顺序没有要求④一般需要为表起别名⑤可以搭配前面介绍的所有子句使用,比如排序、分组、筛选
*/
#三表连接
#案例:查询员工名、部门名和所在的城市
SELECT first_name,last_name,department_name,city
FROM employees e,departments d,locations l
WHERE e.department_id d.department_id
AND d.location_id l.location_id
ORDER BY last_name DESC;#2、非等值连接
#案例1:查询员工的工资和工资级别
SELECT salary,grade_level
FROM employees e,job_grades g
WHERE e.salary BETWEEN g.lowest_sal AND g.highest_sal 基础查询补充 sql99语法: 语法 select 查询列表from 表1 别名 【连接类型】[type ] join 表2 别名 #inner 可以省略on 连接条件【where 筛选条件】【group by 分组】【having 筛选条件】【order by 排序列表】内连接同上连接类型是inner SELECT last_name,department_name
FROMemployees e INNER JOIN departments d ON e.department_id d.department_id ;- 外连接: 左外left 【outer】 SELECT b.name,bo.* FROMbeauty b LEFT JOIN boys bo ON b.boyfriend_id bo.id WHERE bo.id IS NULL ; - 右外right【outer】SELECT d.*,e.employee_id FROMemployees e RIGHT OUTER JOIN departments d ON d.department_id e.department_id WHERE e.employee_id IS NULL ; - 全外full 【outer】 mysql不支持SELECT b.*,bo.* FROMbeauty b FULL OUTER JOIN boys bo ON b.boyfriend_id bo.id ; - 交叉连接(也就是笛卡尔乘积)crossSELECT b.*,bo.* FROMbeauty b CROSS JOIN boys bo ; 子查询 含义出现在其他语句中的select语句称为子查询或内查询外部的查询语句称为主查询或外查询.嵌套在其他语句内部的select语句成为子查询或内查询外面的语句可以是insert、update、delete、select等一般select作为外面语句较多 分类 按子查询出现的位置 select后面仅仅支持标量子查询 from后面支持表子查询 where或having后面支持标量子查询列子查询行子查询较少 exists后面相关子查询支持表子查询 按功能、结果集的行列数不同 标量子查询结果集只有一行一列 列子查询结果集只有一列多行 行子查询结果集有一行多列 表子查询结果集一般为多行多列 特点 子查询放在小括号内 子查询一般放在条件的右侧wherehaving 标量子查询一般搭配着单行操作符使用 列子查询一般搭配着多行操作符使用IN、ANY/SOME、ALL 子查询的执行优选与主查询执行主查询的条件用到了子查询的结果 分页查询 应用场景当要显示的数据一页显示不全需要分页提交sql请求 语法 select 查询列表from 表【join type】 join 表2on 连接条件where 筛选条件group by 分组字段having 分组后的筛选order by 排序的字段】limit offsetsize# offset要显示条目的起始索引从0开始# size要显示的条目个数 特点 limit语句放在查询语句的最后 公式 要显示的页数page每页的条目数size select 查询列表
from 表
limit page - 1* size, size; 联合查询 union联合合并将多条查询语句的结果合并成一个结果 应用场景要查询的结果来自于多个表且多个表没有直接的连接关系但查询的信息一致 特点 要求多条查询语句的查询列数是一致的要求多条查询语句的查询的每一列的类型和顺序最好是一致的union关键字默认去重如果使用union all可以包含重复项 /*语法
查询语句1
union 【ALL】
查询语句2
union 【ALL】
…
*/#引入案例查询部门编号90或邮箱包含a的员工信息
#普通查询:
SELECT *
FROMemployees
WHERE email LIKE %a% OR department_id 90 ;#联合查询
SELECT * FROM employees
WHERE email LIKE %a%
UNION
SELECT * FROM employees
WHERE department_id 90; 查询总结
语法
select 查询列表 7
from 表1 别名 1
连接类型 join 表2 2
on 连接条件 3
where 筛选 4
group by 分组列表 5
having 筛选 6
order by 排序列表 8
limit 排序列表 9二、DML语言(Data Manipulation Language)
插入 、修改 、删除
/*
涉及到数据:插入insert语法:方式一:insert into 表名u…values值1…方式二:insert into 表名 set 列名值列名值…修改update语法:修改单表的记录:update 表名set 列新值列新值…where 筛选条件修改多表的记录:update 表1 别名inner | left | right join 表2 别名on 连接条件set 列值…where 筛选条件删除delete方式一:语法:单表的删除:delete from 表名 where 筛选条件[limit 值]多表的删除:delete 别名要删哪个表就写哪个表的别名都删就都写from 表1 别名inner | left | right join 表2 别名 on 连接条件where 筛选条件limit 条目数方式二:语法:truncate table 表名truncate语句中不许加where特点:一删全删truncate删除没有返回值delete删除有返回值truncate删除不能回滚delete删除可以回滚
*/USE girls;INSERT INTO boys(id,boyName,userCP)
VALUES(6,李四,100);INSERT INTO boys
SET boyName 王五,userCP 50;SELECT * FROM boys;UPDATE boys
SET userCP 80
WHERE userCP50;DELETE FROM boys
WHERE boyName LIKE 张%;TRUNCATE TABLE boys;
/*
修改数据:修改单表的记录:语法:update 表名set 列新值列新值…where 筛选条件修改多表的记录:语法:update 表1 别名inner | left | right join 表2 别名on 连接条件set 列值…where 筛选条件*/UPDATE boys SET boyName 张三
WHERE boyName cc;
三、DDLData Definition Language数据定义语言
库的管理
/*
一、创建库create database [if not exists] 库名 [character set 字符集];
二、修改库alter database 库名 character set 字符集;
三、删除库drop database [if exists] 库名;
*/
#创建库
CREATE DATABASE IF NOT EXISTS xiaozaiyi;
#修改库
ALTER DATABASE xiaozaiyi CHARACTER SET gbk;
#删除库
DROP DATABASE IF EXISTS xiaozaiyi;
表的管理
/*
表的管理:一、创建表create table [if not exists] 表名(字段名 字段类型 [约束],....,字段名 字段类型 [约束]);二、修改表1.添加列alter table 表名 add column 列名 类型 [first | after 字段名];2.修改类型或约束alter table 表名 modify column 列名 新类型 [新约束];3.修改列名alter table 表名 change column 列名 新列名 类型;4.删除列alter table 表名 drop colunm 列名5.修改表名alter table 表名 rename [to] 新表名;三、删除表drop table [if exists ] 表名;*/
#创建表
USE girls;
CREATE TABLE IF NOT EXISTS books(id INT,author VARCHAR(10),price INT
);#1.添加列
ALTER TABLE books ADD COLUMN t1 INT;
ALTER TABLE books ADD COLUMN t2 INT FIRST;
ALTER TABLE books ADD COLUMN t3 INT AFTER id;
#2.修改类型或约束
ALTER TABLE books MODIFY COLUMN t2 DOUBLE;#3.修改列名
ALTER TABLE books CHANGE COLUMN t2 t4 DOUBLE;#4.删除列
ALTER TABLE books DROP COLUMN t4;#5.修改表名
ALTER TABLE books RENAME boks;
ALTER TABLE boks RENAME books;#删除表
DROP TABLE IF EXISTS books;DESC books;
DESC boks; 数据类型 整型:
类型字节范围tinyint1-128 ~ 127 无符号 0-255smallint2-32768 ~ 32767mediumint3略int4略bigint8略
注: int(M) M表示总位数
浮点型:
类型字节范围float4略double8略
注: 定义浮点型时需指定总位数和小数位数。 float(M, D), double(M, D)
M表示总位数D表示小数位数。
定点数:
类型字节decimal4decimal(M, D)M也表示总位数D表示小数位数,默认decimal(10,0)
字符型:
类型备注char定长字符串速度快但浪费空间varchar(M)变长字符串速度慢但节省空间, M表示能存储的最大长度此长度是字符数非字节数。text在定义时不需要定义长度也不会计算总长度。blob二进制字符串字节字符串
日期型:
类型字节说明备注datetime8日期时间1000-01-01 00:00:00 到 9999-12-31 23:59:59date3日期1000-01-01 到 9999-12-31time3时间-838:59:59 到 838:59:59timestamp4时间戳1970-0-0 到 2038-01-19 03:14:07year1年份1901 - 2155 常见的约束 主键: primary key 1.能唯一标识记录的字段可以作为主键. 2.一个表只能有一个主键,主键具有唯一性。 创建方式: #方式一
create table tab ( id int, stu varchar(10) primary key );
#方式二:
create table tab ( id int, stu varchar(10), age int, primary key (stu, age));唯一索引唯一约束): unique 1.使得某字段的值也不能重复。可以为空 约束: not null 1.null不是数据类型是列的一个属性。 2.null,允许为空。默认。 3.not null,非空用于保证该字段的值不能为空 默认值属性:default默认用于保证该字段有默认值。比如性别,年龄。 创建方式: create table tab ( age int default 18);自动增长约束:auto_increment 标识列 自动增长必须为索引主键或unique表只能存在一个字段为自动增长.默认为1开始自动增长。可以通过表属性 auto_increment x进行设置或 alter table tbl auto_increment x; 面试题: 特点:1.标识列必须和主键搭配吗不一定但要求是一个key。2.一个表可以有几个标识列至多一个。3.标识列的类型只能是数值型int一般是intfloatdouble4.标识列可以通过SET auto_increment_increment 3;设置步长,可以通过手动插入值设置起始值。 CREATE TABLE tab_identity (id INT PRIMARY KEY AUTO_INCREMENT,NAME varcahr (20)
) ;#设置表时列的步长
SHOW VARIABLES LIKE %auto_increment%;
SET auto_increment_increment 3; 检查约束:check【mysql中不支持】。 外键:foreign key 用于限制两个表的关系用于保证该字段的值必须来自于主表的关联列的值。在从表添加外键约束用于应用主表中某列的值。比如学生表的专业编号员工表的部门编号员工表的工种编号。 存在外键的表称之为从表子表外键指向的表称之为主表父表。 作用保持数据一致性完整性主要目的是控制存储在外键表从表中的数据。 CREATE TABLE IF NOT EXISTS stuinfo (id INT PRIMARY KEY,stuname VARCHAR (20) NOT NULL,gender CHAR(1),seat INT UNIQUE,age INT DEFAULT 18,majorID INT,CONSTRAINT fk_stuinfo_major FOREIGN KEY (majorID) REFERENCES major (id)
) ;
四、TCLTransaction Control Language事务控制语言 视图 含义: 是一个虚拟表其内容由查询定义。同真实的表一样在引用视图时动态生成。视图具有表结构文件但不存在数据文件。 视图的可更新性和视图中查询的定义有关系以下类型的视图是不能更新的。注意视图一般用于查询而不是更新。 创建 语法: create view 视图名 as 查询语句 #1.视图创建:
CREATE VIEW view1 AS
SELECT stuname,majorname
FROMsuinfo s
INNER JOIN major m
ON s.majorid m.id ;SELECT * FROM view1
WHERE stuname LIKE 张% ;#2.视图的修改
#方式1
create or replace view 视图名 as 查询语句
#方式2
alter view 视图名 as 查询语句#3.查看视图
show create view 视图名
desc 视图名#4.删除视图
drop view 视图名视图名… 事务(transaction) 含义: 事务是指逻辑上的一组操作组成这组操作的各个单元要不全成功要不全失败。 事务的特性(acid): 原子性Atomicity一致性Consistency隔离性Isolation持久性Durability #事务开启 所有被执行的SQL语句均被认作当前事务内的SQL语句。
START TRANSACTION;
#事物逻辑
....
#事务提交回滚
ROLLBACK; 事务回滚 等同 ROLLBACK WORK
COMMIT; 事务确认 等同 COMMIT WORK#保存点
SAVEPOINT 保存点名称 -- 设置一个事务保存点
ROLLBACK TO SAVEPOINT 保存点名称; -- 回滚到保存点
RELEASE SAVEPOINT 保存点名称; -- 删除保存点 #开始一个事物.等同与 START TRANSACTION
#提交
START TRANSACTION;
UPDATE boys SET boyName zzz WHERE boyName 张三;
UPDATE boys SET boyName xxx WHERE boyName 王五;
COMMIT;
#回滚
START TRANSACTION;
UPDATE boys SET boyName 张三 WHERE boyName zzz;
UPDATE boys SET boyName xxx WHERE boyName 王五;
ROLLBACK;#保存点
START TRANSACTION;
UPDATE boys SET boyName zzz WHERE boyName 张三;
SAVEPOINT a;
UPDATE boys SET boyName xxx WHERE boyName 王五;
ROLLBACK TO SAVEPOINT a; – 注意 1. 数据定义语言DDL语句不能被回滚比如创建或取消数据库的语句和创建、取消或更改表或存储的子程序的语句。2. 事务不能被嵌套2.MySQL(新版)基础
2022年2月10日20:04:03
安装
查看是否已经安装了mysql
rpm -qa|grep mysql #无输出说明没有安装cat /etc/redhat-release
MySQL Yum存储库
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm安装mysql源
rpm -Uvh mysql80-community-release-el7-3.noarch.rpmcd /etc/yum.repos.d/-rw-r--r--. 1 root root 2076 4月 25 2019 mysql-community.repo
-rw-r--r--. 1 root root 2108 4月 25 2019 mysql-community-source.repo选择masql版本 使用MySQL Yum Repository安装MySQL默认会选择当前最新的稳定版本 [rootlocalhost ~] sudo yum-config-manager --enable mysql80-community
[rootlocalhost ~] sudo yum-config-manager --disable mysql57-community安装mysql
sudo yum install mysql-community-serversystemctl start mysqld.service
systemctl status mysqld.servicetar 包安装
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.31-linux-glibc2.12-x86_64.tar.xztar -xvf mysql-8.0.31-linux-glibc2.12-x86_64.tar.xzmv mysql-8.0.31-linux-glibc2.12-x86_64 /usr/local/mysqlgroupadd mysql
useradd -r -g mysql mysqlchown -R mysql.mysql /usr/local/mysqlcd /usr/local/mysqlmkdir data
mkdir logsvi /etc/my.cnf my.cnf
[client]
port 3306
socket /usr/local/mysql/data/mysql.sock
default-character-set utf8mb4[mysql]
default-character-set utf8mb4[mysqld]
character-set-client-handshake FALSE
character-set-server utf8mb4
collation-server utf8mb4_general_ci
init_connect SET NAMES utf8mb4port 3306
socket /usr/local/mysql/data/mysql.sock
skip-external-locking
key_buffer_size 16M
max_allowed_packet 1M
table_open_cache 64
sort_buffer_size 512K
net_buffer_length 8K
read_buffer_size 256K
read_rnd_buffer_size 512K
myisam_sort_buffer_size 8M
datadir /usr/local/mysql/data
lower_case_table_names1[mysqldump]
quick
max_allowed_packet 16M[mysql]
no-auto-rehash[myisamchk]
key_buffer_size 20M
sort_buffer_size 20M
read_buffer 2M
write_buffer 2M[mysqlhotcopy]
interactive-timeout
yum install -y libaio./mysqld --usermysql --basedir/usr/local/mysql/ --datadir/usr/local/mysql/data/ --initialize --lower-case-table-names1E;-S3CqHCp,/usr/local/mysql/support-files/mysql.server start
ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
ln -s /usr/local/mysql/mysql.sock /var/mysql.sock
service mysql restartcp -a ./support-files/mysql.server /etc/init.d/mysqlchmod x /etc/init.d/mysql
chkconfig --add mysql
chown -R mysql:mysql /usr/local/mysql/ln -s /usr/local/mysql/bin/mysql /usr/binservice mysql start #服务启动
service mysql status #查看服务状态
service mysql stop #停止服务
service mysql restart #重启服务 flush privileges;# 修改密码#8.0ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 1932794922.; #5.6use mysql;UPDATE user SET Password PASSWORD(1932794922.) WHERE user root;flush privileges;开放远程连接
use mysql;
update user set user.Host% where user.Userroot;# 如何报错ERROR 1062 (23000): Duplicate entry %-root for key PRIMARY
GRANT ALL PRIVILEGES on *.* to root% IDENTIFIED BY 1932794922. with grant option;
flush privileges; //刷新权限
设置开机自启动可选
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --list
注如果看到mysqld的服务并且3,4,5都是on的话则成功如果是off则执行
chkconfig --level 345 mysqld on