mysql的复习与进阶

--  mysql的复习与进阶
--  创建一个结构完整的表
create table tab1(
id int(5) not null auto_increment primary key comment "这是ID",
name varchar(20) not null default "ran",
age int(2) not null
);
--  在id不能加default

--  复制表
create  table tab2 select * from tab1;

--  只复制结构,不复制内荣 
create  table tab2 like tab1;

--  增加字段
alter table tab1 add sex varchar(2) not null;

--  删除字段
alter table tab1 drop sex;

--  修改字段
alter table tab1 change name myname varchar(20) not null;

--  增加主键
alter table tab1 add primary key (id);

--  修改表明
alter table tab1 rename to tab11;

--  插入数据
insert into tab1 values(null,"zhangran","23");

--  查询数据
--  limit 
select * from tab1 limit 1;

--  从第一个开始显示,显示一个
select * from tab1 limit 1,1;

--  排序
--order by asc|desc
select * from tab1 order by name asc;

--  更新数据
update tab1 set name="zhangranran",age="111" where name="zhangran" [order by][limit]

--  删除数据
delete from tab1 where name="zhangran";
--  此处要注意一点,truncated也可以当delete使用,而且比delete要快,是一种数据定义语言,但是不能摆正数据的安全性
--  truncated之后的自增长是重新开始的。

--  连接
--  交叉连接
select * from tab1,tab2;
--  所有的都能查出来,冗余的部分特别多

--  内连接
select tab1.name,tab2.myname from tab1 join tab2 on tab1.id=tab2.id;
--  加一个别名select * from tab1 a join tab2 b where tab1.id=tab2.id;

--  左连接跟右连接此处略了啊

--  自连接
--  需要加一个别名
select a.name,b.name from tab1 a,tab1 b where a.id=b.id;

--  子查询
select * from tab1 where name=(select name from tab2 where name="zhangran");

--  子查询做派生表
select * e.name from (select name from tab2) as e;

--  查询中的IN应用
select * from tab1 where name in(select name from tab2);

--  exists的使用,此时子查询作为条件,如果有返回值说明是真,无返回值是假
select * from tab1 where exists (select name from tab1 where id=1);

--  事务处理
--  把几条语句作为一个整体
--  每一个都执行成功了才算是事务的成功处理
--  否则返回最初状态
start transaction 
insert into tab1 values(null,"zhangdayi",22);
update tab1 set age=11 where name="zhangdayi";
commit

--  想要撤销这个事务
rollback

--  MySQL管理
--  数据备份
--  用户权限
--  访问控制
--  性能优化

--  数据备份
--  备份某个数据库的一个表
mysqldump -u root -p111111 wangluo tab1 >D:/mysql.sql

--  备份某个数据库里面的所有的表
mysqldump -u root -p111111 wangluo >D:/mysql.sql

--  一次性备份多个数据库
mysqldump -u root -p111111 --database db1 db2 >D:/mysql1.sql
--  需要特别注意的是database是单数而且它的前面是双横杠

--  将数据库中的所有的表备份

mysqldump -u root -p111111 --all --database >D:/mysql2.sql

-- 将SQL文件导入到数据库

source d:/aaa/bbb/ccc.sql;

--  用户的权限及访问控制
--  简单的举两个例子
grant all privileges on *.* to ‘newuser‘ identified by ‘111111‘ with grant option;

grant update,select on *.* to ‘newuser‘ identified by ‘111111‘;

--  性能优化
--  加索引,在查询操作时优化
--  优化数据库服务
mysql -verbose -help
--  记住,该指令不是在mysql环境下输入的是在cmd下输入的

--  MySQL的基础知识大概就这么多,关键是勤练,多琢磨,以后记得常回过头来看看!!!!!!!!!!!!!!!!!!!!

--  MySQL的存储过程
--  declare生命局部变量
delimiter //
CREATE PROCEDURE pro(IN myid INT);
BEGIN 
DECLARE name VARCHAR(20);
SELECT id INTO myid FROM tab1 WHERE name="zhangran";
SELECT myid;
END
//

CALL pro(1);
//

--  用set命令赋值
delimiter //
CREATE PROCEDURE pro(IN num1 INT,IN num2 INT);
DECLARE num INT;
SET num=num1+num2;
SELECT num;
END
//

--  流程控制语句 IF
delimiter //
CREATE PROCEDURE pro(IN type VARCHAR(20));
IF type="a" THEN SELECT "a等级";
ELSEIF type="b" THEN SELECT "b等级";
ELSE SELECT "c等级";
END IF;
END
//

--  流程控制语句 CASE
delimiter //
CREATE PROCEDURE pro(IN num INT);
BEGIN 
CASE num
WHEN 1 THEN SELECT "1等级";
WHEN 2 THEN SELECT "2等级";
WHEN 3 THEN SELECT "3等级";
END CASE;
END
//

--  循环语句之LOOP
delimiter //
CREATE PROCEDURE pro(IN num INT);
BEGIN 
lable : LOOP
SET num=num+1;
IF num>10 THEN LEAVE lable;
END IF;
END LOOP;
SET @a=num;
END
//

CALL pro(2);
//
SELECT @a;
//

--  循环之WHILE
delimiter //
CREATE PROCEDURE pro();
BEGIN 
DECLARE num INT DEFAULT 0;
WHILE num<10 DO;
SET num=num+1;
END WHILE;
SELECT i;
END
//

