目录
1.市场上常见的数据库
Oracle
Mysql
SQLServer
2.数据库语句
DDL 数据定义语言(主要用于 增删改数据库,增删改表)
DML 数据操作语言(操作表中数据的增删改)
DQL数据查询语言(主要用于查询表中的数据)
DCL数据控制台语言(主要用于控制权限)
2.1DDL语句(增删改数据库,增删改表)
-- 1.1创建数据库
create database 数据库名;
-- 先判断是否存在指定的数据,如果存在则不创建,如果不存在则创建。
Create database if not exists 数据库名;
-- 查询数据库
show databases;
-- 显示创建该数据库的语句。
--show create databases 数据库名;
--删除数据库
Drop database 数据库名;
-- 先判断是否存在,然后再删除
Drop database if exists 数据库名;
-- 修改
-- 修改数据库使用的码表
Alter database 数据库名 character set 码表;
-- 选用数据库
Use 数据库名;
-- 创建表
Create table 表名(
列名1 数据类型,
列名2 数据类型
);
--1.2查看所有表
Show tables;
-- 查看表结构
desc 表名;
-- 查看创建表的语句
Show create table 表名;
--删除表
Drop table 表名;
-- 先判断然后在删除
Drop table if exists 表名 ;
-- 修改表
-- 修改表名
Alter table 表名 rename to 新表名;
-- 修改列的类型
Alter table 表名 modify 列名 新类;
-- 更改列名
Alter table 表名 change 旧列名 新列名 类型;
-- 添加列
Alter table 表名 add 列名 类型;
-- 删除列
Alter table 表名 drop 列名;
2.2DML数据操作语句(表数据的增删改)
-- 插入数据
Insert into 表名 values(字段1的数据,字段2的数据...)
Insert into 表名(字段名1,字段名2...) values(数据1,数据2)
-- 修改数据
Update 表名 set 字段名1=新数据,字段名2 where 条件;
-- 删除数据
-- 清空表的数据,效率比较低。
delete from 表名 ;
-- 摧毁表结构,从而删除表 中的所有数据(效率非常高)
truncate 表名;
-- 删除表中符合条件的数据
Delete from 表名 where 条件;
-- 批量增加
insert into 表名(字段名1,字段名2...) values(数据1,数据2),(数据1,数据2);
-- 1批量更新
-- 1.只更新设置的内容,其他内容不变
insert into student(id,name) values('50','u3'),('51','u4') on duplicate key update
id=values(id),name=values(name);
-- 2.会把没更新的内容设置为null
replace into student(id,name,sex,age) values('50','u1','man','22') ('51','u2','man','44');
-- 3.创建临时表,先更新临时表,然后从临时表中update
create temporary table tmp(id int(4) primary key,dr varchar(50));
insert into tmp values (0,'gone'), (1,'xx'),...(m,'yy');
update test_tbl, tmp set test_tbl.dr=tmp.dr where test_tbl.id=tmp.id;
-- 4.使用mysql 自带的语句构建批量更新
UPDATE yourtable
SET dingdan = CASE id
WHEN 1 THEN 3
WHEN 2 THEN 4
WHEN 3 THEN 5
END
WHERE id IN (1,2,3)
-- 批量删除
delete from 表名 where 条件;
DELETE FROM t_leave_info WHERE leave_info_id IN (640,634,633);
DELETE FROM syslogs WHERE status=1 LIMIT 10000;
delete from table_name where create_time <'2017-04-06'
2.3DQL语句(*****查询语句)
--1.基础查询
Select * from 表名;
-- 2.条件查询
=;
!=;
<;
<=;
>;
>=;
BETWEEN xx AND;
IN(set);
IS NULL;
AND;
OR;
NOT;
-- 3.模糊查询
LIKE;
%;
_;
-- 4.字段控制查询
-- 去除重复记录
DISTINCT;
AS;
-- 5.排序
ORDER BY
DESC 降序
ASC 升序(默认)
-- 6 聚合函数
COUNT()
MAX()
MIN()
SUM()
AVG()
-- 7.分组查询
GROUP BY
HAVING 子句
-- 8LIMIT
LIMIT 起始数,个数
2.4DCL语句(控制权限)
-- 创建用户
CREATE USER 用户名@地址 IDENTIFIED BY '密码';
-- 给用户授权
GRANT 权限1, … , 权限n ON 数据库.* TO 用户名;
-- 撤销授权
REVOKE权限1, … , 权限n ON 数据库.* FORM 用户名;
-- 查看用户权限
SHOW GRANTS FOR 用户名;
-- 删除用户
DROP USER 用户名;
-- 修改mysql数据库中user表
update mysql.user set password=PASSWORD('新密码') where User='root';
3.数据约束
-- 1)主键PRIMARY KEY
-- 添加主键:
ALTER TABLE person ADD PRIMARY KEY(id);
-- 删除主键:
ALTER TABLE person DROP PRIMARY KEY;
-- 2)自增长约束AUTO_INCREMENT
ALTER TABLE <数据表名> MODIFY id INT AUTO_INCREMENT;
-- 3)默认值DEFAULT
ALTER TABLE <数据表名> CHANGE COLUMN <字段名> <数据类型> DEFAULT <默认值>;
-- 4)非空 not null
ALTER TABLE <数据表名> MODIFY name varchar(20) not null;
-- 5)唯一 unique
ALTER TABLE <数据表名> ADD unique(name);
-- 6)外键
ALTER TABLE 表名 ADD FOREIGN KEY [外键名字] (外键字段) REFERENCES 父表 (主键字段);
-- 7)级联操作,通常情况下,设置了外键,操作顺序,先修改或删除副表数据,再修改或删除主表数据,但是开发者希望直接修改或删除主表数据,从而影响副表数据,这时就可以使用级联操作。
-- 在定义外键的时候,在最后加入这样的关键字: ON UPDATE CASCADE ON DELETE CASCADE;
ALTER TABLE 副表表名 ADD CONSTRAINT 新字段名 FOREIGN KEY (副表外键字段) REFERENCES 主表名(主表主键) ON UPDATE CASCADE ON DELETE CASCADE;
4.表关系
一对多
多对多
一对一
5.数据库的三范式
第一范式:每个表的每个字段都必须是(从业务角度)不可分割的独立单元!
第二范式:在第一范式的基础上,不同业务含义的字段应该划分到不同表中。
第三范式:在第二范式的基础上,一张表的主键除外的其他字段都应该跟主键字段是直接决定关系!(一张表表达一个意思)
6.多表查询(有关系的表)
-- 内连接
SELECT s.name,d.name FROM staff s INNER JOIN dept d ON s.deptId=d.id;
-- 左外连接,首先全部显示左表数据,然后右表数据逐个匹配左表,如果满足连接条件的右表数据就显示出来,但不满足则显示null
SELECT d.name,s.name FROM dept d LEFT OUTER JOIN staff s ON d.id=s.deptId;
-- 右外连接,首先全部显示右表数据,然后左表数据逐个匹配左表,如果满足连接条件的左表数据就显示出来,但不满足则显示null
SELECT d.name,s.name FROM staff s RIGHT OUTER JOIN dept d ON d.id=s.deptId;
-- 合并结果集UNION
SELECT * FROM dept d LEFT OUTER JOIN emp e ON e.dept_id=d.id
UNION
SELECT * FROM dept d RIGHT OUTER JOIN emp e ON e.dept_id=d.id;
7.子查询
子查询就是嵌套查询,即SELECT中包含SELECT
子查询出现的位置:
from后,作为被查询的一条表;
where后,作为条件的一部分;
当子查询出现在where后作为条件时,还可以使用如下关键字:any,all
子查询结果集的形式:
单行单列(用于条件)
单行多列(用于条件)
多行单列(用于条件)
多行多列(用于表)
-- 子查询形式为单行单列,放在where后面做条件
SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename='甘宁')
-- 子查询形式为多行单列 -- ALL
SELECT * FROM emp WHERE sal > ALL (SELECT sal FROM emp WHERE deptno=30)
-- 子查询形式为单行多列 --IN
SELECT * FROM emp WHERE (job,sal) IN (SELECT job,sal FROM emp WHERE ename='殷天正')
-- 子查询形式为多行多列,放在from后面作为一整张表
SELECT e.ename, e.sal, d.dname, d.loc FROM emp e, (SELECT dname,loc,deptno FROM dept) d
WHERE e.deptno=d.deptno AND e.empno=1006
参考链接:https://blog.csdn.net/qq_39380737/article/details/81127497