mysql数据库基本操作命令行
创建数据库:
creat database choose;
查询数据库
show databases;
显示当前数据库中的所有表的信息
show tables;
显示指定数据库中的所有表信息
mysql> show tables from db3;
查看指定数据库的相关信息
show create database choose;
选择一个数据库
use choose;
查看当前数据库
select database();
删除数据库
drop database choose;
删除表
mysql> drop table A;
设置数据库使用的字符集
set names utf8;
查看表的详细设计信息
describe stu2;
查看表的内容(name和tel都是表中的属性)
select name,tel from stu2;
这里如果出现了:
Empty set (0.00 sec)
说明查询的表中的该属性是空的,还没有插入数据
向表中插入内容(name和tel是表中的属性,dong和456是插入的属性值)
mysql> insert into stu2(name,tel) -> values ('dong',456);
在已有的表中添加列
mysql> ALTER TABLE one -> add tall int;
删除表中的列
mysql> alter table A -> drop taa;
在表中添加枚举(enum只支持整数,我一开始定义的是男、女两个中文,踩了好大一个坑,后来发现定义整数是可以的)
create table six( -> name varchar(5), -> sex enum('1','2') -> );
修改表中列的数据类型
alter table test1 -> modify column name varchar(20);
修改表的名字
mysql> alter table stu rename to stu_new;
将表转移到其他数据库中
mysql> alter table stu2 rename to db3.stu2;
表记录的修改
update test1 -> set name='qq' where(name='j');
表记录的删除
DELETE FROM test1 -> WHERE (name='liu');
设置主键的两种方式
法一:
mysql> create table C( -> id int primary key, -> name varchar(10));
法二:
mysql> create table D( -> id int, -> num int, -> name varchar(10), -> primary key(id,num));
取出表中列的重复结果
法一:
mysql> select distinct department from student_info;
法二:
mysql> select department from student_info -> group by(department);
查看mysql编码格式
show variables like 'character%';
设置编码格式
set character_set_client=utf8; // 设置客户端的编码为utf8 set character_set_connection=utf8; // set character_set_database=utf8; // set character_set_results=utf8; // set character_set_server=utf8; // set character_set_system=utf8; //
修改表的编码格式
alter table animal charset=utf8;
删除表中记录
truncate table one;
取出表中的年份(属性bir1必须是data类型的才能取出来)
select year(bir1) from rq;
使用枚举enum设置类型
create table my( -> sex enum('男','女')charset utf8);
使用like运算符与通配符实现模糊查询(匹配a开头的属性)
mysql> select * from stu -> where name like 'a%';
使用limit限制记录数:例如查询从0开始的10条记录.该命令在分页功能中很有用
select * from table limit 0,10;
按照单个列的值进行排序:order by 列名 asc(升序)|desc(降序)
mysql> select number from student_info -> order by number desc;
通配符%和_的使用:%表示匹配任意一个字符串,_表示匹配一个字符
刘%:匹配姓刘的名字
刘_:匹配姓刘,且长度为2的名字
常用聚合函数:
sum() 累加求和
avg() 请均值
count(*) 统计记录的行数
count(列名)统计指定列的行数
max() 最大值
min() 最小值
求表中某列的平均值
select avg(grade) from stu;
连续使用聚合函数
mysql> select sum(grade),max(grade),min(grade),avg(grade) from stu;
使用聚合函数时给属性列设置别名
select sum(grade) as '中文' from stu;
通过group by 字句对记录分组
select avg(grade) from stu -> group by sex;
通过group by 字句根据记录属性分组
select sex,count(num) from stu group by sex;
having子从句的使用
mysql> select num,avg(grade) from stu_score -> group by num -> having avg(grade)<60;
使用order by 对字句进行排序
升序
select * from stu_score -> order by(grade);
降序
select * from stu_score
-> order by(grade) desc;
使用limit查询指定记录
select num,name from stu -> order by(grade) desc -> limit 1;
基于派生表的查询from型子查询,注意点:派生表一定要指定一个别名,否则会报错
select * from (select name from stu where grade>60) as s1;
广义笛卡尔积
select * from stu,score;
去除笛卡尔积中无效的选项后的结果
select * from stu,score where stu.num=score.num;
等值连接
select stu.* from stu,score where c_id=1 and stu.num=score.num;
左连接语法格式
select stu.num,name,course,stu_score.grade from stu left join stu_score on stu.num=stu_score.num;
获得系统的当前时间
mysql> select now();
获得系统的当前年份
mysql> select year(now());
不相关子查询
SELECT number, name, id_number, major FROM student_info WHERE EXISTS (SELECT * FROM student_score WHERE student_score.number = student_info.number);
使用自连接简化子查询的方式
select * from student_info as s1,student_info as s2 -> where s1.major=s2.major and s1.name='史珍香';