tnblog
首页
登录

MySQL数据库基础

177人阅读 2019/8/18 11:19 评论:1 手机 收藏 关注
分类: MySQL


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:表高速缓冲时占用的内存大小


评价
sometimes ever,sometimes never
文章
6
粉丝
16
评论
8
分类
16
{{item.ArticleTitle}}
{{item.BlogName}} : {{item.Content}}