目录
对数据库的操作
创建数据库:create database (数据库名);
显示数据库:show database;
删除数据库:drop database (数据库名);
连接数据库:use (数据库名);
查看当前使用的数据库:select database();
当前数据库的表信息:show tables;
在MySQL的bin目录下进入命令行测试:
表操作
创建表:
create table (表名)(
列名 数据类型(数据大小),
列名 数据类型(数据大小),
……
列名 数据类型(数据大小)
)
删除表:drop table (表名);
截断表:truncate table (表名);
运行后:
修改表名:
rename table 原表 to 新表;
列操作
增加列:
alter table 表名 add 列名 列表类型;
向test表中添加varchar类型名为”qq“的列:
alter table test add column qq varchar(10) not null;
修改列类型:
alter table 表名 modify 列名 新列类型 新参数;
在test表中修改列名为”qq“的类型,改为varchar:
alter table test modify qq varchar(10) not null;
修改列名及列类型:
alter table 表名 change 老列名 新列名 新列类型 新列参数;
在test表中修改列名为”qq“的列,改名为”email“:
alter table test change qq email varchar(20) not null;
删除列:
alter table 表名 drop 列名;
在test表中删除列名为”email“的列:
alter table test drop column email;
约束
1、主键约束:primary key
2、外键约束:foreign key
3、非空约束:not null
4、唯一约束:unique (防止数据插入时重复)
5、默认约束:default
事务控制命令
开启一个事务:begin;
禁止自动提交:set autocommit=0;
提交事务:commit;
回滚事务:rollback;
SQL:
简单查询:
查询:select 列名 from 表名;
去重查询:select distinct 列名 from 表名;
升序(降序)排列:select 列名 from 表名 order by 列名 (desc);
条件查询:select 列名 from 表名 where 条件;
比较常见的where子句操作符:
高级查询:
打印前五个学生的名字:select name from student limit 5;
打印4-6名学生的名字:select name from student limit 3,3;(从0开始,这里第一个数代表开始的位置,第二个代表搜索的数量)
在where组合查询中and优先级比or高。
in操作符:select name from student where name in('zhangsan','lisi');
not操作符:和其他操作符一起用,比如not in。
like模糊查询:select name from student like 'zhang%';%为通配符,可以是任意字符,不限出现次数。
字段拼接:select concat(id,name) from test.test order by id;
聚合函数:
别名as:一般跟在函数后面,命名。
分组:group by
分组过滤:having
having和where的区别:where是在分组前进行过滤,而having是在分组后进行过滤,一般搭配group by使用。
子查询:
一般在要查询的数据分散在两张表的情况下使用:
先在表A中查到姓名为“张三”的人的id,再根据id在表B中查找到校时间:
select time from B where id in (select id from A where time='张三');
内联:
两组对照:
查找A,B两表中id相同的name:
select A_name,B_name from A,B where A.id=B.id;
select A_name,B_name from A inner join B on A.id=B.id;
左外联:left join (输出坐标的所有行,右表没有的补null)
右外联:right join
全外联:full join (包括两表中不关联的行,没有的补null,mysql不支持)
笛卡尔积:没有联结关系的结果为笛卡尔积,检索出的行的数目将是第一个表中行数乘以第二个表中的行数。
union组合查询:
select语句 union select语句
union all不会取消重复的行,而union会取消重复的行。
增删改
插入:
不指定列:insert into A values('0010','赵六');
指定列:insert into A(id,name) values('0010','赵六');
多行:insert into A values('0009','王五'),('0010','赵六');
复制信息表:
insert into A select * from B;(把B的值赋给A)
修改:
update 表 set 列名='值' where 列名='值';
省略where语句会更新全表。、
删除:
delete from 表;清空表数据,保留表结构,是dml操作,可以回滚。
drop table 表;删除表,ddl操作,无法回滚。
truncate table 表;截断表,删除数据,保留表结构,ddl操作,无法回滚。
视图:
create view 视图名 as select语句(一般是多表查询);
触发器:
create trigger <触发器名称>
{before|after}
{insert|update|delete}
on <表名称>
for each row
begin
<触发执行的SQL语句>
end;
MySQL的函数
mysql数学函数:
abs(x):返回x的绝对值
ceil(x):返回不小于x的最小整数
floor(x):返回不大于X的最大整数
mod(x,y):返回x/y的摸
rand():返回0~1内的随机值
round(x,y):返回参数X的四舍五入的有Y位小数的值。
truncate(x,y):返回数字X截断y位小数的结果。
MySQL聚合函数:
avg():返回某列的平均值
count():返回某列的行数
max():返回某列的最大值
min():返回某列的最小值
sun():返回某列值之和
MySQL字符串函数
cuncat(s1,s2):字符串拼接
insert(str,x,y,instr):将字符串str从x位置开始, y个字符长的子串替换为指定的字符。
lower(str):转小写
upper(str):转大写
left(str,x):返回str最左边的x个字符
right(str,x):返回str最右边的x个字符
lpad(str,n,pad):在str最左边填充n个pad
rpad(str,n,pad):在str最右边填充n个pad
ltrim(str):去掉str左侧的空格
rtrim(str):去掉str右侧的空格
trim(str):去掉行尾和行头的空格
repeat(str,x):返回str重复x次的效果
strcmp(s1,s2):比较字符串s1和s2
replace(str,s1,s2):用s2替换str中所有出现的字符串s1
substring(str,x,y):返回字符串str x位置起y个字符长度的字串
MySQL日期时间函数
curdate():返回当前日期
curtime();返回当前日期
now():返回当前日期和时间
unix_timestamp(date):返回日期date的UNIX时间戳
from_unixtime:返回unix时间戳的日期值
week(date):返回日期date为一年中的第几周
year(date):返回日期date的年份
hour(time):返回time的小时值
minute(time):返回time的分钟值
monthname(date):返回date的月份名
date_format(date,fmt):返回按字符串fmt格式日期date值
date_add(date,interval expr type):返回一个日期或时间值加上一个时间间隔的时间值
datediff(expr,expr2):返回起始时间expr和结束时间expr2之间的天数。
date_format:
MySQL流程函数
if(value,t,f) 如果value是真,返回t;否则返回f。
ifnull(value1,value2) 如果value1不为空,返回value1,否则返回value2.
case when [value1] then [result1]……else [default] end 如果value1为真,返回result1,否则返回result。
case[expr] when [value1] then [result1]……else [default] end 如果expr等于value1,返回result1,否则返回default.