热门搜索 :
考研考公
您的当前位置:首页正文

MySQL常用语法

2023-11-09 来源:东饰资讯网

创建数据库:CREATE DATABASE mysql_db;删除数据库:DROP DATABASE mysql_db;查看数据库:SHOW DATABASES;使用数据库:USE mysql_db;查看数据库中的表:SHOW TABLES;

创建表:CREATE TABLE user(id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,username VARCHAR(20) UNIQUE NOT NULL,sex ENUM(‘1‘,‘2‘,‘3‘) NOT NULL DEFAULT 3);查看表结构:①SELECT COLUMN FROM user;      ②DESC user;

查看表创建语句(可查看各种自动生成的名字):SHOW CREATE TABLE user;插入表记录:①INSERT INTO user(id,username,sex) VALUES(1,‘Tom‘,1);②INSERT user(username) VALUES (‘John‘);查找表:SELECT * FROM user;删除表中的数据(保留表结构):TRUNCATE TABLE user;将查询结果写入新表:INSERT [INTO] privinces(sex) SELECT sex FROM user GROUP BY sex;

(若表中有数据,请不要随意更改表名、列名)修改表名:①ALTER TABLE user RENAME [AS|TO] users;②RENAME TABLE user TO users;添加单列:ALTER TABLE user  ADD [COLUMN] age SMALLINT NOT NULL UNSIGNED DEFUALT 18 [FIRST | AFTER sex];删除列:ALTER TABLE user DROP sex[,DROP age];修改列名称和定义:ALTER TABLE user CHANGE [COLUMN] age a_ge TINYINT NOT NULL UNSIGNED AFTER id;

单表更新:UPDATE user SET age = age + 5,sex = 1 [WHERE id = 2];单表删除:DELETE FROM user [WHERE id =3];单(多)表连接:SELECT p.userid,p.username FROM user AS p LEFT JOIN user AS s  ON p.userid = s.age;单(多)表删除:DELETE * FROM user [AS] u1 LEFT JOIN ( SELECT p.userid FROM user AS p LEFT JOIN user AS s ON p.userid =s.age GROUP BY p.userid HAVING COUNT(s.age)>1 ) [AS] u2 ON u1.userid = u2.ageWHERE u1.userid > u2.userid;

