MySQL数据库

一、MySQL数据库

(一)基本语令

net start mysql :启动mysql的服务
net stop mysql :关闭mysql的服务

1.查看数据库 show databases;

   MySQL默认以分号作为每条语句的结束符

2.创建新的数据库 create database if not exists 数据库名 charset utf8

3.删除数据库 drop database if exists 数据库名称;

4.使用数据库 use 数据库名;

5.查看表 show tables;

6.查看表的结构 desc 表名;

(二)SQL语句基础

1.查询语句 select

2.DML(数据操作语言)主要由insert updata delete 三个关键字

3.DDL(数据定义语言)主要由create drop alter truncate 四个关键字组成

4.DCL(数据控制语言)主要由grant revoke 两个关键字组成

2.1 DDL语句

1.创建表的语法 create table 表名

create table test(
   id int comment "id",
   name varchar(32) comment "姓名",
   age int comment "年龄",
   sex varchar(2) comment "性别"
);

2.修改表结构的语法 alter table 表名 add/modify

#添加了一个电环phone字段
alter table test add phone varchar(64);
#添加了两个字段
alter table test 
add
(
   username varchar(64) comment "用户名",
   password varchar(64) comment "用户密码"
);

3.修改表的列 modify关键字   alter table 表名 modify

add新增加的列明必须是原表中不存在的

modify修改的列名是原表已近存在的

alter table test modify username varchar(32);
alter table test modify password varchar(32);

4.删除字段名alter table 表名 drop 字段名

alter table test add aaa int;
alter table test drop aaa;

5.重命名表名  rename to

alter table test rename to Test;

 6.重命名字段名change

alter table Test add add int; 
alter table Test change aaa  aaaa int;

7.删除表  drop table 表名

drop table Test;

 效果:---不可回滚

1.表的结构被删除,表对象不在存在

2.表里的数据也被删除

3.该表所有相关的索引,约束也被删除

8.truncate表---截断某个表

truncate 表名

效果

1.删除表里的全部数据,保留表的结构

2.2数据库的约束

五种约束

1.NOT NULL :非空约束,指定某一列不能为空

2.UNIQUE:唯一约束,指定某列或某个组合不能为空

3.PRIMARY KEY:主键,指定该列的指可以唯一的标识该条记录

4.FOREIGN KET:外键,指定该行记录从属于主表的一条记录,主要用户保证参照完整性

5.CHECK:检查,,指定一个布尔表达式,用户指定队列的值必须满足该表达式

指定约束的时机

1.建表的同时为相应的字段添加约束

2.建表后以修改表的形式来增加约束----->modify

 NOT NULL

1.建表时设置约束

create table ff(
     id int not null,
     name varchar(32) not null 
  );

 2.建表后修改表增加约束

create table ff(
    id int ,
    name varchar(32)
);
alter table ff modify id int not null;
alter table ff modify name varchar(32) not null;

UNIQUE    uk

1.普通约束

create table ff(
    id int not null,
    name varchar(32) unique not null,
    age int not null
);

2.表级约束   

unique(字段名)

constraint 约束名  unique(字段名)//constraint 约束名  unique(字段名,字段名)

create table ff(
id int not null,
name1 varchar(32),
name2 varchar(32),
unique(name1),
constraint ff_uk unique(name2)
);

3.使用add和modify来添加约束

create table ff(
id int not null,
name1 varchar(32),
name2 varchar(32)
);
alter table ff add unique(name1,name2);
alter table ff modify name1 varchar(32) unique;

PRIMARY KEY         pk

1.主键约束等价于非空约束和唯一约束,即不允许重复也不允许出现null

2.每一个表中最多允许一个主键,但这个主键约束可以由多个数据列组合而成,主键时表中唯一确定一行记录的字段或字段组合

使用列级约束语法

create table ping(
id int primary key,
name varchar(32)
);

 使用表级约束语法

create table ff(
id int not null,
name varchar(32),
pass varchar(32),
constraint ff_pk primary key(id)
);

 建表时创建主键约束,以多列建立组合主键必须用表级约束

3.删除主键约束

alter table ff drop primary key;

4.用add和modify增加主键约束  

