数据库的基本命令

数据库:

概述

用来存储数据管理数据的仓库

分类:关系型数据库MySQL 和 非关系型数据库Redis

SQL语言

概述:

结构化查询语言,用来操作数据库的语言,是一种标准.

分类:

DML(Data Manipulation Language)是数据操纵语言

DDL(Data Definition Languages)是指数据定义语言

DCL(Data Control Language)是指数据控制语言

DQL:(Data QueryLanguage)是指数据查询语言

1.数据库的常见操作:

创建数据库  

create database 库名;               create database kuming;

create database 库名 default character set utf8;防止中文乱码

create database 库名 charset utf8;简写方式

展示所有的数据库

show database;

删除库

drop database 库名字;               drop database kuming;

2.表的常见操作:

使用指定的数据库

user 库名字;                               user kuming;

创建表

create table 表名(字段名称 字段类型(字段长度),字段2,字段3,...)
create table a(name varchar(40),字段2,字段3,...)

查看表

show tables;

修改表(添加字段)

alter table 表名 add column 字段名 字段类型(字段长度);
alter table b add column aaa varchar(40);

查看表结构

desc 表名;                                 desc a;

删除表

drop table 表名字;                 drop table biaoming;

3.数据的常见操作:

查询表中的数据/记录

select * from 表名;                  select * from b;    *是通配符  意思是查所有

插入表中的数据

insert into 表名 values(值1,值2,值3,值4)         insert into b values('a',1,'a','a');
表中有多少字段就需要添加多少值,顺序不能改变,字符串类型需要用' '或者" "包裹

修改表中的数据/记录

update 表名 set 字段名='字段的值';     
update b set name='a';
这个是把字段的所有的值都修改了  一般不用
update 表名 set 字段名='字段的值' where 字段名字='字段的值'   
update b set name='nex' where nex='a' 
通常这样写 where 后面添加的是条件  只修改那一行的记录

删除表中的数据/记录

delete from 表名字;   delete from b;  这是指删除表中所有的记录  一般不用!
delete from 表名字 where 字段名='字段的值';   delete from b where age=11;
这是指删除b表中age=11的那一条记录

字段约束

1.非空约束

哪个字段添加了非空约束,从此,字段值不能为空,使用not null

create table a(a int not null);

2.唯一约束

 哪个字段添加了唯一约束,从此,字段值不能相同,使用unique

create table a(a int unique)

3.主键约束

每个表都应该设计主键 , 主键是每条记录/数据的唯一标识
现象: 字段的值必须唯一且不能为空,使用primary key

create table a(id int primary key);

主键 = 唯一 + 非空;

设置主键自增策略

主键自增策略: 使用auto_increment,让主键的值交给数据库自动维护,实现自动递增

create table a(id int primary key auto_increment)

基础函数的使用

upper–全转大写

select upper(name) from b;

lower–全转小写

select lower(name) from b

length–求长度

根据utf-8,一个字母或者数据长度为1,一个汉字长度为3

select length(name) from b

substr–截取子串

substr(name,1) 括号里面name是要截取的字段名,1是从第几个开始截取

select substr(name,1),name from b

substr(name,1,5) 括号里面name是要截取的字段名,1是从第几个开始截取,5是截取几个数据

select substr(name,1,5),name from b

concat–拼接字符串

concat(name,'阿巴阿巴'); 括号里面name是需要拼接的字段名,后面是拼接的内容

select concat(name,'阿巴阿巴') from b

后面可以无限拼接

select concat(name,'阿巴阿巴'...) from b

replace–替换

replace(name,'a','苹果'); name是字段名,后面指的是把a换成苹果

select replace(name,'a','苹果'),name from b

ifnull-替换数据中的null值

ifnull(name,10); name是字段名,后面是要把null替换的值

select ifnull(name,10) from b;

对小数的函数:

select age,round(age) from a;  四舍五入,取整

select age,round(age,1) from a; 四舍五入,保留一位小数

select age,ceil(age) from a; ceil向上取整

select age,floor(age) from a; floor向下取整

对日期数据的函数:

select now();  当前时间

select year(now());   当前年

select month(now());   当前月

select day(now());   当前日

select hour(now());   当前时

select minute(now());   当前分

select second(now());   当前秒

select uuid();   生成一个32位的随机数

\表示转义符号,把'当做普通的字符在使用而不是字符串的标识

select 'xi\'an'

条件查询:

基础语法

去重distinct

select distinct age from a

查询年龄不是18的数据

select * from a where age!=18;

select * from a where age<>18;    <>表示不等于,效果同上

查询年龄是18并且名字叫rosi的人

select * from a where age=18 and name='rosi'

查询年龄是18或者年龄是19的人

