一、DDL - 主要提供数据库和表的创建、删除和修改
0.删除数据库:drop database 数据库名;
例如:
drop database school; -- 直接删除指定数据库
drop database if exists school; -- 如果指定的数据库存在就删除数据库
1.创建数据库:create database 数据库名;
例如:
create database school; - 直接创建数据库
create database if not exists school; - 当指定数据库不存在的时候才会创建数据库
create database if not exists school default charset utf8;
创建数据库的时候设置字符集编码方式为utf8,让数据库支持中文格式
2.使用数据库:use 数据库名;
use school;
3.新建表:create table 表名(字段名1 类型1,字段2 类型2 、、、、);
注意:a.表名一般需要加前缀't'或者'tb'
b.字段用来确定表中要存储那些数据,字段名随便命名不能使用关键字命名
c.数据类型必须是MySQL支持的数据类型
常用数据类型:int整数,char(size)定常字符串,varchar(size)不定长字符串,text字符串,bit布尔,date日期
注意:一个字段可以添加多个约束,多个约束之间用空格隔开
auto_increment 只针对主键有效,并且主键的整形
添加表例子:
create table t_student
(
stuid int not null auto_increment,
stuame varchar(10) not null,
gender bit default 1,
birth date,
primary key(stuid)
//设置stuid为当前表的主键,设置一个字段为主键,其实间接的约束了这个字段的值是唯一的
);
4.删除表:drop table if exists 表名; --删除后表不存在
drop table if exists t_student;
清空表中的记录:truncate table 表名; -删除后表还在
truncate table t_student; - 清空表中的内容
5.修改表:
1.添加字段:alter table 表名 add column 字段名 字段类型 约束;
alter table t_student add column score float(5,2) default 0;
2.删除字段:alter table 表名 drop column 字段名;
alter table t_student drop column dender;
二、DML(数据操作语言) - 主要针对数据中数据的增、删、改、查
1.增(添加数据/记录)
1.1插入数据/记录:insert into 表名 values(值1 ,值2 、、、、) - 依次给指定的表的字段赋值
insert into t_student values(100 , '张三',0.'2019-2-25');
1.2插入数据/记录:insert into 表名 (字段1,字段2、、、) values(值1,值2、、、、) -以指定的顺序给指定的字段赋值
insert into t_student (stuname,birth) values(' 憨猜猜','1998-7-11');
insert into t_student(stuname,birth) values
('憨猜猜','1998-7-13'),
('小何',date(now())),
('王大锤','2011-11-11')
值的问题:SQL中是数字对应的值直接写,字符串需要使用引号引起来,bit的值只有0或者1;时间可以满足时间格式字符串也可以通过时间函数获取的值
时间函数:now()-当前时间 year(now())-当前年 month(now())-当前月、、、 date(now()) - 当前日期
2.删(删除数据/记录)
delete from 表名; - 删除指定表中的记录
delete from t_student;
delete from 表名 where 条件语句; - 删除满足条件的记录
SQL中的条件语句: = 判断是否相等,<>(不等于,和python中的!=功能一样),<,>,<=,>=
delete from t_student where stuid=100; - 删除t_student表中stuid等于100的值
3.改(修改数据/记录)
update 表名 set 字段=新值; - 将指定表中所有行的指定列/字段的值赋值成新值
update t_student set birth='1998-1-11';
update 表名 set 字段1=新值,字段2=新值、、、 where 条件语句; - 将表中满足条件的行中指定的字段的值赋值成新值
update t_student set gender = 1 where stuname='王大锤';
通配符%:表示任意个数的任意字符(包括0个)
update t_student set birth='1998-7-13' where stuname like '小%';
找到表中开头带有小的名字,然后改变birth的值,'%小%'只要名字带小就满足条件
通配符_:表示任意字符
update t_student set birth='1998-7-13' where stuname like '小_';
修改stuname只有两个字符,并且第一个字符是小的字段,修改birth
注意:通配符只针对字符串有效
4.查(获取数据)
4.1直接查询
select * from 表名; - 获取指定表中所有的行和所有的列(所有的数据)
select * from t_student;
select 字段名1,字段名2...... from 表名; - 获取指定表中所有行指定的列
select stuname,stuid from t_student;
select * from 表名 where 条件; - 获取指定表中所有满足条件的行的所有列的数据
select * from t_student where stuname like '%小%';
select * from t_student where stuid<103;
4.2列重命名
select 字段1 as 新字段1 , 字段2 as 新字段2 ....from 表名;
注意:这里的as可以省略
select stuid as '学号',stuname,genber as '性别' from t_student;
4.3对查询结果重新赋值(一般针对布尔数据)
select if (字段名,新值1,新值2) from 表名;
查询指定字段,并且判断对应的值是0还是1,如果是1结果就是值1,是0就是值2
MySQL写法
select stuname,if(gender,'男','女') as '性别' from t_student;
通用写法:select case 字段 when 值 then 新值2 end from 表名;
select case gender when '男' then '女' end as '性别' from t_student;
4.4对列进行合并
select concat(字段1,字段2、、、) from 表名;
select concat(stuname,':',stuid) as 'name_id'from t_student;
注意:数字和字符串数据可以合并,bit类型的数据不可以合并
4.5模糊查询 - 查询的时候通过like条件来指定查询对象
SQL中支持逻辑运算and(逻辑与运算)和or(逻辑或运算),not(逻辑非运算)
select * from t_student where stuname like '%猜%' or not stuid<108;
4.6排序(先按照之前任何语法进行查询在排序)
select * from 表名 order by 字段; - 对查询结果按照指定字段的值进行升序排序
select * from t_student order by stuname; - 按姓名升序排序
select * from t_student order by stuid asc; - 按学号进行升序排序
select * from t_student order by stuid desc; - 按学号进行降序排序
排序的时候可以在order by 后面添加多个字段,进行联排,排序的时候前面的字段优先级要高一些
select * from t_student order by gender asc,stuid desc;
先按照性别进行升序排序,再按学号进行降序排序
4.7限制
select * from 表名 limit N; - 获取查询结果的前N条数据
select * from t_student limit 2;
select * from 表名 limit M offset N; - 对查询结果跳过N个数据,取M数据
select * from t_student limit 3 offset 4; - 跳过4个数据,取3个数据
网友评论