mysql数据库练习:
展示数据库 show databases;
创建数据库 create database xxx;
删除数据库 drop database xxx;
选择数据库 use xxx;
展示数据表 show tables;
创建数据表 create table student(id int)
create table if not exists `teacher`(
`id` int unsigned auto_increment,
`name` varchar(32) not null,
`time` date ,
primary key(`id`)
)engine=innodb default charset=utf8;
删除数据表 drop table xxx;
插入数据 insert into teacher (id,name,time) values(1,'alex','2018-2-9');
查询语句 select * from teacher
修改语句 update teacher set name='wusir' where id =1;
删除行 delete from teacher where id =2;
其他查询:
like select * from teacher where name like 'al%';
模糊匹配
'%a' //以a结尾的数据
'a%' //以a开头的数据
'%a%' //含有a的数据
'_a_' //三位且中间字母是a的
'_a' //两位且结尾字母是a的
'a_' //两位且开头字母是a的
union 用于将不同表中相同列中查询的数据展示出来(不包括重复数据)
union all 用于将不同表中相同列中查询的数据展示出来(包括重复数据)
使用形式如下
SELECT 列名称 FROM 表名称 UNION SELECT 列名称 FROM 表名称 ORDER BY 列名称;
SELECT 列名称 FROM 表名称 UNION ALL SELECT 列名称 FROM 表名称 ORDER BY 列名称;
order by select * from teacher order by id asc / desc ; 升序/降序
group by 分组
inner join / left join / right join
A表5行数据,B表10条数据;则 A left join B 最多行数为 14行(B表中的数据全部重复对应A表的一行数据),最少行数为5行(B表和A表没有对应关系)
null值处理 is null / is not null
case语句的查询
推荐博客:https://blog.csdn.net/u013514928/article/details/80969949
select case when state='1' then '成功' when state='2' then '失败' else '其他' end from student
或者
select state case when '1' then '成功' when '2' then '失败' else '其他' end from student;
case语句的修改
update student set name=case when name='a' then 'aa' when name='b' then 'bb' else 'cc' end where ...
rlike 正则匹配
事务
原子性 一致性 隔离性 持久性
控制语句
begin / start transaction
commit / commit work
rollback / rollback work
savepoint identifiler 在事务中创建一个保存点
release savepoint identifier 把事务回滚到标记点
set transaction 设置事务的隔离级别,innodb存储引擎提供事务的隔离级别有read uncommitted、read commmitted、depeatable read 和serlalizable
mysql事务处理主要有两种方法
1,begin开始一个事务
1,begin开始一个事务
操作语句 for update
rollback事务回滚
commmit事务确认
2,直接使用set来改变mysql的自动提交模式
set autocommit = 0 禁止自动提交
set autocommit = 1 开启自动提交
alter命令,修改数据表名或修改数据表字段
展示表的字段类型 show columns from 表名
展示表的各种信息(引擎等) show table status like 'course'
增 alter table 表名 add 字段名 字段类型
删 alter table 表名 drop 字段名
改 alter table 表名 modify 字段名 新的字段类型
或 alter table 表名 change 原字段名 新字段名 新字段类型
alter table默认设置字段为空值,也可以设置默认值 在上边的语句后面加上 not null default 100
修改字段默认值
alter table 表名 alter 字段名 set default 默认值;
删除字段默认值
alter table 表名 alter 字段名 drop default
修改表类型,如将表的类型有innodb修改为myisam
alter table 表名 engine = myisam
修改表名
alter table 表名 rename to 新表名
删除外键约束
alter table 表名 drop foreign key keyName(keyName是外键别名)
修改字段的相对位置(这里name1为想要修改的字段,type1为该字段原来类型,first和after二选一,这应该显而易见,first放在第一位,after放在name2字段后面)
alter table 表名 modify name1 type1 first|after name2;
还可以用来创建及删除mysql数据表的索引
触发器 基于行触发
创建触发器
CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_stmt
trigger_name:触发器的名称
tirgger_time:触发时机,为BEFORE或者AFTER
trigger_event:触发事件,为INSERT、DELETE或者UPDATE
tb_name:表示建立触发器的表明,就是在哪张表上建立触发器
trigger_stmt:触发器的程序体,可以是一条SQL语句或者是用BEGIN和END包含的多条语句
六种触发器
BEFORE INSERT,BEFORE DELETE,BEFORE UPDATE
AFTER INSERT,AFTER DELETE,AFTER UPDATE
创建多个执行语句的触发器
CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件
ON 表名 FOR EACH ROW
BEGIN
执行语句列表
END
一般情况下,mysql默认是以 ; 作为结束执行语句,与触发器中需要的分行起冲突
为解决此问题可用DELIMITER,如:DELIMITER ||,可以将结束符号变成||
当触发器创建完成后,可以用DELIMITER ;来将结束符号变成;
在BEGIN...END语句中也可以定义变量,但是只能在BEGIN...END内部使用:
DECLARE var_name var_type [DEFAULT value] #定义变量,可指定默认值
SET var_name = value #给变量赋值
数据
NEW.columnname:新增行的某列数据
OLD.columnname:删除行的某列数据
示例
user表
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
`add_time` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `name` (`name`(250)) USING BTREE
);
logs表
CREATE TABLE `logs` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`log` varchar(255) DEFAULT NULL COMMENT '日志说明',
PRIMARY KEY (`Id`)
);
创建触发器
DELIMITER $
CREATE TRIGGER user_log AFTER INSERT ON users FOR EACH ROW
BEGIN
DECLARE s1 VARCHAR(40)character set utf8;
DECLARE s2 VARCHAR(20) character set utf8;#后面发现中文字符编码出现乱码,这里设置字符集
SET s2 = " is created";
SET s1 = CONCAT(NEW.name,s2); #函数CONCAT可以将字符串连接
INSERT INTO logs(log) values(s1);
END $
DELIMITER ;
然后就可以发现当我们在user表中插入新值后,log表就会增加相应字段,如插入 user.name = aaa,则log.log = aaa is created
函数
定义变量(推荐博客:https://www.cnblogs.com/EasonJim/p/7966918.html)
1,在set 或select直接赋值,变量名以@开头
例如 set @var = 1; (注意select中要使用 :=)
2,以declare关键字声明的变量,只能在存储过程中使用,称为存储过程变量
例如 declare var1 int default 0;
菜鸟教程地址:http://www.runoob.com/mysql/mysql-functions.html
字符串相关
ascii char_length charaacter_length concat concat_WS field find_in_set format insert locate lcase left locate lower lpad ltrim mid ....
可以使用 select char_length('abc') as 长度 ,这样的查询形式来输出函数结果
set @s="runoob";
select char_length(@s) as 测试;
数字相关
abs acos asin atan atan2 avg ceil ceiling cos cot count degrees div exp greatest least max ...
日期相关
adddate addtime courdate current_date current_time date day
高级函数
bin binary case when then when then end cast coalesce connection_id conv convert
运算符
算术运算符
+ - * / % select 1+2
比较运算符
= <> != > < between not between in not in <=> like rlike is null is not null
逻辑运算符
not ! and or xor(异或)
位运算符
&(按位与) |(按位或) ^(按位异或) !(取反) <<左移 >>右移
运算符优先级
由低到高
:=
|| or xor
&& and
not
between case when then else
= <=> >= > <= < <> != IS like regexp in
|
&
<< >>
- +
* / div % mod
^
-(一元减号) ~(一元比特反转)
! binary collate
数据类型
数值
https://blog.csdn.net/shenziheng1/article/details/79471340
类型 大小 范围(有符号) 范围(无符号) 用途
tinyint 1字节 (-128,127) (0,255) 小整数值
smallint 2字节 (-32768,32767) (0,65535) 大整数值
mediumint 3字节 (-8388608,8388607) (0,16777215) 大整数值
int或integer 4字节 以此类推,2的32次方 大整数值
bigint 8字节 以此类推,2的64次方 极大整数值
float 4字节(指数位8位,尾数位有23位,符号位1位)-2^128 ~ +2^128 单精度/浮点数值
double 8字节(指数位11位,尾数位有52位,符号位1位)-2^1024 ~ +2^1024 双精度/浮点数值
decimal 对decimal(M,D),如果M>D,为M+2否则为D+2 小数值
字符串类型
char 0-255字节 定长字符串
varchar 0-65535字节 变长字符串
tinyblob 0-255字节 不超过255个字符的二进制字符串
tinytext 0-255字节 短文本字符串
blob 0-65535字节 二进制形式的长文本数据
text 0-65535字节 长文本数据
mediumblob 0-16777215字节 二进制形式的中等长度文本数据
mediumtext 0-16777215字节 中等长度文本数据
longblob 0-4294967295字节 二进制形式的极大文本数据
longtext 0-4294967295字节 极大文本数据
日期和时间类型
类型 大小(字节) 范围 格式 用途
database 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
time 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间
year 1 1901/2155 YYYY-MM-DD 年份值
datatime 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
timestamp 4 1970-01-01 00:00:00/2038 YYYYMMDDHHMMSS 混合日期和时间值,时间戳
时间相关函数:https://www.cnblogs.com/ggjucheng/p/3352280.html
查询2011的数据:select * from 表 where year(date)='2011';
查找月份为12的数据:select * from 表 where month(date)='12';
查找天数为本年第二天的数据:select * from 表 where dayofyear(date)='2';
select * from 表 where 这是必须的
year,month,dayofyear是mysql的函数,分别是取得年,月,和当前时间在本年是第几天的3个函数
date就是你保存时间的字段