mysql 中文注释_常见mysql语句(中文注释版)

-- 查看所有数据库

SHOW DATABASES;

-- 创建数据库

CREATE DATABASE dy_13;

-- 创建数据库并指定字符集

CREATE DATABASE dy_12 CHARACTER SET utf8;

-- 查看数据库字符集

SHOW CREATE DATABASE dy_13;

-- 修改数据库字符集,需要在根目录上才能有效执行

ALTER DATABASE dy_13 DEFAULT CHARACTER SET utf8;

-- 删除数据库

DROP DATABASE dy_13;

-- ---------------------------------------------------------------------------

-- 进入表

USE dy;

-- 查看表,需要先进入数据库

SHOW TABLES;

-- 创建表

CREATE TABLE student(

id INT,

NAME VARCHAR(20),

gendenr VARCHAR(20),

age INT

);

-- 查看表结构

DESC student;

-- 添加字段

ALTER TABLE dy ADD COLUMN qq INT;

-- 修改字段类型

ALTER TABLE student MODIFY COLUMN qq VARCHAR(10);

为已经添加好的数据表添加外键:

语法:alter table 表名 add constraint FK_ID foreign key(你的外键字段名) REFERENCES 外表表名

-- 修改字段名称 旧名字 新名字

ALTER TABLE student CHANGE COLUMN gendenr sex VARCHAR(20);

-- 删除字段

ALTER TABLE student DROP COLUMN qq;

-- 修改表名

ALTER TABLE student RENAME TO students;

-- 删除表

DROP TABLE test;

-- 数据管理-------------------------------------------------------------------------------------------------------

-- 查看所有数据

SELECT * FROM dy;

-- 增加数据

INSERT INTO dy VALUES(1,'宝贝','男',20);

-- 在特定字段加入数据

INSERT INTO dy(id,NAME)VALUES(5,'徐渭');

-- 修改数据,一次对一个字段进行修改,修改多个的话逗号隔开即可

UPDATE dy SET qq='123142';

-- 修改局部数据,要修改的数据 增加一个标识位,可以有多个标识位

UPDATE dy SET qq='0' WHERE id=2;

-- 删除数据(全局删除,等于删除了表中的全部数据,但是表没有删除)

DELETE FROM dy;

-- 局部删除,要操作的表 删除的条件,即删除的标识位

DELETE FROM dy WHERE id=2;

-- 插入时间(时间类型)

CREATE TABLE test(

插入日期 DATE,

插入时间 DATETIME,

自动插入时间 TIMESTAMP -- 该时间是自动生成的

);

-- 查询数据---------------------------------------------------------------------------------------------------

-- 查询所有列数据

SELECT * FROM dy;

-- 查询指定列

SELECT id,NAME FROM dy;

-- 给字段指定一个别名(列别名)

SELECT NAME AS '姓名',qq AS '腾讯qq' FROM dy;

-- 对数值类型的数据进行合并并得到值

SELECT age+qq FROM dy;

-- 对合并的数据进行指定别名

SELECT age AS '年龄',qq AS '腾讯',(age+qq) AS '得到' FROM dy;

-- 查询去重,将重复数据去掉,显示不重复的

SELECT DISTINCT qq FROM dy;

-- 条件查询----------------------------------------------------------------------------------------------

-- 查询,where后面是条件,全部的数据id为1的

SELECT * FROM dy WHERE id=1;

-- 与条件查询 年龄为20 与 性别为男

SELECT * FROM dy WHERE age=20 AND gender='男';

SELECT * FROM dy;

-- 或查询

SELECT * FROM dy WHERE age=20 OR age=40;

-- 比较条件 大于 <=小于等于 >=大于等于 =等于 <>不等于,可配合条件查询

-- 比较查询 大于某数值

SELECT * FROM dy WHERE age>20;

-- 并且 年龄在 20 与 40直接的

SELECT * FROM dy WHERE age BETWEEN 20 AND 40;

-- 判空查询--------------------------------------------------------------------------------

-- 查询列中是null的数据

SELECT * FROM dy WHERE age IS NULL;

-- 查询列中是非null的数据

SELECT * FROM dy WHERE age IS NOT NULL;

-- 查询列中空字符串

SELECT * FROM dy WHERE age ='';

-- 查询列中非空字符串的数据

SELECT * FROM dy WHERE age <>'';

-- 模糊查询-------------------------------------------------

-- %表示任意字符 _一个下划线代表一个

-- 查询含有某个字的数据

SELECT * FROM dy WHERE NAME LIKE '%贝%';

-- 查询开头为某个字的数据

SELECT * FROM dy WHERE NAME LIKE '王%';

-- 查询有3个字,并且含某字的数据 __表示2个,只会得到含有2个字的数据

SELECT * FROM dy WHERE NAME LIKE '__贝';

-- 聚合查询--------------------------------------------------------------------------------------

-- 查找最高分 从某字段查询最高数值

SELECT MAX(age) FROM dy;

-- 查询最低分

SELECT MIN(age) FROM dy;

-- 查询某个字段的总分数

SELECT SUM(age) FROM dy;

