mysql的基本操作
mysql查看库:show databases;查看所有表:show tables;使用数据库;use 数据库名字
创建数据库:create database student
mysql的数据类型:
整数类型 :tinyint 1个字节 小整数值
SMALLINT 2个字节 大整数类型
int 4个字节 大整数类型
bigint 8个字节 极大整数值
浮点类型: float 4个字节 小数
double 8个字节 小数
字符串类型: char 定长类型 'aa' ‘a ’ '1' '11aa'
varchar 变长类型 'aa' 'a'
枚举类型: enum enum('男','女')
集合: set set('1','2','3')
时间类型: datetime 具体的时间
timestamp 时间戳
无符号位: unsigned
auto_increment : 经常和主键使用,每次递增1
主键 : primary key(`id`)
默认: default
指定显示中文 : ENGINE= MYISAM CHARACTER SET utf8
插入数据 : insert into table_name(name,Sex,Birth,Department,Address) values('张三','男',2017-01-01,'计算机系','北京');
基本查询:
select * from 表名
查询所有的数据
select name,age from 表名
查询指定的字段
select * from 表名 limit 1
只显示第一条数据
select * from 表名 limit 2,5
2表示起始位置,5表示要显示的数据条数
select name as '姓名' from 表名
关键字查询:
where
select * from 表名 where name='张三'
where后面跟条件语句
in
select * from 表名 where xxx in('中文系','计算机系')
运算查询
select * from 表名 where age>22
select * from 表名 where age-5>15
select * from 表名 where age>15 and age<22
select * from 表名 where age between 15 and 22
between....and....:在...之间....
模糊查询
like
select * from 表名 where name like '张%'
%表示匹配所有
select * from 表名 where name like '%三'
select * from 表名 where name like '张_'
select * from 表名 where name like '_三_'
聚合查询(函数)
count:统计
select count(*) from student
select count(*) from student where age>20
select count(id) from student
sum:总和
select sum(score) from score
avg:平均
select avg(score) from score
max:最大值
select max(score) from score
min:最小值
select min(score) from score
排序
order by
select * from student order by birth
order by ...asc:默认升序可以省略asc
select id,name,birth from student order by birth desc
desc是降序,不可以省略
分组
group by
select xxx,sum(score) from score group by xxx
having
select xxx,sum(score) as sum_score from score group by xxx having sum_score>500
排序分组
select 类别, sum(数量) AS 数量之和
from A
group by 类别
order by sum(数量) desc
group by.... order by...
select 类别, 摘要, sum(数量) as 数量之和
from A
group by all 类别, 摘要
group by all...
having和where
select 类别, SUM(数量)from A
where 数量 >8
group by 类别
having SUM(数量) >10
联表查询
select A.id,A.name,B.name from A,B where A.id=B.id;
Inner join内连接
select * from A inner join B on A.name = B.name;
left join
select * from A left join B on A.name = B.name;
select * from A left outer join B on A.name = B.name;
right join
select * from A right join B on A.name = B.name
三表联查
去重
distinct
select distinct 字段名 form 表名
合并
union
select * from A union select * from B
alter
删除列
ALTER TABLE 【表名字】 DROP 【列名称】
增加列
ALTER TABLE 【表名字】 ADD 【列名称】 INT NOT NULL COMMENT '注释说明'
修改列的类型信息
ALTER TABLE 【表名字】 CHANGE 【列名称】【新列名称(这里可以用和原来列同名即可)】 BIGINT NOT NULL COMMENT '注释说明'
重命名列
ALTER TABLE 【表名字】 CHANGE 【列名称】【新列名称】 BIGINT NOT NULL COMMENT '注释说明'
重命名表
ALTER TABLE 【表名字】 RENAME 【表新名字】
删除表中主键
Alter TABLE 【表名字】 drop primary key
查看表的创建语句
show create table 表名
复制表
1,先使用show create table 表来查看创建的语句
2,复制上面命令显示的SQL语句,修改数据表名,并执行SQL语句,通过以上命令 将完全的复制数据表结构
3,复制表的内容,可以使用 INSERT INTO ... SELECT 语句来实现
insert into 新表名(字段1,字段2,字段3) select 字段1,字段2,字段3 from 旧表名
导出数据
SELECT ... INTO OUTFILE
select * from 表名 into outfile '存储文件的位置:/tmp/tutorials.txt'
导出sql格式的数据
mysqldump -u root -p RUNOOB runoob_tbl > dump.txt
导出整个数据库的数据
mysqldump -u root -p RUNOOB > database_dump.txt
备份所有数据库
mysqldump -u root -p --all-databases > database_dump.txt
将数据表及数据库拷贝至其他主机
mysqldump -u root -p database_name table_name > dump.txt
将备份的数据库导入到MySQL服务器中
mysql -u root -p database_name < dump.txt
导入数据
使用 LOAD DATA 导入数据
LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl;
使用 mysqlimport 导入数据
mysqlimport -u root -p --local database_name dump.txt
数据库的锁
mysql有三种锁
页级、表级、行级
MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking)
BDB存储引擎采用的是页面锁(page-level locking),但也支持表级锁
InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。
表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高
页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般