MySQL操作
数据库
1、增
语法:create database 库名;
库名的一些规范:可以有数字、字母、下划线、@、#、$组成,
区分大小写
不能使用关键字 例如:create alter
不能单独使用数字
最长128位
2、删
语法:drop database 数据库名;
3、改
没有专门的修改指令
删了重建
4、查
语法:1、show databases; # 查看存在的所有库
2、show create database 数据库名 # 查看某一个库的创建信息
5、使用
语法:use 数据库名 # 相当于进入文件夹里,可以对表进行一些操作,只需要ues一次(只在同一个库里做修改)
数据类型
数据类型的后面可以带上宽度,括号苦括起来,数值型的宽度只用于显示
其他类型的宽度表示的是最大字符数,如果你插入的字符超过这个最大宽度,
不会报错,之后取最大宽度的值,其他的值就丢失了
1、数值型
--整数型(唯一的区别就是取值范围不同)
tinyint:小整数
有符号:-128 ~ 127
无符号:0 ~ 255
int :整数
有符号:-2147483648 ~ 2147483647
无符号:0 ~ 4294967295
bigint:大整数
有符号:-9223372036854775808 ~ 9223372036854775807
无符号: 0 ~ 18446744073709551615
--浮点型
M:表示总长度
D:表示小数点后的长度
float(M,D) 浮点型
随着长度的不断增加,可能精准的慢慢下降
decimal(M,D)定点型 ,比浮点型精准
随着长度的不断增加,精准度依旧
2、字符串型
char:定长 简单粗暴 浪费空间 存取速度快
varchar:变长字符串 精准 节省空间 存取速度慢
一般没有百分百把握的情况下,都使用varchar,除了像密文密码这样,用MD5加密过长度始终一样。
3、日期型
data :xxxx-xx-xx 2019-6-12(年月日)
time :xx:xx:xx 10:14:32(时分秒)
datatime:xxxx-xx-xx xx:xx:xx 2019-6-12 10:14:32
推荐使用datatime
4、枚举型和集合型
枚举enum :在指定范围内多选一
集合set :在指定范围内多选多
数据表
1、增
# sql语法: create table 表名( 列1 列属性 [是否为空,默认值设置], 列2 列属性 [是否为空,默认值设置], 列3 列属性 [是否为空,默认值设置] )engine=innodb charset=utf-8;
ps:engine代表的引擎 有innodb 和 myisam mysql5.5版本以上默认是innodb
创建表需要注意的点:
1、列名和列属性是必须的,后面的约束条件(是否位空,默认值)可以根据需求添加
2、每个列之间用逗号隔开,最后一个列的后面不带逗号
2、查
"""
1、show tables; # 查询当前库中的所有的表
2、describe 表名; # 查询的是当前表的结构信息,describe可以缩写成desc
3、desc create table 表名; # 查询建表信息
"""
3、改
""" 修改字段 alter table 表名 change 原列名 新列名 列属性 [约束条件]; 新增字段 alter table 表名 add 新列名 列属性 [约束条件]; 删除字段 alter table 表名 drop 列名; """
4、删
drop table 表名;
表和表中的数据都会被删除,工作中一般不轻易使用
数据行
1、增
insert into 表名(列名1,列名2...) values(值1,值2...),(值1,值2...)...;
注意点:
1、列名数量必须要和值得数量对应上
2、值必须要满足对应列的一些约束
3、一次像插入多行,用括号分隔开,一个括号代表一行
2、查
select * from 表名; # 将表中的所有数据全部列出来 select 列名1,列名2.. from 表名; # 将表中的某一列数据查出来 select * from 表名 where 列名=值; # 将表中某一列位某个值 的 一整行全部列出来
3、改
update 表名 set 列名=值; # 将表中的某一列全部改成某个值 update 表名 set 列名=值 where 列名2=值2; # 将表中的某一列(列2)为某个值(值2) 的 另一个列(列名)的值改为某个值(值) update 表名 set 列1= 值1,列2=值2 where 列3=值3; # 当某个列(列3)位某个值(值3)时,同时修改多个列的值
4、删
delete from 表名;
删除表中所有数据,如果表中有列是自增加的话,再次添加会延续上一次自增加的值
truncate 表名;
删除表中所有数据,再次添加时,自增加的值会重置
delete from 表名 where 列=值;
删除表中某一行数据
delete与truncate的区别
delete是一行一行的删,效率慢
truncate是全部一起删掉,速度快
主键
含义:相当于字典的目录,作用就是为了加快索引取值
每一个表默认存在一个主键,主键所有的值都是唯一的
创建表时可以通过primary key 把某一列设置成主键
如果不设置,会有一个内部的主键
外键
定义
当一张表里面有一个列的值 是 用另一张表主键来表示的时候,那么这个列就成为外键
原因
一张表中数据可能会反复出现并且字符长度过长,如果我们不适用外键的话,会特别的占用资源
设置方法
1、一个表要使用外键,在创建这个表之前,那个外键的表就必须已经存在
2、创建的时候通过下面sql语句跟在创建列的后面
constraint 键名 foreign key (列) references 表(主键列)
3、键名没有要求可以自定义,但是如果要创建多个外键的话,键名不能相等
例子
create table t2( t2_id int auto_increment primary key, name varchar(32) not null default '', cid int not null default 0, constraint fk_t2_t1 foreign key (cid) reference t1(t1_id) )engine=innodb charset=utf8;