记录生活中的点滴,分享、学习、创新
数据库连接
mysql -u['username'] -p['password']
数据库退出
exit
数据库操作
创建:create database test(数据库名) DEFAULT CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;
修改:alter database test
deafault character set gb2312 (修改默认字符集为gb2312)
deafalut collate gb2312_chinese_ci; (修改默认校对规则为gb2312_chinese_ci)
删除:drop database test;
查看:show databases [like 'test'];
select database();查看当前使用的数据库
使用数据库:use test (不用分号)
表操作
创建:create table students
(id char(10) not null primary key,
name char(6) not null ,
sex char(2) not null default 0,
major char(20 not null));---列名 数据类型 约束
更新:alter table test.student
add column city char(20) default null (添加列)
change column city home char(20) not null (可同时修改表中指定列的名称和数据类型)
modify column id int first/after (修改指定列的数据类型,first/after修改指定列在表中的位置)
alter column city set default '广州'; (可修改或删除表中指定列的默认值)
drop column city; (删除列)
rename to test.university_student; (为表student重命名为university_student)
重命名:rename table test.university_student to student;
复制:create table test.student_copy like test.student; (复制表结构)
create table test.student_copy as test.student; (复制表结构和内容,但是索引和完整性约束不会被复制)
删除:drop table test.student;
查看:show tables; (查看当前数据库的所有表名称)
show columns from student; | desc 表名; (查看表结构)
插入数据:insert into test.student(id,name,sex,major) values('001','lwk','0','计算科学');
删除数据:delete from test.student where id='001'; (不指定where将删除所有数据)
修改数据:updata test.student set id='002' where name='lwk';
数据库的查询
查询表达式结果:select 2+3; (可得到2+3的计算结果5 注:select 'c'+'d';输出0)
查询表数据:select id,name from student;
替换查询结果数据: select sex,
case
when sex='0'then '男'
else '女'
end [as '性别'] (as '性别'是给列sex取列别名)
from test.student; (注意这里还是一个select…from…子句)
高级查询和sqlserver一样(嵌套查询和join连接)
嵌套查询:select 城市 from lwk.仓库 where 仓库号 in (select 仓库号 from lwk.职工 where 工资>5000)
join连接:select 供应商名 from lwk.供应商 join lwk.订购单 on 供应商.供应商号=订购单.供应商号 join lwk.职工 on 职工.职工号=订购单.职工号 join lwk.仓库 on 仓库.仓库号=职工.仓库号 where 地址='韶关' and 城市='广州'
字符串、文本匹配
通配符匹配:select name from student where major like('计%') (%代表多个字符 _代表一个字符)
正则表达式匹配:select name from student where major [not] regexp|rlike '计'; (基本字符匹配,与百分号通配符效果类似)
select name from student where id [not] regexp|rlike '计算科学|信息计算'; (选择匹配)
select name from student where major [not] regexp|rlike '[1-9]'; (范围匹配)
group by …having…子句
select major ,cout(*) 总人数 from student group by student.major having cout(*)>2;
order by 子句 (asc升序|desc降序)
asc和desc不能影响到逗号外的列,默认是asc
select * from app_public_feedback order by created_on desc limit 0,10;
limit 子句
select id,name from student limit 2,4; (从第3行开始取4行数据)
select id,name from student limit 4 offset 2; (从第3行开始取4行数据)
视图
创建:create view test.id_view as select id from student where sex='0';
修改:alter view test.name_view as select name from student where sex='0';
查看:show create view name_view;
更新:update/delete/insert(和表的使用方法类似,把表名改成视图名就好)
如果视图包含 聚合函数 distinct关键字 group by子句 having子句 union运算符 位于选择列表中的子查询 from子句中的不可更新视图或包含多个表 where子句中的子查询,引用from子句中的表 时视图不可更新
删除:drop view name_view;
触发器
创建:create trigger test.student_trigger <before|after> <insert| updata| delete> on test.student for each row <主体> (主体如果要执行多个语句,要使用begin…end复合结构)
例如:create trigger test.student_insert after insert on test.student for each row set @str='add a new student';
删除:drop trigger [if exists] test.student_insert;
当触发器涉及对表自身的更新操作时,只能使用before触发器。
old表中的值全部是只读的。(new操作后的表,old操作前的表)
load data语句能激活before insert触发器。
每个表最多有六个触发器,每种各一个。每个表每个事件每次只允许一个触发器。
触发器不能建立在视图上。
事件
InnoDB : 事物型数据库首选引擎
需要确保MySQL中的event_scheduler已开启
(查看当前事件调度器是否开启 show variables like 'event_scheduler';|select @@event_scheduler;
开启|关闭事件调度器 set global event_scheduler=true|false;)
创建:create event event_name
on scheduler every 1 month|year|quarter|day|hour|minute|……
do
insert into student values('002','路人甲',default,'君子修养');
修改:allter event event_name [rename to event_newname][do <事件主体> ][disable|enable(关闭|开启事件)];
删除:drop event event_name;
事件是基于特定时间周期来触发的
如果不显式地指明,事件在创建后处于关闭状态
存储过程
创建:create procedure name ([过程参数])<过程体>
过程体一般写在begin……end之间
过程参数格式: [in|out|inout] <全局参数名><类型>
IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
OUT 输出参数:该值可在存储过程内部被改变,并可返回
INOUT 输入输出参数:调用时指定,并且可被改变和返回
需要具有create routine权限。
过程体:delimiter
(修改命令结束符为
(修改命令结束符为
)
&n