MySQL基本语法

MySQL所有的代码全部封装,是需要固定的语法去调用即可。因此,下面给出一些常用的语法结构,以供查找调用。
一:基本操作
  打开运行:  services.msc//最好是管理员模式运行
  启动Mysql:  net start mysql
  启动Mysql:  net stop mysql
  登录本地数据库:  mysql -u root -p
  创建数据库:CREATE DATABASE [IF NOT EXIETS] db_name [create_specification [,create_specification]....] ;
  查询数据库: SHOW DATABASES;
  显示数据库细节: SHOW CREATE DATABASE db_mane;
  查看数据库存放地址:  C:ProgramDataMySQLMySQL Server 8.0Data
  删除数据库:  DROP DATABASE bd_name;
  选择数据表:  use db_name;
  查看当前所选择的数据库:  select database();

二、数据库中表的操作

1.创建数据表
    CREATE TABLE table_name
    (
        field1 datetype,
        field2 datetype,
        ......
        fieldn datetype,
    );character set 字符局 collate 校对规则
    //field:指定列名 datatype:指定列类型
    //创建一个员工表
    CREATE TABLE employee
    (    
        id int,
        name varchar(20),
        gender char(1),
        brithday date,
        ebtry_date date,
        job varchar(50),
        salay double,
        resume text
    );
    
2.查看表结构:
    使用:SHOW TABLES;
    使用:describe:desc table_name;
    查看建表语句:SHOW CREATE TABLE table_name;
3.修改数据表
    3.1 修改表名
        ALTER TABLE old_table_name RENAME [TO] new_table_name;
    3.2 修改字段名
        ALTER TABLE table_name CHANGE old_field new_field datetype;
    3.3 修改字段的数据类型
        ALTER TABLE table_name MODIFY field datetype;
    3.4 添加字段
        ALTER TABLE table_name ADD field datetype;
    3.5 删除字段
        ALTER TABLE table_name DROP field;
    3.6 修改字段的排列位置
        将field1放到表的最前面:ALTER TABLE table_name MODIFY field1 datetype FIRST;
        将field1放到field2后面:ALTER TABLE table_name MODIFY field1 datetype AFTER field2 ;
    3.7 删除数据表
        DEOP table_name;
    3.8 修改表的字符集编码     
        ALTER TABLE table_name character set XXX;
4.表的约束
    4.1 主键约束——唯一标识表中的信息,为了快速查找表的信息
        1)单字段主键: 字段名 数据类型 PRIMARY KEY
        2)多字段之间:PRIMARY KEY (字段1,字段名2,...,字段名n)
    4.2 非空约束——非空约束是指字段的值不能用NULL;
        field dataType NOT NULL;
    4.3 唯一约束——保证数据表中的字段的唯一性
        field dataType UNIQUE;
    4.4 默认约束——默认约束用于给数据表中的字段指定默认值
        field dataType DEFAULT 默认值;
5.设置表的字段值自动增加
    数据表中,若想为表中插入的新记录自动生成唯一的ID,可以使用AUTO_INCREMENT约束实现
    基本语法格式为:field dataType AUTO_INCREMENT;
6.索引——在MySQL数据库中,允许建立索引加快数据表的查询和排序
    6.1 索引分类
        1)普通索引:由KEY或INDEX定义的索引
        2)唯一性索引:由UNIQUE定义的索引
        3)全文索引:由FULLTXXT定义的索引
        4)单列索引:在表中单个字段上创建索引
        5)多列索引:在表中多个字段上创建索引
        6)空间索引:由SPATIAL定义的索引
    6.2 创建索引
        1)创建表的时候创建索引——简单、方便
            CREATE TABLE table_name(
                字段名1 数据类型[完整的约束条件],
                字段名2 数据类型[完整的约束条件],
                .......
                字段名n 数据类型[完整的约束条件],
                    字段名 数据类型
                    [UNIQUE|FULLTEXT|SPATIAL] INDEX|KEY
                        [别名](字段名x[(长度)]) [ASC|DESC]
            );
        2)使用CREATE INDEX语句在已经存在的表上创建索引
            CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名
            ON table_name(字段名[长度]) [ASC|DESC]
        3)使用ALTER TABLE语句在已经存在的表上创建索引
            ALTER TABLE table_name ADD[UNIQUE|FULLTEXT|SPATIAL] INDEX
                            索引名(字段名[长度]) [ASC|DESC]
    6.3 删除索引
        1)使用ALTER TABLE 删除索引
            ALTER TABLE table_name DROP INDEX 索引名
        2)使用DROP INDEX删除索引
            DROP INDEX 索引名 ON