select * from a where age=18 or age=19

select * from a where age in(18,19)     效果同上,意思是括号里的都包含

模糊查询like

%是统配符,通配0-n个字符,_通配一个字符;

查询名字里面包含a的人;

select * from a where name like '%a%';   

查询名字首字母是a的人;

select * from a where name like 'a%';   

查询第二个名字是a的人;

select * from a where name like '_a';   

条件查询

1.null

null的数据用 is / is not 关键字来过滤

查询没有工资的员工信息

select * from a where gongzi is null

查询有工资的员工信息

select * from a where gongzi is not null

2.between and

查询工资5000-10000的员工信息

select * from a where gongzi between 5000 and 10000

3.limit分页

select * from a limit 2;      只取前两条

select * from a limit 0,2;        从第n+1条数据开始,总共展示两条

select * from a where gongzi>10000 limit 0,2;        limit通常放在最后

4.order by

order by排序,按照字典顺序排,汉字查码表编号,默认升序ASC

按照工资升序排序

select * from a order by gongzi;        默认升序

select * from a order by gongzi asc;

按照工资降序排序

select * from a order by gongzi desc;

聚合函数

概述:

基础函数:
upper lower length concat substr replace ifnull now()/date()/year()…
聚合函数:
把一个字段的值聚合起来,进行获取最大值,最小值,平均数,求和,求个数…
max() min() sum() avg() count()

测试

聚合函数 max    min    sum    avg 

分别是 最大值 最小值 求和 平均数

select max(gongzi),min(gongzi),sum(gongzi),avg(gongzi) from a

求总记录数 count

select count(*) from a;        低效(新版本说效果一样)

select count(1) from a;        高效

select count(name) from a;        了解,不推荐

统计工资大于1w的人数

select count(1) from a

where gongzi>10000

分组

概念:把表里的所有数据 按照 合理的维度 分成不同的组

1.group by

当查询中出现了混合列(聚合列和非聚合列),必须分组,通常按照非聚合列分组

统计每个部门的平均工资

select avg(gongzi),bumen from a

group by bumen

2.having

如果分组后的数据还想继续过滤,就需要使用having

group by跟having是固定搭配

统计每个部门的平均工资,并且只要工资>10000的部门

select avg(gongzi),bumen from a

group by bumen

having avg(gongzi)>10000

能用where尽量用where,where高效,因为执行时机早一些

事务

概述

1,数据库事务用来保证 多个SQL 要么全成功,要么全失败.英文叫transaction.

MySQL数据库会自动管理事务,Oracle数据库需要程序员管理事务.

MySQL也允许程序员手动管理事务

2,事务的四大特征:ACID

原子性: 把多条SQL看做一个原子密不可分,要么全成功,要么全失败

一致性: 保证数据守恒,将来广泛的应用到分布式系统里

隔离性: MySQL数据库可以支持高并发,可能会有数据安全的隐患,也有复杂的隔离级别

持久性: 对数据库的操作增删改,有持久影响

3,隔离级别:

read uncommitted读未提交:性能好,但是安全性差

read commited读已提交:是Oracle数据库默认的隔离级别,性能较差,但是安全性较好

repeatable read可重复读:是MySQL数据库默认的隔离级别,性能再差一点,但是安全性特别好

Serializable串行化:性能非常差,但是安全性比较好

也可以查:SELECT @@tx_isolation;

开启事务 start transaction   提交事务 commit

测试

start transaction;        开启事务

insert into a values('rosi',18,18888.88,'二');        执行增删改SQL

commit;        提交事务commit,不提交是查不到的,没有持久影响

多次插入数据

insert into a values('rosi',18,18888.88,'二');

insert into a values('jack',18,8888.88,'二');

批量插入:高效,因为只需要开启关闭一次事务

insert into a values

        ('rosi',18,18888.88,'二'),('jack',18,8888.88,'二');

字段约束

1.默认约束

default,给字段设置默认值

create table a(
   id int primary key auto_increment,
   sex varchar(10) default '男'      默认性别是男
)

2.检查约束

check,给哪个字段添加了检查约束,字段的值必须符合检查的条件才可以

create table a(
   id int primary key auto_increment,
   age int,
   check(age<200 and age>0)
)

3.外键约束

准备两张表使用以下外键约束

create table d(
   id int primary key auto_increment,
   name varchar(20),
   age int,
   sex char(1) default '男'      默认约束
)

create table e(
   id int primary key,
   address varchar(20),
   foreign key(id) references d(id)    foreign(当前表的主键名) references 对方表(对方的主键)
)

使用外键的约束:

约束的情况1:子表的主键值  必须取自  主表的主键值

约束的情况2:主表的记录不能随便删除,要保证没有被子表使用才可以删

  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值