zoukankan      html  css  js  c++  java
  • DML和DQL命令

    MySQL的存储引擎

    存储引擎的类型:MyISAM、InnoDB 、Memory、CSV等9种

    名称InnoDBMyISAM
    事务处理 支持 不支持
    数据行锁定 支持 不支持
    外键约束 支持 不支持
    全文索引 不支持 支持
    表空间大小 较大,约2倍 较小

    适用场合

    • 使用MyISAM: 不需事务,空间小,以查询访问为主

    • 使用InnoDB: 多删除、更新操作,安全性高,事务处理及并发控制

    ​ 查看当前默认存储引擎

    语法:

    SHOW VARIABLES LIKE ‘storage_engine%’; 
    
    

    ​ 修改my.ini配置文件

    default-storage-engine= InnoDB
    改为其他存储存储
    
    

    ​ 设置表的存储引擎

    语法:

    CREATE TABLE 表名(
        #省略代码
    )ENGINE=存储引擎;
    
    

    如:

    CREATE TABLE `myisam` (
       id  INT(4)
    )ENGINE=MyISAM;
    
    

    ​ 数据表的存储位置

    MyISAM类型表文件

    *.frm:表结构定义文件

    *.MYD:数据文件

    *.MYI:索引文件

    InnoDB类型表文件

    *.frm:表结构定义文件

    ibdata1文件

    注意:

    datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
    innodb_data_home_dir="D:/MySQL Datafiles/"
    
    

    存储位置:因操作系统而异,可查my.ini

    ​ DML语句——插入单条数据记录

    语法:INSERT INTO 表名 [(字段名列表)] VALUES (值列表);

    简化:insert into 表名 values (值列表);

    注意:

    字段名是可选的,如省略则依次插入所有字段n多个列表和多个值之间使用逗号分隔

    值列表和字段名列表一一对应

    如插入的是表中部分数据,字段名列表必填

    如:

    INSERT INTO `student`(`loginPwd`,`studentName`,`gradeId`,`phone`,`bornDate`)
    VALUES('123','黄小平',1,'13956799999','1996-5-8');
    
    

    ​ DML语句——插入多条数据记录

    语法: INSERT INTO 新表(字段名列表)VALUES(值列表1),(值列表2),……,(值列表n);

    如:

    INSERT INTO `subject`(`subjectName`,`classHour`,`gradeID`)
    VALUES('Logic Java',220,1),('HTML',160,1),('Java OOP',230,2);
    
    

    ​ DML语句——将查询结果插入新表

    如:

    编写SQL语句实现从学生表提取姓名、手机号两列数据存储到通讯录表中
    CREATE TABLE `phoneList`(
        SELECT `studentName`,`phone`
        FROM `student`);
    注意:如果新表已存在,将会报错!
    

    数据更新

    更新数据记录:

    语法:

    UPDATE 表名 
    SET 字段1=值1,字段2=值2,…,字段
    n=值n
    [where 条件]
    

    如:

    UPDATE student SET sex = ‘女’;
    UPDATE student SET address = ‘北京女子职业技术学校家政班’
    WHERE address = ‘北京女子职业技术学校刺绣班’;
    
    

    ​ 数据删除

    删除数据记录

    语法:

    DELETE FROM 表名 [WHERE条件];
      TRUNCATE TABLE 表名;
    
    TRUNCATE语句删除后将重置自增列,表结构及其字段、约束、索引保持不变,执行速度比DELETE语句快
    

    如:

    DELETE FROM student WHERE studentName = ‘王宝宝’;
    TRUNCATE TABLE student;
    
    

    查询:

    ​ 查询产生一个虚拟表

    ​ 看到的是表形式显示的结果,但结果并不真正存储

    ​ 每次执行查询只是从数据表中提取数据,并按照表的形式显示出来

    查询语法;

    SELECT    <列名|表达式|函数|常量> 
    FROM      <表名> 
    [WHERE    <查询条件表达式>] 
    [ORDER BY <排序的列名>[ASC或DESC]];
    
    

    如:

    SELECT `studentNo`,`studentName`,`phone`,`address`,`bornDate` 
    FROM `student`
    WHERE `gradeId` = 1
    ORDER BY `studentNo`;
    

    数据查询基础

    查询全部的行和列
    SELECT * FROM `student`; 
    
    查询部分列
    SELECT `studentNo`,`studentName`,`address`
    FROM `student`
    WHERE `address`=‘河南新乡’;
    
    

    ​ 数据查询-列别名

    使用AS命名列

    SELECT `studentNo`  AS 学生编号,`studentName` AS 学生姓名,
            `address `AS 学生地址  
    FROM `student`
    WHERE `address` <> '河南新乡‘;
    
    
    SELECT `firstName` + '.' + `lastName` AS 姓名 //"."
    FROM `employees`;
    注意:
    1. + 连接的数据类型必须兼容
    2. 如果 + 连接字符型数据,结果为字符串数据的连接
    3. 如果 + 连接数值型数据,结果为数值的和
    
    

    ​ 数据查询-空行、常量列

    查询空行:

    SELECT `studentName` FROM `student` WHERE `email` IS NULL;
    
    

    实列:

    原来有数据,但数据被清除的列如何查询?
    使用常量列
    
    SELECT `studentName` AS 姓名,`address` AS 地址,
    ’北京信息中心’ AS 学校名称
    FROM `student`;
    
    

    ​ 常用函数——聚合函数

    函数名作用
    AVG() 返回某字段的平均值
    COUNT() 返回某字段的行数
    MAX() 返回某字段的最大值
    MIN() 返回某字段的最小值
    SUM() 返回某字段的和

    常用函数——字符串函数

    函 数 名作 用举 例
    CONCAT(str1, str1...strn) 字符串连接 SELECT CONCAT('My','S','QL'); 返回:MySQL
    INSERT(str, pos,len, newstr) 字符串替换 SELECT INSERT( '这是SQL Server数据库', 3,10,'MySQL'); 返回:这是MySQL数据库
    LOWER(str) 将字符串转为小写 SELECT LOWER('MySQL'); 返回:mysql
    UPPER(str) 将字符串转为大写 SELECT UPPER('MySQL'); 返回:MYSQL
    SUBSTRING (str,num,len) 字符串截取 SELECT SUBSTRING( 'JavaMySQLOracle',5,5); 返回:MySQL

    ​ 常用函数——时间日期函数

    函数名作用举例(结果与当前时间有关)
    CURDATE() 获取当前日期 SELECT CURDATE(); 返回:2016-08-08
    CURTIME() 获取当前时间 SELECT CURTIME(); 返回:19:19:26
    NOW() 获取当前日期和时间 SELECT NOW(); 返回:2016-08-08 19:19:26
    WEEK(date) 返回日期date为一年中的第几周 SELECT WEEK(NOW()); 返回:26
    YEAR(date) 返回日期date的年份 SELECT YEAR(NOW()); 返回:2016
    HOUR(time) 返回时间time的小时值 SELECT HOUR(NOW()); 返回:9
    MINUTE(time) 返回时间time的分钟值 SELECT MINUTE(NOW()); 返回:43
    DATEDIFF(date1,date2) 返回日期参数date1和date2之间相隔的天数 SELECT DATEDIFF(NOW(), '2008-8-8'); 返回:2881
    ADDDATE(date,n) 计算日期参数date加上n天后的日期 SELECT ADDDATE(NOW(),5); 返回:2016-09-02 09:37:07

    常用函数——数学函数

    函数名作 用举 例
    CEIL(x) 返回大于或等于数值x的最小整数 SELECT CEIL(2.3) 返回:3
    FLOOR(x) 返回小于或等于数值x的最大整数 SELECT FLOOR(2.3) 返回:2
    RAND() 返回0~1间的随机数 SELECT RAND() 返回:0.5525468583708134

    ​ ORDER BY子句

    ORDER BY子句实现按一定顺序显示查询结果ragment-->如:

    把成绩都降低10%后加5分,再查询及格成绩,并按照成绩从高到低排序
    SELECT `studentNo` AS 学生编号,(studentResult*0.9+5 ) AS 综合成绩
    FROM `result`
    WHERE (`studentResult`*0.9+5) >=60
    ORDER BY studentResult DESC;
    

    ​ LIMIT子句

    MySQL查询语句中使用LIMIT子句限制结果集

    语法;
    SELECT  <字段名列表>
    FROM  <表名或视图>
    [WHERE  <查询条件>]
    [GROUP BY <分组的字段名>]
    [ORDER BY  <排序的列名>[ASC 或 DESC]]
    [LIMIT [位置偏移量,]行数];
    位置偏移量 = 行数 * (页数-1)
    
    

    如:

    查询所有年级编号为1的学员信息,按学号升序排序
    显示前4条记录
    每页4条,显示第2页,即从第5条记录开始显示4条数据
    SELECT `studentNo`,`studentName`,`phone`,`address`,`bornDate` 
    FROM `student`
    WHERE `gradeId` = 1
    ORDER BY studentNo
    LIMIT 4;
    
    

    注意:使用LIMIT子句时,注意第1条记录的位置是0!

    插入单条数据:insert into 表名 (字段)values (值);
    插入多条数据:insert into 表名 (字段1 ,字段2,字段3)values (值1,值2,值3);
    更新(修改):update 表名 set 字段1=值1,字段2=值2 ,
    复制(将查询的结果放入新表):create table 新表名 (select 字段1, 字段2 ,字段3, from 原表);
    别名: select 字段名 as 字段名含义 , 字段名 as 字段名含义, from 表名 where 字段名 = 值;


    查询所有:select * from 表名;
    查询:select 要查找的字段 from 表名 where 字段= ;
    如:selcet sname from syudents where sid =102;
    order by子句查询:select 字段 as 字段名含义 from 表名 where 字段名=值 order by 字段名 desc;     //降序
    select 字段 as 字段名含义 from 表名 where 字段名=值 order by 字段名 asc;       //升序
    limit子句查询:select 查找的字段1,字段2,字段3,from 表名 where 字段=值 order by 字段 limit 行数 ; //显示几行
    select 字段1 ,字段2,字段3,from 表名 where 字段=值 order by 字段 limit 第几行,显示行数;
    分组:select 字段 from 表名 where 字段=值 group by 分组的字段名 oreder by 排序字段名 desc/asc limt 开始位置,显示行数;

    最大值,最小值....: select MAX(字段) ,as 最大值 MIN(字段),avg (字段名) as 平均分 from where 字段=值 order by 字段 desc/asc limit 第几行,显示行数
    IN子查询select 字段 from 表名 where 字段 IN (select....);//嵌套
    NOT IN子查询: select 字段 from 表名where 字段 NOT IN (select ....);//嵌套

  • 相关阅读:
    夺命雷公狗---Thinkphp----16之首页的完成及全站的完成
    夺命雷公狗---Thinkphp----15之遍历出来的栏目页的完成
    夺命雷公狗---Thinkphp----14之前台的首页完善
    夺命雷公狗-----tp中遇到数据乘积的问题的遇见
    夺命雷公狗---Thinkphp----13之前台的头尾分离和导航分离
    夺命雷公狗---Thinkphp----12之文章的增删改查(图片上传和关联查询)
    夺命雷公狗TP下关联查询
    夺命雷公狗---Thinkphp----11之管理员的增删改查的完善
    夺命雷公狗---Thinkphp----10之后台登录.注销一条龙
    夺命雷公狗---Thinkphp----9之中间层的创建,防止跨目录访问
  • 原文地址:https://www.cnblogs.com/1314szh/p/13167948.html
Copyright © 2011-2022 走看看