在linux的MySQL数据库安装 rpm -qa|grep mysql 查询linux中的数据库 yum remove 服务名称 删除linux中的数据库指定的包 yum remove mysql * 删除linux中所有的数据库包 yum erase 数据库包 删除linux中的数据库 rpm -e --nodeps 数据包 删除linux中的数据库 yum install mysql 安装数据库客户端 yum install mysql-server 安装数据库服务端 安装好后 service mysqld stop 关闭数据库服务 service mysqld start 开启数据库服务 service mysqld restart 重启数据库服务 service mysqld status 查看服务器状态 mysqladmin -u root password ‘123456’ 设置登录密码 mysql -u root -p 进入mysql操作界面 进入数据库之前 (1)防火墙关闭 service iptables stop (2)数据库服务是否启动: service mysqld start (3)连接ip地址是否正确 (4)账号和密码是否正确 (5)是否设置权限,并刷新 grant all privileges on *.* to root@"%" identified by "123456"; 授权 flush privileges ; 刷新权限 数据库基础命令 show databases 显示所有的数据库 create database 库名 创建数据库 drop database 库名 删除数据库 use 库名 使用库 show tables 显示库里面所有的表 create table 表名(字段1 字符类型1(字符长度1),字段1 字符类型1(字符长度1)) 建表语句 (如果表中有汉字字符则需要在末尾跟 default charset=utf8【默认编码格式】) insert into 表名 values (插入值1,插入值字2) 插入数据 insert into 表名 (字段名1,字段名2) values (插入值1,插入值2) 插入数据 desc 表名 查看表结构 drop table 表名 删除表 alter table 表名 add 字段名 字符类型(字符长度) 添加字段 alter table 表名 change 原字段名 新字段名 字符类型(字符长度) 修改字段 alter table 表名 drop 字段名 删除字段 alter table 原表名 rename 新表名 重命名表明 Alter table 表名 modify 字段名1 字段类型(字符长度) after 字段名2 将一个字段名1移动到字段名2的后面去 alter table 表名 add 字段名 字符类型(字符长度) first 在行首添加一个新字段 alter table 表名 add 新字段名 字符类型(字符长度) after 原字段名 将字段添加到指定字段后面 建立表约束:(约束的作用是保证表中的记录完整和有效) 1、非空约束(not null)保证字段的值不能为空 2、唯一约束(unique) 保证字段具有唯一性(不能重复),可以为空,一个可有多个唯一约束 3、主键约束(primary key)保证字段值具有唯一性(不能重复),一个表中只有一个主键 4、外键约束(forign key) 两个表之间的主键建立关系 5、默认(default) 当字段不填数据,默认数据 6、自增长(auto_increment)当添加一条数据,自动+1 MySQL查询 (1)查询一个表中所有的数据 格式:select * FROM 表名 ; select * FROM hz13 ; 注意:* 号表示所有,每个语句后面加上分号 (2)查询表中具体的字段 格式:select 字段名1,字段名2,字段名3 FROM 表名 ; select name FROM hz13 ; select name,age FROM hz13 ; (3)查询表中具体的字段取别名(别名是为了在查看数据是方便) 格式:select 字段1 as "姓名",字段2 "年龄" FROM 表,名; select name as "姓名",age "年龄" FROM hz13 ; 备注:as 可以省略不写,as表示取别名 (4)查询指定内容 ,用where+条件 格式:select * from 表名 where 字段名=字段 ; select * from emp where dept2=101 ; where条件使用注意: 比较运算符 (1)where +条件(=(等于), !=(不等于) ,<>(不等于) ,<(小于),>(大于),>=(大于等于),<=(小于等于)) select * from emp where dept2=101 ;select * from emp where dept2 !=101 select * from emp where dept2 <>101 ;select * from emp where dept2 >102 ;select * from emp where dept2 <102 ;select * from emp where dept2 <=102 ;select * from emp where dept2 >=102 ; (2)and (与) and 同时满足所有条件,比如:条件1和条件2都要满足 案例:select * from emp where dept2 >=102 and age=57 ; (3)or(或) or 当有多个条件时满足其中任意1个条件都显示,,条件1和条件同时存在,只要满足条件1就显示,只要满足条件2就显示。 select * from emp where dept2 =102 or age=55 ; (4)between..... and.... 在什么范围之间 格式:select * from 表名 where 表字段 BETWEEN 值得范围 and 值的范围 select * from emp where age BETWEEN 24 and 55 ; (5)in 在一组数据中匹配数据 格式:select * from 表名 where 字段名 in (数组值1,数组值2,数组值3); select * from emp where dept2 in (101,102,110); (6)is null 为空 或is not null 非空 6.1 is not null 非空 格式:select * from 表名 where 字段名 is not null ; select * from emp where age is not null ; 6.2 is null 为空 格式:select * from 表名 where 字段名 is null ; 多行注释:ctrl+/ 取消多行注释:ctrl+shift+/ 单行注释:直接#号 排序: 对表中的数据进行拍讯:order by asc 升序(可以省略) desc 降序 升序: 格式:select * from 表名 order by 字段名 asc ; 案例1:select * from emp order by age asc ; 案例2:select * from emp order by age asc ;(不填asc) 降序: 格式: select * from 表名 order by 字段名 desc ; 案例:select * from emp order by age desc ; 二次排序: 格式:select * from 表名 order by 字段1 desc ,字段2 asc ; select * from emp order by dept2 desc , incoming asc ; 模糊匹配查询 like %:表会匹配0个字符或多个字符 —:表示一个字符 select * from emp where dept2 like "1%" #匹配1开头的部门编号数据select * from emp where dept2 like "%2%" #匹配的部门包含2编号数据select * from emp where dept2 like "%2" #匹配结尾包含2编号数据select * from emp where dept2 like "__2" #匹配固定的字符2编号数据 限制查询(limit) 后面接连个值 ,第一个值 表示下标(索引), 第二值是步长 备注:一个表中索引是从0开始 格式:select * from 表名 limit 索引,行数 ; 案例1:select * from emp limit 2,3 ; 案例2:select * from emp limit 2 ; 直接查询两行 分组查询 group by group by 一般和having 组合 案例:SELECT dept2,max(age) from emp group by dept2 ; SELECT dept2,max(age) from emp group by dept2 ; SELECT dept2,max(age) from emp group by dept2 ; group by 一般不会单独使用个,通常都是和函数组合使用。 gtoup by 后查询出来的结果,在需要的条件下可以接having 案例:SELECT dept2 ,max(age) as s from emp group by dept2 HAVING s>50 ; having +条件 和where +条件 用法一样,但是场景不一样,一般group by 的后面接having 备注:函数求出以后,需要设置成别名,设置别名的字段,进行语句的操作。 错误案例:(1)SELECT name,max(age) from emp (2)SELECT name,max(age) from emp GROUP BY dept2 sql语句函数: max 最大值 案例:SELECT dept2,max(age) from emp min 最小值 案例:SELECT min(age) from emp avg 平均值 案例:SELECT avg(age) from emp count 统计总数 案例:SELECT count(age) from emp sum 求和 案例:SELECT sum(age) from emp distinct 去重 案例:SELECT distinct(dept2) from emp ==================================== 改: update ......set 改 格式:update 表名 set 修改的字段名=字段新值 where 条件 ; 案例:update emp set name="成全" where sid=1789 ; ==================================== 删: delete 删 truncate 快速删除表内数据 drop 删除 删除数据速度 :drop > truncate >delete 注意: 1、drop 是删除表和数据 2、truncate 删除无法恢复 3、delete 删除是可以恢复 delete: (1)删除表中所有数据 格式:delete from 表名: 案例:delete from hz13; (2)删除表中指定条件的数据 格式: delete from 表名 where 条件 案例: delete from emp where dept2=103; (3)快速删除表数据 格式:truncate 表名; 案例:truncate hz15 ; ==================================== 表取别名: 格式: 表名设置别名, 案例:SELECT s.dept2,s.name from emp as s ; (把emp表设置成临时表s) ==================================== 备份表结构: 格式:create table 新表名 like 备份原表名 ; create table hz110 like emp ; 备份数据: insert into 新表 有表结构 select * from 备份表的原表 案例:INSERT into hz110 select * from emp ; 备份部分数据: 格式:INSERT into 表名(s字段名1,字段名2) select sid ,dept2 from emp ; INSERT into hz110110(sid,dept2) select sid ,dept2 from emp ; 备份表结构和数据: 格式:create table 表名 as(select * from 备份原表 ) 案例:create table hzdcs110 as(select * from emp ) ==================================== linux备份数据库: 备份用:> 格式:mysqldump -u root -p 原数据库>数据库脚本.后缀名 案例:mysqldump -u root -p hz10>/home/hz10bf.sql 还原数据库: 1、先建立一个新的空库 2、在linux中还原< 3、还原:mysql -u root -p 新建的空库<数据库备份好的数据脚本 MySQL数据库表的连接 1、笛卡尔积查询(了解) 根据两张表相乘得到的结果:比如:左边有4条数据,右边有6条数据,查询出来就是4*6=24条数据,这种查询数据包含大量的错误结果,通常不会使用这种查询。 格式:SELECT * from 表1,表二; 案例:SELECT * from dept,emp ; 2、内连接(普通内连接,隐藏内连接) 查询两个表共有的关联数据。 2.1普通内连接: 格式:select * from 表1 inner join 表2 on 表1.关联字段1=表2.关联字段2 案例1:select * from dept inner join emp on dept.dept1=emp.dept2 ; 案例2:select name,dept_name from dept inner join emp on dept.dept1=emp.dept2 where sid=1789 ; 2.2隐藏内连接 格式:select * from 表1,表2 where 表1.关联字段1=表2.关联字段2 select * from dept,emp where dept.dept1=emp.dept2 ; 3、左连接 以左表为主(显示完整的左表),游标关联的数据就显示,没有的数据就以null显示 格式:select * from 表1 left join 表2 on 表1.关联字段1=表2.关联字段2 ; 案例:select * from dept left join emp on dept.dept1=emp.dept2 ; 4、右连接 右表是以右表数据为主(显示整个右表)左表有关联的数据就显示,没有就以null值显示。 格式:select * from 表1 right join 表2 on 表1.关联字段1=表2.关联字段2 ; select* from dept right join emp on dept.dept1=emp.dept2 ; 5、左表独有数据 左表中独有的数据显示,(方法,左独有,以右表字段为空查询) 格式:select * from 表1 left join 表2 on 表1.关联字段1=表2.关联字段2 where 右表字段 is null select * from dept left join emp on dept.dept1=emp.dept2 where name is null; 5、右表独有数据 右表中独有的数据显示,(方法,右独有,以左表字段为空查询) 格式:select * from 表1 right join 表2 on 表1.关联字段1=表2.关联字段2 where 左表字段 is null 案例:select * from dept right join emp on dept.dept1=emp.dept2 where dept1 is null; 6、左表独有数据+右表独有数据: union 拼接 左独有 union 右独有 select * from dept left join emp on dept.dept1=emp.dept2 where name is nullunionselect * from dept right join emp on dept.dept1=emp.dept2 where dept1 is null; 7、全连接 方法一:左独有+右独有+内连接 select * from dept left join emp on dept.dept1=emp.dept2 where name is nullunionselect * from dept right join emp on dept.dept1=emp.dept2 where dept1 is nullUNIONselect * from dept inner join emp on dept.dept1=emp.dept2 ; 方法二:左连接+右独有 select * from dept left join emp on dept.dept1=emp.dept2 UNIONselect * from dept right join emp on dept.dept1=emp.dept2 where dept1 is null ; 方法三:右连接+左独有 select * from dept right join emp on dept.dept1=emp.dept2 UNION select * from dept left join emp on dept.dept1=emp.dept2 where name is null ; 总结: 普通内连接: select * from 表1 inner join 表2 on 表1 的关联字段=表2的关联字段 ; 隐藏内连接: select * from 表1 , 表2 where 表1 的关联字段=表2的关联字段 ; 左连接:select * from 表1 left join 表2 on 表1 的关联字段=表2的关联字段 ; 右连接:select * from 表1 right join 表2 on 表1 的关联字段=表2的关联字段 ; 左独有数据: select * from 表1 left join 表2 on 表1 的关联字段=表2的关联字段 where 右表字段为空; 右独有数据: select * from 表1 right join 表2 on 表1 的关联字段=表2的关联字段 where 左表字段为空; 全外连接: 1、左独有+右独有+内连接 2、左连接+右独有 3、右连接+左独有
|