--  循环之REPEAT
--  类似于do while循环,无论如何都是先执行一步的
delimiter //
CREATE PROCEDURE pro();
BEGIN 
SET @num=0;
REPEAT @[email protected]+1 UNTIL @num>10;
END REPEAT;
END
//

--  查看存储过程的相关信息
--  查看创建语法信息
show create procedure pro\G

--查看存储过程的特征
show procedure status;

--  修改存储过程 用alter,这一部分掌握的不太全面!!!!!!!!!!!!!
alter procedure mypro
sql security invoker

--  删除存储过程 用drop
DROP PROCEDURE IF EXISTS pro;

--  触发器-------------------
--  MySQL5 开始计入了触发器技术
--  触发器无参数
--  同一个动作不能触发两次
delimiter //
CREATE TRIGGER myter
BEFORE INSERT
ON tab1
FOR EACH ROW
BEGIN
INSERT INTO tab2 SET name=NEW.name;
UPDATE tab3 SET name="newname" WHERE name=NEW.name;
END
//
--  上面的触发器经过验证无任何错误!!!

--  查看触发器
show triggers\G

--  删除触发器
drop trigger myter;

--  另外当前尚无法修改触发器,故只能删除重建的方式来更新

--  游标--------------
--  游标部分比较复杂,而且并不常用,以后再逐渐补充吧

--  视图---
--  视图是根据已经存在的表,经过一定的筛选所组成的,这样可以有选择的让用户看到或是修改部分数据不至于让数据完全曝光
--  演示实例
create table user(id int not null,name varchar(20) not null,address varchar(50) not null,age int not null,tel varchar(11) not null);
--  该表中的个人信息,名称,住址可以公开,但是年龄跟电话不愿意公开,可以建立一个视图
create view myview as select name,address from user;
select * from myview;
--  这样就达到了目的

--  查看视图的创建语法
show create view myview\G

-- 删除视图
drop view myview;

--  差不多就这些吧,以后会慢慢补充的,还是记得有时间多回过头来看看

mysql的复习与进阶

时间: 2024-10-07 05:43:28

mysql的复习与进阶的相关文章

MySQL 查询语句使用进阶

MySQL 查询语句使用进阶 =============================================================================== 概述: =============================================================================== 练习: 练习1  首先导入hellodb.sql的脚本文件,查询其数据库和表如下: [[email protected] ~]# mysql 

MYSQL总复习

学完mysql之后的总结,如有疑问,欢迎提出,共同进步! 1.介绍: DDL:数据定义语言(Data Definition Language,DDL) 基本操作:create drop  alter DML:数据操作语言(Data Manipulation Language,DML) 基本操作:insert.  update .delete.select. DCL:数据控制语言(Data Control Language,DCL) 基本操作:commit. rollback(事物) .grant

mysql index 复习笔记

索引类型: 1.普通索引 create index index_name on test_table(column_name(length)); 2.唯一索引,可以有空值 create unique index index_name on test_table(column_name(length)); 3.主键索引,不能有空 4.组合索引,遵循“最左前缀” create index index_name on test_table(column_name1(10),column_name2,c

MYSQL 函数复习

数学函数    ABS(X)    返回X的绝对值    SQRT(x)        返回非负数X的二次方根    MOD(x,y)    返回x被y除后的余数    CEIL(x)        返回不小于x的最小整数    FLOOR(x)    返回不大于X的最大整数    RAND()        返回0-1之间的随机数    ROUND(x,y)    对x四舍五入,结果保留y位的小数    POW(x,y)    返回X的Y次方的值    字符串函数    CHAR_LENGTH

mysql相关复习

1.常用sql操作 创建一个test库:create database test;授权一个用户:grant all privileges on *.* to 'user'@'%' identified by 'password';创建表:create table student(id int not null);查询:select * from tabel_name where 条件1 and  条件2增加:insert into table_name (id, name, age, sex,

06 python操作MySQL和redis(进阶)

python操作mysql.redis 阶段一.mysql事务 主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务! 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行. 事务用来管理 insert.update.delete 语句 事务必须满足4个条件(ACID):原子性(Atomicity,或称不可分割性).一致性

Mysql面试复习总结

三范式 三范式定义(范式和反范式) 1NF:每个数据项都是最小单元,不可分割,确定行列之后只能对应一个数据. 2NF:每一个非主属性完全依赖于候选码(属性组的值能唯一的标识一个元组,但是其子集不可以).? 3NF:每一个非主属性既不传递依赖于码,也不部分依赖于码(主码=候选码为多个市,从中选出一个作为主码). BCNF:主属性(候选码中的某一个属性)内部也不能部分或传递依赖于码. 4NF :没有多值依赖. 数据类型 MySQL数据类型-菜鸟教程  MYSQL中数据类型介绍 整数: int(m)里

MySQL(2):SQL进阶

一.数据库相关理论 1.系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等performance_schema: MySQL 5.5开始新增一个数据库:主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件.锁等现象 mysql: 授权库,主要存储系统用户的权限信息test: MySQL数据库系统自动创建的测试数据库 2.创建库 1 语法(help create database) C

mysql - 语法复习

选择时间戳 SELECT UNIX_TIMESTAMP() 转换时间戳 SELECT FROM_UNIXTIME( 1249488000, '%Y年%m月%d' )