MySQL——数据库的操作
基础操作(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 (值,值...);
https://i-blog.csdnimg.cn/direct/7bb145230bb348d7ac960c2b1c839911.png
此处指插入name,id这一列就会被添补为默认值。(此处默认值为null)
还可以一次插入多行记载~
insert into 表名 values (值,值...),(值,值...)....
https://i-blog.csdnimg.cn/direct/f40134b0799944aeacce40838804fbd5.png
这里是提示,就是反馈效果,客户端给服务器发起插入请求,服务器要返回这次插入是否乐成~~
一次插入多行记载,相比于一次插入一行,分多次插入,要快不少~https://i-blog.csdnimg.cn/direct/0d46d5f1fff0474dac57dd377d7daf4c.png
通过select就可以查询到表中的数据~
datetime范例,如何插入呢?
可以使用一个固定格式的字符串,来表示时间日期
https://i-blog.csdnimg.cn/direct/6744f0810f8f4cddbc4d6926baef430e.png
假如想填写的时间日期,就是当前时候。 SQL提供了一个现成的函数,now()
https://i-blog.csdnimg.cn/direct/86608c10b8bf47bfaa04f73869efa3d5.png
(2)查询(复杂***)
DECIMAL (3,1) 总长度是3,小数点后1位
①全列查询:select * from 表名; 伤害操作!!(*)
https://i-blog.csdnimg.cn/direct/65860494e67f4e67adb9b8a11ab397f8.png
*表示“通配符”可以代指所有的列
这里查询出来之后,服务器通过网络把这些数据返回给客户端,并且在客户端以表格的情势打印出来。
②指定列查询:select 列名,列名.... from 表名;
https://i-blog.csdnimg.cn/direct/332ce3e3dfe749ec862a018df52d5bcc.png
③查询字段为表达式 不会影响到数据库服务器硬盘上存储的原始数据
一边查询,一边进行计算~~
在查询的时候,写作由列名构成的表达式,把这一列中的所有行都带入到表达式中,到场运算。
查询所有同砚语文成绩 -10分 的效果
https://i-blog.csdnimg.cn/direct/1b2fdb402a9c477ba7b948b0fca4459e.png
这里的操作不会修改数据库服务器上的原始数据,只是在最终相应的“暂时效果”中做了计算
计算每个同砚的总成绩~~
https://i-blog.csdnimg.cn/direct/6d64dc4ef1424818bb3a87d3b52be3c0.png
SQL在查询的时候,可以进行一些简单的统计操作。
表达式查询,是 列 和 列之间的运算,把每一行都带入这样的运算中,不是 行 和 行之间
④带别名的查询: select 表达式 as 别名 from 表名;
查询的时候给 列/表达式 指定别名。(给表也能指定别名)
as 别名,可以针对表达式,列,表名
https://i-blog.csdnimg.cn/direct/2d0e72939de240b6a4aeb50032311c76.png
⑤去重:distinct 修饰某个列/多个列
值相同的行,只会保留一个
https://i-blog.csdnimg.cn/direct/efe5170acf7f447999e41929c924d794.png
多行去重前(名不同):
https://i-blog.csdnimg.cn/direct/b1e60d758bcf4039ad0205ffdff97766.png
多行去重后:
https://i-blog.csdnimg.cn/direct/95aca93ebbb649718bf9a9facf6b6c49.pnghttps://i-blog.csdnimg.cn/direct/f99169bddade49b58ab81e674560d82d.png
⑥查询的时候排序:select 列名 from 表名 order by 列名 asc(升序)/desc(降序);
把行进行排序 不会影响到数据库服务器硬盘上存储的原始数据
明确排序规则:
[*]针对哪个列作为比较规则
[*]排序的时候是升序还是降序
https://i-blog.csdnimg.cn/direct/499d88f6b6d44a8883987c5057806c7b.pnghttps://i-blog.csdnimg.cn/direct/5e1ac1973e964ccb80644b6b6c2bdf52.png
https://i-blog.csdnimg.cn/direct/39988f4baa4045e28d4992ccb36940e5.png
order by 指定的列,假如你select的时候没有把这一列查出来,也不影响 排序
https://i-blog.csdnimg.cn/direct/d93ef538d6cd4414aac4fda7e9fa44ee.png
https://i-blog.csdnimg.cn/direct/52be92448af5408c997df10bc076a38d.png
order by 还可以针对表达式进行排序
https://i-blog.csdnimg.cn/direct/420841e223f14231ab94a27c7e4ec877.png
使用别名
https://i-blog.csdnimg.cn/direct/b085db2af9074100b4b53e0058009a39.png
指定多个列进行排序,order by 后面可以写多个列 使用,隔开
https://i-blog.csdnimg.cn/direct/1321318a24194ce6ac1a61d2a6534bfa.png
先按照数学成绩排序,假如数学成绩相同,再按照语文排序
https://i-blog.csdnimg.cn/direct/b5911e0fcf3d4ccab3372bd27d1a278c.png
指定列后加desc
⑦条件查询:select 列名 from 表名 where 条件;(遍历这个表的每一行记载,把每一行的数据分别带入到条件中。假如条件建立,这个记载就会被放入效果聚集中。假如条件不建立,这个记载就pass)
会指定详细的条件,按照条件针对数据进行筛选
LIKE暗昧匹配:
通过一些特殊符号,描述出规则/特征 后续哪些值,符合上述特征。
(1)查询英语不及格的同砚及英语成绩
https://i-blog.csdnimg.cn/direct/b9da0b1b3b724022a287bee1f9df7059.png
(2)查询语文成绩好于英语成绩的同砚
无论有几个列,都可以使用上述运算符来描述条件
https://i-blog.csdnimg.cn/direct/6bce4a68e9624ee6b8aee9d392327ed9.png
(3)查询总成绩在200分一下的同砚 (条件查询搭配表达式)
https://i-blog.csdnimg.cn/direct/5afbd81168324aa69b9c7f9a39bf9b90.png
https://i-blog.csdnimg.cn/direct/4f57382e448a49b6bc2b5a070cf1fade.png
留意: 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分
https://i-blog.csdnimg.cn/direct/d663ea9d0ae44d149fd5153a75e5d155.png
Rows matched: where条件 筛选出了一行记载
Changed:修改乐成了一行
https://i-blog.csdnimg.cn/direct/f65ec5e75adf44138ee08b7e5517d68d.png
2)把曹孟德同砚的数学成绩变动为60分,语文成绩变动为70分
使用update,可以一次修改多个列 set列 = 值,列 = 值.....
https://i-blog.csdnimg.cn/direct/0892ef4bb2934f0085c2beb8ef31a510.png
https://i-blog.csdnimg.cn/direct/d0394c530c8e4436ba476840a9256f41.png
3)把总成绩倒数前三(limit)的同砚,数学成绩再加上30分
https://i-blog.csdnimg.cn/direct/ab324599b122440ea5a504b977b14fa3.png
https://i-blog.csdnimg.cn/direct/81f7a67b08114ec6b5fd10850d907f05.png
98.0+30=128.0 不符合前面dicimal(3,1)
https://i-blog.csdnimg.cn/direct/385ec8f2809d464f9a278d6ed6b65a10.png
https://i-blog.csdnimg.cn/direct/5b86394e63fe4bf194199e002627d170.png
4)将所有同砚的成绩更新为原来的两倍
update 后面不写任何条件,就是针对所有行都进行修改
https://i-blog.csdnimg.cn/direct/41a5a50480ab4bfa816ac53cc4e687d5.png
8行:所有的行数 实际只修改了7行
警告:show warnings; 检察警告
https://i-blog.csdnimg.cn/direct/1717a1494c64469098c9896a2e1fa16a.png
截断(truncated)
https://i-blog.csdnimg.cn/direct/bee62c2b143242deb39522af088742b5.png
https://i-blog.csdnimg.cn/direct/c4bcb8395ab542ddb7de88cec3d2195f.png
87.5/2 = 43.75 超出了dicimal (3,1) 的范围,于是就进行了截断
https://i-blog.csdnimg.cn/direct/0e8ff4244a874a768af56ffebda95aa4.png
null未修改
(4)删除: delete from表名where条件/order by/limit;
1>删除孙悟空同砚的考试成绩
https://i-blog.csdnimg.cn/direct/2bd64b3cfe0c4fd081b348310b92a01d.png
https://i-blog.csdnimg.cn/direct/31210d4261fb434b8be794548a5f6d3c.png
2>删除整张表的数据
不指定任何条件,就是删除整个表
https://i-blog.csdnimg.cn/direct/845cc2c23b384f0d9ef477a705ac5d08.png
和drop table 不一样
[*]drop table是删除了表,也删除了表里的记载
[*]delete 是只删除了表里的记载,表还在(空表)
https://i-blog.csdnimg.cn/direct/515bbaaac1f24ebd95082ddd5eed4b4e.png
delete和update都是很伤害的操作!!!
delete一旦删除的条件没设置好,就可能把不应删除的给删撤除了
这里的修改/删除持久生效,都会影响到 数据库服务器 硬盘中的数据~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]