基础操作
(1)创建数据库
create database 数据库名;
数据库名、表名、列名 都不能和关键字重复。
sql的关键字是大小写不敏感的
注:1)数据库在创建的时候是不能重复的,此时就可以在创建的时候,加上一个修饰,来应对上述问题; 例如:create database if not exists 数据库名;
此时就不会出现数据库同名报错,发现数据库已经存在,是不会继续创建数据库的。(避免在批量执行的情况下,一条sql语句报错,后续指令无法执行的情况。)
2)创建 数据库 的时候,可以手动指定一下 字符集的
character set 字符集名字/charset 字符集名字
需要再数据库中保存中文,mysql默认的字符集是拉丁文,不支持中文,必须要在创建数据库的时候,手动指定编码方式为支持中文编码(GBK , UTF8)
create database 数据库名字 charset utf8;
(2)查看数据库
列出当前的mysql服务器上一共有哪些数据库 show databases;
(3)选中数据库 use 数据库名;
(4)删除数据库 drop database 数据库名;
删除操作,删除的不仅仅是database,而且也删除了database中所有的表,和表里面所有的数据!删除数据库操作,是一个非常危险的操作!!!
数据表的操作
(针对数据表的操作,前提是先 选中数据库)
mysql中支持的类型
整数:int, long, 小数:double, decimal, 字符串:varchar, 时间日期:datetime
(1)创建表
进行表操作的前提,是必须要先能够选中数据库~~
create table 表名(列名 类型,列名 类型....);
如果想让表名/列名和关键字一样,可以使用 反引号 ` 来把表名、列名引起来。
(2)查看所有表(查看当前数据库中的所有表)
show tables;
数据库中的内容,都是持久化存储的,后序重启电脑,数据依然存在。
(3)查看指定表的结构
desc 表名;
(4)删除表
drop table 表名;
删除表的同时,也会把表里的数据给一起删除掉~ 危险操作!!!
删除表的严重性,可能比删除数据库,更严重!!
CRUD 操作
(1)新增
insert into 表名 values (值,值......);
此处的值,要和列相匹配。(列的个数和类型)
指定列插入:insert into 表名(列名,列名...) values (值,值...);
此处指插入name,id这一列就会被填充为默认值。(此处默认值为null)
还可以一次插入多行记录~
insert into 表名 values (值,值...),(值,值...)....
这里是提示,就是反馈效果,客户端给服务器发起插入请求,服务器要返回这次插入是否成功~~
一次插入多行记录,相比于一次插入一行,分多次插入,要快不少~
通过select就可以查询到表中的数据~
datetime类型,如何插入呢?
可以使用一个固定格式的字符串,来表示时间日期
如果想填写的时间日期,就是当前时刻。 SQL提供了一个现成的函数,now()
(2)查询(复杂***)
DECIMAL (3,1) 总长度是3,小数点后1位
①全列查询:select * from 表名; 危险操作!!(*)
*表示“通配符”可以代指所有的列
这里查询出来之后,服务器通过网络把这些数据返回给客户端,并且在客户端以表格的形式打印出来。
②指定列查询:select 列名,列名.... from 表名;
③查询字段为表达式 不会影响到数据库服务器硬盘上存储的原始数据
一边查询,一边进行计算~~
在查询的时候,写作由列名构成的表达式,把这一列中的所有行都带入到表达式中,参与运算。
查询所有同学语文成绩 -10分 的效果
** 这里的操作不会修改数据库服务器上的原始数据,只是在最终响应的“临时结果”中做了计算**
计算每个同学的总成绩~~
SQL在查询的时候,可以进行一些简单的统计操作。
表达式查询,是 列 和 列之间的运算,把每一行都带入这样的运算中,不是 行 和 行之间
④带别名的查询: select 表达式 as 别名 from 表名;
查询的时候给 列/表达式 指定别名。(给表也能指定别名)
as 别名,可以针对表达式,列,表名
⑤去重:distinct 修饰某个列/多个列
值相同的行,只会保留一个
多行去重前(名不同):
多行去重后:
⑥查询的时候排序:select 列名 from 表名 order by 列名 asc(升序)/desc(降序);
把行进行排序 不会影响到数据库服务器硬盘上存储的原始数据
明确排序规则:
- 针对哪个列作为比较规则
- 排序的时候是升序还是降序
order by 指定的列,如果你select的时候没有把这一列查出来,也不影响 排序
order by 还可以针对表达式进行排序
使用别名
指定多个列进行排序,order by 后面可以写多个列 使用,隔开
先按照数学成绩排序,如果数学成绩相同,再按照语文排序
指定列后加desc
⑦条件查询:select 列名 from 表名 where 条件;(遍历这个表的每一行记录,把每一行的数据分别带入到条件中。如果条件成立,这个记录就会被放入结果集合中。如果条件不成立,这个记录就pass)
会指定具体的条件,按照条件针对数据进行筛选
LIKE模糊匹配:
通过一些特殊符号,描述出规则/特征 后续哪些值,符合上述特征。
(1)查询英语不及格的同学及英语成绩
(2)查询语文成绩好于英语成绩的同学
无论有几个列,都可以使用上述运算符来描述条件
(3)查询总成绩在200分一下的同学 (条件查询搭配表达式)
注意: select条件查询执行的顺序:
1)遍历表中的每个记录;
2)把当前记录的值,带入条件,根据条件进行筛选;
3)如果这个记录条件成立,就要保留,进行列上的表达式计算(第三步定义的别名,where是第二步执行的,执行where的时候,total还处于“未定义”的状态)
4)如果有 order by 会在所有的行都被获取之后(表达式也算完了) 再针对所有的结果进行排序。
⑧分页查询:select 列名 from 表名 limit N offset M;
N表示这次查询最多查出几个记录
M表示这次查询的这N个记录,是从第几个下标开始算
(3)修改
update 表名 set 列名 = 值 where 条件;
Set这个词 在计算机里,有两种典型的含义
- 设置 getter/setter
- 集合 TreeSet/HashSet
计算机中,一个术语往往有多种含义,必须结合上下文来了解这个含义
1)把孙悟空同学的数学成绩变更为80分
Rows matched: where条件 筛选出了一行记录
Changed:修改成功了一行
2)把曹孟德同学的数学成绩变更为60分,语文成绩变更为70分
使用update,可以一次修改多个列 set列 = 值,列 = 值.....
3)把总成绩倒数前三(limit)的同学,数学成绩再加上30分
98.0+30=128.0 不符合前面dicimal(3,1)
4)将所有同学的成绩更新为原来的两倍
update 后面不写任何条件,就是针对所有行都进行修改
8行:所有的行数 实际只修改了7行
警告:show warnings; 查看警告
截断(truncated)
87.5/2 = 43.75 超出了dicimal (3,1) 的范围,于是就进行了截断
null未修改
(4)删除: delete from表名where条件/order by/limit;
1>删除孙悟空同学的考试成绩
2>删除整张表的数据
不指定任何条件,就是删除整个表
和drop table 不一样
- drop table是删除了表,也删除了表里的记录
- delete 是只删除了表里的记录,表还在(空表)
delete和update都是很危险的操作!!!
delete一旦删除的条件没设置好,就可能把不该删除的给删除掉了
这里的修改/删除持久生效,都会影响到 数据库服务器 硬盘中的数据~
版权归原作者 码奇奇 所有, 如有侵权,请联系我们删除。