查找记录:SELETE select_expr [,select_expr] [ FROM table_references [WHERE where_condition] [GROUP BY {col_name|position}[ASC|DESC],...] //查询结果分组 [HAVING where_condition] //设置分组条件 [ORDER BY {col_name|expr|position}[ASC|DESC]] //对结果排序 LIMIT {[offset,]row_count|row_count OFFSET offset}]//限制记录数量 ]

记录为2、3行:SELECT * FROM user LIMIT 1,2;

别名使用(在项目中一般都使用别名)AS alias_name:  SELECT id AS uid FROM user AS u ;

子查询:SELECT AVG(age) FROM user WHERE userid =  [ALL|SOME|ANY|[NOT] IN|[NOT] EXISTS](SELECT uid FROM privinces WHERE pname = ‘河南‘);

外键约束:(父表为user表,必须先在父表中插入数据,才能在子表中插入数据)CASEADE:从父表中删除或更新行 且 自动级联删除或更新子表中匹配的行;SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL;RESTRICT:拒绝对父表的更新或删除操作;CREATE TABLE privinces(  pid SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,  pname VARCHAR(20) NOT NULL ,  uid SMALLINT,  FOREIGN KEY (uid) REFERENCES user (id)    //privinces的字段uid与user表的字段id外键约束ON DELETE CASEADE   //删除时 级联删除);

增加主键、唯一、外键约束:ALTER TABLE privinces   ADD [CONSTRAINT uq_pname] UNIQUE(pname);添加/删除默认约束:ALTER TABLE privinces   ALTER pname {SET DEFAULT literal | DROP DEFAULT}; 删除主键约束:ALTER TABLE privinces DROP PRIMARY KEY;删除唯一(索引)约束:     (查看约束名字key_name: SHOW INDEXS FROM privinces;)ALTER TABLE privinces DROP {INDEX | KEY} 约束名;删除外键约束:     (查看约束名字:SHOW CREATE TABLE privinces;)ALTER TABLE privinces DROP FOREIGN KEY 约束名;

多表更新:UPDATE 表的参照关系 SET col_name = {[expr | value]};

表的参照关系:tab1_reference {[INNER|CROSS] JOIN |{LEFT|RIGHT}[OUTER] JOIN} tab2_refenence ON conditional_expr;内连接:INNER JOIN左外连接:LEFT JOIN右外连接:ROGHT JOINUPDATE user INNER JOIN privinces ON user_privince = pname  SET user_privince = pid;//(更新user内连接privince,条件是user_privince.=pname,设置user_privince=pid)

创建数据表的同时将查询结果写入数据表:CREATE TABLE table_name  [create_definition, ...]   //创建语句的定义  select_statement;   //要插入查询结果的 查询语句

字符函数:CONCAT()字符连接;CONCAT(‘I‘,‘LOVE‘,‘YOU‘);CONCAT_WS()使用指定的分隔符进行字符连接;CONCAT_WS(‘|‘,‘A‘,‘B‘);第一个为分割符FORMAT();数字格式化;FORMAT(99999.99,1);将数字格式化,并保留1位小数LOWER();转换成小写字符UPPER();转换成大写字符LEFT();获取左侧字符RIGHT();获取右侧字符LENGTH();获取字符长度;LTRIN();删除前导字符;RTRIM();删除后续字符TRIM();删除前导、后续字符;SUBSTRING();字符串的截取;SUBSTRING(‘MYSQL‘,1,2);从第一位中截取2位;(mysql不允许为负值)[NOT] LIKE;模式匹配SELECT * FROM user WHERE username LIKE ‘%1%%‘ ESCAPE ‘1‘;REPLACE();替换字符串中的字符REPLACE(‘M??Y??SQL‘,‘?‘,‘*‘);将M??Y??SQL中的?替换成*;

数值运算符:CEIL();进一去整;DIV;整数除法;FLOOR();舍一去整;MOD;取余数(模);POWER();幂运算;ROUND();四舍五入;ROUND(3.562,1);取一位小数TRUNCATE();数字截取;TRUNCATE(125.89,1);小数后截取一位;

日期时间:NOW();当前时间;CURDATE();当前日期;CURTIME();当前时间;DATE_ADD();日期变化;DATE_ADD(‘2015-6-23‘,INTERVAL 365 DAY);DATEDIFF();俩日期之间的差值;DATE_FORMAT();进行日期格式化;SELECT DATE_FORMAT(‘2015-6-26‘,‘%m/%d/%Y‘);

MySQL常用语法

标签:

小编还为您整理了以下内容,可能对您也有帮助:

mysql中update的语法是什么?

update set命令用来修改表中的数据。update set命令格式:update 表名 set 字段=新值,… where 条件。

举例如下:mysql> update MyClass set name='Mary' where id=1;单表的MySQL UPDATE语句:UPDATE [LOW_PRIORITY] [IGNORE] tbl_name SET col_name1=expr1 [col_name2=expr2] [WHERE where_definition] [ORDER BY] [LIMIT row_count]。

多表的UPDATE语句:UPDATE [LOW_PRIORITY] [IGNORE] table_references SET col_name1=expr1 [, col_name2=expr2] [WHERE where_definition]。

UPDATE语法可以用新值更新原有表行中的各列。SET子句指示要修改哪些列和要给予哪些值。WHERE子句指定应更新哪些行。如果没有WHERE子句,则更新所有的行。如果指定了ORDER BY子句,则按照被指定的顺序对行进行更新。LIMIT子句用于给定一个限值,可以被更新的行的数目。

MySQL详解

数据查询语言(凡是带有 select 关键字的都是查询语句)

select...

数据操作语言(凡是对表中的 数据 进行增删改的都是 DML)

insert 增 delete 删 update 改

数据定义语言(凡是带有 create、drop、alter 的都是 DDL)

主要操作的是 表的结构 ,不是表的数据

事务控制语言(包括:事务提交 commit、事务回滚 rollback)

数据控制语言(授权 grant、撤销权限 revoke)

select 字段 from 表名 where 条件;

in(具体值,具体值,......) 不是区间

一个输入对应一个输出,和其对应的是多行处理函数(多个输入,对应一个输出)

输入多行,最终输出一行

如果你 没有对数据进行分组,整张表默认为一组 。

在实际的应用中,可能需要先进行分组,然后对每一组的数据进行操作

案例: 查询每个员工所在部门的名称,显示员工名和部门名?

emp e 和 dept d 表进行连接。条件是:e.deptno = d.deptno

SQL92语法:(结构不够清晰,表的连接条件和后期进一步筛选的条件,都放到了 where 子句中)

SQL99语法:(表连接的条件是的,连接之后,如果还需要进一步筛选,再往后继续添加 where 子句)

技巧: 把一张表看成两张表

思考: 外连接的查询结果条数 >= 内连接的查询结果条数

select 语句中 嵌套 select 语句,被嵌套的 select 语句称为 子查询。

将查询结果集的一部分取出来。(通常使用在分页查询当中)

将字符串 varchar 类型转换成 date 类型

将日期转换成字符串

可以获取当前系统的时间,并且获取的时间是 datetime 类型的

注意:若没有条件将会导致所有数据全部更新。

注意:若没有条件,会删除整张表的数据。

constraint

not null 约束的字段 不能为 NULL (只有列级约束)

unique 约束的字段 不能重复 ,但是可以为 NULL

primary key

foreign key

transaction

实现原理 :缩小扫描的范围(形成树),避免全表扫描

Database Administrator 数据库管理员

数据库表的设计依据。教你怎么进行数据库表的设计。

免费领取有关于java面试题材料和讲解!

mysql中的sql语句

character introcer翻译过来就是字符引导。也就是针对字符串,显式的给定一个字符编码和排序规则,不受系统参数的影响。

总结 Introcer 使用规则:

1. convert 函数

convert 函数类似于 introcer,不过只能指定字符集。

2. charset 函数

检测字符串的字符集。可以检测出当前字符串在当前 session 的字符集。

3. set names 语句

语法为:

SET NAMES {'charset_name'[COLLATE 'collation_name'] | DEFAULT}

这条语句最常用,可是也最容易被滥用,比如语句:

set names latin1 collate latin1_bin;

执行后会默认执行一系列语句,也就是把非服务端的相关参数给重新设定了。

4. set character set 语句语法为:

SET {CHARACTER SET | CHARSET}{'charset_name' | DEFAULT}

类似语句 set names,同样是设置以下三个 session 参数:

character_set_results

character_set_client

character_set_connection

同样是可以恢复默认值,还有同样的规则等。不过有两点不同:1)参数 character_set_connection 的值不会被设定为指定的字符集,而是继承参数 character_set_database 所设定的字符集。

5. collate 子句

collate 语句强制指定排序规则,优先级最高。也就是显式指定 collate 会覆盖已有的排序规则。

这里涉及到单个字符串以及字符串拼接的排序规则问题。

mysql常用查询命令?

 SHOW DATABASES返回可用数据库的一个列表,包含在这个列表中的可能是MySQL内部使用的数据库(如MySQL和information_schema)

技术分享

SHOW TABLES
返回数据库内的表的列表

技术分享

SHOW COLUMNS FROM CUSTOMERS,DESCRIBE  Customer
返回表列

技术分享

SHOW CREATE TABLE Test1

技术分享

show table status like‘test1%‘ 

技术分享

create table Customer
(
id int not null Primary key AUTO_INCREMENT,
name varchar(50),
Age int
)

ALTER TABLE Customer ENGINE=‘Myisam‘ 改变表的Engine

SHOW TABLE STATUS LIKE‘Customer‘

技术分享

SHOW STATUS显示服务器状态信息

技术分享

SHOW GRANTS用于显示授予用户的安全权限

技术分享

SHOW ERRORS SHOW WARNINGS用于显示服务器错误和警告信息

MySQL常用命令

标签:

mysql常用查询命令?

 SHOW DATABASES返回可用数据库的一个列表,包含在这个列表中的可能是MySQL内部使用的数据库(如MySQL和information_schema)

技术分享

SHOW TABLES
返回数据库内的表的列表

技术分享

SHOW COLUMNS FROM CUSTOMERS,DESCRIBE  Customer
返回表列

技术分享

SHOW CREATE TABLE Test1

技术分享

show table status like‘test1%‘ 

技术分享

create table Customer
(
id int not null Primary key AUTO_INCREMENT,
name varchar(50),
Age int
)

ALTER TABLE Customer ENGINE=‘Myisam‘ 改变表的Engine

SHOW TABLE STATUS LIKE‘Customer‘

技术分享

SHOW STATUS显示服务器状态信息

技术分享

SHOW GRANTS用于显示授予用户的安全权限

技术分享

SHOW ERRORS SHOW WARNINGS用于显示服务器错误和警告信息

MySQL常用命令

标签:

mysql存储过程的基本用法有哪些

mysql存储过程使用技巧有:

定义

一组预先编译好的SQL语句的集合,理解成批处理语句,类似于java中的方法

1、提高代码的重用性

2、简化操作

3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

创建语法

CREATE PROCEDURE 存储过程名(参数列表)BEGIN存储过程体(一组合法的SQL语句)END

参数列表包含三部分

参数模式 参数名 参数类型

举例:

in stuname varchar(20)

参数模式:

  • in:该参数可以作为输入,也就是该参数需要调用方传入值

  • out:该参数可以作为输出,也就是该参数可以作为返回值

  • inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值

  • 如果存储过程体仅仅只有一句话,begin end可以省略

  • 存储过程体中的每条sql语句的结尾要求必须加分号。

  • 存储过程的结尾可以使用 delimiter 重新设置

  • 语法:

    delimiter 结束标记

    案例:

    delimiter $

    调用语法

    CALL 存储过程名(实参列表);

    空参列表

    插入到admin表中五条记录

    SELECT * FROM admin;DELIMITER $CREATE PROCEDURE myp1()BEGININSERT INTO admin(username,`password`) VALUES('john1','0000'),('lily','0000'),('rose','0000'),('jack','0000'),('tom','0000');END $#调用CALL myp1()$

    创建带in模式参数的存储过程

    创建存储过程实现 根据女神名,查询对应的男神信息CREATE PROCEDURE myp2(IN beautyName VARCHAR(20))BEGINSELECT bo.*FROM boys boRIGHT JOIN beauty b ON bo.id = b.boyfriend_idWHERE b.name=beautyName;END $#调用CALL myp2('柳岩')$

    创建存储过程实现,用户是否登录成功

    CREATE PROCEDURE myp4(IN username VARCHAR(20),IN PASSWORD VARCHAR(20))BEGINDECLARE result INT DEFAULT 0;#声明并初始化SELECT COUNT(*) INTO result#赋值FROM adminWHERE admin.username = usernameAND admin.password = PASSWORD;SELECT IF(result>0,'成功','失败');#使用END $#调用CALL myp3('张飞','8888')$

    创建out 模式参数的存储过程

    根据输入的女神名,返回对应的男神名

    CREATE PROCEDURE myp6(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20))BEGINSELECT bo.boyname INTO boynameFROM boys boRIGHT JOINbeauty b ON b.boyfriend_id = bo.idWHERE b.name=beautyName ;END $

    根据输入的女神名,返回对应的男神名和魅力值

    CREATE PROCEDURE myp7(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20),OUT usercp INT) BEGINSELECT boys.boyname ,boys.usercp INTO boyname,usercpFROM boys RIGHT JOINbeauty b ON b.boyfriend_id = boys.idWHERE b.name=beautyName ;END $#调用CALL myp7('小昭',@name,@cp)$SELECT @name,@cp$

    创建带inout模式参数的存储过程

    传入a和b两个值,最终a和b都翻倍并返回

    CREATE PROCEDURE myp8(INOUT a INT ,INOUT b INT)BEGINSET a=a*2;SET b=b*2;END $#调用SET @m=10$SET @n=20$CALL myp8(@m,@n)$SELECT @m,@n$

    删除存储过程

    drop procedure 存储过程名DROP PROCEDURE p1;DROP PROCEDURE p2,p3;#×

    查看存储过程的信息

    DESC myp2;SHOW CREATE PROCEDURE myp2;

    mysql存储过程的基本用法有哪些

    mysql存储过程使用技巧有:

    定义

    一组预先编译好的SQL语句的集合,理解成批处理语句,类似于java中的方法

    1、提高代码的重用性

    2、简化操作

    3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

    创建语法

    CREATE PROCEDURE 存储过程名(参数列表)BEGIN存储过程体(一组合法的SQL语句)END

    参数列表包含三部分

    参数模式 参数名 参数类型

    举例:

    in stuname varchar(20)

    参数模式:

  • in:该参数可以作为输入,也就是该参数需要调用方传入值

  • out:该参数可以作为输出,也就是该参数可以作为返回值

  • inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值

  • 如果存储过程体仅仅只有一句话,begin end可以省略

  • 存储过程体中的每条sql语句的结尾要求必须加分号。

  • 存储过程的结尾可以使用 delimiter 重新设置

  • 语法:

    delimiter 结束标记

    案例:

    delimiter $

    调用语法

    CALL 存储过程名(实参列表);

    空参列表

    插入到admin表中五条记录

    SELECT * FROM admin;DELIMITER $CREATE PROCEDURE myp1()BEGININSERT INTO admin(username,`password`) VALUES('john1','0000'),('lily','0000'),('rose','0000'),('jack','0000'),('tom','0000');END $#调用CALL myp1()$

    创建带in模式参数的存储过程

    创建存储过程实现 根据女神名,查询对应的男神信息CREATE PROCEDURE myp2(IN beautyName VARCHAR(20))BEGINSELECT bo.*FROM boys boRIGHT JOIN beauty b ON bo.id = b.boyfriend_idWHERE b.name=beautyName;END $#调用CALL myp2('柳岩')$

    创建存储过程实现,用户是否登录成功

    CREATE PROCEDURE myp4(IN username VARCHAR(20),IN PASSWORD VARCHAR(20))BEGINDECLARE result INT DEFAULT 0;#声明并初始化SELECT COUNT(*) INTO result#赋值FROM adminWHERE admin.username = usernameAND admin.password = PASSWORD;SELECT IF(result>0,'成功','失败');#使用END $#调用CALL myp3('张飞','8888')$

    创建out 模式参数的存储过程

    根据输入的女神名,返回对应的男神名

    CREATE PROCEDURE myp6(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20))BEGINSELECT bo.boyname INTO boynameFROM boys boRIGHT JOINbeauty b ON b.boyfriend_id = bo.idWHERE b.name=beautyName ;END $

    根据输入的女神名,返回对应的男神名和魅力值

    CREATE PROCEDURE myp7(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20),OUT usercp INT) BEGINSELECT boys.boyname ,boys.usercp INTO boyname,usercpFROM boys RIGHT JOINbeauty b ON b.boyfriend_id = boys.idWHERE b.name=beautyName ;END $#调用CALL myp7('小昭',@name,@cp)$SELECT @name,@cp$

    创建带inout模式参数的存储过程

    传入a和b两个值,最终a和b都翻倍并返回

    CREATE PROCEDURE myp8(INOUT a INT ,INOUT b INT)BEGINSET a=a*2;SET b=b*2;END $#调用SET @m=10$SET @n=20$CALL myp8(@m,@n)$SELECT @m,@n$

    删除存储过程

    drop procedure 存储过程名DROP PROCEDURE p1;DROP PROCEDURE p2,p3;#×

    查看存储过程的信息

    DESC myp2;SHOW CREATE PROCEDURE myp2;

    常用SQL语句,看这篇就够了

    本文主要以 Mysql 数据库为基础,对常用 SQL 语句进行一次深度总结,由于篇幅较长,难免会有些遗漏的地方,欢迎网友批评指出!

    具体内容主要有以下几个部分:

    创建数据库比较简单,在创建的时候直接指定字符集、排序规则即可!

    例子:

    数据库修改库名的有三种方法,如果是 MyISAM 存储引擎,那么可以直接去数据库目录 mv 就可以了,如果是 Innodb 完全不行,会提示相关表不存在。

    这个语法在 mysql-5.1.7 中被添加进来,到了 mysql-5.1.23 又去掉了,官方不推荐,会有丢失数据的危险!

    思路是先创建一个新库,之后将旧库的数据导入到新库,即可完成修改库名!

    当然这种方法虽然安全,但是如果数据量大,会比较耗时,同时还需要考虑到磁盘空间等硬件成本。

    例子:

    直接跑一个 shell 脚本!

    其中 p123456 , p 是 password 的简称, 123456 表示数据库密码值!

    删除库,比较简单,直接删除即可!

    或者

    MySQL 主要有以下几种运算符:

    运算符描述实例 +加法select 1+2; 结果为3 -减法select 1-2; 结果为-1 *乘法select 2*3; 结果为6 /除法select 6/3; 结果为2 %取余select 10%3; 结果为1

    说明: 在除法运算和模运算中,如果除数为0,将是非法除数,返回结果为NULL 。

    SELECT 语句中的条件语句经常要使用比较运算符。通过这些比较运算符,可以判断表中的哪些记录是符合条件的。比较结果为真,则返回 1,为假则返回 0,比较结果不确定则返回 NULL。

    运算符描述实例 =等于select * from t_user where user_id = 1 查询用户ID为1的信息 !=不等于select * from t_user where user_id != 1 查询用户ID不为1的信息 >大于select * from t_user where user_id > 1 查询用户ID大于1的信息 >=大于select * from t_user where user_id >= 1 查询用户ID大于等于1的信息 大于select * from t_user where user_id < 1 查询用户ID小于1的信息 <=大于select * from t_user where user_id <= 1 查询用户ID小于等于1的信息 BETWEEN AND在两值之间select * from t_user where user_id between 1 and 100 查询用户ID在1和100之间的信息,类似user_id >=1 and user_id <=100 NOT BETWEEN AND不在两值之间select * from t_user where user_id not between 1 and 100 查询用户ID不在1和100之间的信息,类似user_id 100 IN在集合中select * from t_user where user_id in ('1','2') 查询用户ID为 1 或者 2 的信息 NOT IN不在集合中select * from t_user where user_id not in ('1','2') 查询用户ID不为 1 和 2 的信息 LIKE模糊匹配,%表示0个或者多个匹配select * from t_user where user_name like '%张%' 查询用户姓名包含张的信息 IS NULL为空select * from t_user where user_name is null 查询用户姓名为空的信息 IS NOT NULL不为空select * from t_user where user_name not is null 查询用户姓名不为空的信息

    说明: mysql中,IN 语句中参数个数是不的。不过对整段 sql 语句的长度有了,最大不超过 4M !

    逻辑运算符用来判断表达式的真假。如果表达式是真,结果返回 1。如果表达式是假,结果返回 0。

    运算符描述实例 NOT 或 !逻辑非select not 1; 结果为0 AND逻辑与select 2 and 0; 结果为0 OR逻辑或select 2 or 0; 结果为1 XOR逻辑异或select null or 1; 结果为1

    位运算符是在二进制数上进行计算的运算符。位运算会先将操作数变成二进制数,进行位运算。然后再将计算结果从二进制数变回十进制数。

    运算符描述实例 &按位与select 3&5; 结果为1 I按位或select 3I5; 结果为7 ^按位异或select 3I5; 结果为7 ^按位异或select 3^5; 结果为6 ~按位取反select ~18446744073709551612; 结果为3 >>按位右移select 3>>1; 结果为1 <按位左移select 3<<1; 结果为6

    优先级(从高到底)运算符 1! 2-(负号),~(按位取反) 3^(按位异或) 4*,/(DIV),%(MOD) 5+,- 6>>,<< 7& 8I 9=(比较运算),,<,,>=,!=,>,IN,IS NULL,LIKE,REGEXP 10BETWEEN AND,CASE,WHEN,THEN,ELSE 11NOT 12&&,AND 13XOR 14II,OR 15=(赋值运算),:=

    说明: 在无法确定优先级的情况下,可以使用圆括号 () 来改变优先级,并且这样会使计算过程更加清晰 。

    视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。

    参数说明:

    基本格式:

    创建视图示例:

    删除视图是指删除数据库中已存在的视图,删除视图时,只能删除视图的定义,不会删除数据,也就是说不动基表:

    删除示例:

    函数描述实例 char_length(s)返回字符串 s 的字符长度select char_length("hello") as content; concat(s1,s2...sn)字符串 s1,s2 等多个字符串合并为一个字符串select concat("hello ", "world") as content; format(x,n)将数字 x 进行格式化,到小数点后 n 位,最后一位四舍五入select format(500.5634, 2) as content; lower(s)将所有字母变成小写字母select lower('HELLO'); current_timestamp()返回当前日期和时间select current_timestamp(); DATE_FORMAT(date,format)格式化时间或者日期select DATE_FORMAT(current_timestamp(),"%Y-%m-%d %H:%i:%s"); IFNULL(v1,v2)如果 v1 的值不为 NULL,则返回 v1,否则返回 v2select IFNULL(null,'hello word');

    参数说明:

    参数说明:

    参数说明:

    参数说明:

    示例:

    参数说明:

    参数说明:

    创建一个查询用户信息的存储过程示例:

    输出结果:

    删除示例:

    触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。

    定义语法

    参数说明:

    示例,创建了一个名为trig1的触发器,一旦在 t_user 表中有插入动作,就会自动往 t_time 表里插入当前时间。

    创建有多个执行语句的触发器语法

    示例如下:

    一旦插入成功,就会执行 BEGIN ...END 语句!

    所有触发器信息都存储在information_schema数据库下的triggers表中,可以使用SELECT语句查询,如果触发器信息过多,最好通过TRIGGER_NAME字段指定查询。

    示例如下:

    删除触发器之后最好使用上面的方法查看一遍。

    触发器尽量少的使用,因为不管如何,它还是很消耗资源,如果使用的话要谨慎的使用,确定它是非常高效的:触发器是针对每一行的;对增删改非常频繁的表上切记不要使用触发器,因为它会非常消耗资源。

    在 MySQL 中,可以有如下几种途径实现唯一值:

    在mysql中,一般我们可以给某个主键字段设置为自增模式,例如:

    这种模式,在单库单表的时候,没啥问题,但是如果要对 test_db 表进行分库分表,这个时候问题就来了,如果水平分库,这个时候向 test_db_1 、 test_db_2 中插入数据,就会出现相同的 ID !

    当然,为了避免出现这种情况,有的大神就自己单独创建了一张自增序列表,单独维护,这样就不会出现在分表的时候出现相同的ID!

    实现过程也很简单!

    这方案,某种情况下解决了分表的问题,但是如果分库还是会出现相同的ID!

    UUID 基于 16 进制,由 32 位小写的 16 进制数字组成,如下:

    比如 d0c754a8-178e-11eb-ae3d-2a7bea22ed3d 就是一个典型的 UUID。

    在 MySQL 的 UUID() 函数中,前三组数字从时间戳中生成,第四组数字暂时保持时间戳的唯一性,第五组数字是一个 IEEE 802 节点标点值,保证空间唯一。

    使用 UUID() 函数,可以生成时间、空间上都独一无二的值。据说只要是使用了 UUID,都不可能看到两个重复的 UUID 值。当然,这个只是在理论情况下。

    使用方法也很简单,在 sql 可以直接当成函数调用即可!

    在 MySQL 5.1 之后的版本,提供 UUID_SHORT() 函数,生成一个 64 位无符号整数,在java中可以用 Long 类型接受。另外,需要注意的是,server_id 的范围必须为 0-255 ,并且不支持 STATEMENT 模式复制,否则有可能会产生重复的ID

    同时,需要注意的是, UUID_SHORT() 返回的是 unsigned long long 类型,在字段类型设置的时候,一定要勾选 无符号 类型,否则有可能生成的ID超过 Long 类型最大长度!

    说明:

    在给其他授权前,请先用管理员账户登录!

    注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令!

    在结尾加上 WITH GRANT OPTION 就可以了!

    可以使用如下命令,来一键设置 root 用户的密码,同时拥有所有的权限并设置为远程访问!

    如果想关闭 root 用户远程访问权限,使用如下命令即可!

    最后使用如下命令,使其生效!

    创建用户并进行授权,也可以使用如下快捷命令!

    最后需要注意的是:mysql8,使用强校验,所以,如果密码过于简单,会报错,密码尽量搞复杂些!

    本文主要围绕 Mysql 中常用的语法进行一次梳理和介绍,这些语法大部分也同样适用于其他的数据库,例如 oracle、sqlserver、postgres 等等,在数据操作栏,除了分页函数以外,基本都是通用的!

    MySQL的CASE WHEN用法

    case when有两个用法,一个是行转列,一个是更改列的值

    在数据分析时经常要用到行转列,此时如果使用case when就会方便很多,case when的熟练使用程度,可以说的判断对SQL操作水平的评定方法之一。

    case when的语句在某种程度上可以理解成是if函数的简便逻辑写法,主要有两种模式:

    模式一(简单变量表达式):

    模式二(搜索变量表达式):

    通常情况下,模式二的方式会更加灵活,在工作中也推荐使用模式二的写法(特别是如果有使用Tableau等软件制作参数的时候,语法跟模式二的相同的)。

    看具体的例子:

    如果现在想要看不同学生的平均分和每个课程的成绩,并且不同课程按列进行显示,要怎么操作呢?

    这个时候,使用case when就很方便了

    当然了,也可以使用case when对学生的成绩进行优良中差的判断,这个在工作中的使用场景也是蛮多的,如果有兴趣的同学可以自己试着练习看看。

    这个就是case when在MySQL中的常用用法。

    Top