mysql 命令

2017-10-10  本文已影响0人  蕊er

查看mysql字符集

show variables like 'character%'

数据库启动与停止

net start mysql

net stop mysql

登陆

mysql -u用户名 -p密码 

数据库操作

创建数据库:create database 数据库名称 character set utf8;

数据库删除:drop database 数据库名称

显示数据库:show databases;

查看某个数据库定义信息:show create database 数据库名称;

切换数据库:use 数据库名称;

查看当前使用的数据库:select database();

表操作

创建表:create table 表名称(

                  字段名称    字段类型(长度) 约束,

                  字段名称    字段类型(长度) 约束......

               ) character set utf8;

删除表:drop table 表名称;

表结构操作

      添加列:alter table 表名 add 字段名称 字段类型(长度) 约束;

      修改列的类型,长度,约束:alter table 表名 modify 字段名称 字段类型(长度) 约束;

      修改列名,类型,长度,约束:alter table 表名 change 旧列名 新列名 字段类型(长度) 约束;

      删除列:alter table 表名 drop 列名;

修改表名:rename table 旧表名  to 新表明

更改表的字符集:alter table 表名 character set utf8;

查询数据库表show tables;

查看某个表信息:desc 表名;

创建外键:alter table 从表 add constraint 外键名称 foreign key(从表外键字段名)references 主表(主表的主键);

删除外键:alter table 从表 drop foreign key 外键名称

外键级联操作类型

            restrict(限制):默认值,抛异常,如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作

            cascade(级联):如果主表的记录删掉,则从表中相关联的记录都将被删除,在父表上update/delete记录时,同步update/delete掉子表的匹配记录

             set null:将外键设置为空,在父表上update/delete记录时,将子表上匹配记录的列设为null,要注意子表的外键列不能为not null

             no action:什么都不做

      创建外键时遇到的问题: 1.关联的外键为not null ,外键删除时和更新时选择的 SET NULL;解决选择cascade;2.创建外键时,该表已经存在数据,错误:1452。解决方法:1)删除数据;2)在外键表中添加对应的项,再添加外键

表内容操作

插入:insert into 表名 values(值1,值2,值3......);

           insert into 表名 (列1,列2,列3......) values (值1,值2,值3......);

更新:update 表名 set 字段名=值,字段名=值......where 条件

删除:delete from 表名 where 条件

            truncate table 表名;

    区别:delete:一条一条删除,不清空auto_increment记录条数,删除的数据在一个事务中可       以找回,truncate:直接将表删除,重新建表,auto_increment将置为空,从零开始,删除的     数据找不回来

查询

      select [distinct] * |列名 from 表 where 条件 group by 分组字段 having 分组条件 order by 排序字段 asc|desc limit star,count;

      distinct:去重

      like:_代表一个字符,%代表任意个字符

      in:在某个范围内获得值in(set)

      between ... and ...:显示在某一个的值(含头含尾)

      is null:判断是否为空

      is not null:判非空

      and:多个条件同时成立

      or:多个条件任意成立

      not:不成立

     排序:asc,desc

     聚合:avg(),sum(),min(),max(),count()

     分组:group by

     对比where与having:

      where是对from后面指定的表进行数据筛选,属于对原始数据的筛选,having是对group               by的结果进行筛选

      连接查询

      参考:http://www.cnblogs.com/logon/p/3748020.html

                      http://www.cnblogs.com/pcjim/articles/799302.html

      inner join(等值连接):只返回两个表中联结字段相等的行;

      left [outer] join(左联接):返回包括左表中的所有记录和右表中联结字段相等的记录;

      right [outer] join(右联接):返回包括右表中的所有记录和左表中联结字段相等的记录

视图--视图本质就是对查询的一个封装

定义视图

create view stuscore as

select students.*,scores.score from scores

inner join students on scores.stuid=students.id;

视图的用途就是查询

select * from stuscore;

事务

事务语句

开启:begin;

提交:commit;

回滚:rollback;

建表原则

一对多关系:在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键

多对多关系:两张表都是主表,新建第三张表作为从表,提供两个字段,都是外键

一对一关系

内置函数

字符串函数

查看字符的ascii码值,ascii(str),str是空串时返回0

select ascii('a');

查看ascii码值对应的字符,char(数字)

select char(97);

拼接字符串,concat(str1,str2...)

select concat(12,34,'ab');

包含字符个数,length(str)

select length('abc');

截取字符串

left(str,len),返回字符串str的左端len个字符

right(str,len),返回字符串str的右端len个字符

substring(str,pos,len),返回字符串str的位置pos起len个字符

select substring('abc123',2,3);

去除空格

ltrim(str)返回删除了左空格的字符串str

rtrim(str)返回删除了右空格的字符串str

trim([方向] from str)返回从某侧删除remstr后的字符串str,方向词包括both、leading、trailing,表示两侧、左、右

select trim('  bar  ');

select trim(leading 'x' FROM 'xxxbarxxx');

select trim(both 'x' FROM 'xxxbarxxx');

select trim(trailing 'x' FROM 'xxxbarxxx');

返回由n个空格字符组成的一个字符串,space(n)

select space(10);

替换字符串,replace(str,from_str,to_str)

select replace('abc123','123','def');

大小写转换,函数如下

lower(str)

upper(str)

select lower('aBcD');

数学函数

求绝对值abs(n)

select abs(-32);

求m除以n的余数mod(m,n),同运算符%

select mod(10,3);

地板floor(n),表示不大于n的最大整数

select floor(2.3);

天花板ceiling(n),表示不小于n的最大整数

select ceiling(2.3);

求四舍五入值round(n,d),n表示原数,d表示小数位置,默认为0

select round(1.6);

求x的y次幂pow(x,y)

select pow(2,3);

获取圆周率PI()

select PI();

随机数rand(),值为0-1.0的浮点数

select rand();

日期与时间

获取子值,语法如下:

year(date)返回date的年份(范围在1000到9999)

month(date)返回date中的月份数值

day(date)返回date中的日期数值

hour(time)返回time的小时数(范围是0到23)

minute(time)返回time的分钟数(范围是0到59)

second(time)返回time的秒数(范围是0到59)

select year('2016-12-21');

日期计算,使用+-运算符,数字后面的关键字为year、month、day、hour、minute、second

select '2016-12-21'+interval 1 day;

日期格式化date_format(date,format),format参数可用的值如下:

获取年%Y,返回4位的整数

获取年%y,返回2位的整数

获取月%m,值为1-12的整数

获取日%d,返回整数

获取时%H,值为0-23的整数

获取时%h,值为1-12的整数

获取分%i,值为0-59的整数

获取秒%s,值为0-59的整数

select date_format('2016-12-21','%Y %m %d');

当前日期current_date()

select current_date();

当前时间current_time()

select current_time();

当前日期时间now()

select now();

查询例子

select * from category,products where cid=category_id;

select * from category c,products p where c.cid=p.category_id;

select cname from category c,products p where c.cid=p.category_id;

select distinct cname from category c,products p where c.cid=p.category_id;

select distinct cname from category c inner join products p on c.cid=p.category_id;

select * from category c left outer join products p on c.cid=p,category_id;

select cname,count(category_id) from category c left outer join products p on c.cid=p.category_id group by cname;

select p.* from products p,category c where p.category_id=c.cid and c.cname="化妆品";

select * from products where category_id=(select cid from category where cname="化妆品");

上一篇下一篇

猜你喜欢

热点阅读