MySQL操作

数据库

1、增

  语法:create database 库名;

  库名的一些规范:可以有数字、字母、下划线、@、#、$组成,

          区分大小写

          不能使用关键字 例如:create alter

          不能单独使用数字

          最长128位

2、删

  语法:drop database 数据库名;

3、改

  没有专门的修改指令

  删了重建

4、查

  语法:1、show databases;   # 查看存在的所有库

     2、show create database 数据库名   # 查看某一个库的创建信息

5、使用

  语法:use 数据库名      # 相当于进入文件夹里,可以对表进行一些操作,只需要use一次(只在同一个库里做修改)

数据类型

  数据类型的后面可以带上宽度,括号括起来,数值型的宽度只用于显示

  其他类型的宽度表示的是最大字符数,如果你插入的字符超过这个最大宽度,

  不会报错,只会取最大宽度的值,其他的值就丢失了

1、数值型

  --整数型(唯一的区别就是取值范围不同)

      unsigned表示无符号,需要设置无符号只需要在设置类型时(数值类型 unsigned)

    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、show 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;
posted @ 2019-06-13 11:27  hesujian  阅读(228)  评论(0编辑  收藏  举报