Mysql基础

☆樱花仙子☆ 提交于 2019-12-26 04:52:19

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 中定义
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!