'''
eg:事例
ex:说明
'''
一:基本命令
1.登陆数据库:mysql -uroot -p
2.查看版本:select version();
3.查看当前时间:select now();
4.远程连接:
mysql -h ip地址 -u 用户名 -p
二:数据库操作
db_name:数据库名字
show databases; 查看所有的数据库
1.创建数据库:
create database db_name default character set utf8 collate utf8_general_ci;
character set utf8 :设置字符串为utf8
utf8_bin:区分大小写;
utf8_general_cs:大小写敏感;
utf8_general_ci:大小写不敏感
2.删除数据库:
drop database db_name
3.切换数据库:
use db_name;
4.查看当前选择的数据库:
select database();
三:表的操作
table_name:表名
td_name:列名
1.查看数据库中所有的表:
show tables; 查看数据库中所有的表
2.创建表:
create table if not exists table_name(id int not null auto_increment primary key,name varchar(255),age varchar(255));
创建了一个id name age 的表 id 整形 非空 自增长 主键。name和age 可变字符型
eg:
create table if not exists table_name( id int not null auto_increment primary key,name varchar(20) not null,age int not null,gender bit default 1,address varchar(20),isDelete bit default 0);
default :默认值
isDelete :默认为0 未被删除,是否删除的标记
3.查看表字段结构:
desc table_name;
4.删除表:
drop table table_name;
5.产看建表语句
show create table table_name;
查看创建表时候的主要语句。
6.重命名表名
rename table old_table_name to new_table_name;
或者 alter table 旧表名 rename 新表名;
7.修改表结构:
alter table table_name modify|add |change|drop 列名 类型属性;
一般不修改表结构,创建的时候就应该确定表结构,如果不确定日后是否修改 可以预留一些空字段。
四:数据操作
数据操作 通常是有条件的
1.增:
a.全列插入:
insert into table_name(...);
eg:insert into table_name values(0,"char",int,1);
ex:
0:主键列是自动增长,但是在全列插入时需要占位,通常使用0占位,插入成功以后以自动增加的实际数据为准,未必为0
char:字符串 加引号
int:直接写
b.缺省插入:
insert into table_name(列1,列2,...) values(值1,值2,...);
ex:插入的时候 表中的字段名和值 一一对应插入
c.同时插入多条数据
insert into table_name values(...),(...)(...)...;
ex:以逗号把值隔开,全列和缺省 也可以用逗号隔开 实现同时插入多条数
2.删:
delete from table_name;
ex:会删除整个表的数据,慎用。
delete from table_name where id=1 or|and ...;
ex:可以用where条件语句进行筛选删除,where 列1=值1,列2=值2,...。
3.改:
update table_name set 列1=值1,列2=值2,...
ex:整个列1 和 列2 都会被修改掉,慎用
update table_name set 列1=值1 where id=7;
ex:可以用where条件语句进行筛选修改,where 列1=值1,列2=值2,...。
4.查:
select * from table_name;
ex: 查询table_name 中的全部数据
selec * from table_name where id=1 or|and ...;
ex :查询同上
五:查
这是主要操作。
1.基本语法:
select * from table_name;
ex: a、from 关键字后面是表名,表示数据来源于 table_name 这张表
b、select 后面写表中的列名,如果是 * 表示在结果中集中显示表中的所有列
c、在select后面的列名部分,可以使用 as 为列名起别名。这个别名显示在结果集中
d、如果要查询多个列 中间用逗号 ,分隔
eg:select name,age from table_name;
select name as a,age from table_name;
name在结果集中 以 a 显示
name和age为表中字段或数据。
2.消除重复行:
在select 后面,列的前面 使用distinct可以消除重复的行
eg: select distinct name from table_name;
显示的时候 把重复的行内容去掉。 (去重)
3.条件查询:
a.语法:
select * from table_name where 条件 [and,or..]
b.比较运算符:
>,<,=,>=,<=, 不等于:!= <>,(<>:和python2中的<>意思一样)
eg:select * from table_name where id>7;
c.逻辑运算符:
and or not
eg: select * from table_name where id>7 and td_name=0;
d.模糊查询:
like
%: 表示任意多个字符
_:表示一个字符
select * from table_name where td_name like "%思%"; 匹配:(王思聪,大王思,有思就可以)
select * from table_name where td_name like '_思';匹配:(心思,相思)不匹配:(思想,单相思) _: 一个任何字符。
e.范围查询:
in :可表示在一个非连续的范围内
eg: select * from table_name where id in (1,3,5);
ex: 查询 id 的值在 1 3 5 中的的数据
not in:和 in 相反,除了 1 3 5 中的
between...and...:表示在一个连续的区间内
eg: select * from table_name where id between 6 and 8;
ex: 查询 id 的值在[6,8]之间的值,包括6,8
f.空判断:
null与"" 是不同的,null表示无数据
is null:判断空
is not null: 判断非空
eg: select * from table_name where td_name is null|is not null;
g.优先级:
小括号,not,比较运算符,逻辑运算符
and 比 or的优先级高,如果同时使用并希望先选or,需要结合括号使用
4.聚合:
为了快速得到统计的数,提供了5个聚合函数。
a. count(*): 表示计算总行数, 括号中可以写 列名
select count(*) from table_name;
b. max(列):表示求此列的最大值
select max(td_name) from table_name;
c. min(列):表示求此列的最小值
select min(td_name) from table_name;
d. sum(列):表示求此列的和
select sum(td_name) from table_name;
e. avg(列):表示求此列的平均值
select avg(td_name) from table_name;
5.分组:
按照字段分组,表示此字段相同的数据会被放在一个结果集中,分组后只能查询出相同数据列。对于有差异的数据列无法显示在结果集中,可以对分组后的数据进行统计,做聚合运算
eg: select 列1,列2,聚合... from table_name group by 列1,列2,...;
ex: 查询男女生总数, select gender,count(*) from table_name group by gender; 把男女生 分组后 统计男女的人数
eg: select 列1,列2,聚合... from table_name group by 列1,列2,...having 条件;
having:是对group by 进行筛选,在结果集中进行筛选
where 是对 from 后制定的表进行筛选,属于对元素数据的筛选
6.排序:
默认升序
order by asc:升序
dorder by esc:降序
select * from table_name order by td_name1 asc|desc,td_name2 asc|desc
如果td_name1 的值相同,该值按照td_name2再排
7.分页:
select * from table_name limit start count ;
ex: 从start 开始,看 count 条数据
eg: select * from table_name limit 0,3;
ex: 从0 开始 看3 条数据
六:关联
1.创建一个表
create table table_name_outer(id int not null auto_increment primary key,name varchar(255) not null ,stuNum int not null);
create table table_name_inner(id int not null auto_increment primary key,name varchar(255) not null ,gender bit default 1,classid int not null,foreign key(classid) references table_name_outer(id));
把inner的classid 设为 outer的外键。
foreign key(classid) references table_name_outer(id));
插入数据:
insert into table_name_outer values(0,"python01",55),(0,"python02",45),(0,"python03",50),(0,"python04",80);
insert into table_name_inner values(0,"tom",1,1);
select table_name_inner.name,table_name_outer.name from table_name_outer inner join table_name_inner on table_name_outer.id=table_name_outer.classid;