三 添加数据
    3.1 为表中所有字段添加数据
        1)INSERT语句中指定所有字段名
            INSERT INTO table_name (字段名1,字段名2,...)
                        VALUES(值1,值2,...);
        2)INSRET语句不指定字段名
            INSERT INSERT INTO table_name VALUES(值1,值2,...);
        //方式2要求插入值的顺序与字段名顺序一致,而方式1无要求
    3.2 为表中的指定字段添加数据
        INSERT INFO table_name(字段名1,字段名2,...)
                    VALUES(值1,值2,...);
    3.3 同时添加多条记录
        INSERT INTO table_name[(字段名1,字段名2,...)]
            VALUES(值1,值2,...),(值1,值2,...),
            .....
            (值1,值2,...);
四 更新数据
    语法格式:
    UPDATE table_name
        set 字段名1=值1[,字段名2=值2,...]
        [WHERE 条件表达式];
        //WHERE条件表达式时可选择的,可以更新部分数据,也可以更新全部数据;

五 删除数据
    语法格式:
    DELETE FROM table_name [WHERE 条件表达式];
    //WHERE条件表达式时可选择的,可以更新部分数据,也可以更新全部数据;
六 单表查询
    6.1 简单查询
        使用SELECT语句
            SELECT [DISTINCT] * |字段名1,字段名2,...
                    FROM 表名
                    [WHERE 条件表达式1]
                    [GROUP BY 字段名 [HAVING 条件表达式2]]
                    [ORDER BY 字段名 [ASC|DESC]]
                    [LIMIT [OFFSET] 记录数];
            /*DISTINCT:可选参数,用于剔除查询结果中的重复数据
              * |字段名1,字段名2,...:表示二者选择一个
             GROUP BY:表示对查询的结果进行分组,可选参数;
             ORDER BY:表示对查询的结果按照指定的字段名进行排序,可选参数;
             LIMIT:用于限制查询结果的数量,可选参数;
             OFFSET:偏移量,可选参数;
            */
    6.2 按条件查询
        1)带关系符查询(=,<,>,>=,<=,!=,<>)
            SELECT 字段名1,字段名2,...
            FROM table_name
            WHERE 条件表达式;
        2)带IN关键字查询
            SELECT *|字段名1,字段名2,...
            FROM table_name
            WHERE 字段名 [NOT] IN(元素1,元素2,...)
        3)带BETWEEN AND关键字的查询
            SELECT *|字段名1,字段名2,...
            FROM table_name
            WHERE 字段名 [NOT] BETWEEN 元素1 AND 元素2,
        4)空值查询
            SELECT *|字段名1,字段名2,...
            FROM table_name
            WHERE 字段名 IS [NOT] NULL;
        5)带DISTINCT关键字查询—起过滤作用
            SELECT DISTINCT 字段名 FROM table_name;
        6)带LIKE关键字查询-模糊查询
            SELECT 字段名1,字段名2,...
            FROM table_name
            WHERE 字段名 [NOT] LIKE '匹配字符串';
            /*
            "匹配字符串"指定用来匹配的字符串,可以是普通字符串,也可以是通配符
            a.通配符;
              百分号(%)://('c%'表示以c开头的字符串)('c%d'表示以c开头、D结尾
                            的字符串)('c%'表示以包含C的字符串)
              下划线(_):
            */
        7)带AND关键字的多条件查询
            SELECT *|字段名1,字段名2,...
            FROM table_name
            WHERE 条件表达式1 AND 条件表达式2 [...AND 条件表达式n]
        8)带OR关键字的多条件查询
            SELECT *|字段名1,字段名2,...
            FROM table_name
            WHERE 条件表达式1 OR 条件表达式2 [...OR 条件表达式n]
    6.3 高级查询
        1)聚合函数
            a.COUNT()函数——返回某列的函数
              SELECT COUNT(*) FROM table_name;
            b.sum()函数——求和函数
              SELECT SUM(字段名) FROM table_name;
            c.AVG()函数——用于求某个字段的平均值
              SELECT AVG(字段名) FROM table_name;
            d.MAX()函数——用于求某个字段的最大值
              SELECT MAX(字段名) FROM table_name;
            d.MIN()函数——用于求某个字段的最小值
              SELECT MIN(字段名) FROM table_name;
        2)对查询结果排序
            SELECT 字段名1,字段名2,...
            FROM table_name
            ORDER BY 字段名1 [ASC|DESC],字段名1 [ASC|DESC],...
        3)分组查询
            SELECT 字段名1,字段名2,...
            FROM table_name
            GROUP BY 字段名1,字段名2,...[HAVIN 条件表达式]