alter table ff(
id int not null,
name varchar(32),
pass varchar(32)
);
# 使用表级约束语法
alter table ff add primary key(name,pass);
# 使用列级约束语法
alter table ff modify id int primary key;

5.自增长的特性auto_increment 

create table ff(
id int auto_increment primary key,
name varchar(32)
);

FOREIGN KEY    fk

1.字段之间的参照性

2.一个表中可以拥有多个外键

3.建立外键约束时MySQL会为该列建立索引

4.建立外键约束使用references关键字指定给列参考哪个主表 用constraint指定外键约束的名字

5虽然外键约束可以使用表级约束和列级约束,但列级约束建立的外键约束不会生效,至少为了保持良好的兼容性,通常使用表级约束

#建立主表
alter table ff(
id int primary key auto_increment comment '主键id',
name varchar(32) not null unique
);
#建立另一个表
alter table ping(
id int auto_increment primary key comment 'id',
name varchar(32) not null unique,
ff-id int,
#指定外键约束名为ff_ping_fk,外键ff-id参考表ff的id
constraint ff_ping_fk foreign key(ff-id) references ff(id)
);

6.删除外键约束

alter table ff drop foreign key ff_ping_fk;

7.外键约束不仅可以参考其他表,还可以参考本身

create table ff(
id int auto_increment primary key,
name varchar(32),
ff-id int,
foreign key(ff-id) references ff(id)
);

8.创建表之后,添加外键

ALTER TABLE employee(表名) ADD CONSTRAINT(外键名称) emp_dept_fk FOREIGN KEY (dep_id(外键字段名称)) REFERENCES department(id)(主表名称(主表列名称))

 CHECK

在表后添加check即可

create table ff(
id int primary key,
name varchar(32),
salary decimal,
check(salary>0)
);

2.3、索引

1.自动:创建表的约束时自动生成的索引----随着表的消失索引也会消失

2.手动:使用命令create index 索引名 on 表名(添加索引的字段)  ----删除时使用drop index 索引名 on 表名

create table ff(
id int auto_increment primary key,
name varchar(32),
pass varchar(32)
);
#给表ff的name建立索引
create index ff_name on ff(name);
#给多个字段添加索引
create index ff_name_pass on ff(name,pass);

3.删除索引  drop index 索引名 on 表名

drop index ff_name on ff;

2.4、视图

1.视图只是一个或多个数据表中数据的逻辑显示

2.优点:可以限制数据的访问,可以使复杂的查询变得简单,提供了数据库的独立性,提供了对相同数据的不同显示

3.创建视图的语法

create or replace view 视图名
as
subquery

4.删除视图

drop view 视图名

2.5、DML语句

1.插入新的数据 insert into 表名 values();

#insert into ff(允许为空的字段) values(允许为空的字段)
#向指定字段添加属性
insert into ff(id,name)values(1,'ff');
#同事插入多个值insert into ff values(与表中字段一一对应)
insert into ff values(1,'ff',20);

2.更新/修改update

update ff set name='xxx';
update ff set name='yyy' where id=x;

3.删除delete

delete from总是整行的删除,所以不需要指定列明

delete from ff;
delete from ff where id>x;

2.6、单表查询 

1.简单的查询语句  select * from 表名 where 条件

根据字段来查询

MySQL数据库_第1张图片MySQL数据库_第2张图片

2.查询数值可以利用算数运算符(+-*/)

 MySQL数据库_第3张图片

 3.MySQL没有提供“+”字符来连接字符串,提供了一个concat()来拼接字符串

MySQL数据库_第4张图片

4.使用as或者空格来起别名

5.使用distinct来去除重复行

MySQL数据库_第5张图片

6.SQL中判断两个值是否相等用=,判断不相等用<>,复制运算符不是等号,而是(:=)

特殊的比较运算符

x1 between x2 and x3            x1>=x2且x1<=x3

x in(.....)   要求x等于括号里的任意一个表达式

like 字符串匹配支持通配符(_%)__两个下划线代表两个字符

is null 要求指定值等于null

MySQL数据库_第6张图片

 7.使用order by 排序

MySQL数据库_第7张图片

 8.数据库函数

select CURDATE()获取当前日期