-- 查询某个字段的平均分,会有小数位

SELECT AVG(age) FROM dy;

-- 统计总数(对空不包含,如果是*号则包含)

SELECT COUNT(*) FROM dy;

-- 分页查询--------------------------------------------------------------------------

-- limit起始行,查询几行,注意从0开始

-- 从第一行查询2条数据, 第一个参数是从第几行开始,查询几条

SELECT * FROM dy LIMIT 0,2;

SELECT * FROM dy LIMIT 3,5;

-- 查询排序-------------------------------------------------------------------------------

-- 默认情况下按照插入数据的顺序排序

-- 按照id的降序排序(从大到小)

SELECT * FROM dy ORDER BY id DESC;

-- 按照id升序排序(从小到大)

SELECT * FROM dy ORDER BY id ASC;

-- 按照age升序排序

SELECT * FROM dy ORDER BY age ASC; -- 空会排在前面

-- 按照name升序排序,排序方式是根据字典来排,字典是abcdefg这样的形式,中文的还不知道排序的原则

SELECT * FROM dy ORDER BY NAME ASC;

-- 分组查询------------------------------------------------------------------------------------------------

-- 查询各个性别的人数,先对数据进行分组,然后对数据进行统计查询,所谓的分组就是对数据去重

SELECT gender FROM dy GROUP BY gender; -- 进行了分组

SELECT * FROM dy GROUP BY gender;

SELECT gender,COUNT(*) FROM dy GROUP BY gender;-- 分组后并将数据进行了统计

-- where分组前查询,having分组后查询

-- 关键字的顺序 from -> where -> group by -> having -> order by -> limit

SELECT gender,COUNT(*) FROM dy WHERE age>3 GROUP BY gender;

-- 数据库的约束-----------------------------------------------------------------------------------------------

-- 默认值 default,在字段的后面添加

-- 非空 not null(有些数据库会赋值一个空字符串)

-- 唯一 unique

-- 主键 唯一并且非空 primary key

-- 自增长 auto_increment 自增长的话数据会一直增加,并不会因为你删除了之前的数据重新开始增长,自增长数据不需要你添加数据

TRUNCATE TABLE dy; -- 删除整个表,我们需要注意一点,使用这个删除会使自增长也全部删除,等于重新开始从1分配,操作不能回滚

DELETE FROM dy; -- 这样删除整个表,自增长不会归零,这个删除可以进行条件删除,不能影响表的约束,同时该操作可以回滚

-- 外键约束--------------------------------------------------------------------------------------------------------

-- 使用外键,我们建立外键表,主键只要添加外键表名与id即可, 外键即受外部约束的字段,至于数据管理,参考树木的

-- 外键约束的作用是约束外键,比如外键没有部门 id = 3 的,那么我们就不应该能添加一个外键为3的存在

ALTER TABLE dy ADD CONSTRAINT sa FOREIGN KEY(fk_two) REFERENCES two(id);-- 追加外键约束

-- 修改 表 表名 添加 声明 外键名 哪一个字段关联外键 外键(主键)

SELECT * FROM dy;

SHOW TABLE dy;

-- 级联操作----------------------------------------------------------------------------------------------------------

-- 修改主表,影响副表的数据

-- 级联更新

ON UPDATE CASCADE;-- (在建立表的时候在后面添加该属性即可)

-- 级联删除

ON DELETE CASCADE;

-- 多表查询---------------------------------------------------------------------------------------------------------------

-- 内连接查询,不满足连接条件的不会被显示,即null不会被显示

SELECT dy.age,two.name -- 第二步:确定查询的字段,注意这里的字段是根据表名来得到,表名可以使用别名

FROM dy,two -- 第一步:确定要查询的表,这里表可以给一个别名,即 表名 AS 别名,甚至可以省略 AS关键字,在其他位置直接使用别名即可

WHERE dy.fk_two=two.id; -- 第三步:确定连接条件,这里的关系即主键与外键

SELECT dy.gender,two.name -- 此种查询会出现笛卡尔积,没有连接条件导致其直接将两张表中无论是否重复的字段显示出来

FROM dy,two;

-- 外连接查询,如果有null元素也会被显示出来(左外连接)

SELECT dy.gender,two.name -- 要查询的表的字段

FROM dy -- 在left outer join左边的表被称为左表,左表无论是否null全部会被显示

LEFT OUTER JOIN two -- 右表会匹配左表数据,如果满足连接条件就显示数据,没有满足条件的则会显示null,如果没有和左表有关系的不会被显示

ON dy.fk_two=two.id; -- 连接条件

-- 如果有业务条件,那么最后面填写业务条件,一般使用and进行连接

-- 右外连接其实就是将左表与右表交换即可。一般情况下使用内连接

-- 权限管理-----------------------------------------------------------------------------------------------------

SELECT * FROM USER;-- 进入了mysql数据库,查询到user表,其中host字段指登录方式

UPDATE USER SET PASSWORD=PASSWORD('1234') WHERE USER='root';-- 修改数据库的密码,注意一点,一定要对数据库的密码进行加密后再修改

