1 数据库和表操作
2 数据操作
3 高级查询
4 mysql管理
1 数据库和表操作
数据库
创建:create database 数据库名 [default character set 字符集] [collate utf8_general_ci];
删除:drop database 数据库名;
切换:use 数据库名;
查看:show databases;
数据表
创建:create table 表名(字段名 数据类型 数据类型属性)engine=存储引擎
自增列: auto_increment
注释标识: increment
查看表: show tables;
查看表结构: describe 表名;
删除:drop table 表名;
复制:
create table 新表名 select 字段 from 旧表名;——不能复制键
create table 新表名 like 旧表名; --可以复制表结构,不能复制数据
修改:
alter table 表名 add 字段名 数据类型 数据类型属性;——添加字段
alter table 表名 change 字段名 新名称 数据类型 数据类型属性;——修改字段
alter table 表名 drop 字段名;——删除字段
alter table 表名 rename to 新表名;——修改表名称
alter talbe 表名 add primary key(主键列);——添加主键
2 数据操作
添加数据:
insert into 表名[(字段列表)] values(值列表);
或
insert into 表名[(字段列表)] values(值列表),(值列表),(值列表),....;
insert into 表名 set 字段名=值,字段名=值,....;
insert into 表名 select 字段列表 from 表名;
指定了auto_increment的列,在插入时:
如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个序列编号。编号从1开始,并1为基数递增。
当插入记录时,没有为AUTO_INCREMENT明确指定值,则等同插入NULL值。
当插入记录时,如果为AUTO_INCREMENT字段明确指定了一个数值,则会出现两种情况:
情况一,如果插入的值与已有的编号重复,则会出现出 错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;
情况二,如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。换句话说,就是自增字段可以跳过一些编号。
被delete语句删除的id值,除非sql中将id重新插入,否则前面空余的id不会复用。
查看当前值:show variables like '%auto_increment%';
修改AUTO_INCREMENT字段的起始值:
alter table table_name AUTO_INCREMENT=n
配置auto-increment-increment(自增量)&auto-increment-offset(初始值)的值:
(1):修改配置文件,重启mysqld
vi my.cnf
将
auto-increment-increment = 2
auto-increment-offset = 2
加入到mysqld相关的配置中
(2):通过set命令修改,不需要重启mysqld,一般需要用set global来设置
set global auto_increment_increment=2;
set global auto_increment_offset=2;
修改数据:
update 表名 set 字段名=值,字段名=值,.... [where 条件表达式];
删除数据:
delete from 表名 [where 条件表达式];
truncate table 表名;
区别:
delete是一种DML(数据操作语言),事务提交后生效;而truncate是一种DDL(数据定义语言),不能够确保事务的安全性
delete删除数据不会释放表空间,而truncate删除数据后重新创建表,释放表空间
delete删除数据后自增列继续累加;而truncate删除后自增列还原为初始值
查询数据:
select 字段列表 from 表名 [where 条件表达式];
3 高级查询
联合查询:将两张或多张表的数据组合在一个结果集显示
交叉连接:select * from 表1,表2,....; 注意:结果返回笛卡尔积
内连接:select * from 表1 inner join 表2 on 连接条件
外连接:select * from 表1 left/right join 表2 on 连接条件
自连接:select * from 表名 别名1,表名 别名2 on 连接条件
子查询:将一个查询语句放在其它语句中
将子查询看做一张表:select * from (select * from 表名) 别名;
将子查询看做条件:select * from 表名 where 字段=(select 字段 from 表名)
将子查询用在更新语句中:delete from 表名 where id in(select id from 表名)
模糊查询:得到和指定值相匹配的数据集合
select 字段列表 from 表名 where 字段名 like ?;
匹配符:%(匹配0个或多个任意字符)
_(匹配任意一个字符)
[范围](匹配指定范围内的单个字符) name like [abcde] <==> name='a' or name='b' or name='c' or name='d' or name='e'
[^范围](匹配不在指定范围内的单个字符) name like [^ab] <==> name!='a' and name!='b'
分页:limit关键字
select * from student limit (当前页-1)*显示条数,显示条数;
4 mysql管理
说明:在mysqladmin客户端下操作
数据备份:
备份单个数据库或表:mysqldump -h数据库服务器主机 -u用户名 -p密码 数据库名 [表名] > 文件路径.sql
备份多个数据库或表:mysqldump -h数据库服务器主机 -u用户名 -p密码 --database 数据库1 数据库2 > 文件路径.sql
数据还原:
mysql -h数据库服务器主机 -u用户名 -p密码 数据库名 < 文件路径.sql
性能优化:
优化查询:
为字段建立索引,索引都会占用一定的内存,适当即可
尽可能不要使用*
优化数据库服务器:my.ini配置文件
key_buffer_size:索引缓冲可以使用内存数量,值越大可以使用的内存越大
table_cache:表高速缓冲时占用的内存大小