数据库:
1、设计
a、数据表引擎:1 innodb 2 myisam
b、数据值类型:
1、数值类型:tinyint int
2、字符串类型: char varchar text
3、时间类型:int
c、数据字段属性:
1、unsigned: 无符号
2、zerofill: 0 填充
3、auto_increment :自增
create table user(
id int unsigned auto_increment primary key,
username varchar(500)
);
4、null
5、not null
6、default
d、数据表对象管理
e、数据表类型及存储位置
f、数据表的默认字符
1、建议各户端字符集是utf8:default-character-set = utf8
2、mysql服务端字符集为utf8: character-set-server = utf8
3、mysql服务端校验字符集: collation-server = utf8_general_ci
g、索引管理
1)服务器管理
2)数据库管理
3)表管理
4)字段管理
a、添加字段:
alter table user add age tinyint unsigned not null;
alter table user add age tinyint unsigned not null after user;
b、删除字段:alter table user drop password;
c、修改字段:alter table user modify username varchar(30) not null;
修改字段名:alter table user change username user varchar(30) not null;
d、查看字段:
5)索引管理
1、主键
删除:alter table user modify id int unsigned not null;
alter table user drop primary key;
2、唯一索引: alter table user add unique u_username(username);
删除:alter table user drop index u_username;
3、普通: alter taber user add index i_username(username);
删除:alter table user drop index i_username;
2、操作
1)sql语句
增:insert into user(username,password) values('user1','123');
删:delete from user where id=5;
改:update user set password='123' where id=2;
查:select * from user;
select * from user where between 3 and 7;(包含id3~id7的用户)
select * from user where id in(1,3,5); (查询id1,3,5的用户)
2)单表查询
a、给字段名起别名: select username user,password pass from user;
b、distinct关键字的使用:select distinct password from user;
c、模糊查询:select * from user where username like '%u%';(%匹配所有,_匹配一个字符 这一列索引失效)。
d、查询值为null的行: select * from user where password is null;
e、查询值不为null的行:select * from user where password is not null;
f、order by 排序: select * from user order by id desc;(排序分文升序[asc]和降序[desc])。
g、使用limit限定输出条数:
1)、前5条:select * from user limit 5;
2)、从第四条取3条: select * from user limit 3,3;
h、连接函数concat():select concat('id:',id) id,user from user1;
i、随机数rand():select * from user order by rand() limit 1;
j、统计个数count():select count(*) from user;
k、求和sum():select sum(id) from user;
l、求平均值avg(): select avg(id) from user;
m、求最大值 max(): select max(id) from user;
n、求最小值 min(): select min(id) from user;
0、分组聚合的使用 group by: select * from user group by class;
select class ,max(id),min(id),count(*),sum(id),avg(id) from user group by class;
3)多表查询
a、普通多表查询
b、嵌套查询或子查询(用的比较少)
c、链接查询
1)左链接
2)右链接
3)内链接
myisam表引擎
1.user.frm: 表字段
2、user.myd : 表数据
3、user.myi : 表索引
innodb表引擎
1、user.frm: 表字段
2、user.idb:表索引+ 表部分数据
3、ibdata1: 所有数据库中的所有表共享存储文件
基本命令
开启数据库 :sudo service mysqld start
关闭数据库:sudo service mysqld stop
进入数据库: mysql -uroot -p
1、查看数据库:show databases
2、进入数据库: use test
3、查看所有表:show tables
4、查看表结构:desc user
5、退出mysql: exit ;
6、创建表结构:
7、添加数据:insert into box(id,username,password) values(1,'user1','234');
8、创建数据库:create database test1;
9、删除数据库:drop database test1;
10、删除表:drop table box,box1;
11、修改表名:rename table box to box1
操作数据中如出现错误 可以直接中段:\c
delete 与 truncate 的区别:
1、delete清空表数据,但不会清除计数器(自增):delete from user。
2、truncate清空表数据,同时会清除计数器(自增):truncate user。
单独设置某个数据库字符集:alter database test character set utf8;
单独设置某个表字符集:alter table user character set utf8;
查看当前表的情况:show create table user;
查看mysql支持的编码:show character set;
查看系统字符集等情况:\s
mysql查函数:
复制表结构:
1、复制表结构:create table student like user;
2、复制表内容:insert into student select * from user;
mysql索引:
1、查看索引:show index from user \G;
2、普通索引
a、创建索引:create index i_age on user(age);
b、删除:drop index i_age on user;
3、唯一索引:
a、创建:create unique index u_username on user(username);
b、删除:drop index u_username on user;
4、主键索引:
a、创建:alter table user add primary key (id);
b、删除:alter table user drop primary key;
mysql视图:
1、创建:create view userclass as select user.username,user.age,class.name from user,class where user.class_id=class.id;
2、删除:drop view userclass;
3、查看:show tables;
4、查看试图数据:select * from userclass;
5、视图的特性:当表中的数据发生变化时视图数据也会随着发生变化。
mysql字符串函数:
1、字符串连接:concat();
例子:select concat('php','linux');
2、转小写:lcase();
3、转大写:ucase();
例子:select ucase(username),age from user;
4、长度:length(); 例子:select length('linux');
5、去除左边的空格:ltrim(); select length(ltrim(' linux'));
6、去除右边的空格:rtrim(); select length(rtrim(' linux'));
7、重复:repeat(); select concat(repeat('-',20),'linux');
8、替换:replace(); select replace('linux and java','linux','php');
9、截取:substring(); select substring('/usr/local/src',6,5);
10、空格:space(); select concat('linux',space(20),'php');
mysql数学函数:
1.把十进制转二进制 bin(): select bin(10)
2.向上取整 ceiling() :select ceiling(10.5);
3.向下取整 floor(): select floor(10.5);
4.取最大值max()
5.取最小值min()
6.开平方 sqrt()
7.随机数 rand()
mysql日期函数
1、当前日期 curdate()
2、当前时间 curtime()
3、当前日期和时间 now()
4、当前日期时间戳unix_timestamp()
5、时间戳转日期 from_unixtime()
6、一年中的第几周 week()
7、日期中的年部分 year()
8、日期差值 datediff()
重排auto_increment方法:alter table user auto_increment=1;
mysql 中命令的帮助:1、简单 ? create 2、更多: ? fun%
巧用rand()提取随即行:select * from user order by rand() limit 3;
正则表达式的使用:
1、以linux开始的数据
select * from test where username regexp '^linux';
检查服务器增删改和查的使用频次:
定位执行效率较低的SQL语句:
1、explain或desc定位一条sql语句的影响行数。
2、查看mysql的慢查询日志: show variables like '%quer%';
a、查看慢查询日志是否开启
1、慢查询开启状态 :slow_query_log | ON
2、日志存放的地址: slow_query_log_file | /var/log/mysqld.log
3、查询超过多少秒才记录: slow_query_time | 10
3、查看慢查询的次数:
show status like '%quer%';
slow_queries | 0
设置开启慢查询
1、重启后失效:set global slow_query_log = 1;
2、在/etc/my.cnf修改(slow_query_log 1为开启,0为关闭)
如何快速添加数据:
1、复制表: create table sylvia like test;
2、复制表内容: insert into sylvia select * from test;
3、自己填充自己:insert into sylvia(username,age,class_id) select username,age,class_id from sylvia;
优化表的语法格式:optimize table sylvia; (只对MyISAM,BDB和 InnoDB的表起作用)。
check表检查:check table class
索引的存储问题:
1、myisam
a、frm 表结构
b、myd 表数据
c、myi 表索引
2、innodb
a、frm 表结构
b、ibd 索引+部分表数据
c、ibdata1 所有表共享空间
复合索引:对于创建的多列索引,只要查询的条件中用到最左边的列,索引一般就会被使用。
null判断:当判断null值时会使用这一列的索引。
like关键字:当使用like进行搜索时,%在后的可能有用,%在前索引可能会失效。
or关键字:在使用or的情况下两边的索引都有可能失效。
desc select * from user where username='user7' or age=15\G
字段和值类型不同:当条件中字段和值的类型不同时,该字段的索引可能会失效
desc select * from user where username=200\G
查看索引的使用频次:show status like '%Handler_read%';
Handler_read_key :越大越好
Handler_read_rnd_next: 越小越好
查看插件:show plugins;
多表查询索引使用:
字符集设置:vi /etc/my.cnf (设置好之后重启mysql:sudo service mysqld restart)
mysql root密码破解
1、密码没有忘记,改密码: set password=password('123');
2、忘记密码
mysql数据备份
1)window dos下备份:mysqldump --no-defaults -uroot -p test > test.sql
建库语句、去除多余注释和去除表锁语句,方便sql导入:
mysqldump --no-defaults -uroot -p test -B test --skip-add-locks --compact > test.sql
2) Linux 备份:mysqldump -uroot -p test > test.sql
mysql数据恢复
1)window dos下恢复: mysql -uroot -p < test.sql
2) Linux 下恢复:mysql -uroot -p test < test.sql