MySQL的增删查改

CRUD语句的关键字用大写或者小写都可以,下面统一用小写

数据库 

查看有哪些数据库

show databases ;    // 符号;不能省

创建

create    database   [if  not  exists ]  库名;//if  not  exists ] 是可选项,表示不存在就创建

create database  库名;

删除

drop database 库名;

drotp database if exists 库名;

使用

use 库名;

常用数据类型

                                    

整型 说明            对应java中的类型
BIT (M)     二进制数,M指定位数,默认值为1。M的范围1到64,存储数据范围2^64-1。
常用 Boolean 对应 BIT ,此时
默认是 1 位,即只能存 0 1
INTInteger
BIGINTLong
浮点型
DECIMAL(M,D)
双精度, M 指定长度, D 表示
小数点位数。精确数值
BigDecimal
字符串
CHAR(size)固定长度的字符串类型,不足的部分会用空格填充。String

VARCHAR(size)

可变长度字符串,只占用实际存储的数据长度,不填充空格。size为存储的最大值
String
TEXT   长文本数据类型String

                       

日期类型说明对应java中的类型
DATETIME
范围从 1000 9999 年,不会进行时区的
检索及转换。
java.util.Date
java.sql.Timestamp
TIMESTAMP
范围从 1970 2038 年,自动检索当前时
区并进行转换。
java.util.Date
java.sql.Timestamp

创建表

create  table   表名   (字段名) ;

create table  students  ( id  int,     name  varchar(6)  comment'姓名',     birthday timestamp);  

        //用comment关键字增加字段说明;                                                        

查看表结构

desc 表名;

FieldTypeNullKeyDefaultExtra
字段名称字段类型是否允许为空索引类型默认值扩充的属性

查看数据库中有哪些表

show  tables;

删除表

drop table  (if exists ) 表名;  //删库删表的操作在实际开发中慎用

删库和删表都是是drop关键字, 后面跟table或者database,进行区分。

新增值
指定列增加

insert   [into]   表名   (列名 ) values(指定字段的值),(可以添加多行);//[into] 这里表示可以省略

全列增加

insert   表名   values (各个字段的值);//全列添加的话,列名可以省略

查询
指定列查询(推荐)

select  列名  from 表名;

select   id ,name ,amount, sesume  from user;

全列查询

select *  from user;//(不推荐使用*,建议正式开发时即使是全列查询也将每个列名单独列出来,提高查询效率,但少量数据时这样写比较方便)

select  id,name,amount,sesume  from user;

表达式查询

select   amount +10 from  user; //数字类型的字段可以这样,但这并没有对amount字段的值在硬盘中进行修改,只是短暂修改存储在内存中,因为这是查询的sql。只有delete,update,insert的sql才能修改硬盘的存储数据。

数据流向:硬盘存储的数据- >读到内存->内存中计算->返回mysql客户端显示;

别名  as

在列名的后面直接加上别名,或者在中间加上as关键字,就可以以别名的形式返回

select  name  [as]    n   from  student;//[ as]这里表示可以省略

去重  distinct

用distinct关键字可以对查询到的重复结果进行去重;

select  distinct  列名 from  user ;  //加在列名的前面,所有指定列的数据都重复时才会去重;

排序  order  by

1.没有order by 排序的结果,顺序具有随机性;

2,null被认为最小值,升序在最上面,降序在最下面;

3.可以对多个字段排序,排序优先级根据书写顺序决定,

4.也可以用表达式或者别名排序。

select  class_id    d   from student   order by   d  desc;

asc - 升序;//默认为升序

desc -降序;

条件查询  where
逻辑运算符
符号说明
>, >=, <, <=大于,大于等于,小于,小于等于
=等于,不能比较NULL,例如 NULL = NULL 的结果是 NULL
<=>等于,能比较NULL ,例如 NULL <=> NULL 的结果是 TRUE(1)
!=, <>不等于

 between a1  and a2

范围匹配,[a1, a2]

in(option,····)如果是option中的任何一个的则返回结果
is  null为空的
is not null不为空的
like模糊查询,‘%’匹配任意字符,‘_’匹配一个字符

符号说明
or条件满足一个就行
and条件全部满足

where条件可以使用表达式,但不能使用别名;

and的优先级高于or,在同时使用时,or要优先执行的部分需要使用()。

分页查询  limit

起始下标为0;

从0开始,筛选n条结果

select  * from student   order by id  limit  n;

从s开始,筛选n条结果

select * from student  limit  s,n ;

从s开始,筛选n条结果,表达更明确

select  *  from student  limit  n  offset  s;//offset表示起始位置

修改

update  表名   set   列名 =value     [where ] [ order by];

update student  set  class_id =1 where  name="bb";

删除值

delete from  表名    [where ][ limit];  //后面可以根据需求添加限制条件

数据库约束

创建表时设置对表数据的约束条件。

default

默认值约束,当某一字段为空时指定默认值

create table student (id int  ,name  varchar(4)default  “cc”);

not null

表示字段值不能为空。

create table   student (id int  not  null, name  varchar(6));

unique

唯一的,表示该字段的值不能重复

create  table  student  (id  int   unique);

primary key

主键,用来标识表中的每一条记录,标识为主键的列的数据不能为空  ,不能重复,跟身份证id一样标识一条数据。一个表只能有一个主键。

create  table  students  (id   int   primary  key);

等效写法:create  table   students( id   int     not null   unique);

auto_increment

一般是用整数id字段作为主键,auto_increment可以使主键根据上一条记录的id值自增。

create table   students(id   int   primary key   auto_increment,  name  varchar(6)  );

使用:

创建表插入两条数据

加了auto_increment后,当不指定id值时,id会从0自增;也可以自己指定id值,那下一条数据会根据上一条记录的id值自增。

当删除id为100和101的两条数据,再插入新数据时,id还是根据被删除的id自增。后续id自增都是根据曾经的最大值进行自增。中间的数字除非手动指定,否则就浪费了,不过int类型能表示40多亿个数,浪费一点没啥,id不会重复。

在分布式系统中,如何生成不重复的id?方法有很多,如用时间戳(ms级)+机器编号+随机因子构造出字符串,再计算hash值等方法。

foreign key

外键约束,强制关联两个表的数据完整性,确保两个表的数据一致性和有效性。

作用:

数据完整性:确保子表中的数据必须在父表中有对应记录;

查询优化:外键字段通常会自动创建索引,提升多表连接查询的性能;

业务逻辑约束:强制实现业务逻辑(如订单必须属于某一个用户)

使用:

foreign  key (子表字段) references   父表(字段);//外键用于关联其他表中的主键或者唯一键。

创建学生表 student ,一个学生对应一个班级,一个班级对应多个学生。使用 id 为主键,
classes_id 为外键,关联班级表id。

create table  class (id  int primary key auto_increment,name varchar(10)); //父表

create table  student (id  int  primary auto_increment , name varchar(5),  class_id   int

,foreign  key (class_id)  references  class(id) );   //子表

class为父表,student为子表,当student中的class_id与class的id关联后,子表中只能添加父表中相应class_id的数据,父表不能删除子表中已关联的数据,相互约束。要删除父表数据就要先删除子表数据。一旦建立外键约束,后续针对子表的操作,也会频繁涉及到对父表中被关联字段的查询。对于主键或者unique约束的字段,查询效率更高,所以只关联父表的主键或unique字段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值