一、SQL:
1)mysql存储结构:
数据库 -> 表 -> 数据 sql语句
2)管理数据库:
增加: create
database 数据库 default
character set utf8;
删除: drop
database 数据库;
修改: alter
database 数据库 default
character gbk;
查询: show
databases / show create
database 数据库;
3) 管理表:
选择数据库:use 数据库;
增加: create
table 表(字段名1 字段类型,字段名2 字段类型......);
删除: drop
table 表;
修改:
添加字段: alter
table 表 add
字段名 字段类型;
删除字段:
alter table 表 drop
字段名;
修改字段类型: alter
table 表 modify 字段名
新的字段类型;
修改字段名称
: alter
table 表 change 旧字段名
新字段名 字段类型;
修改表名称: alter
table 表 rename
to 新表名;
查询:
show
tables / desc
student;
复制表的4种方式:
1)create
table 表2 like 表1;//只复制表中的字段
2)create
table表2as (select * from表1);//复制表中的字段和数据,但字段没描述(如主键...)
3)先复制create
table表2like表1;
后插入数据insert
into表2select
*from表1;
4)CREATE TABLE 库2.表2 LIKE 库1.表1;
//跨数据库拷贝表
4)管理数据:
增加: insert
into 表(字段1,字段2,。。。)
values(值1,值2.。。。。);
删除: delete
from 表 where 条件;
修改: update 表 set 字段1=值1,字段2=值2......
where 条件;
查询:
4.1)所有字段: select
* from 表;
4.2)指定字段: select 字段1,字段2....
from 表;
4.3)指定别名: select 字段1
as 别名 from 表;
4.4
)合并列: select
(字段1+字段2)
from 表;
4.5)去重: select
distinct 字段 from 表;
4.6)条件查询:
a)逻辑条件
:and(与)
or(或)
select
* from 表 where 条件1
and/or 条件2
b)比较条件: > = <= = <>
between and(在。。。之间)
select
* from 表 where
servlet>=90;
c)判空条件:
判断null: is
null / is not null
判断空字符串: ='' / <>''
d)模糊条件: like
%: 替换任意个字符
_: 替换一个字符
4.7 分页查询:limit 起始行,查询行数
起始行从0开始
select * from developer limit
1,2;
4.8 排序: order
by 字段 asc/desc
asc: 正序,顺序
desc:反序,倒序
4.9 分组查询:group
by 字段
4.10: 分组后筛选: having 条件
SQL语句的分类:
DDL:
数据定义语言
create / drop /
alter
DML:数据操作语句
insert / delete /update /
truncate
DQL:
数据查询语言:
select
/ show
二、外键及级联操作
级联修改: ON UPDATE CASCADE
级联删除: ON DELETE CASCADE
-- 部门表(主表)
CREATE TABLE
dept(
id INT
PRIMARY KEY,
deptName
VARCHAR(20)
)
-- 修改员工表(副表/从表)
CREATE TABLE
employee(
id INT
PRIMARY KEY,
empName
VARCHAR(20),
deptId
INT,-- 把部门名称改为部门ID
-- 声明一个外键约束
CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId)
REFERENCES dept(id) ON
UPDATE CASCADE ON DELETE CASCADE-- ON CASCADE
UPDATE :级联修改
)
//修改某个字段为外键约束
alter
table developer add constraint developer foreign key(groupId)
references company(groupId) on update cascade on delete
cascade;
注意:
级联操作必须在外键基础上使用
三、关联查询(多表查询)
-- 需求:查询员工及其所在部门(显示员工姓名,部门名称)
-- 2.1交叉连接查询(不推荐。产生笛卡尔乘积现象:4 * 4=16,有些是重复记录)
SELECT empName,deptName FROM employee,dept;
-- 2.2内连接查询:只有满足条件的结果才会显示(使用最频繁)
SELECT
empName,deptName --
2)确定哪些哪些字段
FROM
employee,dept --
1)确定查询哪些表
WHERE
employee.deptId=dept.id; --
3)表与表之间连接条件
- 2.3 左[外]连接查询:使用左边表的数据去匹配右边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null
-- (注意:左外连接:左表的数据一定会完成显示!)
SELECT d.deptName,e.empName
FROM
dept d
LEFT
OUTER JOIN employee e
ON
d.id=e.deptId;
-- 2.4 右[外]连接查询: 使用右边表的数据去匹配左边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null
-- (注意:右外连接:右表的数据一定会完成显示!)
SELECT d.deptName,e.empName
FROM
employee e
RIGHT
OUTER JOIN dept d
ON
d.id=e.deptId;
外级连接和直接配对的区别
外级连接
直接配对:
添加外键:
constraint 'fk_product_procate' foreign key('product_category_id)
references 'tb_product_category'(product_category_id)
三增加点 表连接
语法:
FROM (表1
INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号
四、字段描述
primary
key not null: 主键
default默认值
非空:not
null
唯一:unique
//约束唯一标识数据库表中的每条记录
和主键一样均为列或列集合提供了唯一性的保证。
主键:primary
key(非空+唯一)
自增长:auto_increment