创建数据库: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中的常用用法。