GRANT SELECT ON dy.dy TO 'guest'@'localhost' IDENTIFIED BY '1234'; -- 创建新用户并且分配权限

-- grant 给予权限

-- select 查询权限 update 修改权限 delete 删除权限 create 可以建表权限 all 代表全部权限 ,基本上需要什么权限加上这个关键字,逗号分隔

-- on

-- 需要授权的数据库.表

-- to

-- 用户名

-- @

-- 登录方式 localhost 表示只能本地登录,也可以是ip

-- identified by '密码' 登录密码

REVOKE SELECT ON dy.dy FROM 'guest'@'localhost'; -- 回收权限

UPDATE USER SET USER='guest' WHERE USER='admin';-- 修改用户名

-- 删除用户

DROP USER 'guest'@'host';

-- 存储过程----------------------------------------------------------------------------------------

-- 存储过程执行效率高,移植效果差

DELIMITER $ -- 声明开始位置,一般使用$

CREATE PROCEDURE aa() -- aa是这个存储过程的名字,相当于一个函数名

BEGIN

SELECT * FROM dy; -- 这里是要执行的sql语句,可以有很多,甚至可以使用if等

END $ -- 结束位置

-- 调用存储过程

CALL a1(); -- 执行该存储过程

-- ----------------------------------------------------------------------------------------------------------------------

-- 带参数的存储过程01 in是传入的参数

DELIMITER $ -- 声明开始位置,一般使用$

CREATE PROCEDURE a1(IN a INT) -- aa是这个存储过程的名字,相当于一个函数名,a是参数的名字,传入的参数其实是一个字段,还要放入参数的类型

BEGIN

SELECT * FROM dy WHERE id=a; -- 这里是要执行的sql语句,可以有很多,甚至可以使用if等(这里是得到id=xx的值)

END $ -- 结束位置

CALL a1(1); -- 执行该存储过程并且传入参数

-- -----------------------------------------------------------------------------------------------------------------------

-- 带参数的存储过程02 out是传出去的参数

DELIMITER $ -- 声明开始位置,一般使用$

CREATE PROCEDURE a2(OUT a INT) -- aa是这个存储过程的名字,相当于一个函数名,a是参数的名字,传入的参数其实是一个字段,还要放入参数的类型

BEGIN

SET a=100; -- 对传入的参数进行赋值

END $ -- 结束位置

SET @a=0; -- 定义一个变量

CALL a2(@a); -- 将变量传入其中

SELECT @a; -- 查看该变量

-- ----------------------------------------------------------------------------------------------

-- 第三种参数 inout方式不常用,即传入数据又输出数据

DELIMITER $ -- 声明开始位置,一般使用$

CREATE PROCEDURE a3(INOUT a INT) -- aa是这个存储过程的名字,相当于一个函数名,a是参数的名字,传入的参数其实是一个字段,还要放入参数的类型

BEGIN

SELECT a;-- 得到传入的参数

SET a=100; -- 对传入的参数进行赋值

END $ -- 结束位置

SET @a=10; -- 定义一个变量

CALL a3(@a); -- 将变量传入其中

SELECT @a; -- 查看该变量

-- ---------------------------------------------------------------------------------------------------------------------------

-- 1.4 带有判断的存储过程

DELIMITER $

CREATE PROCEDURE a4(IN num INT,OUT str VARCHAR(20))

BEGIN

IF num=1 THEN

SET str = '星期一';

ELSEIF num=2 THEN

SET str = '星期二';

ELSEIF num=3 THEN

SET str = '星期三';

ELSE

SET str = '错误';

END IF;

END $

CALL a4(3,@str);

SELECT @str;

-- ------------------------------------------------------------------------------------------------------------------

-- 1.5 带有循环的存储过程

DELIMITER $

CREATE PROCEDURE a5(OUT result INT)

BEGIN

-- int sum=0; for(int i=1;i<=100;i++){ sun+=i }

DECLARE asum INT DEFAULT 0;

DECLARE i INT DEFAULT 1;

WHILE i<=100 DO

SET asum=asum+i;

SET i=i+1;

END WHILE;

SET result=asum;

END $

CALL a5(@result);

SELECT @result;

-- -----------------------------------------------------------------------------------------------------------

-- 1.6 带出数据库的数据(into)

DELIMITER $

CREATE PROCEDURE a7(IN eid INT,OUT vname VARCHAR(20))

BEGIN

SELECT NAME INTO vname FROM employee WHERE id=eid;

END $

CALL a7(4,@vname);

SELECT @vname;

-- ------------------------------------------------------------------------------------------------------------------------------

-- mysql的三种变量类型

-- 全局变量(内置对象),内置对象是所有用户都能共享的

-- character_set_client:msql数据库接收数据的编码类型

-- character_set_results:数据库输出数据的编码类型

-- 修改全局变量 set @@变量名=值

-- 查看全局变量 select @@变量名

-- 会话变量,只能在当前登录用户使用

-- 定义会话变量 set @变量名=值

-- 查看会话变量 select @变量名

-- 在存储过程里面的变量就是局部变量

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值