MySQL开发

MySQL开发

SQL语言组成部门

DDL: database table index view
DML: Select update insert delete
主键,外键 唯一键,条件,非空,事务,
视图的定义:虚表,存储下来的Select语句
事务控制
动态SQL和嵌入式SQL
DCL 授权

数据类型

1.为什么会有数据类型

             1.存储的值类型
             2.占据的樵存储空间
             3.定长,变长 
             4.如何被索引及排序
             5.是否能够被索引

2.数据类型的有哪些

      1)字符型

          char 
          varchar
          binary
          varbinary
          text
          blob

         char,varchar和text几种字符型常用的属性修饰
          1.  NOT NULL : 非空约束
          2.  NULL :允许为空
          3.  DEFAULT 'string' :默认值,不适用与Text类型 
          4.  character set'字符集'
                 mysql> SHOW VARIABLES LIKE '%char%';  这是服务器上的
                 mysql> SHOW CHARACTER SET; 全部的字符集 

          5.  show collation 排序规则


      2)数值型

         精确数值型
            整型
            十进制数据:decimal
         近似数值型
            单精度浮点型
            双精度浮点型

    整形的常用属性修饰符

           1.AUTO_INCREMENT:自动增长
           前提:非空,且唯一,支持索引
           mysql> select LAST_INSERT_ID();

           2.LEST_INSERT_ID():可以查看上次增长的数值,当插入多行时,只记录第一行
           3.UNSIGNED:无符号
           4.NULL
           5.NOT NULL
           6.DEFAULT

TRUNCATE 用来清空表中数据

      3)日期时间型

           日期型
           时间型
           日期时间型
           时间戳
           year

      4)布尔型

      5)内建类型
           enum(枚举)
           set(集合)  

数据字典

定义: 可以说为是系统编目,目录(system catalog) ,保存数据库服务器上的元数据库

* 元数据:非数据本身,但是又能够管理数据需要的一些信息 数据与表 表的名字 *
元数据:

       关系的名字
       每个关系的各字段的名字
       各字段的数据类型和长度
       约束
       每个关系上的视图的名字及视图的定义
       授权用户的名字
       用户的授权和账户信息   

统计类的数据

每个关系字段的个数
每个关系中行数
每个关系的存储方法

保存元数据的数据库

   information_schema
   mysql
   performance_schema  

SQL_MODE:SQL模型

SQL_MODE定义:用来定义字符超出的操作和模仿别的数据库的类型,通过修改全局变量

常用的模式有:

       TRADITIONAL 使用传统模式
       STRICT_TRANS_TABLES 仅对支持事务的表的严格模式
       STRICT_ALL_TABLES 对所有表使用严格模式

设定服务器变量值得方式(通常仅支持动态的变量)
支持修改服务器变量:

   动态变量:可以MySQL运行时修改
   静态变量:于配置文件中修改其值,并重启后方能生效;

服务器变量从其生效范围来讲,有两类:

  全局变量 : 服务器级别,修改后对新建立的会话有效 GLOBAL 
  会话变量 : 会话级别,仅对当前会话有效 session 
   <!--会话建立时,从全局继承各变量-->

查看服务器变量:

mysql> show {global|session} variables [like ‘(sql_mode)’];

mysql> select @@{globa|session}.variable_name ;

mysql> select * from GLOBAL_VARIABLES where variable_name=’sql_Mode’;

select * from session_VARIABLES where variable_name=’sql_Mode’;

修改变量:

mysql> set {global|session} variable_name=’value’;

注意:无论是全局还是会话级别的动态变量修改,在重启mysql后都会失效,想永久有效,可以定义在配置文件中的响应段中[mysqld]

MySQL中字符大小写:

1.SQL关键字及函数不区分大小写
2.数据库、表及视图名称的大小写区分与否取决于底层OS及FS
3.存储过程、存储函数及事件调度器的名字不区分大小写,但触发器区分大小写
4.表别名区分大小写
5.对字段中的数据,如果字段类型为binary类型,则区分大小写,非binary不区分大小写

MySQL基本使用

数据库:

创建数据库
 create database
 CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
[[DEFAULT] CHARACTER SET [=] charset_name 字符集
| [DEFAULT] COLLATE [=] collation_name 排序方式]

列如:create database if not exists mydb;
     create database if not exists mydb character set utf-8 

删除数据库
 DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
 列如:drop database if not exists mydb;

修改数据库的字符集和排序字符以及数据字典
ALTER {DATABASE | SCHEMA} [db_name]
[[DEFAULT] CHARACTER SET [=] charset_name 字符集
| [DEFAULT] COLLATE [=] collation_name 排序方式]

表:

      创建表:第一种方式
        CREATE [TEMPORARY(临时表,保存在内存中)] TABLE [IF NOT EXISTS] tbl_name
        (create_definition,...)
        [table_options]

      (create_definition,...)  可以定义:
      字段的定义:字段名、类型和类型修饰符
   键、索引和约束
      primary key,unique key,foreign key,check
      {index|key} 

    表创建:第二种方式(复制表数据)
      CREATE [TEMPORARY] TABLE [IF        NOT EXISTS] tbl_name
