基础操作
(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一旦删除的条件没设置好,就可能把不应删除的给删撤除了
这里的修改/删除持久生效,都会影响到 数据库服务器 硬盘中的数据~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |