过完年回来已经一个月了,也过完了第一个教学月度,前段学完了,开始学数据库了,等完全学完数据库就开始能自己运营网页了,感觉贼帅气,贼牛逼,贼屌,废话不多说了,把这周学习的数据库操作上来吧
启动终端
service mysql start
停止终端
service mysql stop
重启
service mysql restart
登录mysql
mysql -hlocalhost -uroot -p
连接终端
mysql -uroot -p
select version(); 查看版本
select now(); 显示当前时间
数据库
创建数据库
create database 数据库名 charset=utf8;
删除数据库
drop database 数据库名;
切换数据库
use 数据库名;
查看当前选择的数据库
select database();
数据类型
数字类型
tinyint 很小的整数
int 普通大小的整数
decimal 压缩的严格定点数
字符串
char 固定长度非二进制字符串
varchar 变长非二进制字符串
text 小的非二进制字符串
datetime 日期
bit 布尔
约束
primary key 主键
not null 不能为空
unique 要求该列唯一,允许为空,但只能出现一个
default 默认约束某列的默认值
auto_increment 自增长,输入0,自动加1
表操作
查看当前数据库中的所有表
show tables;
创建表
create table 表名(列+类型+约束,每一列用逗号分隔)
例如: create table zr1(id int auto_increment primary key,name varchar(10) not null)
创建一个叫zr1,有两个列的表格,id列为数字类型,自动增长,主键,名字列为字符串类型,限制为10个字符串,不能为空
修改表
alter table 表名 add(添加)或者change(修改)或者删除 列名 类型; 例如
alter table students add birthday datatime; 往students里添加时间类型,名字为生日的表头
删除表
drop table 表名;
查看表结构
desc 表名;
更改表名称
rename table 原表名 to 新表明;
查看表的创建语句
show create table 表名;
增加 修改 删除
全列插入
insert into 表名 values()
缺省插入
insert into 表名(列1)values(值,...)
同时插入多条数据
insert into 表名 values(),(),();
insert into 表名(列1,..) values(值1,...),(值1,....);
修改数据
update 表名 set 列名=修改的值 where 条件 id=1 或者 名字=?
删除数据
delete from 表名 where 条件(就是想要删除的行,比如说id=1)
表格数据查询操作
查询
select * from 表名 查询全部
select * from 表名 where id=1,或者name="哈哈"(条件);
select distinct 想要查询的东西 from 表名; 消除重复行
比较查询
select * from 表名 where id<=4; 查询id小于等于4的
select * from 表名 where name!="黄蓉" 查询不等于黄蓉的
select * from 表名 where isdelete=0; 查询没被删除的
运算符
or或者 and并且 not不,没有
select * from 表名 where id>3 and name="哈" 查询编号大于三叫哈的同学
模糊查询
select * from 表名 where name like '%黄%'; 查询带黄字的数据,_代表一个字符,%代表多个字符
范围查询
select * from 表名 where id in(1,3,8); in表示在一个非连续的范围内查询1或3或8的学生
select * from 表名 where id between 3 and 8; 查询3到8的学生
空判断
select * from 表名 where 表头名 is null; 查询表头名为空的学生
is not null 就是不为空
聚合
select count(*) from 表名; 计算总行数
count计算总行数 max 最大值 min 最小值 sum 求和 avg 平均值
分组
select 列1 列2 或者聚合 from 表名 group by 列1 列2 having(加条件)
前后两个列必须相等
having 运算跟where相同 但是原理不同
where 是对原始数据筛选
having 是对group by 的结果筛选
排序
order by name(列1) asc/desc, age(列2) asc/desc...
默认排序是升序,从小到大
asc 从小到大
desc 从大到小
分行
limit 开始索引,分几行
一般都是在最后写
一张表中有一个非主键的字段指向了另一张表中的主键,就叫该字段叫外键
非主键指向主键的是子表
被指向主键的是父表
外键的列类型必须一致
创建外键实例
在表里创建
先创建父表
create table zr1(
id int auto_increment primary key,
name varchar(10));
在创建子表,连接子类id
create table zr2(
id int auto_increment primary key,
zr2name int,
foreign key(zr2name) references zr1(id)); 这行就是创建外键约束
这就连接上了 一个更改就会都更改
外边创建
表已经创建好了 添加外键约束
先增加zr2的列
alter table zr2 add age int;
再为zr2的age列添加外键约束
alter table zr2 add foreign key(age(就是要约束外键的列名)) references zr3(id); zr3(id)就是父表的id跟字表的age绑定了
联合查询
先找到表和表的关系,name来自zr1(父表),id来自zr2(子表),address来自zr3(父表)
zr1 id ---zr2 r1
zr3 id ---zr2 r3
把上面这三样显示到一个表格里
select zr1.name,zr3.address ,zr2.id from zr2(子表) inner前面不能有逗号
inner join zr1 on zr2.r1 = zr1.id
inner join zr3 on zr2.r3 = z3.id;