[(create_definition,...)]
[table_options]
select_statement

    表创建:第三种方式(复制表结构)
      CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
{ LIKE old_tbl_name | (LIKE old_tbl_name) }    

    查看表的状态信息
     show table status like ‘table_name’

MyISAM表:每表有三个文件,都位于数据库目录中

    tb_name.frm:表结构定义
    tb_name.MYD:数据文件
    tb_name.MYI:索引文件

InnoDB表,有两种存储方式

    1.默认:每表有一个独立文件和一个多表共享的文件
    tb_name.frm:表结构的定义,位于数据库目录中
    ibdata#:共享的表空间文件,默认位于数据目录(datadir指向的目录)中
    2.独立的表空间文件:
    每表有一个表结构文件tb_name.frm
    一个独立的表空间文件 tb_name.ibd
      应该修改innodb_file_per_table为ON   

删除表

  DROP [TEMPORARY] TABLE [IF EXISTS]
  tbl_name [, tbl_name] ...
  [RESTRICT | CASCADE]

修改表:

  ALTER TABLE tbl_name
  [alter_specification [, alter_specification] ...]
修改字段定义:
   插入新字段:
     ADD [COLUMN] col_name column_definition
     [FIRST | AFTER col_name ]
   删除字段
     DROP [COLUMN] col_name
   修改字段
      修改字段名称
      CHANGE [COLUMN] old_col_name new_col_name column_definition
      [FIRST|AFTER col_name]
      修改字段类型及属性等
      MODIFY [COLUMN] col_name column_definition
      [FIRST | AFTER col_name]
   表改名:
      rename to|as new tb_name
   修改存储引擎
       engine = 
   指定排序标准的字段
       ORDER BY col_name [, col_name] ... 

MySQL的查询分类

1.单表查询:简单查询
2.多表查询:连续查询
3.联合查询
4.选择和投影
        投影:挑选要符合的字段
        选择:挑选符合条件的行

   投影:select 字段1,字段2,... from tb_name
    selcet * from tb_name

    选择:select 字段1,字段2,.... from tb_name where 子句(布尔条件表达式);

布尔条件表达式操作符

= 等值比较
<=> 跟空值比较不会产生额外信息
<> 不等值
<   小于 
<=  小于等于
>   大于
>=  大于等于

IS NULL: 是否为空
IS NOT NULL:是否不空
LIKE:支持的通配符%(任意长度的任意字符) _(任意单个字符)
RLIKE,REGEXP:支持使用正则表达式作为条件
IN:判断某行的某一字段的值是否在给定的列表中
BETWEEN...AND....:判断指定的值是否位于指定的范围之间

单表查询用法

组合条件测试

                NOT |
                AND &&
                OR ||

排序

order by ‘排序字段’
默认为升序:ASC
降序:DESC

内置的聚合函数

sum():和
AVG():平均值
MAX():最大值
MIN():最小值
COUNT():个数统计

分组

group by
select Gender,sum(age) from student group by Gender;

对分组的条件过滤
having
 select ClassID,Count(Name) FRom students GROUP BY CALSSSID HAVING Count(Name) >=2;

只返回有用的行

   LIMIT 
   一个数为显示的行数
   两个数字为偏移第一个数字行,显示第二个数字     

select * from studnet LIMIT 2,3;

**select语句的执行流程
from clause –> where clause –> group by –> having clause –>order by –> select –>limit**

select语句

      distinct   重复的只显示一次
      SQL_CACHE  缓存查询结果
      SQL_NO_CACHE 不缓存查询结果

MySQL多表查询和子查询

1.联结查询:事先将两张或者多张表join,根
据join的结果进行查询

交叉联结:

  (a+b)(c+d+e) 6列

  效率低,基本上不用

自然联结

   等值联结:把相同的字段进行等值连接

外联结:

    左外联接:只保留出现在左外连接元算之前(左边)的关系中的元组(以左表为准,)   

      left_tb LEFT JOIN right_tb ON 条件 

    右外联接:只保留出现在右外连接元算之后(右边)的关系中的元组(以右表为准)
       left_tb RIGHT JOIN right_tb ON 条件 

    全联接:
     SELECT * FROM table01 JOIN     table02
ON 条件 

<!--别名:AS
   表别名:
   字段别名-->

子查询:在查询中嵌套的查询

      A) 用于WHERE中的子查询
        1.用于比较表达式中的子查询
            子查询的返回值只能有一个
        2.用于EXISTS中的子查询
            判断存在与否
        3.用于IN中的子查询
            判断存在于指定列表中
    B) 用于FROM中子查询
select alias.col,....FROM(SELECT CLUSE) alias WHERE condition

MYSQL不擅长于子查询,应该避免使用子查询 优化一般 ??

MYSQL视图(虚表)

存储下来的select语句当表来玩

    创建:
      create view 视图名 as select语句
    删除:
       drop view 视图名

索引

    查看索引   show indexs from tb_name
    查看索引   alter table tb_name add index(字段)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值