mysql_3
广告投放★自助友情CMS落伍广告联盟晒乐广告联盟脉动广告联盟品味广告联盟
广告位可自定样式联系QQ:4285248个文字广告月20元广告联系QQ:428524广告位可自定样式
8个文字广告月20元黄金广告位每月20元广告位可自定样式联系QQ:428524广告位可自定样式
左旋肉碱、全国包邮
买二送一、无效退款

文章浏览→编程相关Mysql→mysql_3

mysql_3
mysql_3
mysql -u root -p123456--tee=/tmp/1.sql(登录mysql后将所有屏幕上的内容保存到/tmp/1.sql中)

索引:
1。unique
2。primary key
mysql> create table t1(id int,namechar(10),primary key(id));
mysql> alter table t1 drop primary key;
mysql> alter table t1 add primarykey(id);
mysql> create table fw(ip char(15),portsmallint unsigned,primary key(ip,port));指定多个主键,将两个主键字段看成一个整体,两个值不同时一样时就可以插入
3。index
只能在最后单独定义
mysql> create table t3 (id int,namechar(10),index(name),index(id));给每个字段定义一个索引 (不常用)
mysql> create table t3 (id int,namechar(10),index(name,id));给多个字段定义一个索引,这样效率更高,但索引数也最好不要超过3个字段

优:提高查询的效率(主)
缺:占用磁盘空间(次)
表的结构数据叫做元数据

mysql> show create table t3 查看创建t3时用到的命令
mysql> alter table t3 drop index name;删除索引
mysql> alter table t3 add indexabc(name);添加索引并给索引起名为abc
mysql> alter table t3 drop index abc;删除索引abc

mysql> create index idx_id on t3(id);创建T3的id的索引idx_id
mysql> drop index idx_id ont3;删除t3的idx_id索引


外键约束(两个表之间建立索引)
创建约束的条件:
<1>只有InnoDB支持外键
mysql> show engines; 查看是否支持
| InnoDB     | YES    | Supports transactions,row-level locking, and foreign keys | YES        | YES  | YES      
<2>有关联的字段数据类型必须一样
<3>这两个字段必须是 索引
mysql> create table dept(id int,namechar(5),primary key(id))engine=innodb;修改引擎为innodb
mysql> show create table dept;看是否改好
mysql> insert into dept values(100,'hr'),(101,'sal');
mysql> create table member (id int,namechar(5),d_id int,index abc(d_id),foreign key(d_id) referencesdept(id) on update cascade on delete cascade)engine=innodb;创建表,创建表的索引、外键、关联dept表的id、随dept表的id增加删除而增加删除、修改引擎为innodb
往member表里写id只能写dept表里有的
修改dept表的id时member表会随之修改
修改member表的的d_id ERROR
测试:
mysql> insert into membervalues(1,'mak',100);
mysql> insert into membervalues(2,'tom',101);
mysql> insert into membervalues(3,'jack',102);ERROR



连接(默认myisam)
操作:创建两个表,创建建立连接表
mysql> create table users(uid int,namechar(5));
mysql> insert users values(500,'u1'),(501,'u2'),(502,'u3'),(503,'u4');
mysql> create table groups(gid int,namechar(5));
mysql> insert groups values(600,'g1'),(601,'g2'),(602,'g3');
mysql> create table u_g(uid int,gid int,primarykey(uid,gid));
mysql> insert into u_gvalues(500,600),(500,601),(501,601),(502,602);
mysql> select users.name,groups.name fromusers,groups,u_g where users.uid=u_g.uid and groups.gid=u_g.gid; 找到用户名和组名的对应关系
mysql> select users.name,groups.name fromusers,groups,u_g where users.uid=u_g.uid and groups.gid=u_g.gidgroup by groups.gid;根据gid分组(相同gid只显示一行) 
mysql> select users.name,groups.name fromusers,groups,u_g where users.uid=u_g.uid and groups.gid=u_g.gidgroup by groups.gid having count(*) >=2;统计用户数大于等于2个的组有哪些

