目录
一、数据库的基础操作
1、创建数据库
2、显示数据库
3、使用数据库
4、删除数据库
二、常用数据类型
1、数值类型:
2、字符串类型:
3、日期类型:
三、表的基础操作
1、创建表
2、显示表
3、查看表结构
4、删除表
四、表的增删改查(基础)
1、新增数据
(1) 单行数据全列插入:
(2) 单行数据指定列插入:
(3) 多行数据全列插入:
2、查询数据
(1) 全列查询
(2) 指定列查询
(3) 查询字段为表达式
(4) 别名
(5) 去重
(6) 排序
(7) 条件查询
(8) 分页查询
3、修改数据
(1) 修改指定行的指定列
(2) 修改指定行的所有列
4、删除数据
(1) 删除指定行
(2) 删除所有行
语法:create database 数据库名;
注意:
(1) 数据库名一般不可以是SQL中的关键字(如create 、database、where、between......)
如果非要使用关键字来命名,可以借助 ` ` :
(2) 不可以存在同名的数据库:
当我们再次创建名为“demo”的数据库时,MySQL就会提示该数据库已存在:
如果我们不确定将要创建的数据库是否已经存在时,可以加个判断条件:
语法:create database if not exists 数据库名;
如果数据库已经存在,就会报警告,如果数据库不存在,则创建成功。
(3) 创建数据库时可以指定该数据库采用的字符集,如果不指定,则默认采用拉丁文,不能表示汉字:
语法:create database 数据库名 character set 字符集名;
指定为utf8可以表示汉字。
语法:show databases;(注意此处的database是复数形式)
语法:use 数据库名;
红温警告⚠,该操作属于危险操作,谨慎使用~
语法:drop database 数据库名;
注意:
(1) 删除和使用关键字命名的数据库时,也是需要加上` `;
(2) 删除不存在的数据库时会报错,如果不确定要删除的数据库是否存在时,也可以加个判断条件,如果数据库存在则删除,不存在则报警告。
语法:drop database if exits 数据库名;
数值类型可以指定为无符号类型(unsigned),但是不建议。
对数据库中的表进行操作前,需要先使用该数据库:use 数据库名;
语法:create table 表名(数据类型 字段名,数据类型 字段名......);
可以使用comment 或 -- (空格)添加注释:
显示当前数据库中所有的表,语法:show tables;
当前数据库中只有刚才创建的一个student表,注意此处的table也是复数~
语法:desc 表名;
红温警告⚠,该操作属于危险操作,谨慎使用~
语法:drop table 表名; 或者 drop table if exits 表名;
语法:insert into 表名 values (数据,数据...);
注意:插入数据时,数据的类型以及数量要和表中定义的类型和数量一致。
语法:insert into 表名(字段名,字段名...) values (数据,数据);
此处的数据当然也必须是互相对应的:
语法:insert into 表名 values (数据,数据...),(数据,数据...),...,(数据,数据...);
同样地,每行数据都得和表中定义的类型和数量一致。
语法:select * from 表名;
通常情况下,不建议使用全列查询,如果数据量过于庞大,全列查询的效率会非常低下。
语法:select 列名,列名... from 表名; (列名即字段名)
语法:select (列名和表达式的组合) from 表名;
注意:加上表达式的查询结果并不会改变表中实际存放的数据:
语法:select 列名 as 别名 from 表名;
关键字 as 可以省略,但是不建议~
关键字:distinct
语法:select distinct 列名 from 表名;
关键字:order by、asc(升序)、desc(降序)
语法:select 列名 from 表名 order by 待排序的列名 asc/desc;
注意:
(1) null数据视为比任何数值都小,升序时在最上面,降序时在最下面;
(2) 可以对多个列进行排序,排序优先级按照书写顺序;
(3) 升序时的关键字 asc 可以省略(见上图),但是不建议这样写。
关键字:where
比较运算符:
逻辑运算符:
示例:
(1) 查询分数大于90分的同学:
(2) 查询年龄大于18并且分数大于80分的同学:
(3) 查询年龄大于18,或者分数大于80分的同学:
(4) 查询分数在[90,100]的同学:
使用and也可以做到,但是and的效率不如between高。
(5) 查询年龄是18或19岁的同学:
使用 or 也可以做到,但是效率不如 in。
(6) 查询姓名是“悟”开头的同学:
注意:% 表示任意多个字符,而 _ 表示一个字符:
如果是‘%悟’,则表示查询以“悟”字结尾的名字,前面有多少个字都可以;
如果是‘%悟%’,则表示查询名字中有‘悟’字的,‘悟’字在开头、结尾、中间都可以。
如果是“_悟',则表示查询以“悟”字结尾的两个字的名字;
如果是“悟_',则表示查询以“悟”字开头的两个字的名字;
如果是“_悟_',则表示查询名字中间是“悟”字的三个字的名字;
(7) 查询分数为null的同学:
如果使用 = 查询 ,则结果为空:
注意:
(1) 条件查询可以使用表达式,但不能使用别名,因为条件查询执行的优先级高于别名查询;
(2) and 的优先级高于 or ,可以使用()来选中需要优先执行的语句。
关键字:limit
语法:select 列名 from 表名 limit n; (从第0行往后查询n行数据)
语法:select 列名 from 表名 limit n offset m; (从第m行往后查询n行数据)
(1) 按分数降序查询所有同学:
(2) 查询分数前三高的同学:
(3) 从第2行往后查询分数前三高的同学:
关键字: update
语法:update 表名 set 列名 = 表达式 where 条件;
示例:把八戒的分数改为60分
红温警告⚠,该操作属于危险操作,谨慎使用~
语法:update 表名 set 列名 = 表达式;
示例:把所有同学的分数改为0分
红温警告⚠,该操作属于危险操作,谨慎使用~
关键字:delete
语法:delete from 表名 条件;
示例:删除名为八戒的数据
语法:delete from 表名;
示例:删除student表中所有的数据
删除表和删除数据库都是相当危险的操作,务必谨慎使用~