类似的,SQL Server 和Oracle也是采取类似的方式来组织数据的,这样的数据库叫做“关系型数据库”。
2.创建表
create table 表名(列名,列类型,列名,列类型…);
在My SQL里,也和其他的编程语言类似,提供了一些数据类型。常用的类型,主要有:
1.int
2.double()
3.varchar()
4.datetime
3.查看表
show tables;
4.查看表结构
desc 表名;
查看到一张表里面有几列,每一列的类型和其他信息。
5.删除表
drop table 表名:
非常危险,一旦删除,可能就恢复不了。
inset into 表名 values(值,值…);
values后面的每个()都对应到一行,可以一次性的带有多个(),多个()之间使用逗号来分隔。
类似的功能,也可以一次插入一行,分三个insert语句来插入
insert into student values(1,‘zahngsan’,11,66.8);
insert into student values(2,‘wangwu’,12,64.8);
insert into student values(1,‘lisi’,51,99.9);
一次插入N条记录的速度比一次插一条,分N条插入,要快很多
直接把一个表的所有列和所有行都查询出来。
select * from 表名;
*叫做“通配符”,表示一个表的所有列。
注:把一个表里面的所有行和所有列都查找到,查找的结果是一个“临时表”。之前说的数据库的表,都是在硬盘上的。而此处的这个查询结果临时表,不是在硬盘上,而是在内存中,随着进行了输出之后,数据也就被释放了。
select * from 表名 是一个非常危险的操作。
如果直接在生产环境的服务器上执行 select * from 表名,可能会带来灾难。
生产环境保存的数据可能是非常大的。
如果进行全列查询操作,此时就意味着My SQL服务器就会疯狂的来读取硬盘数据,瞬间就会把硬盘IO吃满,硬盘读取的速度是存在上限的,尤其是机械硬盘。同时My SQL服务器又会立即的返回响应数据,由于返回响应的数据也很大很多,也会把网卡的带宽吃满。
一旦服务器的硬盘和网络被吃满,此时数据库服务器难以对其他用户端的请求作出响应。(而生产环境的服务器,无时不刻要给普通用户提供响应)
只查询自己关注的列
select 列名,列名…from 表名;
这里在查询的时候会显示的告诉数据库要查询的是哪些列,数据库就会有针对性的返回数据了。
在查询的时候,同时进行一些运算操作(列和列之间)
例如:期望查询结果中的语文成绩比真实的多10分。
去重之后,98的得分就只有一个了。
针对查询结果(临时表)进行排序。(不会影响到数据库服务器上的原始数据)
select 列名 … from 表名 order by 列名
针对数学成绩进行升序排序
针对数学成绩进行降序排序
根据表达式进行排序
根据别名进行排序
通过order by 来指定多个列进行排序
先根据第一个列进行排序,如果第一个结果相同,相同结果之间通过第二个列排序。
如果不指定多个列的话,只有指定的一个列,此时如果结果相同,彼此之间的顺序是不可预期的。
NULL和其他值一起运算结果还是NULL,和0没有关系。
在select后面加上一个where字句,后面跟上一个具体的筛选条件。
select 列名 from 表名 where条件;
=是比较,而不是赋值。
NULL=NULL 结果仍然是NULL,会被视为假,条件不成立。
<=>也是比较相等,用法和=差不多,只是<=>比较空值结果是真。如:NULL<=>NULL比较,结果是真。
BETWEEN a0 AND a1构成的是闭区间
IN(option)通过后面的这个()给出的几个固定的值,判断当前结果是否在这个值当中。
is NULL
is NOT NULL
专门用来比较空值的。
like 针对结果进行“模糊匹配”
查询英语不及格的同学。
查询语文成绩好于英语成绩的同学
查询总分在200以下的同学
where字句不能使用别名
查询语文成绩大于80,或者英语成绩大于80的同学
and的优先级高于or
如果想打破优先级,需要加()
查询语文成绩在[80,90]的同学
查询数学成绩是58,59,98,99的同学
like,搭配通配符来使用
%代表任意个任意字符(也包含0个字符)
查找姓孙同学的成绩
_代表只能匹配一个任意字符
limit可以搭配条件,以及order by等操作来组合使用。
select * from 表名,对于生产环境的数据库来说,非常危险,其实危不危险,看返回的结果数量是多还是少,返回的数据量少,其实还好,返回的数据比较多,就比较危险。
如何才能让sql不危险???
1.限制更严格的条件 where
使用limit更稳妥的限制。
update 表名 set 列名=值,列名=值 where 条件;
set 不能省略
where指的是针对哪些进行修改,符合条件的就会修改,如果省略where,就会修改所有的记录。
注:update是会修改数据库服务器上面的原始数据
此操作也非常危险。
修改如果出现操作失误,危害可能比删库还严重!!1
对于删库操作,一般公司都是有“预案的”,就可以快速的吧数据还原回来。对于误修改操作,最麻烦的是有些修改了,有些没修改。
将曹孟德的数学改为60,语文改为70
将总成绩倒数前三的3位同学的数学成绩加10分
将所有同学的语文成绩除以2
如果要修改表里的所有数据,不加where就可以了
一旦这里的条件写错,影响非常大!!!
如果不写条件,会把整张表的数据给删除掉!(和drop table 不一样)
这里是删除表中所有的数据,得到一个空表,如果是drop table ,表都没有了。