mysql知识点回顾(一)
回顾mysql中的常用知识点
![](https://images2018.cnblogs.com/blog/1168113/201803/1168113-20180302110530245-1651714167.png)
上图为win版本启动关闭服务方式。
连接mysql命令:mysql -u alex -p
查看所有数据库:show databases;
use db_name ;切换数据库
show tables; 显示所有表
select * from 表名;
select name,age,id from 表名;
连接:
默认:用户root
创建用户:
create user 'alex'@'192.168.1.1' identified by '123123'; identified 设置密码
create user 'alex'@'192.168.1.%' identified by '123123'; %代表任意
create user 'alex'@'%' identified by '123123'; 所有ip
用户管理
创建用户
create user '用户名'@'IP地址' identified by '密码';
删除用户
drop user '用户名'@'IP地址';
修改用户
rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';;
修改密码
set password for '用户名'@'IP地址' = Password('新密码')
PS:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)
授权
权限 人
grant 权限
grant select,insert on db1.t1 to 'alex'@'%' ;
设置alex只能查看db1数据库的t1表
grant all privileges on db1.t1 to 'alex'@'%' ;
alex除了grant以外的所有权限都可以
revoke all privileges from db1.t1 to 'alex'@'%' ;
取消这条权限
show grants for '用户'@'IP地址' -- 查看权限
grant 权限 on 数据库.表 to '用户'@'IP地址' -- 授权
revoke 权限 on 数据库.表 from '用户'@'IP地址' -- 取消权限
SQL语句规则
操作文件夹(操作数据库)
create database db2;
create database db2 default charset utf8; 数据库默认utf8
show databases;
drop database db2;
操作文件(操作表)
show tables;
create table t1(id int,name char(10)); 创建表,id,name字段,name限制10
个字符,超出取前十个。
create table t1(id int,name char(10)) default charset=utf8; 表默认是utf8
create table t1(
#列名,类型,null,
#列名,类型,not null,不可以为空
#列名,类型,not null,default 1,
#列名,类型,not null,auto_increment,自增
id int,
name char(10)
) engine=innodb default charset=utf8; 表默认是utf8,引擎默认是innodb
select * from t1;
innodb 支持事务,可以回滚,原子性操作。
myisam 不支持事务
auto_increment 表示:自增
primary key:表示,约束(不能重复,且不能为空);加速查找,
一个表里只能有一个自增列,只能有一个主键。但是主键不一定是一行。
清空表:
delete from t1; 清空表,新增数据的自增id从之前的接着。
truncate table t1;清空表,自增id从头开始。
删除表:
drop table t1;
查看表结构以及类型:
desc tabename;
查看表是如何创建的:
show create table tablename;
show create table tablename \G; 加一个\G 可以去掉空格
自增:
通过命令 更改下次插入数据时,自增ID的值:
alter table tablename AUTO_INCREMENT=13;更改下次插进来数字,自增主键为13
mysql中自增的步长
![](https://images2018.cnblogs.com/blog/1168113/201803/1168113-20180302110419978-836990517.png)
操作文件内容(操作内容)
插入数据:
insert into t1(id,name) values(1,'egon');
删除数据:
delete from t1 where id<6
修改:
update t1 set age=18; 将age列全部修改为18
update t1 set age=18 where age=17; 将age为17的改为18
查看数据:
select * from t1;
create table t3(id int auto_increment primary key,name char(10)) default charset=utf8; 设置id为主键 并自增。
insert into t3(name) values('abcdef'); 所以插入数据的时候只需要插入name字段即可。
数据类型
数字
tinyint
int
unsigned 表示创建表的时候字段属性没有符号(比如负号)
signed 表示有符号的
bigint
以上三种就是长度的区别
FLOAT
只能表示不太精准的小数,如果长度不大,可以使用
DOUBLE
只能表示不太精准的小数,如果长度不大,可以使用
decimal
该类型小数非常精准,因为内部原理是将长的小数按字符串存储的。
decimal(10,5) 10代表总位数,5代表小数点后几位
bigint支持的数字的大小范围为:
19位,存电话号码等。
有符号范围:-9223372036854775808 到 9223372036854775807
int支持的数字范围为:
10位,
有符号范围:-2147483648 到 2147483647
无符号范围:0-4294967295
字符串
char(10)
如果字符没有占满,则会自动填充至10个字符,比如填充空格
varchar(10)
如果没有填满,在硬盘中只会占用实际字符长度,节省空间,查找速度没有char快11
char和varchar最高只能存储255个字符
text可以存储65535个字符
如果更多的内容,需要写到文件中,将路径写到数据库。
优化建议:创建表时,将定长的数据往前放,变长的往后放。
时间类型
DATETIME
枚举
enum
![](https://images2018.cnblogs.com/blog/1168113/201803/1168113-20180302110435006-1555562385.png)
相当于给插入数据的时候规定了一个选项
单选字符串数据类型,适合存储表单界面中的“单选值”。
设定enum的时候,需要给定“固定的几个选项”;存储的时候就只存储其中的一个值。
设定enum的格式:
enum("选项1","选项2","选项3",...);
实际上,enum的选项都会对应一个数字,依次是1,2,3,4,5...,最多有65535个选项
使用的时候,可以使用选项的字符串格式,也可以使用对应的数字。
![](https://images2018.cnblogs.com/blog/1168113/201803/1168113-20180302110447199-1012041541.png)
SET规定,只能插入a,b,c,d的任意组合
多选字符串数据类型,适合存储表单界面的“多选值”。
设定set的时候,同样需要给定“固定的几个选项”;存储的时候,可以存储其中的若干个值。
设定set的格式:
set("选项1","选项2","选项3",...)
同样的,set的每个选项值也对应一个数字,依次是1,2,4,8,16...,最多有64个选项
使用的时候,可以使用set选项的字符串本身(多个选项用逗号分隔),也可以使用多个选项的数字之和(比如:1+2+4=7)
=====================================================================================
外键
create table userinfo(
uid bigint auto_increment primary key,
name varchar(32),
department_id int,
constraint fk_user_depart foreign key ("department_id",) references department('id') #外键约束
)engine=innodb default charset=utf8;
create table department(
id bigint auto_increment primary key,
title char(15)
)engine=innodb default charset=utf8;
外键的名字,上面标红处不能与别的外键重名,建议用表_表这种起名
主键:
![](https://images2018.cnblogs.com/blog/1168113/201803/1168113-20180302110459349-1616513010.png)
上图为主键的两种写法。
一个表只能有一个主键,主键可以由多列组成。
中天一片无情月,是我平生不悔心