七.多表操作
    7.1 外键
        1)添加外键
            alter table table_name add constraint FK_ID foreign
            key(外键字段名) REFERNCES 外键表名(主键字段名);
        2)删除外键
            alter table table_name drop foreign key 外键名;
    7.2 连接查询
        1)交叉连接-查询所有可能的数据,包含很多错误
            SELECT * 表1 CROSS JION 表2;
        2)内连接-查询左边表有且右边表也有的数据
            SELECT查询字段 FROM 表1 [INNER] 表2
            ON 表1.关系字段=表2.关系字段;
        3)左外连接-在内连接基础上增加左表有而右表没有的数据
            SELECT查询字段 FROM 表1 LEFT 表2 ON
            表1.关系字段=表2.关系字段 WHERE 条件;
        4)右外连接-在内连接基础上增加右表有而左表没有的数据
            SELECT查询字段 FROM 表1 LEFT 表2 ON
            表1.关系字段=表2.关系字段 WHERE 条件;
        5)全外连接- 在内连接基础上增加右表有而左表和左表有而右表没有的数据
            //MySQL不支持查询
            SELECT查询字段 FROM 表1 LEFT 表2 ON
            表1.关系字段=表2.关系字段 WHERE 条件;
    7.3 子查询
        一个查询语句嵌套在另一个查询语句内部的查询
        在操作符为:IN、EXISTS、ANY、ALL
        //EXIETS查询效率比IN高
八 事务-要么一起完成,要么同时不完成
    8.1 事务管理
        开启事务:START TRANSACTION;  //这条语句后的SQL处于同一事务中
        提交事务:COMMIT;
        回滚数据:ROLLBACK;
        /*
          1)事务具有原子性、一致性、隔离性、持久性;
          2)事务一定需要进行提交操作,才真正的作用在数据库上;
          3)事务的回滚操作只能作用在未提交的事务上
        */
九 存储过程——作用类似于JAVA语言中的方法
    9.1 创建存储过程
        CREATE PROCEDURE sp_name([proc_parameter])
        [characteristic...]routine_body
        /*
          CREATE PROCEDURE用来创建存储过程的关键字
          sp_name为存储过程的名称
          proc_parameter为指定存储过程的参数列表
          其列表形式如下
          [IN|OUT|INOUT]param_name type
        */
    9.2 调用存储过程
        CALL SP_name([parameter[,...]])
    9.3 修改存储过程
        ALTER {PROCEDURE|FUNCTION} sp_name[characteristic...]
    9.4 删除存储过程
        DROP {PROCEDURE|FUNCTION} sp_name

原文地址:https://www.cnblogs.com/tianliang94/p/10846768.html