七、外键(有主从关系的表,删除数据时先删主表再删从表;插入数据时先插主表再插从表)
1、添加外键约束
alter table 需要建立外键的表B add [constraint 外键名字] foreign key(需要建立外键的字段名B.Aid) references 主键表A(主键字段名A.ids);
ALTER TABLE student ADD CONSTRAINT fk_GradeID FOREIGN KEY(GradeID) REFERENCES grade(GradeID);
2、删除外键
ALTER TABLE student DROP foreign key FK_studentNo;
ALTER TABLE student DROP index FK_studentNo;
八、子查询
1、in和not in获取多条记录
SELECT * FROM subject WHERE classHour IN(100,110,120);
2、exists和not exists判断是否存在记录
3、in和exists
区别:如果内表比外表数据多,使用exists();如果外表比内表数据多,使用in()
原因:in()是在内存里遍历比较,内存比较快;而exists需要查询数据库,查询数据库消耗的性能高
4、is null和is not null判断是否为空
SELECT* FROM student WHERE address="" OR address IS NULL;
5、from后嵌套子查询,必须起别名
SELECT * FROM (SELECT studentName,phone,sex FROM student)stu;
6、连接查询
(1)内连接:取交集inner join
(2)外连接:
#左连接:以左表为主left jon
#右连接:以右表为主right join
(3)自连接:将一张表看成多张表来做连接。例:职员信息表,查询表中的每个职员的上司
SELECT c.a_name,p.a_name FROM employees p INNER JOIN employees c ON p.a_id=c.p_id;
九、事务
1、四个特性
原子性:要么全部成功,要么全部失败
一致性:确保事务提交前后的状态
隔离性:每个事务彼此独立,互不影响
持久性:事务一旦提交,数据被永远修改并保留
2、步骤
关闭自动提交:set autocommit=0; #0关闭,1开启
开启事务:start/begin transaction;
执行sql语句:
提交:commit
回滚:rollback
开启自动提交:set autocommit=1;
十、视图(主要用于查询)
1、创建视图
CREATE VIEW 视图名 AS(select语句,字段不能重复)
2、删除视图
DROP VIEW [IF EXISTS] 视图名称
3、查询视图
SELECT * FROM 视图名称 [WHERE]
十一、索引
1、索引的作用:提高数据库的检索速度,改善数据库性能
2、索引的分类
#唯一索引:不允许有重复的键值,它的列允许有空值
#主键索引:是唯一索引的特殊类型,他的每个值是非空,唯一
#复合索引:将多个列组合作为索引
#全文索引:用于在大量文本文字中搜索字符串,它的效率大大高于sql的like关键字的效率
#空间索引:
#普通索引:只为那些最常出现在查询条件(where)或排序条件(order by)的数据列创建索引,它的列允许插入重复值和空值
3、索引增删改查
(1)显示索引
SHOW INDEX FROM test;
(2)添加索引
ALTER TABLE 表名 ADD PRIMARY KEY(字段名); #主键
ALTER TABLE 表名 ADD UNIQUE KEY(字段名); #唯一键
ALTER TABLE 表名 ADD INDEX 索引名(字段1,字段2); #复合(常规)索引
ALTER TABLE 表名 ADD FULLTEXT(字段名); #全文索引,数据库引擎需为MYISAM
CREATE INDEX 索引名 ON 表名(字段1,字段2); #复合(常规)索引
CREATE TABLE news(
id INT(4) PRIMARY KEY, #主键索引
tilte VARCHAR(10) UNIQUE, #唯一索引
c VARCHAR(50),
D VARCHAR(20),
E TEXT,
#UNIQUE key(tilte)
INDEX index_c(c,d), #常规索引
FULLTEXT(e) #全文索引
)ENGINE=MYISAM
(3)删除索引
DROP INDEX 索引名 ON 表名;
ALTER TABLE 表名 DROP INDEX 索引名;
(4)删除主键索引
ALTER TABLE 表名 DROP PRIMARY KEY;
(5)查询全文索引
SELECT * FROM 表名 WHERE MATCH(title,content) AGAINST (‘查询字符串’);
十二、分类
1、数据库分类
关系型数据库(sql)
Mysql oracle sqlserver sqlite DB2
非关系型数据库(NoSql)
Redis MongoDB
2、数据库系统的分类
数据库管理系统(DBMS)
数据库系统(DBS)
数据库管理员(DBA)
3、结构化查询分类
DDL(数据定义语言):定义和管理数据对象,例:数据库,数据表。
DML(数据操作语言):insert update delete
DQL(数据查询语言):select
DCL(数据控制语言):grant commit rollback
4、给表字段单独设置字符集:CHARACTER SET utf8
给表单独设置字符集:CHARSET=utf8
设置表类型:ENGINE=INNODB
设置步长:auto_increment=5
十三、存储过程
十四、数据库恢复和备份
方式一,使用工具
方式二,mysql命令
备份:mysqldump -uroot -p123456 数据库名[表名1][表名2]…>路径
恢复:
1、mysql -uroot -p123456 数据库名>路径
2、mysql -uroot -p123456
[use school]
source 路径
方式三,使用sql语句
备份
SELECT studentNo,studentName INTO OUTFILE ‘d:/ss.sql’ FROM student
恢复
CREATE TABLE stutab(id INT(4),sname VARCHAR(20));
LOAD DATA INFILE ‘d:/ss.sql’ INTO TABLE stutab(id,sname);
十五、权限控制
1、创建普通用户
create user ‘创建的用户名’ @‘localhost’ [identified by ‘密码’];
GRANT ALL ON bankDB.* TO ‘bankMaster’ @‘localhost’;
2、方式二,创建用户同时授权
GRANT ALL ON bankDB.* TO ‘bankMaster’@‘localhost’ IDENTIFIED BY ‘123456’
GRANT INSERT,SELECT ON Myschool.stutab TO ‘bankMaster’@‘localhost’ IDENTIFIED
3、删除用户
DROP USER ‘bankMaster’@‘localhost’
4、修改当前登录密码
SET PASSWORD=PASSWORD(‘0000’);
5、修改其他用户的密码
SET PASSWORD FOR ‘bankMaster’@‘localhost’=PASSWORD(‘8888’);
MySQL_3复杂语句
猜你喜欢
转载自blog.csdn.net/weixin_43779785/article/details/88100494
今日推荐
周排行