本帖最后由 小鲁哥哥 于 2017-6-24 14:41 编辑
【济南中心】PHP课程同步笔记day17:数据库操作语言插入数据(insert) 4种形式: 形式1: insert[into] 表名 [(字段名1,字段名2,.....)] values(值表达式1,值表达式2,.....),(...),....; 插入一行或多行数据库 形式2: Replace [into] 表名 [(字段名1,字段名2,....)] values(值表达式1,值表达式2,....),(...),.....; 插入一行或多行数,可能会出现更新情况 形式3: Insert [into] 表名 [(字段名1,字段名2,....)] select 字段名1 ,字段名2.... from 其他表名; 插入一行或多行数,是将select 语句所获得的结果数据插入指定表的制定字段; 形式4: Insert [into] 表名 set 字段名1=值表达式1,字段名2=值表达式2,......; 说明: 1.重要观念:插入数据都应该理解为是以”行”为单位进行的。 2.Replace语法可以实现跟insert语法一样的效果,但还可以做到:如果主键重复了或唯一键重复了,则会先删除原来的数据,再插入新数据(相当于修改); 3.插入数据时的字段名和数据值之间都有”一一对应”关系 4.插入数据时,有的字段可以不用给定数据,则无需列出来,该字段的值会根据表的设定获得相应的”数据”,比如:自增长值,默认值,甚至是空值(允许空的时候) 5.对于字符串和时间类型的”直接值”(比如”abc”,”2017-06-24 13:31:31”),必须用单引号引起来!而数字一类就可以不用。 删除数据 形式: Delete from 表名 [where条件] [order排序] [limit 限定]; 说明: 1.删除数据也是以”行”为单位。 2.Where ,order,limit3个子句,虽然语法上都可以省略,但是order和limit很少用,而where几乎都需要用。 3.Order用于设定删除这些数据时的顺序; 4.Limit用于设定在前述排序下,删除多少条; 示例: Delete from user_info where age>18 order by age desc limit 3; //含义:删除user_info中年龄大于18的用户,并且按年龄倒序删除前3个。 修改数据 形式: Update 表名 set 字段名1=值1,字段名2=值2,.....[where条件][order 排序][limit限定]; 说明: 1.更新数据也是以”行”为单位; 2.设置某个字段的值的时候,如果是字符或时间类型的直接值,也要加单引号 3.Where,order,limit3个子句,虽然语法上都是可以省略的,但是order和limit很少用,而where几乎都需要用。 4.Order用于设定修改这些数据时的顺序 5.Limit用于设定在前述排序下,修改多少条 举例: Update user_info set age=18,edu=’大学’,user_pass=md5(‘456’) where age<18 order by age limit 100; 基本查询 基本形式: Select [all|distinct] 字段或表达式列表 [as 别名] [from 子句] [where 子句] [group by 子句] [having 子句] [order by 子句] [limit 子句]; 说明: 1.上述select语句中,只有select部分是比不可少的,其他都可以省略 2.字段:指一个表中的字段名 3.表达式:是指一个常规的”运算”,甚至是最直接的”数据值” 4.All:表示取得的结果行都”输出”,默认可以不写,就表示all 5.Distinct:表示取得的结果行,”消除重复行”再输出 From子句 表示从哪个表(或视图)中去取出数据,可以认为就是数据的最原始来源,可以成为”数据源”。 形式有: From 表名; From 表名1,表名2,......; From 表名1 连接方式 join 表名2 连接方式 join 表名3 .....; Where子句 用于对从from子句所设定的数据源进行条件筛选的语句,往往都是使用某个字段名来做某种判断。判断如果成立,结果就是true,就表示该行”会取出”,否则就不会取出。 Where子句其实是对一个表中的”所有行”的数据进行”遍历”,依次进行判断。 Where子句执行的结果,都只是”true”或”flase” Where子句中,可以用到很多的运算符: 算术运算符: +,-,*,/,% 比较运算符:>,>=,<,<=,=(等于),<>(不等于),!=(不等于) 逻辑运算符:and(与) or(或) not(非) Is运算符: is运算符只用于对布尔值和空值进行判断,有如下4中情况: Is true / is false / is null / is not null Between运算符: 使用形式: XX字段 between 值1 and 值2; 含义: 表示该字段的值,在给定的2个值之间(含),其相当于: XX字段>=值1 and xx字段 <=值2; In 运算符: 形式: XX字段 in (值1,值2,....); 含义: 表示该字段的值,等于其中列出来的任意一个值,就算满足条件了。 Like运算符 语法形式: XX字段 like ‘要查找的字符串’; 含义说明: 1.该运算符只能对字符串类型的字段进行运算; 2.其含义表示如果某个字段的值,符合(匹配)给定的要查找的字符串,就算满足条件; 3.该运算符是”模糊查找”的基本形式,并依赖于如下2个特殊的符合: %(百分号):它代表”任意个数的任意字符” _(下划线) :它代表”一个任意字符” 4.如果在需求中,就想要”%”或”_”这个符号,就将其转义 Group by 分组子句 语法形式: Group by 字段1 [asc|desc],字段2 [asc|desc].... 含义: 表示将一个表中的”所有数据行”,按给定的某个字段进行分门别类区分,每一个不同的值就算一个组。 特别注意: 1.分组之后,结果数据中,”只有组”--即信息都应该是组的信息 2.后续的数据处理,也是以组为单位:比如求平均值,求最大值等 3.对于分组的查询,在select子句中,出现”字段”,只能是”组信息”,而不应是单个数据信息 Having子句: 跟where子句的用法和作用一样,唯一区别是:having子句跟在group by之后,用于对”分组之后的结果数据”进行筛选; Order by 子句: 形式: Order by 字段1 [asc|desc],字段2 [asc|desc].... 说明与含义: 1.用于将”前面”取得的数据,按给定的字段值的给定顺序(正序asc或倒序desc)排序 2.可以进行多重排序,每一重排序,都是在前一重排序的值相等的时候才有意义。 3.可以省略排序顺序设定,此时默认值是asc Limit子句 形式1: Limit 数量n; 含义:取出”前述所获得结果”数据的前n行; 形式2: Limit 起始行号m,数量n; 含义:取出“前述所获得结果”数据的第m行开始的n行;m是从0开始算起的——注意:m跟数据表中的字段没有关系;当m等于0时,起始就是前一个形式的含义; 对select语句的整体理解、 说明: 1,除了select子句,各个其他子句都可以省略(语法上可行); 2,每一个子句,都是按该先后顺序出现,不可先后打乱顺序; 3,每个子句都可以看做是一种“计算”,他们在mysql的内部,其实是按该顺序先后进行的计算。 4,where需要有from才能出现; 5,having需要有group by才能出现;
|