mysql小结

目录

1.市场上常见的数据库

2.数据库语句

2.1DDL语句

2.2DML数据操作语句

2.3DQL语句

2.4DCL语句

3.数据约束

4.表关系

5.数据库的三范式

6.多表查询(有关系的表)

7.子查询


 

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值