mysql> select sum(math),addr from t10 group byt10.addr;查询各addr的总成绩
mysql> select max(math),addr from t10 group byt10.addr;查询各addr的最大值
mysql> select count(math),addr from t10 groupby t10.addr;查询各addr的成员数


表的复制:

mysql> create table temp select users.nameuname,groups.name gname from users,groups,u_g whereusers.uid=u_g.uid and groups.gid=u_g.gid; 将查询结果复制成temp表 重命名字段为uname和gname

mysql> create table tt select * from t10;复制全部表,只复制表的结构和数据,不复制索引

mysql> create table t6 select name,addr fromt10;只复制表的一部分
mysql> create table t7 select name,addr fromt10 where 0=1;只复制表的结构(只要where后是一个假值就行)
mysql> create table t9 likeu_g;连带u_g表的索引一起复制成t9,只有结构和索引没有数据
mysql> insert into t9 select * from u_g;只复制u_g的数据(前提是t9存在且结构相同)

mysql> insert into t11(name,addr) selectname,addr from grade; 当两个表结构不一样时要指明字段进行填充

mysql> truncateusers;删除表中的内容(与delete的区别:分两步:先删除原来的表再重新构建原来的表)


数据导入:
mysql> load data infile '/tmp/1.txt' into tableusers fields terminated by ',' lines terminated by '\n';将1.txt中的内容导入到user中,行之间以“,”分隔,行之间用换行符分隔
(默认行以\n分隔,列以tab分隔)
mysql> load data infile '/tmp/1.txt' into tableusers fields terminated by ',' enclosed by '"';插入时不出现“

向表中插入1000000条记录:
[root@stu33 ~]# for i in {1..1000000}
> do
> echo "$i,test$i,test$i@mail">> /tmp/2.txt;done

mysql> create table test(id int,namechar(20),email char(40),index idx_id(id));
mysql> load data infile '/tmp/2.txt' into tabletest fields terminated by ',';
mysql> explain select * from test whereid=3000;体现索引查询的速度
mysql> explain select * from test wherename='test3000';


数据导出:
mysql> select * from wen into outfile'/tmp/3.txt';将wen中的数据导出到3.txt
mysql> select * from wen into outfile'/tmp/4.txt' fields terminated by ','; 行间用逗号分隔


数据备份:
冷备:停掉服务器直接拷贝目录
热备:运行期间备份
mysqldump:
[root@stu33 ~]# mysqldump db2 -u root -p123456> /root/db2.sql 备份db2
[root@stu33 ~]# mysql -u root -p123456 db3</root/db2.sql 恢复db2 
(恢复到已存在的数据库db3里)
[root@stu33 ~]# mysqldump --all-database -u root -p123456> /root/all.sql  备份所有数据库
[root@stu33 ~]# mysqldump -B db1 db2 -u root -p123456> /root/12.sql 备份多个数据库
mysql> source '/tmp/db2.sql'; 恢复数据库

mysqldump  可以备份mysiam和innodb

mysqlhotcopy :
mysqlhotcopy 只能备份myisam存储引擎的表 需要装支持perl的软件包 注意软件包和系统是否兼容  用这个工具必须有.my.cnf

[root@stu33 ~]# vim .my.cnf
[mysqlhotcopy]
user=root
password=‘’
[root@stu33 ~]# chmod 600 .my.cnf 
 /usr/bin/mysql_install_db --user=mysql 初始化数据库生成mysql库
 /usr/bin/mysqld_safe --user=mysql&   启动系统的mysql服务
 /usr/bin/mysqlhotcopy mysql /tmp/data 备份mysql库到一个指定的目录中(默认备份到/var/lib/mysql/mysql_copy)


计划任务备份:
[root@stu33 ~]# crontab -e

54 15 * * * /usr/local/mysql/bin/mysqldump --all-database -uroot -p123456 > /root/10.sh


所属分类:编程相关Mysql    作者:新浪博客    时间:2010-4-24 12:21:00

文章导航