Mysql数据库基本操作
-- 登录 : mysql> mysql -u 用户名 -p密码-- mysql是多数据库模式
-- 查看数据库:show databases;
-- 进入数据库:use 数据库名;
-- 查看所在的数据库:select database( );
-- 查看数据库的字符集:show create database 数据库的名字;
数据库的增删改查
增: 1)create database 数据库名; --默认字符集latinl
2)create database 数据库名字 character set utf8;
3)create database 数据库名字 character set utf8 collate utf8_general_ci;
查: 1) 查看数据库:show databases;
2) 查看所在的数据库:select database( );
3)查看数据库的字符集:show create database 数据库的名字;
4)清屏:system clear;
改: 1)不建议修改数据库的名字,有时数据库下的表有可能丢失;
2)修改数据库的字符集:alter database 数据库名 character set utf8;
删: 1)drop database 数据库名;
数据库里表的操作
增: 1)create table 表名 (字段 数据类型, ...);
2)show tables; --查看数据库下所有的表
3)show create table 表名; --查看表的创建方式
4)create table 表名(字段名 数据类型)character set utf8; --character set utf8 表示设置表的字符集
5)数据类型float问题:
创建表时如果数据类型是float时,一定要加显示的位数和小数点位数,不然where条件查不到。 float(显示的位数,小数点位数),但是要查也能查到,用abs(字段名-数字)<1e-5
改: 1)更改表名:rename table 旧表名 to 新表名;
2)增加一个字段:alter table 表名 add column 字段名 字段数据类型; --(column可省)
3)修改一个字段:alter table 表名 modify column 字段名 字段数据类型; --(column可省)
4)删除一个字段:alter table 表名 drop column 字段名; --(column可省)
5)修改表的字符集:alter table 表名 character set gbk;
删: 1)drop table 表名;
数据库表里内容的增删改查:
增: 1)insert into 表名(字段名,字段名,...) values (数据, 数据,...); // 一 一对应
改: 1)update 表名 set 字段=?; // 修改一列
2)update 表名 set 字段=?,字段=? where 字段=?; // 修改一行数据
删: 1)delete from 表名 where 字段=?; // 删除一行数据,from不能省略
2)delete from 表名;
3)trucate 表名; // truncate删除,效率高
4)TRUNCATE,DELETE,DROP放在一起比较:
TRUNCATE TABLE:删除内容、释放空间但不删除定义。 // 删除表里的内容,不删除表 DELETE from TABLE:删除内容不删除定义,不释放空间。 // 删除表里的内容,不删除表 DROP TABLE:删除内容和定义,释放空间。 // 删除表,也删除内容
日期处理
1)查看当前时间:select now() from dual;
2)MySQL里面时间分为三类:时间、日期、时间戳(含有时分秒的sysdate)。
如执行:select now(), year(now()) 年, month(now()) 月, day(now()) 日, date(now());
上表为时间函数,如查询当前日期,当前时间,当前时间戳 select CURRENT_DATE() , CURRENT_TIME(), CURRENT_TIMESTAMP() from dual; 案例:昨天,今天,明天
Oracle写法:select now()-1 昨天, now() 今天, now()+1 明天 from dual;--err
select date_add(now(), INTERVAL -1 day) 昨天, now() 今天, date_add(now(), INTERVAL +1 day) 明天;
增加两年:select date_add(now(), INTERVAL 2 year) from dual
字符串相关函数
Select ‘hello’ || ‘mysql’ from dual; ---‘||’在MySql不可以使用
Concat可以接多个字符串
日期转字符串
1)在MySQL中没有to_date函数,进行日期转换需使用date_format()来代替。
select date_format('2013-5-11', 'yyyy-mm-dd') from dual; 在Oracle中的‘yyyy-mm-dd’MySQL下不支持。 select date_format(now(), '%Y-%m-%d') from dual; y和Y不一样。 select date_format(now(), '%Y-%c-%d %h:%i:%s') from dual; c和m、M不一样
所以yyyy-mm-dd hh24:mi:ss格式在MySQL中对应'%Y-%c-%d %h:%i:%s'
字符串转日期:
select str_to_date('2013-6-04 05:14:15' , '%Y-%c-%d %h:%i:%s') from dual;
数学相关函数
约束:
1)定义主键自动增长(auto_increment)
演示: 创建表:create table t2(tid int primary key auto_increment, tname varchar(40) ) ; 插入数据:insert into t2 set tname=’a’;-连插入三次,会看到主键自动增长
2)定义外键约束
Constraint user_files_FK foreign key(user_id1) references t_user(user_id2)
user_files_FK为约束名字,user_id1本表约束的字段,t_user为别的表名字,user_id2为别的表的字段。 本表的user_id1字段被叫做t_user表中的user_id2约束
mysql多表查询
1)导入数据库:
mysql> source 绝对路劲/脚本名;
2)导出数据库:
linux终端下:mysqldump -u root(mysql的用户名) -p abc(数据库名) > abc.sql;
Mysql使用SQL99标准的连接查询
1)交叉连接(笛卡尔积)
select e.*, d.* from emp e cross join dept d;
2)内连接(等值连接)
select e.*, d.* from emp e inner join dept d on e.deptno = d.deptno; //可以省略inner关键字
3)左外连接 (左边有值才显示)
select e.*, d.* from emp e left outer join dept d on e.deptno = d.deptno; //可以省略outer关键字
4)右外连接 (右边有值才显示)
select e.*, d.* from emp e right outer join dept d on e.deptno = d.deptno; //可以省略outer关键字
注: SQL99中,外连接取值与关系表达式=号左右位置无关,取值跟from后表的书写顺序有关。 “xxx left outer join yyy”则为取出xxx的内容; “xxx right outer join yyy”则为取出yyy的内容;
案例:统计各个部门员工总人数
1)左外连接:
select d.deptno, d.dname , count(e.deptno) from dept d left outer join emp e on d.deptno = e.deptno group by d.deptno, d.dname;
result: 有40号部门
2)右外连接:
select d.deptno, d.dname , count(e.deptno) from dept d right outer join emp e on d.deptno = e.deptno group by d.deptno, d.dname;
result: 没有40号部门
案例:查询员工、老板信息,显示: xxx的老板是xxx
1)oracle写法:
select concat( e.ename, ' 的老板是 ', b.ename ) from emp e, emp b where e.mgr = b.empno (+)
2)mysql支持的SQL99语法:
select concat(e.ename, '的老板是', ifnull(b.ename, '他自己')) from emp e left outer join emp b on e.mgr = b.empno;
中文乱码问题
1)查看所有的应用的字符集:
mysql> show variables like 'character%';
2)指定字符集登录数据库
mysql -u root -p123456 --default_character_set=gbk;