数据库-mysql

基本操作:

创建库
create database if not exists tlxy default charset=utf8;
创建表
create table 表名(字段名,类型,【字段约束】,。。。)表引擎;
修改表结构
语法格式:alter table 表名 action (更改的选项)
修改表引擎语句
alter table users engine = 'myisam';
删除表 drop table 表名

数据类型

字符串:

char(x)定长字符串 varchar(x)变长 text()最大64k的变长文本 tinytext...
enum('男','女'....) :接受最多64k个串组成的一个预定集合里面的某个串.

数值类型:

所有数值数据类型(除BIT和BOOLEAN外)都可以有符号或无符号(只能存储正.使用UNSIGNED关键字)
int: 4字节 int(4) 没有意义,默认无符号的int为int(11),有符号的int(10)
只有当给int类型设置有前导零时,设置int的宽度才有意义如int(4) unsigned zerofill
tinyint:1字节8位 smallint bit:位字段 1-64位
double float decimal(5, 2):精度可变,这里表示数值总共5位, 小数占2位

日期

datetime 8字节1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
YYYY-MM-DD HH:MM:SS

二进制

一些字段约束

  • not null 不能为空,在操作数据库时如果输入该字段的数据为NULL ,就会报错
  • default 设置默认值
  • primary key 主键不能为空,且唯一.一般和自动递增一起配合使用。
  • auto_increment 定义列为自增属性,一般用于主键,数值会自动加1
  • unique 唯一索引(数据不能重复:用户名)可以增加查询速度,但是会降低插入和更新速度

运算符

like: 支持特殊符号%和_ ;

主键

表中每一行都应该有可以唯一标识自己的一列,不更改,可以用自增整数类型

Mysql数据库表引擎与字符集

存储引擎以前叫做表处理器,它的功能就是接收上层传下来的指令,然后对表中的数据进行提取或写入操作。

MyISAM和InnoDB表引擎的区别:
1.MyISAM不支持事务,而InnoDB支持。

事务由一个或多个sql语句组成一个整体,如果所有的语句执行成功那么修改将会全部生效,如一条sql语句将销量+1,下一条再+1,倘若第二条失败,那么销量将撤销第一条sql语句的+1操作,只有在该事务中所有的语句都执行成功才会将修改加入到数据库中。

2.存储结构
MyISAM:每个MyISAM在磁盘上存储成三个文件。

  • .frm文件存储表结构。
  • .MYD文件存储数据。
  • .MYI文件存储索引。
    InnoDB:主要分为两种文件进行存储
  • .frm 存储表结构
  • .ibd 存储数据和索引 (也可能是多个.ibd文件,或者是独立的表空间文件)

3.MyISAM:只支持表级锁,InnoDB:支持事务和行级锁,是innodb的最大特色。

4.MyISAM:允许没有任何索引和主键的表存在.InnoDB:如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键。

5.MyISAM:保存有表的总行数,如果select count() from table;会直接取出出该值。InnoDB:没有保存表的总行数(只能遍历)

  1. CURD操作
    MyISAM:如果执行大量的SELECT,MyISAM是更好的选择。
    InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表.

7.外键MyISAM:不支持.InnoDB:支持

8.查询效率MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。

9.MyISAM和InnoDB两者的应用场景:
MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。
InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。现在默认使用InnoDB。

增删改查

格式: insert into 表名[(字段列表)] values(值列表...);
insert into stu(id,name,age,sex,classid)values(1,'zhangsan',20,'m','lamp138');
insert into stu value(null,'wangwu',21,'w','lamp138');
mysql> insert into stu values
-> (null,'zhaoliu',25,'w','lamp94'),
-> (null,'uu01',26,'m','lamp94');

格式:update 表名 set 字段1=值1,字段2=值2,字段n=值n... where 条件
update stu set age=35,sex='m' where id=11;

格式:delete from 表名 [where 条件]
delete from stu where id=100;

查询

select 字段列表或* from 表名
[where 搜索条件] (注意and优先级高于or)
[group by 分组字段 [having 分组条件]]
[order by 排序字段 排序规则] (Asc 升序,默认;desc降序)
[limit 分页参数] (limit n 提取n条数据; limit m,n 跳过m跳数据,提取n条数据
)

like用法:
使用 % 模糊搜索。%代表任意个任意字符
查询name字段中包含五的 :select * from users where name like '%五%';

查询name字段中最后一个字符 为 五的 : select * from users where name like '%五';

查询name字段中第一个字符 为 王 的 :select * from users where name like '王%';

使用 _ 单个的下划线。表示一个任意字符,使用和%类似,用两个就是两个字符
-- 查询表中 name 字段为两个字符的数据 : select * from users where name like '
_';

查询 name 字段最后为五,的两个字符的数据:select * from users where name like '_五';

聚合函数max(),min(),count(),sum(),avg()
-- 统计 users 表中的数据量:select count(*) from users;

-- count(*) 是按照 users表中所有的列进行数据的统计,只要其中一列上有数据,就可以计算
-- count(id) 是按照指定的 id 字段进行统计,也可以使用别的字段进行统计,
-- 但是注意,如果指定的列上出现了NULL值,那么为NULL的这个数据不会被统计

分组 select classid,count(*) as num from users group by classid having num >=5;

你可能感兴趣的:(数据库-mysql)