1.创建数据库 :
create database 数据库名;
Create database if not exist 数据库名;
Create datebase if not exist 数据库名 character set 码表名字
2.查看数据库:
show databases;
查看数据库的定义信息 :
show create database 数据库名;
3.修改数据库(修改定义码表):
alter database 数据库名 character set 码表名;
4.删除数据库:
drop database 数据库名;
5.使用数据库:
use 数据库名;
查看正在使用的数据库:
select(选择) database();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#DML(操作表结构):
1.添加表:
create table 表名 (
列名1 字段类型,
列名2 字段类型)
创建一个表结构相同的表:
Create table 新表名 like 旧表名;
【注】: 类型 int varchar(最大长度) double(x,x) like date TIMESTAMP(时间戳)
2.查看表:
show tables;
查看表结构 : desc表名;
查看创建表的sql语句:show create table 表名;
3.删除表 :
drop table 表名;
判断表是否存在之后再删除:
drop table if exists 表名;
4.修改表 :
A.添加列:
alter table 表名 add 列名 类型;
B.修改列类型:
alter table 表名 modify(修改) 列名 新类型;
C.修改列名:
alter table 表名 change 列名 新列名 新类型;
D.删除列:
alter table 表名 drop 列名;
E.修改表名;
rename table 表名 to 新表名;
F.修改表的字符集;
alter table 表名 character set 新码表;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
DML(操作表中的数据) 对表中的记录进行增删改查
1.插入记录:
insert(插入) into 表名 (字段1, 字段2,...字段n) value(值1, 值2, ... 值n);
2.更新表中的记录 :
update(更新) 表名 set 列名 = 要修改的值 where [条件];
3.删除表中的记录 :
A.delete from表名 where [条件];
B.Truncate table 表名; [删除表结构 创建新表]
1
2
3
4
5
6
7
DQL(查询表中的数据)
1. 语法:
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
1.查询: select 列名1, 列名2,.....列名n from 表名 where [条件];
A.查询所有 :
select * from 表名;
B.查询指定列 :
select 字段名 from 表名;
C.指定的列的别名查询:
select 字段名 as 别名 from 表名 as 表别名;
D.清除重复值查询:
select distinct(截然不同的) 字段名 from 表名;
E.查询结果参与运算:
select 字段1 + 字段2 as 别名 from 表名
F.条件查询 :
select 字段名 from表名 where [条件];
G.运算符参与查询:
select 字段名 from 表名 where 字段名 >= ?;
select 字段名 from 表名 where 字段名 in (x,y);
Between .. and;
H.模糊查询:
select 字段名 from 表名 where 字段名 like 通配符
I.排序 :
select 排序输出的字段 from 表名 order by 排序的标准字段名1 [asc][desc]
select from where order by
J.在某个条件下多层排序查询 :
排序输出的字段名 from 表名where 排序的范围 order by 排序的标准的字段名1 [asc][desc],排序的标准的字段名2 [asc][desc];
例如:select * from student order by math asc , chinese asc;
上面的sql代表 在数学分数相同时 用语文分数排序 而且输出的是排序后的整体
K.聚合函数 :
select avg (字段名) 别名form 表名;
L.分组:
select 输出的字段1,输出的字段2,...输出的字段n from 表名 group by 分组字段 having 条件;
例如:按性别分组 输出显示性别和人数和数学平均分
Select sex, count(number),avg(math) from student group by sex ;
例如:按性别分组 并且只统计年纪大于25岁的人的平均分和人数 并且不输出人数少于2的组
Select sex,count(*),avg(math) from student where age > 25 group by sex having count(*) > 2;
复杂:
SELECT DISTINCT *, AVG(math + IFNULL (english,0) + java) 总分 FROM student01 WHERE math != 0 GROUP BY id HAVING 总分 > 100 ORDER BY math DESC, java DESC , english DESC;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
约束:
主键约束: primary(主要的) key
非空约束: not null
唯一约束: unique(独特的)
外键约束: foreign (外国) key
1.主键约束:
A.在创建表的时候 添加主键约束
语法:create table 表名(
Id int primary key auto_increment (增量)
);
注:这里的auto_increment是自增
B.再创建表之后 删除主键约束 或者添加主键约束
语法_删除: alter table 表名 drop primary key;
[因为主键只有一个 所以不用声明drop的字段]
语法_添加:alter table 表名 add primary key(主键字段);
2.唯一约束
A.语法:
create table 表名(
Id int primary key auto_increment,
Name varchar(20) unique
);
3.非空约束
语法:
create table 表名(
Id int primary key auto_increment,
Name varchar(20) not null,
);
4.外键约束
语法:
1. 创建时:
Create table 表名 (
Id int primary key auto_increment,
Name varchar(20) not null,
dep_id int,
//外键约束
Constraint dep_emp_fk foreign key (dep_id) references department (id);
约束 外键名称 外键关键字 (外键字段) 参照 主表(主键字段)
)
2. 创建完:
Alter table 表名add constraint dep_emp_fk foreign key (dep_id) references department(id);
3. 删除:
Alter table employee drop foreign key dep_emp_fk;
【注:】 外键约束的使用:
1. 必须有主键
2. 在一对一的表关系中 任意定义副表定义外键 关联主表中的主键
3. 在一对多 或者 多对一 的表关系中
1. 多的那方 为副表 在多的那方定义外键 关联主表的主键
例如:
有一个学生表 一个课程表
那么一个学生可以对应多个课程
写法: create table class (
c_id int,
c_name varchar(20),
stu_id,
-- 定义外键
foreign key (stu_id) references student(id)
);
4. 在多对多的表关系中 要是用一张中间表 扮演副表的角色 分别关联两个多的主表
1. 注意:中间表需要有集合主键
2. 写法:
例如:
有一个账号表 一个要购买的游戏道具表 那么这两个表之间就是多对多的关系
以为 一个账号可以购买多个游戏道具 而一种道具也可以被多个账号购买
写法:
1. 首先创立一个账号表
create table user (
u_id int primary key unique auto_incream,
u_name varchar(20) not null
);
2. 然后创立一个游戏道具表
create table gametools(
gt_id int primary key unique auto_incream,
ft_name varchar(30) not null unique
);
3. 创立一个中间表
create table tool_user(
gameToolsId int,
userId int,
/*集合主键*/
primary key(gameToolsId,userId),
/*外键*/
foregin key (gameToolsId) references gametools(gt_id),
foregin key (userId) references user(u_id)
);
4. 级联操作
1. 添加级联操作
语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名称
FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE;
2. 分类:
1. 级联更新:ON UPDATE CASCADE
2. 级联删除:ON DELETE CASCADE
* SQL分类:
1. DDL(数据库和表的操作)
2. DML(表的增删改)
3. DQL(表的查询)
4. DCL(管理用户 授权等操作)
* DCL的操作人员 一般为DBA
* DCL:
1. 用户管理
1. 增
1. create user '用户名'@'主机名' identified by '密码';
2. 删
1. drop user '用户名'@'主机名';
3. 改
1. 修改密码_1
* update user set passwrod = password('新密码') where user = '用户名';
2. 修改密码_2
* set password for '用户名'@'主机' = password('新密码');
4. 查
1. use mysql
2. select * from user;
2. 权限管理:
1. 查询权限:
-- 查询权限
SHOW GRANTS FOR '用户名'@'主机名';
2. 授予权限:
-- 授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
3. 撤销权限:
-- 撤销权限:
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';