Mysql基础
1.mysql介绍
mysql 的前身是一家瑞典的mysqlab公司,08年被sun公司收购,09年sun被oracle公司收购
mysql的优点:
1.开源、免费、成本低
2.性能高
3.移植性好
4.体积小,便于安装
mysql的语法规范:
1.不区分大小写,建议关键字大写
2.sql语句按条执行
3.注释: # --_ /* */
mysql的语言分类
DQL:数据查询语言 select(查)
DML:数据操纵语言 insert(插入) update(更新) delete(删除)
DDL:数据定易语言 create(增) drop(删) alter(改)
DCL:数据控制语言 commit(提交) rollback(回退)
2.SQL常见命令
select version() 显示当前的数据库版本
show databases 显示当前的数据库
use 数据库名 切换数据库
show tables 显示当前库所有的表
show tables from 库名 跨库查看表
desc 表名 查看表的结构
3.常见函数
1.字符函数 concat(联结合并) substr(取字符串的子串) upper(上面) lower(下面) trim(函数移除字符串两侧的空白字符或其他预定义字符) ltrim(左移除) rtrim(右移除) lpad(左填充) rpad(右填充) length(返回长度) instr(是否是字符串)
2.数字函数 round(第二个参数指定保留几位有效数字) rand(0<=rand()<1) floor(向下取整) ceil(向上取整) mod(取余) truncate(阶段,保留几位有效数字)
3.日期函数 now(当前所有时间) curdate(当前日期) curtime(当前世界) str_to_date(字符串模式) date_format (日期格式) datediff(函数返回两个日期之间的天数)
%Y 四位的年份 %y 2位的年份
%m 月份(01,02...12) %c 月份(1,2,...12)
%d 日(01,02...) %H 小时(24小时制)
%h 小时(12小时制) %i 分钟(00,01...59)
%s 秒(00,01...59)
4.流程控制函数
if表达式:if(expr1,expr2,expr3)
case 比较表达式 when 值1 then 表达式1 when 值2 then 表达式2 else 表达式3 end
ifnull(expr1,expr2) 如果expr1不为null,则ifnull()的返回值为expr1,否则为expr2
if 比较表达式 then 表达式1 elseif 比较表达式2 then 表达式2 else 表达式3 end if 只能放在begin end 中
(标签:)while 循环条件 do 循环体 end while(标签)
跳转:if 条件 then leave 标签
5.分组函数
sum (求和) max(最大值) min(最小值) avg(平均值) count(计数)
以上五个函数都忽略了null值(除了count(*);sum和avg一把用于数值型;都可以搭配distinct使用
6.其他函数
version 版本 database 当前库 user 当前连接用户
4.DQL数据查询语言
可以查询常量值、表达式、单个字段、多个字段
起别名: first_name As “名称” 其中as可以省略
去重 distinct
条件查询 where
条件运算符 > < >= <= != = <> <=>
逻辑运算符 and or not 优先级not>and>or
模糊查询 like % _ between and in is null
排序查询 order by (asc|desc)
+运算符只能充当运算符,当+左右两边有字符类型时,会试着将其转为字符型,失败则为0;null与任意字符做+运算结果都为null
分组查询 group by
分页查询 limit A,B
多表连接查询
92语法(标准仅仅支持内连接,等值连接):等值连接 select * from 表1 别名1,表2 别名2 where 别名1.A=别名2.B
99语法(标准支持内连接,左外连接,右外连接,交叉连接):select 字段 from 表1 (inner|left outer|right outer|cross) join 表2 on 条件
内连接:select 字段 from 表1 (inner) join 表2 on 连接条件
外连接:select 字段 from 表1 letf|right (outer) join 表2 on连接条件
自连接:将一个表当成两个表进行连接
联合查询: union
子查询:一条查询语句中有嵌套了领一条完整的select语句
5.DML语言
插入语句
insert into 表名(字段名,..) values (值1,..)
insert into 表名 set 字段名=值,字段名=值
insert into 表名 select ... from 表
修改语句
update 表名 set 字段=新值,字段=新值 where 条件
update 表1别名1,表2 别名2 set 字段=新值,字段=新值 where 连接条件 and 筛选条件
update 表1 别名1 left outer join 表2 别名2 on 连接条件 set 字段=新值,字段=新值 where 筛选条件
删除语句
delete from 表名where 筛选条件
delete 别名1.* ,别名2.*(删哪个写哪个) from 表1别名1,表2 别名2 where 连接条件 and 筛选条件
truncate table 表名
6.DDL语言
创建库:create database(if not esists) 库名
删除库: drop database (if esists) 库名
创建表:create table 表名(字段名 数据类型 约束)
修改表
alter table 表名 add column 字段名 字段类型 增加字段
alter table 表名 drop column 字段名 删除字段|约束
alter table 表名 modify column 字段名 类型 约束 修改字段类型和列级约束
alter table 表名 rename to 新表名 修改表名
alter table 表名 change clumn 字段名 类型 修改字段名及类型
自增长列:auto_increment
常见约束:
not null 非空
unique 唯一
primary key 主键
default 默认
check 检查
foreign key 外键 references 定义关联外键
7.mysql的数据结构
1.整形 tingint 1 smallint 2 mediumint 3 int|integer 4 bigint 8
2.小数 浮点型 float(M,D) double(M,D) 定点型 Decimal(M,D)
M=整数+小数的总长度 D=小数部位的位数
3.字符型
char 和 varchar 用于保存较短的字符
binary和varbinary 用于保存二进制字符串
enum 用于保存枚举值
set 用于保存结合列表
text 用于保存较大的文本类型
char和varchar的区别:char的长度可选,默认为1,varchar的长度必须指定;char是固定长度的,耗空间,varchar是可变的字符,节省空间;char的效率比varchar高一些
4.日期型
date:保存日期
time:保存时间
year:保存年份
tiemstamp:日期+时间 4个字节 1970-1-1~2038-12-31 收时区影响
datetime:日期+时间 8个字节 1000-1-1~9999-12-31 不受时区影响
8.mysql的约束
含义:通过一组逻辑操作单元(一组DMLsql语句),将数据从一种状态切换到另一种状态
特点:ACID
原子性:事务是一个不可分割的整体,事务中的操作要么都完成,要么都不完成
一致性:事务必须是数据从一个一致性状态变化到另一个一致性状态。数据的状态在操作前后要保持一致
隔离性:一个事务的执行不能被其他事务干扰
持久性:一旦事务被提交,他对数据的操作就是永久性的
步骤:
1.开启事务:set auto_commit=0 start transaction
2.编写一组逻辑操作单元
3.提交事务或回滚事务 commit|rollback
隔离级别
read uncommitted:什么也解决不了
read committed:之允许读取已经被其他事务提交的变更,可以解决藏独
repeatable read:确保事务可以多次从一个字段中读到相同的值,可以避免脏读,不可重复读
serializable:在一个事务持续期间,禁止其他事务对该表执行插入等更新。可以避免所有并发问题,但性能十分低下
mysql 的默认隔离级别为 repeatable read
查看当前隔离级别 select @@tx_isolation
设置当前的隔离级别 set session|global transaction isolation level 隔离级别
级联删除: 在外键后面加 on delete cascade
级联质控: 在外键后面加 on delete set null
9.mysql的变量
1.全局变量 show variables like '%char%'
2.用户变量
set @变量名=值
set @变量名:=值
select @变量名:=值
select 字段 into @变量名 from 表
特点:作用范围为当前的会话窗口,比较大,可以在begin,end里面,也可以在begin外面
3.局部变量
declare 变量名 变量类型 (default 初始值)
set 变量名=值
set 变量名:=值
select 变量名:=值
select 字段名或表达式 into 变量 from 表
特点:作用范围比较小,仅仅限定于该变量的begin end 中 只能在begin end 中定义
来源:CSDN
作者:甘妮娘
链接:https://blog.csdn.net/qq_41649367/article/details/103702657