select curtime()获取当前时间

2.7分组和组函数

常见的组函数

1.avg(distinct|all)计算多行的平均值

2.count({*|distinct|all})其中*代表统计该表内的记录行数,

3.max()计算多行的最大值

4.min()计算多行的最小值

5.sum(distinct|all)计算多行的总和

数字函数

abs  取绝对值

ceil向上取整

floor 向下取整

power 求幂

mod取余

round四舍五入

trunc截取小数部分

dual  Oracle提供的一个虚表,没有任何的意义,仅仅相当于from后面的占位符

MySQL数据库_第8张图片

使用group by(对什么分组)进行分组

#count(*)将会对每组得到的一个结果
select count(*)
from cainfly
#将name列相同的记录当成一组
group by name;

having 和where的区别

having一般在group by 的后面 只能针对组函数使用

where一般在group by 的前面,不能使用组函数,但可以用于过滤组

MySQL数据库_第9张图片

多表查询

SQL92规范

简介:这种语法比较简简洁,把多个数据表放在from之后,多个数据表之间用逗号隔开,连接条件放在where之后,与查询条件之间用add逻辑运算符 

92式在MySQL中并不支持左右外连接

等值连接

非等值连接

外连接

广义笛卡尔积

select c.name,f.name
#指定多个数据表并起别名
from cainfly c,ff f
#使用where条件进行等值连接
where c.name=f.name;

#如果没有使用条件则会得到笛卡尔积
select c.name,f.name
#多表起别名
from cainfly c,ff f


select c.name,f.name
#指定多个数据表并起别名
from cainfly c,ff f
#使用where条件进行非等值连接
where c.name>f.name;



select c.name,f.name
#指定多个数据表并起别名
from cainfly c,ff f
#使用where指定连接条件并指定cainfly表的name非空
where c.name=f.name and c.name is not null;

SQL99规范

简介:跟92式的连接查询方式类似,不同的是SQL99连接查询的可读性更强

查询用的多个数据表显示用xxx join连接,而不是直接依次排列在from之后,from之后只需要放一个数据表,连接条件不是放在where之后,而是提供了专门的连接条件子句

交叉连接

自然连接

使用using子句连接

使用on连接

全外连接或左右外连接

#交叉连接  cross join
select c.name,f.anme
#SQL99多表连接查询from之后只有一个表
from cainfly c
#交叉连接相当于广义的笛卡尔积
cross join ff f;

#自然连接  natural join
select c.name,f.anme
#SQL99多表连接查询from之后只有一个表
from cainfly c
#自然连接 使用两个表中同名列作为连接条件
natural join ff f;
  
#using子句连接   对多个同名列进行连接
select c.name,f.anme
#SQL99多表连接查询from之后只有一个表
from cainfly c
#join连接另一个表
join ff f
#这里的ff-id必须是两个表中的同名列,否则就会出错(两个表中都有ff-id才正确)
using(ff-id)

#on子句连接  每个on子句只指定一个连接条件(跟92式里的where类似)
select c.name,f.anme
#SQL99多表连接查询from之后只有一个表
from cainfly c
#使用join连接另一个表
join ff f
on c.name=f.name

左右全外连接

left join       right join       full join

通常使用on来判断连接的条件

select c.name,f.name
from cainfly c
#使用右外连接一个表
right join ff f
#用on来指定连接的条件非等值连接
on c.name>f.name



select c.name,f.name
from cainfly c
#使用左外连接一个表
left join ff f
#用on来指定连接的条件非等值连接
on c.name>f.name



select c.name,f.name
from cainfly c
#使用全外连接一个表
full join ff f
#用on来指定连接的条件 ,等值连接
on c.name=f.name

子查询

子查询就是在查询语句中镶嵌另一个查询,子查询可以支持多层嵌套,子查询可以出现在两个位置

1.在from之后--当成数据表等价于内视图 (创建一个临时视图)

select *
#把子查询当成数据表
from (select * from cainfly) c
where c.age>1;

2.出现在where条件后作为了过滤条件的值

select * 
from cainfly
where name >
(select ff_id from ff where ff_name='ff');

你可能感兴趣的:(mysql,其他)